如何使用SPServices和JavaScript更新SharePoint库子文件夹中的列表项

问题描述

在SharePoint中并使用SPServices,我正在尝试更新子文件夹中上载的文件内容 这是图像,也是我要更新的文件元数据。

sharepoint image

库结构如下:

列表名称:共享文档

文件夹1-文档 子文件夹#1-采购 文件#1-上传文件 文件#2

所以基本上我想更新requestID,文件类型等

有人可以帮忙吗?谢谢!

这是我的代码

                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",batchCmd: "Update",valuepairs: [["Title","Working"],["requestID","Working"]],ID: Folder_ID,Status) {
                                        console.log("Folder Name Updated Successfully...");
                                    }
                                });
                            }
                        });
                    }
                });

但是代码仅更新Sub文件夹元数据(采购),而不更新采购文件夹中的列表。

这实际上是我的意思

enter image description here

解决方法

不需要先使用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%20Documents/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:

网址值应为

/ sites / sitename / Shared%20Documents / Procurement / filename,在这种情况下,

如果它是一个根站点,而站点URL中没有“站点”字符,则应进行如下更改:

/ Shared%20Documents / Procurement / filename