0

您好我正在尝试获取仅由登录用户创建的所有文档库。使用以下代码,我还可以获得不是从用户创建的库。谢谢你。

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 />";
    }
}
4

2 回答 2

1

由于您使用的是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());
}
于 2016-08-16T12:37:22.410 回答
0

如果您想知道谁创建了列表或库,您需要获取属性SPList.Author。据我所知,您无法通过 JSOM 获得它。

我对您的建议是在服务器端开发自己的带有逻辑的 http 处理程序,并通过 ajax 调用它。例如,您将参数传递给处理程序,如 web url ( _spPageContextInfo.webAbsoluteUrl)、当前用户登录名或 id ( _spPageContextInfo.userId),并在处理程序中迭代 web 上的列表,比较当前用户和列表创建者。最后,返回所需的列表信息。

或者只是开发 Web 部件并做同样的事情:迭代列表并将其与SPContext.Current.Web.CurrentUser

更新:

c# 代码示例。您可以将它放在您的 Web 部件或事件处理程序中。在此代码中,我们迭代所有列表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);
                }
            }
        }
    }
}
于 2016-08-16T04:59:10.617 回答