Можно ли прикрепить страницы приложения к определенному списку
-
16-10-2019 - |
Вопрос
У меня есть сценарий, в котором мне нужно создать страницу приложения, которая устанавливается только в меню ECB определенного списка.Это возможно?или это единственный способ сделать это, связав файл элементов с типом списка, например.список заданий?
Решение
Да, это возможно сделать:создайте меню элементов ECB только для списка.... и еще лучше решите во время выполнения, сколько элементов поместить в меню ECB.Для этого вам понадобятся навыки работы с JavaScript.
SharePoint предоставляет нам несколько возможностей для добавления пользовательских элементов ECB с помощью JavaScript.Этот крючок представляет собой функцию js: Custom_AddListMenuItems (м, ctx).Но проблема в том, как добавить динамические элементы в ЕЦБ, верно?Решение, которое я использовал, заключалось в реализации синхронный Ajax-вызов пользовательского aspx, который возвращает XML-файл с элементами и их действиями.Вот код:
<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>
Этот сценарий необходимо разместить в веб-части рядом с веб-частью списка (например, в веб-части редактора контента).
Идея не моя, вот оригинал статьи.Надеюсь, это поможет.
Другие советы
Его необходимо прикрепить к шаблону списка (если вы используете функции на стороне сервера), который имеет определенный идентификатор.Я рекомендую вам создать функцию со скрытым шаблоном списка и экземпляром списка, а затем прикрепить свой ECB к этому шаблону списка.