SharePoint In Action

An attempt to share my day-to-day SharePoint experience

Batch Updating The Items Of A SharePoint 2010 List

Hi all,

I created a web part for work last week to batch-update the items of a SharePoint 2010 list.
To make it simple I will show how to modify only one column in the whole list using CAML and you can simply expand the idea. My site is called “SampleSite” and the list is “SampleList”. We are modifying the column “SampleColumn”. Here is how the code looks like:

void UpdateList()
            StringBuilder methodBuilder = new StringBuilder();
            string batch = string.Empty;
            string newValue="mmmm";
            string updateColumn = "SampleColumn";

                string batchFormat =    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                                        "<ows:Batch OnError=\"Continue\">{0}</ows:Batch>";
                string methodFormat = "<Method ID='{0}' >" +
                                        "<SetList>{1}</SetList>" +
                                        "<SetVar Name='Cmd'>Save</SetVar>" +
                                        "<SetVar Name='ID'>{2}</SetVar>" +
                                        "<SetVar Name='urn:schemas-microsoft-com:office:office#{3}'>{4}</SetVar>" +
                using (SPSite siteCol = new SPSite("SampleSite"))
                    using (SPWeb web = siteCol.OpenWeb())

                        // Get the list containing the items to update
                        SPList list = web.Lists["SampleList"];
                        string listGuid = list.ID.ToString();
                        SPListItemCollection allItems = list.GetItems();

                        // Build the CAML update commands.
                        for (int i = 0; i < allItems.Count; i++)
                            int itemID = allItems[i].ID;
                            methodBuilder.AppendFormat(methodFormat, itemID, listGuid, itemID, updatedColumn, newValue);
                        web.AllowUnsafeUpdates = true;

                        // Generate the CAML
                        batch = string.Format(batchFormat, methodBuilder.ToString());

                        // Process the batch 
                        string batchReturn = web.ProcessBatchData(batch);
            catch (Exception ex)
		//show the error


Note how the reference to the field has been made in the CAML command:

<SetVar Name='urn:schemas-microsoft-com:office:office#{3}'>{4}</SetVar>

Also note that you would need to set the web.AllowUnsafeUpdates to true.

Assuming SampleList has 4 items, your generated CAML should look like this:

<?xml version=\"1.0\" encoding=\"UTF-8\"?><ows:Batch OnError=\"Continue\">
	<Method ID='1' ><SetList>6deeec64-95f8-4e26-b5ad-e8770deaae5c</SetList><SetVar Name='Cmd'>Save</SetVar> <SetVar Name='ID'>1</SetVar><SetVar Name='urn:schemas-microsoft-com:office:office#SampleColumn'>mmmm</SetVar></Method>

<Method ID='2' ><SetList>6deeec64-95f8-4e26-b5ad-e8770deaae5c</SetList><SetVar Name='Cmd'>Save</SetVar> <SetVar Name='ID'>2</SetVar><SetVar Name='urn:schemas-microsoft-com:office:office#SampleColumn'>mmmm</SetVar></Method>

<Method ID='3' ><SetList>6deeec64-95f8-4e26-b5ad-e8770deaae5c</SetList><SetVar Name='Cmd'>Save</SetVar> <SetVar Name='ID'>3</SetVar><SetVar Name='urn:schemas-microsoft-com:office:office#SampleColumn'>mmmm</SetVar></Method>

<Method ID='4' ><SetList>6deeec64-95f8-4e26-b5ad-e8770deaae5c</SetList><SetVar Name='Cmd'>Save</SetVar> <SetVar Name='ID'>4</SetVar><SetVar Name='urn:schemas-microsoft-com:office:office#SampleColumn'>mmmm</SetVar></Method>

Nader Heshmat


Single Post Navigation

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: