Batch Update - SharePoint
Hi Guys, Today i would like to explain you about the batch update process in SharePoint. Batch (Group of items), the meaning is to update a large number of items to the SharePoint list by passing the values as XML elements. Consider if u want to update the list with more than 100 items. In this case if u use foreach it will be very expensive and it suck ur time. Moreover if u use SPListItem.Update() it takes 2.8secs for updating a single item. If u r using ProcessBatchUpdate it takes 30 secs to update to a maximum of 200 - 300 items based on ur requirement. So my suggestion is to use ProcessBatchUpdate for Adding, Updating and Deleting a large number of items from the SharePoint List.
Lets see how to perform this command through the SharePoint object model
Consider that u r adding items in the list with Title field as a running numbers. This is for example ah
First of all u should format the XML file for Inserting, Updating or Deleting the items in list
StringBuilder methodBuilder = new StringBuilder();
string batchFormat = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<ows:Batch OnError=\"Return\">{0}</ows:Batch>";
"<ows:Batch OnError=\"Return\">{0}</ows:Batch>";
// For Updating
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#Job_x0020_No\">{3}</SetVar>" +
"</Method>";
For update command pass the ItemID for ID parameter and the values.
// For Inserting
string methodFormat = "<Method ID=\"{0}\">" +
"<SetList>{1}</SetList>" +
"<SetVar Name=\"Cmd\">Save</SetVar>" +
"<SetVar Name=\"ID\">New</SetVar>" +
"<SetVar Name=\"urn:schemas-microsoft-com:office:office#Job_x0020_No\">{2}</SetVar>" +
"</Method>";
"<SetList>{1}</SetList>" +
"<SetVar Name=\"Cmd\">Save</SetVar>" +
"<SetVar Name=\"ID\">New</SetVar>" +
"<SetVar Name=\"urn:schemas-microsoft-com:office:office#Job_x0020_No\">{2}</SetVar>" +
"</Method>";
for (int i = 0; i < 10000; i++)
{
methodBuilder.AppendFormat(methodFormat, i, listGuid, "1");
}
{
methodBuilder.AppendFormat(methodFormat, i, listGuid, "1");
}
If u observe the code we are passing the MethodID as running numbers, listguid, values
// For Deleting
string methodFormat = "<Method ID=\"{0}\">" +
"<SetList>{1}</SetList>" +
"<SetVar Name=\"Cmd\">Delete</SetVar>" +
"<SetVar Name=\"ID\">{2}</SetVar>" +
"</Method>";
"<SetList>{1}</SetList>" +
"<SetVar Name=\"Cmd\">Delete</SetVar>" +
"<SetVar Name=\"ID\">{2}</SetVar>" +
"</Method>";
For delete command get the item collection to delete and pass the ItemID to delete.
Note: Please pass the Fields internal name in the XML.
batch = string.Format(batchFormat, methodBuilder.ToString());
The above method will perform the operation and will return XML value as string. It is not necessary. Just capture that value in a string.
I hope u understand the concept of ProcessBatchUpdate in SharePoint. Just give a try and later u will become impressed. If there is any query don't forget to mail me. Catch me at sudharsan_1985@live.in, sudharsan.zylog@gmail.com
Cheers...
Comments
Post a Comment