SharePoint 2013 получает библиотеку документов, созданную пользователями в JavaScript

Привет, я пытаюсь получить все библиотеки документов, созданные только зарегистрированными пользователями. С помощью следующего кода я получаю также библиотеки, которые не были созданы от пользователя. Спасибо.

function GetAllLibraries() {
    var listCollection = lists.getEnumerator();
    while (listCollection.moveNext()) {
        var listName = listCollection.get_current().get_title('Title');
        document.getElementById('leftDiv').innerHTML += "<b>" + listName + "<b/>" + "<br />";
    }
}

2 ответа

Поскольку вы используете SharePoint JavaScript API (он же JSOM), это немного сложно, так как SP.List object не выставляет Author свойство, чтобы определить, кто создал этот объект. Но хорошие новости, которые Author собственность может быть извлечена из SP.List.schemaXml property как показано ниже

Вот полный пример того, как получить списки, созданные текущим пользователем

var ctx = SP.ClientContext.get_current();
var allLists = ctx.get_web().get_lists();
var currentUser = ctx.get_web().get_currentUser();
ctx.load(allLists,'Include(SchemaXml)');
ctx.load(currentUser);
ctx.executeQueryAsync(
   function(){


      var lists = allLists.get_data().filter(function(list){
          var listProperties = schemaXml2Json(list.get_schemaXml()); 
          var listAuthorId = parseInt(listProperties.Author);
          return listAuthorId == currentUser.get_id(); 
      }); 

      console.log("The amount of lists created by current user: " + lists.length);       
   },
   logError);   

}


function schemaXml2Json(schemaXml)
{ 
    var jsonObject = {};
    var schemaXmlDoc = $.parseXML(schemaXml);
    $(schemaXmlDoc).find('List').each(function() {
      $.each(this.attributes, function(i, attr){
           jsonObject[attr.name] = attr.value;
      });
    });
    return jsonObject;
}




function logError(sender,args){
    console.log(args.get_message());
}

Если вы хотите узнать, кто создал список или библиотеку, вам необходимо получить свойство SPList.Author. Как я знаю, вы не можете получить это с помощью JSOM.

Мой совет для вас - разработать свой собственный http-хендлер с логикой на стороне сервера и вызывать его с помощью ajax. Например, вы передаете аргументы в обработчик, такой как веб-URL (_spPageContextInfo.webAbsoluteUrl), текущий логин или идентификатор пользователя (_spPageContextInfo.userId), и в обработчике повторяйте списки в сети, сравнивайте текущего пользователя и создателя списка. Наконец, верните необходимую информацию о списках.

Или просто разработайте веб-часть и сделайте то же самое: повторяйте списки и сравнивайте их с SPContext.Current.Web.CurrentUser

ОБНОВИТЬ:

Пример кода на C#. Вы можете поместить его в свою веб-часть или обработчик событий. В этом коде мы повторяем все списки на SPWeb и сохранить заголовки списков, созданные текущим пользователем.

private void GetLists()
{
    using (SPSite site = new SPSite("{site_url}"))
    {
        using (SPWeb web = site.OpenWeb())
        {
            SPListCollection listCol = web.Lists;
            List<string> currentUserLists = new List<string>();
            foreach(SPList list in listCol)
            {
                if (list.Author.ID == SPContext.Current.Web.CurrentUser.ID)
                {
                    currentUserLists.Add(list.Title);
                }
            }
        }
    }
}
Другие вопросы по тегам