Pregunta

Tengo un escenario en el que tengo que crear una página de aplicación que se instala en el menú BCE de una lista específica solamente. es posible? o es la única manera de hacerlo que asocia el archivo de elementos con un tipo de lista, por ejemplo, lista de tareas?

¿Fue útil?

Solución

Sí, es posible hacer eso: crear elementos de menú del BCE sólo para una lista .... y aún mejor decidir en tiempo de ejecución cuántos elementos para poner en el menú BCE. Para ello, tiene habilidades de Javascript.

SharePoint darnos algunos ganchos para añadir elementos personalizados BCE usando Javascript. Este gancho es funcionan los js: Custom_AddListMenuItems (m, ctx) . Pero el problema es cómo agregar elementos dinámicos en el derecho BCE? La solución que he usado fue implementar un sincrónica Ajax llamada a un aspx personalizada que devuelve un XML con los objetos y sus acciones. Aquí está el código:

<script language="javascript">

function Custom_AddDocLibMenuItems(m, ctx)
{    
  //debugger;

  var request;
  var url = ctx.HttpRoot + 
      "/_layouts/GetCommands.aspx?ListID=" + ctx.listName + 
      "&ItemID=" + currentItemID + 
      "&UserId=" + ctx.CurrentUserId + 
      "&DateTime=" + Date();

   if ( window.XMLHttpRequest )
   {
      request = new XMLHttpRequest();
      request.open("GET", url, false);
      request.send(null);
   }
   else if ( window.ActiveXObject )
   {
      request = new ActiveXObject("Microsoft.XMLHTTP");
      if ( request )
      {
         request.open("GET", url, false);
         request.send(); 
      }
   }

   if ( request )
   {   
      var commands = request.responseXML.getElementsByTagName("Command");
      // for each command found in the returned XML, extract the name, 
      // image Url and script, and a new menu item with these properties
      for ( var i = 0; i < commands.length; i++ )
      {
         var cmdName = commands[i].getElementsByTagName(
            "Name")[0].firstChild.nodeValue;
         var imageUrl = commands[i].getElementsByTagName(
            "ImageUrl")[0].firstChild.nodeValue;
         var js = commands[i].getElementsByTagName(
            "Script")[0].firstChild.nodeValue;
         var addSep = commands[i].getElementsByTagName(
            "AddSep")[0].firstChild.nodeValue;

         CAMOpt(m, cmdName, js, imageUrl);

         if (addSep == "True")
            CAMSep(m);
      }

      // if at least one command was actually added, add a separator
      if ( commands.length > 0 )
         CAMSep(m);
   }

   // returning false makes SharePoint render the rest of the standard menu
   return false;   
}

function Custom_AddListMenuItems(m, ctx)
{
    Custom_AddDocLibMenuItems(m, ctx);
}
</script>

Este script debe ser colocado en una parte web al lado de la parte web de lista (en un elemento Web Editor de contenido por ej.)

La idea no es mía, aquí está el artículo original . Espero que esta ayuda voluntad.

Otros consejos

Debe ser conectado a una plantilla de lista (si está utilizando el servidor características), que tiene un identificador específico. Le recomiendo que se crea una función con una plantilla de lista oculta y la instancia de la lista y luego concede el BCE a la plantilla de lista.

Licenciado bajo: CC-BY-SA con atribución
scroll top