问题描述
是否可以通过Rest API更新列表项的查找字段值?如果我使用$ select和$ expand,我可以检索字段值,但我找不到解释如何更新它的文档。
最佳解决方案
是的你可以。对于每个查找字段,列表都有一个隐含字段,用于保存目标列表中项目的ID。此隐式字段的名称是查找字段的名称加上Id。在Milind的回答中,查找字段被命名为State,目标列表中项目的ID为2.因此,当您使用REST API进行更新时,您将设置StateId = 2。
var call = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl +
"/_api/Web/Lists/getByTitle('Sales Opportunities')/Items(5)",
type: "POST",
data: JSON.stringify({
"__metadata": { type: "SP.Data.Sales_x0020_OpportunitiesListItem" },
StateId: 2
}),
headers: {
Accept: "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
"IF-MATCH": item.__metadata.etag,
"X-Http-Method": "PATCH"
}
});
次佳解决方案
它取决于Lookup字段值是否为多个,通过REST更新字段值时使用以下格式:
-
单一查找值格式:
LookupFieldName: LookupIdVal
-
多种查找值格式:
LookupFieldName: {"results":
[LookupIdVal1,LookupIdVal2] }
例子
如何更新单个查找值
var itemProperties = {
"__metadata": { "type": 'SP.Data.TasksListItem' },
"ProjectId": 1
};
updateListItem('Tasks',4,itemProperties,
function(){
},
function(error){
console.log(JSON.stringify(error));
}
);
如何更新多个查找值
var itemProperties = {
"__metadata": { "type": 'SP.Data.TasksListItem' },
"ProjectsId": {"results": [1,3] }
};
updateListItem('Tasks',4,itemProperties,
function(){
},
function(error){
console.log(JSON.stringify(error));
}
);
哪里
function updateListItem(listName, itemId, itemProperties, success, failure) {
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "MERGE",
"If-Match": '*'
},
success: function (data) {
success();
},
error: function (data) {
failure(data);
}
});
}
参考
Manipulating list items in SharePoint Hosted Apps using the REST API