src/value-added/SPUpdateMultipleListItems.js
define([
'jquery',
'../utils/constants',
'../core/SPServices.utils',
//---------------------------
// We don't need local variables for these dependencies
// because they are added to the jQuery namespace.
'../core/SPServices.core'
], function (
$,
constants,
utils
) {
"use strict";
// SPUpdateMultipleListItems allows you to update multiple items in a list based upon some common characteristic or metadata criteria.
$.fn.SPServices.SPUpdateMultipleListItems = function (options) {
var opt = $.extend({}, {
webURL: "", // [Optional] URL of the target Web. If not specified, the current Web is used.
listName: "", // The list to operate on.
CAMLQuery: "", // A CAML fragment specifying which items in the list will be selected and updated
batchCmd: "Update", // The operation to perform. By default, Update.
valuepairs: [], // Valuepairs for the update in the form [[fieldname1, fieldvalue1], [fieldname2, fieldvalue2]...]
completefunc: null, // Function to call on completion of rendering the change.
debug: false // If true, show error messages;if false, run silent
}, options);
var i;
var itemsToUpdate = [];
var documentsToUpdate = [];
// Call GetListItems to find all of the items matching the CAMLQuery
$().SPServices({
operation: "GetListItems",
async: false,
webURL: opt.webURL,
listName: opt.listName,
CAMLQuery: opt.CAMLQuery,
CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='Recursive' /></QueryOptions>",
completefunc: function (xData) {
$(xData.responseXML).SPFilterNode("z:row").each(function () {
itemsToUpdate.push($(this).attr("ows_ID"));
var fileRef = $(this).attr("ows_FileRef");
fileRef = "/" + fileRef.substring(fileRef.indexOf(constants.spDelim) + 2);
documentsToUpdate.push(fileRef);
});
}
});
var fieldNum;
var batch = "<Batch OnError='Continue'>";
for (i = 0; i < itemsToUpdate.length; i++) {
batch += "<Method ID='" + i + "' Cmd='" + opt.batchCmd + "'>";
for (fieldNum = 0; fieldNum < opt.valuepairs.length; fieldNum++) {
batch += "<Field Name='" + opt.valuepairs[fieldNum][0] + "'>" + utils.escapeColumnValue(opt.valuepairs[fieldNum][1]) + "</Field>";
}
batch += "<Field Name='ID'>" + itemsToUpdate[i] + "</Field>";
if (documentsToUpdate[i].length > 0) {
batch += "<Field Name='FileRef'>" + documentsToUpdate[i] + "</Field>";
}
batch += "</Method>";
}
batch += "</Batch>";
// Call UpdateListItems to update all of the items matching the CAMLQuery
$().SPServices({
operation: "UpdateListItems",
async: false,
webURL: opt.webURL,
listName: opt.listName,
updates: batch,
completefunc: function (xData) {
// If present, call completefunc when all else is done
if (opt.completefunc !== null) {
opt.completefunc(xData);
}
}
});
}; // End $.fn.SPServices.SPUpdateMultipleListItems
return $;
});