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 ...
随机推荐
- 利用ADO.NET导出大批量数据
2015年12月,XX项目中需要做一个数据导出功能,当时所有页面的到处功能均已经实现,但有个页面数据量太大,导出过程中导出页面直接卡死.不得已我准备选用ADO.NET来重新完成这个功能,因为考虑到越偏 ...
- C++ Primer 笔记(2)第二章 变量与基本类型
第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...
- CMD和AMD探秘
踏上前端这条道路以来,我一直以为自己就是个娴熟的切图工,每天只需要做着重复的劳动,切图,做网站.然而,技术的发展是日新月异的,切图工早就面临淘汰.随着浏览器功能越来越完善,前端项目越来越大,代码越来越 ...
- selenium+python笔记6
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 将登陆动作封装成function "" ...
- 重启Apache报错apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting的解决方法
启动apache提示 : apache2: Could not reliably determine the server's fully qualified domain name, using 1 ...
- 青少年如何使用 Python 开始游戏开发
这是一篇由教程团队成员Julian Meyer发表的文章,一个12岁的python开发人员.你可以在Google+和Twitter上找到他. 你可曾想过如何创建视频游戏吗?它不像你想象的那么复杂! 在 ...
- uploader上传
综述 Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持和常用插件,比如验证.图片预览.进度条等. 广泛应 ...
- centos7配置mono和jexus5.6.2
一.通过集成包安装mono: 1.添加Mono的 包库源: 把Mono Project public Jenkins GPG signing 导入系统 wget http://jenkins.mon ...
- MATLAB实现矩阵分块相乘
要实现一下功能,这里$\bf{x}_i$为行向量 $${\bf{A}} = \left[ \begin{array}{l}{{\bf{x}}_1}\\{{\bf{x}}_2}\end{array} \ ...
- ios基础篇(二)——UIImageView的常见用法
UIImageView是在界面上显示图片的一个控件,在UIImageView中显示图片的话应该首先把图片加载到UIImage中,然后通过其他方式使用该UIImage. 创建UIImageView有两种 ...