IAfanasov

SharePoint SPWeb.ProcessBatch & Object model

Mar 24th, 2012
162
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Diagnostics;
  3. using System.Text;
  4. using Microsoft.SharePoint;
  5.  
  6. namespace Demo
  7. {
  8.     class Program
  9.     {
  10.         static void Main(String[] args)
  11.         {
  12.             using (SPSite site = new SPSite("http://sp"))
  13.             {
  14.                 Int32 itemsCount                            = 1000;
  15.                 SPList list                                 = site.RootWeb.GetList("http://sp/Lists/Clients/");
  16.  
  17.                 Stopwatch sw                                = new Stopwatch();
  18.                 Console.WriteLine("Begin adding {0} items", itemsCount);
  19.                 sw.Start();
  20.                
  21.                 for (Int32 i = 0; i < itemsCount; i++)
  22.                 {
  23.                     SPListItem newItem                      = list.AddItem();
  24.                     newItem["Title"]                        = "New client";
  25.                     newItem["FullName"]                     = "New client full name";
  26.                     newItem["Discount"]                     = i;
  27.                     newItem.Update();
  28.                 }
  29.                 sw.Stop();
  30.                 Console.WriteLine("Items added per {0}", sw.Elapsed);
  31.                 sw.Reset();
  32.  
  33.                 SPQuery query                               = new SPQuery{ ViewFields = String.Format("<FieldRef ID='{0}' />", SPBuiltInFieldId.ID) };
  34.                 SPListItemCollection items                  = list.GetItems(query);
  35.                 Console.WriteLine("Begin updating {0} items", items.Count);
  36.  
  37.                 sw.Start();
  38.                
  39.                 foreach (SPListItem item in items)
  40.                 {
  41.                     item["Title"]                           = "New client";
  42.                     item["FullName"]                        = "New client full name";
  43.                     item["Discount"]                        = item.ID;
  44.                     item.Update();
  45.                 }
  46.  
  47.                 sw.Stop();
  48.                 Console.WriteLine("Items updated per {0}", sw.Elapsed);
  49.                 sw.Reset();
  50.  
  51.                 Console.WriteLine("Begin deleting {0} items", items.Count);
  52.                 sw.Start();
  53.  
  54.                 while (items.Count > 0)
  55.                     items[0].Delete();
  56.                
  57.                 sw.Stop();
  58.                 Console.WriteLine("Items deleted per {0}", sw.Elapsed);
  59.                 sw.Reset();
  60.  
  61.  
  62.                 Console.WriteLine("Begin adding {0} items with batch", itemsCount);
  63.                 sw.Start();
  64.  
  65.                 String addItemBatchFormat                   = String.Format(
  66.                                                                     @"<Method ID='Adding item {{0}}'>
  67.                                                                         <SetList Scope='Request'>{0}</SetList>
  68.                                                                         <SetVar Name='Cmd'>Save</SetVar>
  69.                                                                         <SetVar Name='ID'>New</SetVar>
  70.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#Title'>{{1}}</SetVar>
  71.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#FullName'>{{2}}</SetVar>
  72.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#Discount'>{{0}}</SetVar>
  73.                                                                     </Method>", list.ID);
  74.  
  75.                 StringBuilder batchBuilder                  = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ows:Batch OnError=\"Continue\">");
  76.                 for (Int32 i = 0; i < itemsCount; i++)
  77.                     batchBuilder.AppendFormat(addItemBatchFormat, i, "New client", "New client full name");
  78.  
  79.                 batchBuilder.Append("</ows:Batch>");
  80.                 site.RootWeb.ProcessBatchData(batchBuilder.ToString());
  81.  
  82.                 sw.Stop();
  83.                 Console.WriteLine("Items added per {0}", sw.Elapsed);
  84.                 sw.Reset();
  85.                
  86.                 items                                       = list.GetItems(query);
  87.                 Console.WriteLine("Begin updating {0} items with batch", items.Count);
  88.                 sw.Start();
  89.                 String updateItemBatchFormat                = String.Format(
  90.                                                                     @"<Method ID='Updating item with ID {{0}}'>
  91.                                                                         <SetList Scope='Request'>{0}</SetList>
  92.                                                                         <SetVar Name='Cmd'>Save</SetVar>
  93.                                                                         <SetVar Name='ID'>{{0}}</SetVar>
  94.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#Title'>{{1}}</SetVar>
  95.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#FullName'>{{2}}</SetVar>
  96.                                                                         <SetVar Name='urn:schemas-microsoft-com:office:office#Discount'>{{0}}</SetVar>
  97.                                                                     </Method>", list.ID);
  98.                 batchBuilder                                = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ows:Batch OnError=\"Continue\">");
  99.                 foreach (SPListItem item in items)
  100.                     batchBuilder.AppendFormat(updateItemBatchFormat, item.ID, "New client", "New client full name");
  101.  
  102.                 batchBuilder.Append("</ows:Batch>");
  103.                 site.RootWeb.ProcessBatchData(batchBuilder.ToString());
  104.                
  105.                 sw.Stop();
  106.                 Console.WriteLine("Items updated per {0}", sw.Elapsed);
  107.                 sw.Reset();
  108.  
  109.                
  110.                 Console.WriteLine("Begin deleting {0} items with batch", items.Count);
  111.                 sw.Start();
  112.                 query                                       = new SPQuery{ ViewFields = String.Format("<FieldRef ID='{0}' />", SPBuiltInFieldId.ID) };
  113.                 items                                       = list.GetItems(query);
  114.                 String deleteItemBatchFormat                = String.Format(
  115.                                                                     @"<Method ID='Updating item with ID {{0}}'>
  116.                                                                         <SetList Scope='Request'>{0}</SetList>
  117.                                                                         <SetVar Name='Cmd'>Delete</SetVar>
  118.                                                                         <SetVar Name='ID'>{{0}}</SetVar>
  119.                                                                     </Method>", list.ID);
  120.                 batchBuilder                                = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ows:Batch OnError=\"Continue\">");
  121.                 foreach (SPListItem item in items)
  122.                     batchBuilder.AppendFormat(deleteItemBatchFormat, item.ID);
  123.  
  124.                 batchBuilder.Append("</ows:Batch>");
  125.                 site.RootWeb.ProcessBatchData(batchBuilder.ToString());
  126.                
  127.                 sw.Stop();
  128.                 Console.WriteLine("Items deleted per {0}", sw.Elapsed);
  129.             }
  130.             Console.ReadKey();
  131.         }
  132.     }
  133. }
RAW Paste Data