Я пытаюсь обновить метаданные для документа библиотеки Share Point с помощью API rest, используя HTTP-клиент JAVA Apache.
Я могу получить значение дайджеста формы из контекста SharePoint API.Однако при отправке запроса на обновление метаданных получено сообщение об ошибке 500 (Microsoft.SharePoint.SPException).
"код ошибки: -2146232832, указанный объект не принадлежит списку."
Не могли бы вы рассмотреть приведенный ниже фрагмент кода и посоветовать, как решить эту проблему?Обратите внимание, что «ABC% 20API% 20POC» является библиотекой Sharepoint (ABC API POC).
HttpPost post = new HttpPost("/_api/contextinfo");
post.setHeader("Accept", "application/json; odata=verbose");
post.setHeader("content-type", "application/json; odata=verbose");
CloseableHttpResponse responseDigest = httpclient.execute(target, post,context);
byte[] content = EntityUtils.toByteArray(responseDigest.getEntity());
String jsonString = new String(content, "UTF-8");
JSONObject json = new JSONObject(jsonString);
String formDigestValue = json.getJSONObject("d").getJSONObject("GetContextWebInformation").getString("FormDigestValue");
//post request to update the metadata
String updateJson = "{'__metadata': { 'type': 'SP.ListItem'}, 'TestColumn':'TestingValue'}";
String filename="/DocumentRepository/ABC%20API%20POC/upload2.txt";
// ABC%20API%20POC- is a library
HttpPost updateMetaDateRequest = new HttpPost("/_api/web/GetFileByServerRelativeUrl('"+ filename + "')/ListItemAllFields");
updateMetaDateRequest.setHeader("X-RequestDigest", formDigestValue);
updateMetaDateRequest.setHeader("X-HTTP-Method", "MERGE");
updateMetaDateRequest.setHeader("If-Match", "*");
updateMetaDateRequest.setHeader("Accept", "application/json; odata=verbose");
updateMetaDateRequest.setHeader("content-type", "application/json; odata=verbose");
updateMetaDateRequest.setEntity(new StringEntity(updateJson));
try {
CloseableHttpResponse updateMetaDateResponse = httpclient.execute(target,updateMetaDateRequest,context);
int rc = updateMetaDateResponse.getStatusLine().getStatusCode();
String reason = updateMetaDateResponse.getStatusLine().getReasonPhrase();
if (rc != 200) {
System.out.println("updateMetaDateResponse" + " failed " +reason +rc );
}
else {
System.out.println("updateMetaDateResponse:" + rc + reason);
}
}
finally {
// if (updateMetaDateResponse != null) updateMetaDateResponse.close();
}