SharePoint REST API:Lookup字段重名时如何设置其ID值
第一步:确认查阅列的真实内部名称
由于你已存在ProjectId数字字段,创建Project查阅列时,SharePoint会自动调整该查阅列关联ID字段的内部名称,且不一定是简单追加0。你需要先获取该字段的真实内部名称:
发送GET请求到以下地址(替换My List为你的列表名称):
$.ajax({ url: _spPageContextInfo.webAbsoluteUrl + "/_api/lists/GetByTitle('My List')/fields?$filter=Title eq 'Project' and FieldTypeKind eq 7", headers: { "Accept": "application/json;odata=verbose" }, success: function(res) { const lookupField = res.d.results[0]; console.log("查阅列内部名称:", lookupField.InternalName); console.log("查阅列ID字段内部名称:", lookupField.InternalName + "Id"); } });
返回结果中,InternalName是查阅列本身的内部名称,用于设置值的字段是该名称加上Id(比如查阅列内部名称为Project1,则ID字段为Project1Id)。
第二步:使用正确字段名更新查阅列
拿到正确的ID字段名后,修改你的PATCH请求即可:
// 更新查阅列的正确写法 $.ajax({ url: _spPageContextInfo.webAbsoluteUrl + "/_api/lists/GetByTitle('My List')/items(1)", headers: { "Accept": "application/json;odata=verbose", "Content-Type": "application/json;odata=verbose", "IF-MATCH": "*", "X-RequestDigest": $("#__REQUESTDIGEST").val(), }, data: JSON.stringify({ "__metadata": { "type": "SP.Data.MyListListItem" }, // 替换为你查到的真实ID字段名 "Project1Id": 403 }), method: 'PATCH', success: function (data) { console.log("success"); console.log(data); }, error: function (data) { console.log("error"); console.log(data); } });
备选方案:使用复杂类型赋值
如果你知道查阅列目标列表的实体类型(比如目标列表叫Projects,则实体类型为SP.Data.ProjectsListItem),也可以通过以下方式赋值:
data: JSON.stringify({ "__metadata": { "type": "SP.Data.MyListListItem" }, "Project": { "__metadata": { "type": "SP.Data.ProjectsListItem" }, "Id": 403 } }),
内容的提问来源于stack exchange,提问作者zshane15
相关产品推荐
相关产品推荐

