使用 JSOM 获取 SharePoint 站点中的所有列表和列表项

Get all lists and list items in a SharePoint site with JSOM

我有一个 SharePoint 网站,我想使用 JSOM 获取所有列表,并获取每个列表中的所有项目。

我试过这种方法: 获取站点中的所有列表,存储它们的 ID 对于每个列表 ID,获取列表项

伪代码如下:

for each id in listOfIds(){
     executeQueryAsync( context with list ID passed in )
}

但是,这种方法给我带来了一个问题——executeQueryAsync 只获取 listOfIds 中的最后一个 ID,大概是因为 for 循环迭代太快了。

获取我的 SharePoint 网站中的所有列表并获取每个列表的所有项目的最佳方法是什么?我只能用JSOM。

你可以用这个实现它:

var siteUrl = '/sites/MySiteCollection';

function retrieveAllListProperties() {

var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
this.collList = oWebsite.get_lists();

clientContext.load(collList);

clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

var listInfo = '';

var listEnumerator = collList.getEnumerator();

while (listEnumerator.moveNext()) {
    var oList = listEnumerator.get_current();
    listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
}
alert(listInfo);
}

  function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

对于那个场景:

to use JSOM to get all lists, and get all items in each list

以下示例演示了如何完成它:

var result = []; 
var ctx = SP.ClientContext.get_current();
var lists = ctx.get_web().get_lists();
ctx.load(lists,"Include(Id,Title)");

ctx.executeQueryAsync(
  function() {

       lists.get_data().forEach(function(list){
           var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
           ctx.load(items,"Include(Id,FileRef)");
           var listEntry = {
             id: list.get_id().toString(),
             title: list.get_title()
           }
           result.push({list: listEntry,
                        items: items}); 
       });
       ctx.executeQueryAsync(
       function() {
           //transform listitem properties
           result.forEach(function(item){

               item.items = item.items.get_data().map(function(listItem){
                    return listItem.get_fieldValues(); 
               });
           }); 

           console.log(JSON.stringify(result));
       },logError); 


  },logError);

哪里

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

备注:

  • 结果存储在 result 数组中,该数组具有以下内容 格式:[{list : { id: "1d9b9c27-2b2f-4758-bd7e-f0e4977aa13d", title: "Documents", items: [{ id: "1d9b9c27-2b2f-4758-bd7e-f0e4977aa13d"}, ...]},...]
  • 单个请求中检索每个列表的列表项Request Batching feature被利用