javascript - 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());
}
);
解决方案
我们可以不使用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);
});
}
推荐阅读
- python - OperatorNotAllowedInGraphError:不允许迭代 `tf.Tensor`:AutoGraph 确实转换了此函数
- swift - 布尔函数返回默认值,直到在 Firebase DB XCode Swift 中检查实际值
- python - 为数据框行随机分配 1 个值 - 需要帮助
- tokenize - 任何保持词汇顺序的词嵌入方法?
- php - 如何使用 PHP 在 Mysql 中插入 Json 数据
- matlab - 在 Matlab 中绘制椭圆
- reactjs - 如何删除 Node-module 文件夹和 Create-React-App 项目?
- javascript - 如何在Javascript中检查字符串结束位置是否存在值?
- python - 可以使用色调参数在 Seaborn 关节网格中获得 lmplot 吗?
- php - 当它有外键时不再保存值,但是当我删除外键约束时,它确实保存了。可能是什么问题呢?