Equivalent Objects in Server and Client OMs
SERVER OM
|
.NET MANAGED
|
ECMASCRIPT
|
Microsoft.SharePoint.SPContext
|
Microsoft.SharePoint.Client.ClientContext
|
SP.ClientContext
|
Microsoft.SharePoint.SPSite
|
Microsoft.SharePoint.Client.Site
|
SP.Site
|
Microsoft.SharePoint.SPWeb
|
Microsoft.SharePoint.Client.Web
|
SP.Web
|
Microsoft.SharePoint.SPList
|
Microsoft.SharePoint.Client.List
|
SP.List
|
Microsoft.SharePoint.SPListItem
|
Microsoft.SharePoint.Client.ListItem
|
SP.ListItem
|
Microsoft.SharePoint.SPField
|
Microsoft.SharePoint.Client.Field
|
SP.Field
|
Which DLLs Implement the Client OM
Client OM located under %Program Files%\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI .
There are two DLLs for the managed OM, Microsoft.SharePoint.Client and Microsoft .SharePoint.Client.Runtime .
Add references to VS.
Ex:1
Retrieving site titles and its Urls
ClientContext context = new Microsoft.SharePoint.Client.ClientContext("http://Mohan:8089");
Web site = context.Web;
context.Load(site);
context.ExecuteQuery();
MessageBox.Show("Title: " + site.Title + " Relative URL: " + site.ServerRelativeUrl);
context.Dispose();
List Collections
ListCollection lists = context.Web.Lists;
context.Load(lists);
context.ExecuteQuery();
MessageBox.Show(lists.Count.ToString());
foreach (Microsoft.SharePoint.Client.List list in lists)
{
MessageBox.Show("List: " + list.Title);
}
Ex:2 List the Properties
ClientContext context = new Microsoft.SharePoint.Client. ClientContext("http://Mohan:8089");
Web site = context.Web;
context.Load(site, s = > s.Title, s = > s.ServerRelativeUrl);
ListCollection lists = site.Lists;
context.Load(lists, ls = > ls.Include(l = > l.Title));
context.ExecuteQuery();
MessageBox.Show("Title: " + site.Title + " Relative URL: " + site.ServerRelativeUrl);
MessageBox.Show(lists.Count.ToString());
foreach (Microsoft.SharePoint.Client.List list in lists)
{
MessageBox.Show("List: " + list.Title);
}
context.Dispose();
Ex:3
Using CAML Query
ClientContext context = new Microsoft.SharePoint.Client. ClientContext("http://Mohan:8089");
List list = context.Web.Lists.GetByTitle("Announcements");
ListItemCollectionPosition itemPosition = null;
while (true)
{
CamlQuery camlQuery = new CamlQuery();
camlQuery.ListItemCollectionPosition = itemPosition;
camlQuery.ViewXml = @"
< View >
< Query >
< Where >
< IsNotNull >
< FieldRef Name='Title' / >
< /IsNotNull >
< /Where >
< /Query >
< RowLimit > 1000 < /RowLimit >
< /View > ";
ListItemCollection listItems = list.GetItems(camlQuery);
context.Load(listItems);
context.ExecuteQuery();
itemPosition = listItems.ListItemCollectionPosition;
foreach (ListItem listItem in listItems.ToList())
{
MessageBox.Show("Title: " + listItem["Title"]);
}
if (itemPosition == null)
{
break;
}
MessageBox.Show("Position: " + itemPosition.PagingInfo);
}
Ex:4
Using the LINQ
ClientContext context = new Microsoft.SharePoint.Client. ClientContext("http://Mohan:8089");
var query = from list
in context.Web.Lists
where list.Title != null
select list;
var result = context.LoadQuery(query);
context.ExecuteQuery();
foreach (List list in result)
{
MessageBox.Show("Title: " + list.Title);
}
context.Dispose();
Ex:-5
Creating Lists, Fields, and Items
ClientContext context = new Microsoft.SharePoint.Client. ClientContext("http://Mohan:8089");
Web site = context.Web;
ListCreationInformation listCreationInfo = new ListCreationInformation();
listCreationInfo.Title = "New List";
listCreationInfo.TemplateType = (int)ListTemplateType.GenericList;
List list = site.Lists.Add(listCreationInfo);
Field newField = list.Fields.AddFieldAsXml(@" < Field Type='Text' DisplayName='NewTextField' > < /Field > ", true, AddFieldOptions.AddToDefaultContentType);
ListItemCreationInformation itemCreationinfo = new ListItemCreationInformation();
ListItem item = list.AddItem(itemCreationinfo);
item["Title"] = "My New Item";
item["NewTextField"] = "My Text";
item.Update();
context.ExecuteQuery();
context.Dispose();
Ex:-6
Deleting Lists and Items
ClientContext context = new Microsoft.SharePoint.Client. ClientContext("http://Mohan:8089");
List list = context.Web.Lists.GetByTitle("New List");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"
< View >
< Query >
< Where >
< IsNotNull >
< FieldRef Name='Title' / >
< /IsNotNull >
< /Where >
< /Query >
< /View > ";
ListItemCollection listItems = list.GetItems(camlQuery);
context.Load(listItems, items = > items.Include(item = > item["Title"]));
context.ExecuteQuery();
foreach (ListItem listItem in listItems.ToList())
{
listItem.DeleteObject();
}
context.ExecuteQuery();
context.Dispose();
Advantages
Less Deployment Hassles: Using Client OM, you do not need to install the components required by the Server Object Model. Thus Client OM provides much ease to the end user.
Language Flexibility: We can use the following languages to work with the Client OM:
Microsoft .NET
Silverlight
ECMA Script (JavaScript /JScript)
Query Speed Optimizations: In the Client OM, reduced network traffic is attained using Query Optimizations. Thus the user will feel reduced round trips and other advantages like paged results, etc.