首页 > 解决方案 > Sharepoint:如何使用一组项目 ID 检查每个项目是否存在于列表中?

问题描述

我有一个动态生成的数组,其中包含不同项目和不同列表的 ID。

我想要的是:

返回我的数组中每个项目的自定义字段。

问题:

在删除项目之前没有问题。然后我会收到以下错误:

项目不存在。它可能已被其他用户删除。

我的想法:

也许有一个简单的选项来检查一个项目是否存在。具有项目 ID 的数组可能会变大,具有 200 多个不同列表的项目。所以我认为为每一个项目都创建一个 Ajax-Request 并不是一个好主意。没有更好的解决方案吗?

我的代码:

        var context = SP.ClientContext.get_current();                        
        for(var i in items){
            var web = context.get_web(items[i]['webId']);
            var list = web.get_lists().getById(items[i]['listId']);
            var item = list.getItemById(items[i]['itemId']);

            for(var j in columns){
                if(columns[j].getToLoad('web').length > 0){
                    for(var k in columns[j].getToLoad('web')){
                        context.load(web, columns[j].getToLoad('web')[k]);
                    }
                }
                if(columns[j].getToLoad('list').length > 0){
                    for(var k in columns[j].getToLoad('list')){
                        context.load(list, columns[j].getToLoad('list')[k]);
                    }
                }
                if(columns[j].getToLoad('item').length > 0){
                    for(var k in columns[j].getToLoad('item')){
                        context.load(item, columns[j].getToLoad('item')[k]);
                    }
                }
            }                
        }


        context.executeQueryAsync(
            buildTable.bind(this, items),
            function(a, b){
                console.error('ERROR: ' + b.get_message());
            }
        );

标签: javascriptsharepointsharepoint-2016sharepoint-jsom

解决方案


我们可以不使用JSOM,而是使用带有REST API 的批处理请求来实现您的要求。如果任何子操作失败,其他子操作仍然完成并且不会回滚。

示例代码如何执行 SharePoint REST Batch 请求

var jsonSPHeaders = {  
    "Accept": "application/json;odata=verbose", 
    "Content-Type": "application/json;odata=verbose",
    "DataServiceVersion": "3.0" 
};

OData.request( {
    requestUri: _spPageContextInfo.webAbsoluteUrl + "/_api/$batch",
    method: "POST",
    headers: { "X-RequestDigest": $("#__REQUESTDIGEST").val(),
               "DataServiceVersion": "3.0" },
    data: { __batchRequests: [
       { requestUri: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Pages')/items", method: "GET" , headers: jsonSPHeaders },
       { requestUri: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Tasks')/items", method: "GET", headers: jsonSPHeaders }
    ]}
},
function (data, response) {
    console.log('Pages list:');
    printListItems(data.__batchResponses[0].data);
    console.log('Tasks list:');
    printListItems(data.__batchResponses[1].data);
}, 
null, 
OData.batchHandler);



function printListItems(data){
   data.results.forEach(function(item){
       console.log(item.Title); 
   });
}

推荐阅读