【发布时间】:2014-10-26 14:31:04
【问题描述】:
我想更新 Sharepoint 中 ListItem 的某些字段。如何通过 REST API 实现这一点?
有这方面的文档吗?
编辑 1
考虑一下我在请求 ListItem(GET) 时收到的以下 JSON
{
"d": {
"__metadata": {
"id": "8b3d2196-ad3e-4766-a23e-7e6a89153965",
"uri": "https://abc-my.sharepoint.com/personal/nn_abc_co/_api/Web/Lists(guid'd02a8c5b-cd69-4aa8-b7fb-9d539733f285')/Items(383)",
"etag": "\"2\"",
"type": "SP.Data.DocumentsItem"
},
"FirstUniqueAncestorSecurableObject": {
"__deferred": {
"uri": ".../FirstUniqueAncestorSecurableObject"
}
},
"RoleAssignments": {
"__deferred": {
"uri": ".../RoleAssignments"
}
},
"AttachmentFiles": {
"__deferred": {
"uri": ".../AttachmentFiles"
}
},
"ContentType": {
"__deferred": {
"uri": ".../ContentType"
}
},
"FieldValuesAsHtml": {
"__deferred": {
"uri": ".../FieldValuesAsHtml"
}
},
"FieldValuesAsText": {
"__metadata": {
"id": ".../FieldValuesAsText",
"uri": ".../_api/Web/Lists(guid'd02a8c5b-cd69-4aa8-b7fb-9d539733f285')/Items(383)/FieldValuesAsText",
"type": "SP.FieldStringValues"
},
"ContentTypeId": "0x0120000E7EB3018A9074468823208C432BDCA5",
"Title": "",
"IsMyDocuments": "",
"SharedWithInternal": "",
"SharedWithUsers": "",
"ID": "383",
"Created": "7/29/2014 11:28 PM",
"Author": "3",
"Modified": "7/29/2014 11:28 PM",
"Editor": "3",
"OData__x005f_CopySource": "",
"CheckoutUser": "",
"OData__x005f_UIVersionString": "1.0",
"GUID": "da1e223b-1335-49e8-a544-b2cbebd4064f",
"OData__x005f_ModerationStatus": "Approved",
"OData__x005f_Level": "1",
"UniqueId": "3dba6291-92c7-458f-9a28-e0a91696d9ca",
"FSObjType": "1",
...
},
"FileSystemObjectType": 1,
"Id": 383,
"ContentTypeId": "0x0120000E7EB3018A9074468823208C432BDCA5",
"Title": null,
"IsMyDocuments": null,
"SharedWithInternalId": null,
"SharedWithUsersId": {
"__metadata": {
"type": "Collection(Edm.Int32)"
},
"results": [5]
},
... }
}
从上面的 JSON(我当然改变了,但这是一个真实的响应),我需要更改“FieldValuesAsText”对象下“SharedWithUsers”的值。
这可能吗?我一直在尝试,即使调用返回成功响应码,但并没有改变任何东西。
另一方面,如果我在第一级更改字段,我的意思是“标题”之类的字段,它会成功更改。
但是(超出我的理解)第一级中的“SharedWithUsersId”等值也不会改变。即使我也得到了相同的成功响应代码。
我正在创建的 Post 数据如下,
对于标题(就像一个魅力!我读过的每个博客都参考这个例子!)
{
"__metadata": {
"type": "SP.Data.DocumentsItem"
},
"Title":"Blabla"
}
对于 FieldValuesForEdit 或 FieldValuesAsText 下的 SharedWithUsers 字段
{
"__metadata": {
"type": "SP.Data.DocumentsItem"
},
"FieldValuesForEdit": {
"__metadata": {
"type": "SP.FieldStringValues"
},
"SharedWithUsers": ""
}
}
我已经验证 SharedWithUsers 的值为 "" 当它不包含任何数据时(我发布的示例 JSON 证实了这一点)但是使用此类数据的 POST 调用不会更新它。
对于 SharedWithUsersId
{
"__metadata": {
"type": "SP.Data.DocumentsItem"
},
"SharedWithUsersId": {
"__metadata": {
"type": "Collection(Edm.Int32)"
},
"results": []
}
}
请注意,在这种情况下 >>> "SharedWithUsersId":null 也不起作用,即使我自己的罪恶之眼已经看到某些项目有这样的反应! (微软万岁!!!)
对于上述所有 POST 数据 JSON 对象,我得到一个 204 响应代码(我相信这是 MERGE 调用的正确代码)
我希望我已经很好地解释了我的问题。任何或所有帮助表示赞赏!
【问题讨论】:
-
您所说的“确定”是什么意思,能否请您更新您的问题并指定例如字段类型?
-
@VadimGremyachev 我已按问题更新。我希望我说得很清楚。
-
看我的最终目标是通过 REST API 更新项目的共享详细信息
标签: sharepoint ms-office sharepoint-2013 office365