#sharepoint #sharepoint-2013 #spservices
#sharepoint #sharepoint-2013 #spservices
Вопрос:
В SharePoint и с помощью SPServices я пытаюсь обновить содержимое файлов, загруженных во вложенные папки. Это изображение, а также метаданные файла, которые я хочу обновить. Структура библиотеки выглядит следующим образом:
Имя списка: общие документы
Папка # 1 — Подпапка «Документы» # 1 — Файл закупок # 1 — Файл загруженных файлов # 2
Итак, в основном я хочу обновить идентификатор запроса, тип файла и т. Д
Кто-нибудь может помочь? Спасибо!
Вот мой код
var oldFolderName = "Procurement";
$().SPServices({
operation: "GetListItems",
async: false,
listName: 'Documents',
CAMLViewFields: "<ViewFields Properties='True' />",
CAMLQuery: "<Query><Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value></Eq></Where></Query>",
CAMLQueryOptions: "<QueryOptions><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns></QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode('z:row').each(function () {
var existingFolderName = $(this).attr("ows_FileLeafRef").split(";#")[1];
if (existingFolderName == oldFolderName) {
var Folder_ID = $(this).attr("ows_ID");
$().SPServices({
operation: "UpdateListItems",
async: false,
batchCmd: "Update",
listName: 'Documents',
valuepairs: [["Title", "Working"], ["requestID", "Working"]],
ID: Folder_ID,
completefunc: function (xData, Status) {
console.log("Folder Name Updated Successfully...");
}
});
}
});
}
});
Но код обновляет только метаданные вложенной папки (закупки), а не список в папке закупок.
Ответ №1:
Нет необходимости сначала использовать SPService для цикла папки, а затем обновлять метаданные файла, вместо этого используйте Rest API getfilebyserverrelativeurl для получения файла и обновления метаданных, как показано ниже:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
updateFileMetadata();
function updateFileMetadata() {
var def = jQuery.Deferred();
var restSource= _spPageContextInfo.webAbsoluteUrl "/_api/Web/getfilebyserverrelativeurl('/sites/Sitename/Shared Documents/Procurement/filename')/ListItemAllFields";
var itemPayload = {"__metadata": {"type":"SP.Data.Shared_x0020_DocumentsItem"},"Title":"Updated","requestID","Working","filetype":"Working"};
var dfd = jQuery.Deferred();
$.ajax(
{
url: restSource,
method: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemPayload),
headers:
{
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $('#__REQUESTDIGEST').val(),
"X-HTTP-Method":"MERGE",
"If-Match": "*"
},
success: function (data) {
alert("Success");
dfd.resolve(data);
},
error: function (err) {
dfd.reject(err);
alert("Error");
}
});
return dfd.promise();
}
</script>
Для _api/Web/getfilebyserverrelativeurl:
значение URL должно быть
/sites/sitename/Shared Documents/Procurement/filename в этом случае,
если это корневой сайт, на котором в URL-адресе сайта нет символа «сайты», измените его следующим образом:
/Общие Documents/Закупки/Имя файла
Комментарии:
1. Спасибо @Jerry_MSFT. я попробую решение