Forum Discussion
Batch Update list items In SharePoint List Using JSOM/CSOM
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 2097152I
I 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;
}- Patrick RoteNov 01, 2018Iron Contributor
Thanks guys .I ended up using js and csom as that was what i was after and used
clientContext.RequestTimeOut =-1;to eliminate the timeout issue- Patrick RoteNov 23, 2018Iron Contributor
Hi again,
I'm not sure what changed . setting the timeout to infinite worked .But now it doesn't work any more. :(
See my code below. How can i batch update the items and calling executeQueryAsync each time. This is where i need help with.
Thanks in Advance
function updateMultipleListItems()
{
var itemArray = [];
var clientContext = SP.ClientContext.get_current();//Stop it from timing out (infinite) but doesn't work
clientContext.RequestTimeout = -1;var oList = clientContext.get_web().get_lists().getByTitle('bers');
while(ListItemToBeUpdated.moveNext())
{
var oItem = ListItemToBeUpdated.get_current();
var oListItem = oList.getItemById(oItem.get_id());
console.log(oListItem);
console.log(oItem.get_id());oListItem.set_item('UpdateField', 'Update');
oListItem.update();
console..log("updated yes");
itemArray.push(oListItem);
clientContext.load(itemArray[itemArray.length-1]);
}
clientContext.executeQueryAsync(updateMultipleListItemsSuccess, updateMultipleListItemsFailed);
}