[英]Update list item through Sharepoint REST API
我想為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調用的正確代碼)
我希望我已經很好地解釋了我的問題。 任何或所有幫助將不勝感激!
閱讀此MSDN帖子: http : //msdn.microsoft.com/zh-cn/library/office/dn292552%28v=office.15%29.aspx#ListItems
url ==>應該指向您要更新的列表項。
方法==> POST,因為您要更新列表項
body ==> JSON格式,包含要更新的字段。 忽略那些您不想更改的內容。
下面和示例:
url: http://site url/_api/web/lists/GetByTitle(‘Test')/items(item id)
method: POST
body: { '__metadata': { 'type': 'SP.Data.TestListItem' }, 'Title': 'TestUpdated'}
headers:
Authorization: "Bearer " + accessToken
X-RequestDigest: form digest value
"IF-MATCH": etag or "*"
"X-HTTP-Method":"MERGE",
accept: "application/json;odata=verbose"
content-type: "application/json;odata=verbose"
content-length:length of post body
獲取accessToken可能很困難,具體取決於您執行此調用的是哪種類型的應用程序(SharePoint應用程序,控制台應用程序,SharePoint內部)。
如果您希望使用HttpClient進行此操作,則可以參考本文。 我將展示如何獲取摘要和上載文件以及事后更新列表項。 適用於Windows應用商店,控制台和窗體應用程序。
使用REST從HttpClient更新文件的示例:
client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); client.BaseAddress = new System.Uri(url); client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Add("X-RequestDigest", digest); client.DefaultRequestHeaders.Add("X-HTTP-Method", "MERGE"); client.DefaultRequestHeaders.Add("IF-MATCH", "*"); HttpContent strContent = new StringContent(String.Concat("{ '__metadata': { 'type': 'SP.List' }, 'Title': '", filename, "' }")); strContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); strContent.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("odata", "verbose")); HttpResponseMessage updateResponse = await client.PostAsync(String.Concat("_api/web/lists/GetByTitle('Project Photos')/Items(", id, ")"), strContent); updateResponse.EnsureSuccessStatusCode(); if (updateResponse.IsSuccessStatusCode) {}
Arcan.NET
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.