pagine dell'applicazione può essere collegato a una lista specifica
-
16-10-2019 - |
Domanda
Ho uno scenario in cui ho bisogno di creare una pagina di un'applicazione che viene installata al menu BCE di solo un elenco specifico. È possibile? o è l'unico modo per farlo associare il file elementi con un tipo di elenco esempio elenco di attività?
Soluzione
Sì, è possibile farlo: creare voci di menu della BCE solo per una lista .... e ancora meglio decidere in fase di esecuzione il numero di elementi da mettere nel menu BCE. Per questo è necessario competenze javascript.
SharePoint darci alcuni ganci per aggiungere elementi BCE personalizzati utilizzando javascript. Questo gancio è funzione dei js: Custom_AddListMenuItems (m, CTX) . Ma il problema è come aggiungere elementi dinamici nel giusto BCE? La soluzione che ho usato è stato quello di realizzare un sincrono Ajax chiamata a un aspx personalizzato che restituisce un XML con gli elementi e le loro azioni. Ecco il codice:
<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>
Questo script deve essere collocato in un webpart accanto alla webpart lista (in un Content Editor Web Part per es.)
L'idea non è mia, ecco l'articolo originale . Spero che questo aiuto volontà.
Altri suggerimenti
Si deve essere collegato a un modello di elenco (se si utilizza il lato server caratteristiche), che ha uno specifico ID. Vi consiglio di creare una funzione con un modello di elenco nascosto e l'istanza lista e poi si attacca la tua BCE a quel modello di elenco.