将 CAML/jQuery 的多条记录更新到 Sharepoint(批量更新)
Updating multiple records with CAML/jQuery to Sharepoint (Batch updating)
我正在尝试使用 jQuery 和 CAML 更新 Share Point 中的多条记录。我可以使用此代码轻松更新单个记录,但对于这个项目,我需要一次更新 20 个产品。我想我可以循环并调用此函数 20 次,但我认为必须有一个更优雅的解决方案,有望在单个请求中完成任务。
每个名为 "Prod_1"、"Prod_2"、...、"Prod_20".
的调查有 20 个 Select 框
function saveProducts() {
var sList = "ProductData"
var i = 1;
var sQry = "";
sQry += "<Batch OnError='Continue'>";
sQry += " <Method ID='1' Cmd='Update'>";
sQry += " <Field Name='ID'>" + $("#uniqueID").val() + "</Field>";
sQry += " <Field Name='Offered'>" + $("#Prod_1").val() + "</Field>";
sQry += " </Method>";
sQry += "</Batch>";
var request = "";
request += "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'";
request += " xmlns:xsd='http://www.w3.org/2001/XMLSchema'";
request += " xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
request += " <soap:Body>";
request += " <UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>";
request += " <listName>" + sList + "</listName>";
request += " <updates>" + sQry + "</updates>";
request += " </UpdateListItems>";
request += " </soap:Body>";
request += "</soap:Envelope>";
$.ajax({
async: false, url: sURL, type: "POST", dataType: "xml", data: request, contentType: "text/xml; charset=\"utf-8\"",
beforeSend: function (xhr) { xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"); },
complete: function processSaveProducts(xData, status) {
//alert("Save Status: " + status);
}
});
}
有没有办法通过一次更新而不是 运行 将此代码更新 20 次?谢谢!
您可以在同一个 <Batch>
中嵌套多个 <Method>
节点:
<Batch OnError="Continue" ListVersion="1"
ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="Update">
<Field Name="ID">4<Field>
<Field Name="Field_Name">Value</Field>
</Method>
<Method ID="2" Cmd="Update">
<Field Name="ID" >6</Field>
<Field Name="Field_Name">Value</Field>
</Method>
</Batch>
更多信息:
https://msdn.microsoft.com/en-us/library/lists.lists.updatelistitems(v=office.12).aspx
我正在尝试使用 jQuery 和 CAML 更新 Share Point 中的多条记录。我可以使用此代码轻松更新单个记录,但对于这个项目,我需要一次更新 20 个产品。我想我可以循环并调用此函数 20 次,但我认为必须有一个更优雅的解决方案,有望在单个请求中完成任务。
每个名为 "Prod_1"、"Prod_2"、...、"Prod_20".
的调查有 20 个 Select 框function saveProducts() {
var sList = "ProductData"
var i = 1;
var sQry = "";
sQry += "<Batch OnError='Continue'>";
sQry += " <Method ID='1' Cmd='Update'>";
sQry += " <Field Name='ID'>" + $("#uniqueID").val() + "</Field>";
sQry += " <Field Name='Offered'>" + $("#Prod_1").val() + "</Field>";
sQry += " </Method>";
sQry += "</Batch>";
var request = "";
request += "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'";
request += " xmlns:xsd='http://www.w3.org/2001/XMLSchema'";
request += " xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
request += " <soap:Body>";
request += " <UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>";
request += " <listName>" + sList + "</listName>";
request += " <updates>" + sQry + "</updates>";
request += " </UpdateListItems>";
request += " </soap:Body>";
request += "</soap:Envelope>";
$.ajax({
async: false, url: sURL, type: "POST", dataType: "xml", data: request, contentType: "text/xml; charset=\"utf-8\"",
beforeSend: function (xhr) { xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"); },
complete: function processSaveProducts(xData, status) {
//alert("Save Status: " + status);
}
});
}
有没有办法通过一次更新而不是 运行 将此代码更新 20 次?谢谢!
您可以在同一个 <Batch>
中嵌套多个 <Method>
节点:
<Batch OnError="Continue" ListVersion="1"
ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="Update">
<Field Name="ID">4<Field>
<Field Name="Field_Name">Value</Field>
</Method>
<Method ID="2" Cmd="Update">
<Field Name="ID" >6</Field>
<Field Name="Field_Name">Value</Field>
</Method>
</Batch>
更多信息: https://msdn.microsoft.com/en-us/library/lists.lists.updatelistitems(v=office.12).aspx