使用 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被利用
我有一个 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被利用