Frage

Ich habe ein Szenario, in dem ich eine Anwendungsseite erstellen muss, die nur im EZB -Menü einer bestimmten Liste installiert ist. Ist das möglich? Oder ist die einzige Möglichkeit, die Elemente -Datei mit einer Listentyp -EG -Aufgabenliste zu verbinden?

War es hilfreich?

Lösung

Ja, es ist möglich, dies zu tun: Erstellen Sie das ECB -Element -Menü nur für eine Liste .... und noch besser entscheiden Sie sich zur Laufzeit, wie viele Elemente das EZB -Menü einfügen sollen. Dafür benötigen Sie JavaScript -Fähigkeiten.

SharePoint Geben Sie uns einige Hooks, um benutzerdefinierte EZB -Elemente mit JavaScript hinzuzufügen. Dieser Haken ist die JS -Funktion: Custom_addlistMenuitems (M, CTX). Das Problem ist jedoch, wie Sie dynamische Elemente in die EZB hinzufügen können, oder? Die Lösung, die ich verwendet habe, war die Implementierung a synchron Ajax rufen Sie einen benutzerdefinierten ASPX an, der ein XML mit Elementen und ihren Aktionen zurückgibt. Hier ist der Code:

<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>

Dieses Skript muss in einem Webpart neben dem List -Webpart platziert werden (in einem Content -Editor -Webpart für Ex.)

Die Idee ist nicht meine, Hier ist der ursprüngliche Artikel. Hoffe das wird helfen.

Andere Tipps

Es muss an eine Listenvorlage beigefügt sein (wenn Sie die Server -Seite -Funktionen verwenden), die eine bestimmte ID enthält. Ich empfehle Ihnen, eine Funktion mit einer versteckten Listenvorlage und einer Listeninstanz zu erstellen und dann Ihre EZB an diese Listenvorlage anzuhängen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top