问题描述
在SharePoint中并使用SPServices,我正在尝试更新子文件夹中上载的文件的内容 这是图像,也是我要更新的文件元数据。 库结构如下:
列表名称:共享文档
文件夹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文件夹元数据(采购),而不更新采购文件夹中的列表。
解决方法
不需要先使用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