使用ValidateUpdateListItem上传SharePoint编码元数据遇列名错误如何解决?
我之前也踩过这个坑,ValidateUpdateListItem方法对字段名称的要求和普通的REST更新确实不一样,给你几个可行的方案:
使用字段的内部名称而非OData编码名
普通的REST PATCH请求会用OData编码后的字段名(比如OData__x0063_c1),但ValidateUpdateListItem需要直接用字段的内部名称。你可以通过以下方式获取内部名称:- 进入你的文档库列表设置页面
- 点击要更新的字段(比如'cc1')
- 查看浏览器地址栏,找到
Field=后面的字符串,那就是字段的内部名称
然后把这个内部名称填到请求体的FieldName里,而不是显示名或者OData编码名。
正确构造请求体格式
确保你的请求体结构正确,尤其是bNewDocumentUpdate的位置和formValues的格式,示例如下:{ "formValues": [ { "FieldName": "你的字段内部名称", "FieldValue": "要设置的元数据值" } ], "bNewDocumentUpdate": true }注意
bNewDocumentUpdate是和formValues同级的参数,不要放到数组里。用字段ID替代名称(更可靠)
如果内部名称还是不好用,你可以直接使用字段的GUID(去掉大括号)作为FieldName的值。比如字段ID是{12345678-1234-1234-1234-1234567890ab},就填"FieldName": "12345678-1234-1234-1234-1234567890ab"。这个方法更稳定,因为字段ID不会随名称修改而变化。检查字段状态和权限
虽然你之前能正常更新,但还是要确认:- 目标字段没有被删除或隐藏
- 当前请求的账号有编辑该字段的权限
- 文档库的版本设置没有限制元数据更新(不过
bNewDocumentUpdate=true已经是跳过版本创建的参数了)
为什么之前的方法能用OData编码名?因为普通REST更新是通过OData协议访问,会自动处理字段名的编码;而ValidateUpdateListItem是SharePoint原生的列表项更新方法,直接和底层字段系统交互,所以需要用原生的内部名称或ID。
内容的提问来源于stack exchange,提问作者Krishna Gond
相关产品推荐
相关产品推荐

