客户端对象模型是SharePoint 2010中的新的特性,它是开发人员可以远程的访问Share Point List。比如,你可以创建一个Win Form 或者WPF程序,一个Silverlight 程序,或者一段JS脚本来管理向SharePoint 提交或者获取的数据。
通过客户端对象模型,你会发现,相对于上一节使用List Web Service,代码会整洁了很多。比如,你想使用Select 类型的查询,客户端对象模型,有时候会自动生成CAML。并且,它使管理内存中的数据对象也更简单了,你可以使用LINQ,枚举,集合等等。快速有效的查询和过滤数据。
例子:使用客户端对象模型读取List 中的数据。
客户端对象模型提供了一种更有效的访问List中数据的方法。
- 打开VS 2010,创建一个Windows Form 程序,取个名字,我取的ReadListData, 请确信使用了.NET Framework 3.5的版本。
- 在Form窗口中添加一个label, textbox, DataGrid view, 和两个按钮。如图:
- 在你的项目里面添加一个新的in-memory类,叫做"ImployeeInfo"(方法见上一篇文章).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ReadSPListData
{
class EmployeeInfo
{
public string EmployeeID { get; set; }
public string FirstName { get; set; }
public string HireDate { get; set; }
}
}
- 下一步,给按钮Exit 添加处理函数,因为只有一个退出方法,比较简单,双击Exit 按钮,VS自动生成处理函数方法,如下:
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
- 按钮Load的事件比较麻烦些,所以下一步再说。在你用后台代码使用客户端对象模型的时候,你必须添加相应的应用到你的程序里面。右键点击项目名称,选"Add Reference". 选"Browse" 找到下面的文件:
c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI
and add the Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll
添加 到你的引用中去。
当使用客户端对象模型的时候,你可能会碰上命名空间的冲突(比如,与窗口程序中的Form 类),要避免这种情况,你可以使用下面的代码:
using ClientOM = Microsoft.SharePoint.Client;
//using Microsoft.SharePoint.Client;
添加一个自定义的命名空间来避免冲突问题。
- 这一步将添加从SharePoint List加载数据的代码。你会发现下面的语法和使用List Web Services不太一样,但是实现的功能是一样的,只是语法上更整洁些。
在接下来的代码中,注意程序使用文本框来输入网站地址,并存到字符串变量里面。然后用in-memory的对象来管理从Share Point List里面返回的数据。但是,使用ClientContext对象来设置Context才是关键的与以前的例子不同的地方。设置Context的过程和于Share Point List交互而调用ExecuteQuery(一个batch查询方法)是客户端对象模型的核心特性。你会再一次使用LINQ来生成对象,并遍历整个对象中的内容来获取可绑定的对象来直接映射Datagrid。Foreach 循环的一个关键的地方就是,使用ElementAt属性来设置值。这是指定元素的索引。如果你的执行LINQ的地方加一个断点来查看returnedListData对象,你就会看到所有返回的值及县官的索引。
下面就是Load 按钮的事件处理程序:
private void btnLoad_Click(object sender, EventArgs e)
{
string SPUrl = txtbxSPUrl.Text.Trim();
IEnumerable myListItems;
List myEmployees = new List ();
ClientOM.ClientContext SPContext = new ClientOM.ClientContext(SPUrl);
ClientOM.Web mySPSite = SPContext.Web;
ClientOM.ListCollection myListCollection = mySPSite.Lists;
var employeeList = myListCollection.GetByTitle("Employees");
ClientOM.CamlQuery myCamlQuery = new ClientOM.CamlQuery();
IQueryable myList = employeeList.GetItems(myCamlQuery);
myListItems = SPContext.LoadQuery(myList);
SPContext.ExecuteQuery();
var returnedListData = from emp in myListItems
select emp;
foreach(ClientOM.ListItem tempListItem in returnedListData)
{
EmployeeInfo temEmp = new EmployeeInfo();
temEmp.EmployeeID = tempListItem.FieldValues.Values.ElementAt(11).ToString();
temEmp.FirstName = tempListItem.FieldValues.Values.ElementAt(4).ToString();
temEmp.HireDate = tempListItem.FieldValues.Values.ElementAt(5).ToString();
myEmployees.Add(temEmp);
}
dtgrdSPlistData.DataSource = myEmployees;
}
- 基本上这个程序就完成了。不过注意在Form 程序里面直接使用
using Microsoft.SharePoint.Client;
会出现问题,如图
- 点击f5进行调试,注意ElementAt()方法使用的索引,如果出错的话,请在对象中查看所有字段的索引。
没有评论:
发表评论