Forum Discussion

Patrick Rote's avatar
Patrick Rote
Iron Contributor
Oct 10, 2018

Batch Update list items In SharePoint List Using JSOM/CSOM

Hi All,
I'm trying to update multiple fields  using CSOM. It works for few items but when i try t on items over 700 items i'm getting the error below:-
the request message is too big. The server does not allow messages larger than 2097152I

This number of items doesn't look large at all :(
I think the solution will be to update them in batches using the code below.
The issue i'm getting using the below code is if the id of the item doesn't exist it fails.
What would be the best approach to loop through the existing item ids and update accordingly?

 

function updateListItems() {
    var itemArray = [];
    var clientContext = SP.ClientContext.get_current();
    var oList = clientContext.get_web().get_lists().getByTitle('TestList');

 

for(var i = 1; i<= 5; i++){   
    var oListItem = oList.getItemById(i); 
    oListItem.set_item('Title', 'My Updated Item!'); 
    oListItem.update();
    itemArray[i] = oListItem;
    clientContext.load(itemArray[i]);
}
clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);

 

}
function onQuerySucceeded() {
    alert('Items Updated');
}
function onQueryFailed(sender, args) {

 

alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());

 

}

 

Thanks in advance

  • Marko Rosberg's avatar
    Marko Rosberg
    Copper Contributor

    Hi,

     

    try running the executequery more often. Inside the updateListItems -function. Now you are updating all the list items at once and that is too much for SPO to handle.

     

    -Marko

  • 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 Rote's avatar
      Patrick Rote
      Iron Contributor
      Thanks guys. Any resources or help on how i can batch them lets say 100 each time?
      • Patrick Rote's avatar
        Patrick Rote
        Iron 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 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

         

         

Resources