Forum Discussion
Batch Update list items In SharePoint List Using JSOM/CSOM
What Marko suggested is correct. Updating 700 items at a time will just take too long and may even timeout (depending on the operation).
Just run the ExecuteQuery every time you reach a certain number of items: 10, 50, ..., it's really up to you but 700 is probably too much
- Patrick RoteOct 10, 2018Iron ContributorThanks guys. Any resources or help on how i can batch them lets say 100 each time?
- Patrick RoteOct 11, 2018Iron Contributor
Hi All,
I'm currently getting this error below when i try and update more than 800 records at once
the request message is too big. The server does not allow messages larger than 2097152II need help with batching the request in 100 or more to help eliminate the error.
See my snippet below
function updateListItems() {
var itemArray = [];
var clientContext = SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('List');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query></Query><RowLimit>200</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(oList);
clientContext.load(collListItem);
/* If i pass individual id it works fine but i want to send batches of 100 here so it would update 100 items twice
this.oListItem = oList.getItemById(11);oListItem.set_item("column", "textToUpdate");
oListItem.update();
clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);
/* here i need to loop though the itemid instead of looping though a whole sequence number
for(var i = 0; i <= 1000; i++)
{
var oListItem = oList.getItemById(i);
oListItem.set_item("column", "textToUpdate");
oListItem.update();
itemArray[i] = oListItem;
clientContext.load(itemArray[i]);
}
*/
}function onQuerySucceeded() {
var count = 0;
count = collListItem.get_count();
alert(count);var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
listItemInfo += '\nID: ' + oListItem.get_id();
}alert(listItemInfo.toString());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}Thanks in Advance
- AnonymousOct 11, 2018
Hi Patrick,
You could run something like this. The example is in C# but you can easily change it to work with your JavaScript code.
var count = <collection count>;
var maxChunkSize = 200;
var start = 0;
var chunkSize = count < maxChunkSize ? count : maxChunkSize;
var end = start + chunkSize < count ? start + chunkSize : count;
var shouldRun = true;
while (shouldRun)
{
shouldRun = end == count ? false : true;
for (int i = start; i < end; i++)
{
<your code>
}ctx.ExecuteQuery();
start = end;
end = start + chunkSize < count ? start + chunkSize : count;
}