Können Anwendungsseiten an eine bestimmte Liste beigefügt werden
-
16-10-2019 - |
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?
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.