using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.Xml.Linq;
using System.Xml;
using SP = Microsoft.SharePoint.Client;
namespace List
{
class ListsManipulations : SPJobDefinition
{
public ListsManipulations()
: base()
{
}
public ListsManipulations(string jobName, SPService service, SPServer server, SPJobLockType targetType)
: base(jobName, service, server, targetType)
{
}
public ListsManipulations(string jobName, SPWebApplication webApplication)
: base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
{
this.Title = "List Manipulation";
}
public override void Execute(Guid ContentDbId)
{
{
var listServiceClient = new ListServicesWEB.Lists();
listServiceClient.Url = "http://site/_vti_bin/lists.asmx";
listServiceClient.Credentials = new System.Net.NetworkCredential("username", "password", "doman");
var listQueryBuilder = new System.Text.StringBuilder();
listQueryBuilder.Append(" <Query xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">");
listQueryBuilder.Append(" <OrderBy>");
listQueryBuilder.Append(" <FieldRef Name=\"Customer\" />");
listQueryBuilder.Append(" </OrderBy>");
listQueryBuilder.Append(" </Query>");
System.Xml.XmlNode ndListView = listServiceClient.GetListAndView("custom list", "");
string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value;
string strViewID = ndListView.ChildNodes[1].Attributes["Name"].Value;
System.Xml.XmlDocument Doc = new System.Xml.XmlDocument();
System.Xml.XmlElement batchCopy = Doc.CreateElement("Batch");
// batchCopy.SetAttribute("OnError", "Continue");
// batchCopy.SetAttribute("ListVersion", "1");
// batchCopy.SetAttribute("ViewName", "{17DD3DD6-A871-4822-AF17-62634EC069F6}");
var queryDoc = new XmlDocument();
queryDoc.LoadXml(listQueryBuilder.ToString());
var listItems = listServiceClient.GetListItems("external list", string.Empty, queryDoc.DocumentElement,
null, string.Empty, null, string.Empty);
var addItemBuilder = new StringBuilder();
//References to actual custom list fields
addItemBuilder.Append("<Method ID='{0}' Cmd='New'>");
addItemBuilder.Append("<Field Name='Title'>{1}</Field>");
addItemBuilder.Append("<Field Name='givenName'>{2}</Field>");
addItemBuilder.Append("<Field Name='familyName'>{3}</Field>");
addItemBuilder.Append("</Method>");
var addItemFormat = addItemBuilder.ToString();
var itemIndex = 0;
var doc = XDocument.Parse(listItems.OuterXml);
var nodes = from c in doc.Descendants(XName.Get("row", "#RowsetSchema"))
select new
{
Customer = c.Attribute("ows_Customer").Value.Replace("&", "&"),
GivenName = c.Attribute("ows_givenName").Value,
FamilyName = c.Attribute("ows_familyName").Value,
};
var batchItemBuilder = new StringBuilder();
int batchSize = 500;
int batchCount = 0;
foreach (var customer in nodes)
{
batchItemBuilder.AppendFormat(addItemFormat, ++itemIndex, customer.Customer, customer.GivenName, customer.FamilyName);
if (++batchCount == batchSize)
{
batchCopy.InnerXml = batchItemBuilder.ToString();
var listItemCreation = listServiceClient.UpdateListItems("customlist", batchCopy);
batchCount = 0;
batchItemBuilder = new StringBuilder();
}
}
if (batchItemBuilder.Length > 0)
{
batchCopy.InnerXml = batchItemBuilder.ToString();
var listItemCreation = listServiceClient.UpdateListItems("customlist", batchCopy);
}
}
}
}
}