sharepoint - 如何使用 SPServices 和 JavaScript 更新 SharePoint 库子文件夹中的列表项
问题描述
在 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",
async: false,
batchCmd: "Update",
listName: 'Documents',
valuepairs: [["Title", "Working"], ["requestID", "Working"]],
ID: Folder_ID,
completefunc: function (xData, Status) {
console.log("Folder Name Updated Successfully...");
}
});
}
});
}
});
但代码仅更新子文件夹元数据(采购)而不是采购文件夹中的列表。
解决方案
无需先使用 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/采购/文件名
推荐阅读
- javascript - 在 ES6 中创建多维数组
- node.js - 如何通过表单将嵌入代码存储到 Mongodb?
- python - 使用 Astropy 打开 FITS 时出现 OSError 24
- arrays - 使用数组和 if 或 for 循环并输出单独的文件
- angular - 删除 Fomantic UI(语义 UI 分支)中未使用的 CSS/JS
- javascript - 即使更改了基础层,如何在前面保持覆盖层
- sql - 获取 main 中每个子组的计数
- reactjs - 未定义函数(多个函数调用) - React
- javascript - 当提供者组件父状态发生变化时,为什么不能更新子组件中的值(带有反应上下文)?
- android - 使用数据绑定从 ViewModel 显示/隐藏 ProgessBar - MVVM