SharePoint 2013 开发——概述
博客地址:http://blog.csdn.net/FoxDave
近来阅读SharePoint 2013开发一书,带着与大家一起分享其中的内容。
部署场景:
本地部署(On-Premise Deployment)、O365部署(Office 365 Deployment)、托管部署(Hosted Deployment)和混合部署(Hybrid Deployment)。
包场景:
完全信任的场解决方案(Full-Trust Farm Solution)、部分信任的沙盒解决方案(Partial-Trust Sandboxed Solution)和SharePoint应用(Apps for SharePoint)。
编程模型:
说这个之前,我们先来大致地回顾一下SharePoint开发的历史,本人从2007版本开始接触,之前的就不做陈述了。
SharePoint 2007主要的开发手段是Server API和WebService(ASMX),并没有沙盒解决方案的概念,客户端对象模型也并未明确提出。也就是说,你的自定义代码要么运行在SharePoint的服务端,要么通过内置的Web服务((%COMMONPROGRAMFILES%\Microsoft Shared\web server extensions\12\ISAPI,即_vti_bin这个URL路径下)托管在你自己的服务层中进行操作。
SharePoint 2007的客户端对象模型相当有限,在Core.js这个JS文件中实现(据书记载,在Windows SharePoint Services 2003的时候是OWS.js),该文件在SharePoint的大部分页面中被引用,不修改的话则仅包含很有限的逻辑处理操作。例如,Core.js提供了ECB的生成逻辑如下:
function AddDocLibMenuItems(m, ctx) {
if (typeof (Custom_AddDocLibMenuItems) != "undefined") {
if (Custom_AddDocLibMenuItems(m, ctx)) return;
}
// build the rest of OOTB ECB menu items
}
我们通过SharePoint Designer来插入Custom_AddDocLibMenuItems函数到SharePoint页面上来实现我们自己的逻辑,或者是使用内容编辑Web部件(CEWP)来插入自定义的JS脚本函数。这种方式能实现的东西很有限,而且灵活性很差,如果因为一些原因Core.js没有被加载完,那么我们的自定义扩展就不好用了。
在SharePoint 2010中,客户端对象模型(CSOM)被极大地改善了,客户端模型从根本上来说是叫做Client.svc的WCF服务,附带三种不同的代理:Silverlight、JavaScript和.NET托管客户端(C#或VB.NET)。下面的代码片段展示了如何应用客户端对象模型(JS、sp.js)执行异步查询操作:
ExecuteOrDelayUntilScriptLoaded(GetTitle, "sp.js");
function GetTitle() {
//Retrieve current client context
context = SP.ClientContext.get_current();
//Load the site
site = context.get_web(); context.load(site);
//Execute asynchronously with callbacks for successful or failed calls
context.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}
接下来,到了SharePoint 2013。它极大地丰富了开发的对象模型,如下图。总体概括来说,有服务端对象模型(Server API)、客户端对象模型(CSOM)和Web服务(REST\OData Endpoint)。
最耀眼的就是跨平台的REST服务,但有一点,Server API无论何时都有其不可替代性,因为一些服务器端的定制、TimerJob等的开发工作只能用完全信任的场解决方案来部署。我们可以根据实际情况来选择合适的API进行开发工作,更多信息。微软方面推荐开发者遵循新的应用程序模型作为优先选择方式来构建SharePoint 2013自定义的应用程序。"don't make any new sandboxed solutions"和"build new farm solutions only you absolutely have to"。
在SharePoint 2013中,_vti_bin/client.svc作为别名_api存在,即REST,更容易辨认,调用起来更方便,架构如下图所示。
使用REST查询信息非常简单,如查询ID为1的联系人:
http://contoso.com/_api/web/lists/getByTitle('Contacts')/getItemByStringId('1')
又如,我们想删除某个联系人,用如下的代码片段:
removeItem = function (id) {
$.ajax(
{
url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/getByTitle('Contacts')/getItemByStringId('" + id + "')",
type: "DELETE",
headers:
{
"accept": "application/json",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"IF-MATCH": "*"
},
success: function (data) {
readAll();
},
error: function (err) {
alert(JSON.stringify(err));
}
}
);
}
另一方面,之前在SharePoint 2010中只能用服务端对象模型实现的如用户配置文件、工作流、搜索等方面的部分可以用客户端对象模型CSOM实现了。
下一篇我们将介绍SharePoint全新的模式——SharePoint APP。
SharePoint 2013 开发——概述的更多相关文章
- SharePoint 2013 开发教程
做了SharePoint有三年了,大家经常会问到,你的SharePoint是怎么学的,想想自己的水平,也不过是初级开发罢了.因为,SharePoint开发需要接触的东西太多了,Windows操作系统. ...
- sharepoint 2013 开发环境安装
Sharepoint 介绍 Sharepoint 可以帮助企业用户轻松完成日常工作中诸如文档审批.在线申请等业务流程,同时提供多种接口实现后台业务系统的集成,它将 Office 桌面端应用的优势结合 ...
- SharePoint 2013开发入门探索(二)- 列表操作
我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其 ...
- SharePoint 2013开发入门探索(一)- 自定义列表
在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...
- SharePoint 2013 开发——搜索架构及扩展
博客地址:http://blog.csdn.net/FoxDave SharePoint 2013高度整合了搜索引擎,在一个场中只有一个搜索服务应用程序(SSA).它集成了FAST,只有一个代码库 ...
- SharePoint 2013 开发——其他社交功能
博客地址:http://blog.csdn.net/FoxDave 上一篇讲了如何获取用户配置文件的相关属性,它属于SharePoint 2013社交功能的一个小的构成部分.社交功能是SharePoi ...
- SharePoint 2013开发环境准备一些小事项
开发慢慢向着SharePoint 2013迁移,环境也开始慢慢准备起来了.由于FAST Search的集成,和缓存服务的加入,SharePoint 2013对开发机器要求的不是一般的高.这里介绍一下如 ...
- SharePoint 2013 开发——开发自定义操作APP
博客地址:http://blog.csdn.net/FoxDave 自定义操作即我们所说的Ribbon和ECB(Edit Control Block),在SharePoint 2013之前,我们可以 ...
- SharePoint 2013 开发——Provider-hosted APP准备工作
博客地址:http://blog.csdn.net/FoxDave 后续的内容我们来一步一步开发一个SharePoint Porvider-hosted APP,本篇主要介绍一些准备工作. Sha ...
随机推荐
- angularJS常见问题汇总
问题描述 解决方案 当你简单的动态给页面插入html时, 此时html带有angular的语法不会执行的. var uploadInfo = '上传成功!<a ng-click="qu ...
- JQUERY学习(贰)
一.操作一组jQuery对象 1.遍历 $("").each(fun); 2.求长度:length size() 3.获得某一个jQuery对象 $("") ...
- Django数据库设置
设置数据库,创建您的第一个模型,得到一个简单介绍 Django的自动生成管理网站. 数据库设置 现在,打开 mysite / settings.py . 这是一个普通的Python模块 模块级变量代表 ...
- js获取随机数
js 获取随机数方法如下: 1.Math.random()表示 结果为0-1间的一个随机数(包括0,不包括1) : 返回指定范围的随机数(m-n之间)的公式 Math.random()*(n-m)+m ...
- R语言描述性统计常用函数
- KVC与KVO的进阶使用
本篇主要介绍键-值编码KVC,键值观察KVO的进阶使用的一些技巧主要是一下两个方面: KVC的集合操作符 KVO的手动实现方式 KVC集合操作符 关于集合操作符在苹果官方文档搜索Collection ...
- C#压缩加密和vb压缩加密
string[] FileProperties = new string[2]; FileProperties[0] = "C:\\a\\";//待压缩文件目录 FilePrope ...
- centos彻底删除文件夹、文件命令
[1]新建文件夹 格式:mkdir 文件名 view source1 mkdir /home/test 新建一个名为test的文件夹在home下 [2]新建文本 vi /home/test.s ...
- C语言链表
#include<stdio.h>#include<malloc.h>#include<stdlib.h> typedef struct Node{ int dat ...
- C++文件读写练习
编写一个程序,统计data.txt文件的行数,并将所有行前加上行号后写到data1.txt文件中. 算法提示: 行与行之间以回车符分隔,而getline()函数以回车符作为终止符.因此,可以采用get ...