1.介绍

客户端模型是SharePoint 2010才提供的,可以更灵活的在任何客户端设备中操作SharePoint对象,在2007版本中没有客户端模型,2010中有三种客户端模型JavaScript,SilverLight,.NET Managed。下面是对比情况:

     

2.原理

当我们使用客户端模型访问SharePoint 2010服务器对象的时候,请求首先会被打包成XML格式的SharePoint对象模型,然后在由客户端发送到服务器端,在服务器端调用服务器端的对象模型,。然后得到反应结果以JSON

格式发给客户端对象模型,客户端模型在解析得到的结果,展现给前端,如下图:

3.客户端模型对象

服务器端 客户端 Javascript
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

4.一些例子代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace OM
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
            Cursor old = this.Cursor;
            this.Cursor = Cursors.WaitCursor;

Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

clientContext.Load(web);
            clientContext.ExecuteQuery();

this.lblSiteTitle.Text = web.Title;

this.Cursor = old;

}

private void button2_Click(object sender, EventArgs e)
        {
            Cursor old = this.Cursor;
            this.Cursor = Cursors.WaitCursor;

Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

var query = from list
                        in clientContext.Web.Lists
                        where list.Title == "SharePoint Team Members"
                        select list;

var result = clientContext.LoadQuery(query);
            clientContext.ExecuteQuery();

Microsoft.SharePoint.Client.List listMember = result.SingleOrDefault<Microsoft.SharePoint.Client.List>();

Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();
            caml.ViewXml = @"<View><Query></Query></View>";

Microsoft.SharePoint.Client.ListItemCollection listItems = listMember.GetItems(caml);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

List<Employee> allDatas = new List<Employee>();
            foreach (Microsoft.SharePoint.Client.ListItem item in listItems)
            {
                allDatas.Add(new Employee(item["Title"], item["Age"], item["Sex"]));
            }
            dataGridView1.DataSource = allDatas;

this.Cursor = old;
        }

private void button3_Click(object sender, EventArgs e)
        {
            Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

var query = from list
                        in clientContext.Web.Lists
                        where list.Title == "SharePoint Team Members"
                        select list;

var result = clientContext.LoadQuery(query);
            clientContext.ExecuteQuery();

Microsoft.SharePoint.Client.List listMember = result.SingleOrDefault<Microsoft.SharePoint.Client.List>();

Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();
            caml.ViewXml = @"<View><Query><Where><Eq><FieldRef Name='Employee_x0020_Name' /><Value Type='Text'>" + tbxInput.Text + "</Value></Eq></Where></Query></View>";

Microsoft.SharePoint.Client.ListItemCollection listItems = listMember.GetItems(caml);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

this.lblOutput.Text = listItems[0].FieldValues["Title"].ToString();

this.Cursor = old;
        }
    }

public class Employee
    {
        public Employee(object title, object age, object sex)
        {
            this.Age = age;
            this.Sex = sex;
            this.Title = title;
        }
        public object Title { get; set; }
        public object Age { get; set; }
        public object Sex { get; set; }
    }
}

本文转自Justin博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2011/01/06/moss2010-clientmodel.html,如需转载请自行联系原作者

SharePoint 2010中的客户端模型相关推荐

  1. SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板

    WCF Data Services是SharePoint 2010中一个极具吸引力的新特性.然而,因为它的强大,直接对其进行编程仍然会有点痛苦.幸运的是,一个新的相关技术 -- ASP.Net AJA ...

  2. 在 SharePoint 2010 中访问数据

    数据访问的关键方法有哪些? | 使用查询类 | 使用 SPQuery | 使用 SPSiteDataQuery | 使用 LINQ to SharePoint | LINQ to SharePoint ...

  3. Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理

    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理 This time I want to talk ...

  4. SharePoint 2010 中的BCS身份验证模式

    BCS(Business Connectivity Services)是SharePoint 2010中用于替换原先Microsoft Office SharePoint Server 2007企业版 ...

  5. 在SharePoint 2010中创建网站的权限级别

    转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层 ...

  6. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  7. SharePoint 2010中增强的错误跟踪机制

    在SharePoint 2007中,调试和跟踪错误最常用的方法就是查看日志(C:\Program Files\Common Files\Microsoft Shared\Web Server Exte ...

  8. 在SharePoint 2010中通过SQL数据源创建仪表板

    本文中,我们将讨论如何为仪表板创建数据源连接到SQL Server数据表. 注意:PerformancePoint Services是通过一个Windows身份验证委托的方式访问外部数据的.因此,外部 ...

  9. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表

    微软的Visual studio提供了ReportViewer控件以及RDLC报表设计工具.下文主要介绍如何在Sharepoint 2010项目开发中使用ReportViewer和RDLC生成项目报表 ...

最新文章

  1. sqlite 日期时间类型学习1
  2. 熟读《阿里巴巴java开发手册》(二、异常日志)
  3. python嵌套字典代码_python – 尝试在嵌套字典中查找唯一值的总和. (见例子!)
  4. python如何打印26个字母_玩法#用Python学会打印26个英语字母,简单操作如下
  5. 公共语言运行库中的程序集-04强命名的程序集
  6. 数据挖掘-朴素贝叶斯分类
  7. 如何在 Pr 中创建动作序列?
  8. 全网最简单Win10桌面美化教程,只需4步!!
  9. Linux驱动曝光AMD Vega20核心
  10. IDEA使用搜狗输入法变为繁体如何办???
  11. 有道云笔记linux使用教程,我是这么用有道云笔记的!
  12. Google SketchUp Cookbook: (Chapter 4) Advanced Intersect and Follow Me Techniques
  13. word中全部数字、大小写字母、标点更改为新罗马字体Times News Romans
  14. pycharm远程操作linux进行开发
  15. 互联网+废品回收项目可行性分析报告
  16. 客制化键盘编程_最全最细客制化键盘指南!(上)
  17. Protel 2004 的PCB中整体修改元件的技巧
  18. 【Node.js】第一章 初识Node.js
  19. JQUERY为元素添加样式的实现方法
  20. 捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二)

热门文章

  1. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
  2. Spring 面试问题 TOP 50
  3. 常见的神经网络求导总结!
  4. 全球首辆飞行摩托开卖!飞行高度可达4572米,243万元一辆,你敢开吗?
  5. 沈向洋博士:三十年科研路,我踩过的那些坑
  6. ECCV 2020最佳论文讲了啥?作者为ImageNet一作、李飞飞高徒邓嘉
  7. 一文带你了解卷积神经网络基础,建议收藏
  8. 最让程序员自豪的事情是什么?
  9. Django源码分析4:staticfiles静态文件处理中间件分析
  10. RESTful之权限Permissions