Как обновить элементы списка во вложенных папках библиотеки SharePoint с помощью SPServices и JavaScript

#sharepoint #sharepoint-2013 #spservices

#sharepoint #sharepoint-2013 #spservices

Вопрос:

В SharePoint и с помощью SPServices я пытаюсь обновить содержимое файлов, загруженных во вложенные папки. Это изображение, а также метаданные файла, которые я хочу обновить. изображение SharePointСтруктура библиотеки выглядит следующим образом:

Имя списка: общие документы

Папка # 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. я попробую решение