SharePoint Add-in Model 是自 2013 版本以来引入的新的扩展性开发模型, SharePoint 开发者可以利用这种新模型来实现往常利用场解决方案 (Farm Solution)或沙盒解决方案 (Sandbox Solution)进行的站点定制化 (Customizations)。提到站点定制化,常见的用户场景包括:

  • 实现一个自定义的Web 组件 (WebPart), 使得用户在编辑网站页面时可以添加该 Web 组件到页面上。
  • 实现一个事件接收器 (Event Receiver),使得文档或列表发生新增、删除、更新等操作时触发相应的逻辑。
  • 实现一个计时器任务 (TimerJob), 定期执行某项任务。
  • 通过程序化的方式定义一个列表,并对其进行增删改
  • 定义网站栏( Site Column)、内容类型(Content Types)
  • 程序化的方式创建网站集 (Site Collection)、网站 (Site),并创建新的文档库(Document Libarary),为网站设置主题(Theme),
  • 程序化的方式部署母版页(Master Page)、网页布局(Page Layouts)
  • 更多...

这些定制化在 Add-in Model 中绝大多数都是被支持的, 我们会在后续的文章中深入探讨。具体如何实现,可以参考 GitHub 上的开源代码实现: O365 Patterns and Practices (PnP) 项目

什么是 Add-in Model?

它是 SharePoint 提供的用来让开发者扩展自身功能的一种开发模型, 基于这种模型开发出的定制化解决方案, 通常称作 SharePoint Add-ins(我们暂且称它为定制化程序)。

Add-in 模型提供了一种机制, 让开发者像开发普通 Web 应用程序一样开发 SharePoint 定制化程序。这使得围绕 SharePoint 定制化的开发变得更加开放, 开发者可以使用更多的 Web 技术、框架快速构建出自己想要的解决方案。所以,简单说来: 基于 Add-in Model 的开发, 就是 Web 应用程序的开发。

简单说来, Add-ins 就是 Web 应用程序。

“如果你了解如何开发常见 Web 应用程序, 那么,你已经了解了如何基于 Add-in 模型去开发 SharePoint 定制化方案了…”

如何托管定制化方案(Add-ins)

既然基于 Add-in 模型的开发,更多的是 Web 应用程序的开发,那么开发出来的 Add-ins 如何部署, 托管在哪呢?

Add-in 模型提供了两种方式: SharePoint 自托管、Provider-Hosted 方式。

基于 SharePoint自托管( SharePoint-hosted) 方式实现的 Add-ins

特点 描述
Add-ins 入口 安装后,网站内容(Site Content)中包含入口瓷块(tile)
可以包含哪些 UI 组件 add-in 组件(parts) 和 自定义按钮(Custom Actions. that is, custom ribbon buttons or menu items)。 可以通过 XML 文件的方式在 Add-ins 中包含如下组件:

  • 自定义页面(Custom Page)
  • 工作流(Workflows)
  • Modules (sets of files)
  • 列表模板(List templates)
  • 列表和库的实例(List and library instances)
  • 自定义的列表表单和视图(Custom list forms and views)
  • 自定义内容类型(Custom content types)
  • 网站模板(Web templates)
  • 内置网站列(Built-in columns (not custom columns))
  • 内置 Web 组件(Built-in Web Parts (not custom Web Parts))
  • JavaScript 文件
  • Add-ins 网站内部自定义按钮和菜单项(Custom buttons and menu items)
  • Add-in 组件(add-in parts)
  • 自定义动作(custom actions),包括自定义的Ribbon按钮(custom ribbon buttons)或者 菜单项(menu items)
可用的编程语言
  • SharePoint 的客户端对象模型提供了 JavaScript 版本的库, 可以用来在 Add-ins 中增删改查(CRUD) SharePoint 网站上的数据。
  • 自定义的页面通常是一些 ASP.NET 页面(ASPX),他们可以引用 ASP.NET 和 SharePoint 内置的控件,但是不能使用 Code Behind。但是如果需要对 SharePoint 控件进行自定义,可以利用 Client-Side rendering 技巧
  • Add-ins 中的 JavaScript 可以访问该应用网站外的数据( 包括所其在 SharePoint 网站上的数据和资源, 也可以是互联网上的任何资源, 可以用如下两种方式: 1. 利用 JavaScript 跨域库 2. JavaScript WebProxy 类。
</td>

基于 Provider-Hosted 方式实现的 Add-ins

SharePoint 自托管方式支持的组件, 基于 provider-hosted 方式的 Add-ins 中也支持。

Provider-Hosted 方式, 是指将开发出来的 Add-ins 托管在 SharePoint farm 外部的任何服务器上, 这些服务器从硬件的角度上可以是开发者指定的一台物理机或者 Windows Azure 上的虚拟机。 而从软件的角度上, 它可以是由 Microsoft IIS 做支撑,也可有由开源的 Apache、Nginx、Tomcat等等。开发者可以利用这些 Web 服务器支持的开发语言如 C#、 JS、HTML、PHP、JAVA 等等来进行开发。

由于 Add-ins 托管在 Farm 外面, 所以如果实现和 SharePoint 网站风格一致,可以利用 SharePoint 提供的 Chrome 控件。代码如下:

$(document).ready(function () {
//Get the URI decoded SharePoint site url from the SPHostUrl parameter.
var spHostUrl = decodeURIComponent(getQueryStringParameter('SPHostUrl'));
//Get the URI decoded SharePoint app web url from the SPAppWebUrl parameter.
var appWebUrl = decodeURIComponent(getQueryStringParameter('SPAppWebUrl'));
//Get the isDialog from url parameters
var isDialog = decodeURIComponent(getQueryStringParameter('IsDlg')); //Build absolute path to the layouts root with the spHostUrl
var layoutsRoot = spHostUrl + '/_layouts/15/'; //load all appropriate scripts for the page to function
$.getScript(layoutsRoot + 'SP.Runtime.js',
function () {
$.getScript(layoutsRoot + 'SP.js',
function () {
//Create a Link element for the defaultcss.ashx
//resource
var linkElement = document.createElement('link');
linkElement.setAttribute('rel', 'stylesheet');
linkElement.setAttribute('href', layoutsRoot + 'defaultcss.ashx'); ////Add the linkElement as a child to the head
//section of the html
var headElement = document.getElementsByTagName('head');
headElement[0].appendChild(linkElement); //Load the SP.UI.Controls.js file to render the App Chrome
$.getScript(layoutsRoot + 'SP.UI.Controls.js', renderSPChrome);
});
}); function chromeLoaded() {
$('body').show();
} //function callback to render chrome after SP.UI.Controls.js loads
function renderSPChrome() {
//Set the chrome options for launching Help, Account,
// and Contact pages
var options = {
'appTitle': document.title,
'onCssLoaded': 'chromeLoaded()'
}; //Load the Chrome Control in the divSPChrome element of the page
var chromeNavigation = new SP.UI.Controls.Navigation('divSPChrome', options);
chromeNavigation.setVisible(true);
}

Remote data can be blobs, caches, message queues, content delivery networks (CDN), and databases, among others. And databases can be any type including relational and object-oriented. The remote data can be accessed in a variety of ways. For example, you can use Business Connectivity Services (BCS) to surface the data in a SharePoint list. Another option is to expose data in a grid on a page of a remote web application.

Add-ins 可以利用 APIs 来和 SharePoint 资源进行交互, 主要包括以下几种:

  • 利用 .NET 开发时, 可使用 SharePoint 客户端对象模型 (Client-Side Object Model 简称 CSOM)
  • REST/OData APIs

SharePoint Add-ins use SharePoint APIs to connect and integrate with SharePoint features—search, workflow, social networking, taxonomy, user profiles, BCS, and more. This lets them read documents, do searches, connect people, and perform CRUD operations.

内容同步发布在 simpeng.net 和 http://www.cnblogs.com/simpeng/p/4900591.html

SharePoint Add-in Model (App Model) 介绍 – 概念、托管方式、开发语言的更多相关文章

  1. Django基础核心技术之Model模型的介绍与设计

    Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...

  2. laravel路由无法访问,报404,No query results for model [App\Models\...]

    今天遇到了一个问题,在routes/web.php中配置了路由,但始终无法访问该路由,一直报404. Route::resource('gift_packs', 'GiftPacksControlle ...

  3. SharePoint 2013 术语和术语集介绍

    托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...

  4. 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式

    作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...

  5. 架构-层-Model:Model

    ylbtech-架构-层-Model:Model 1.返回顶部 1. Model,意思是模特儿,模特儿是英文“model”的音译.模特一般来说要五官端正,身材良好,有气质,展示能力强,另外身高要具备一 ...

  6. 飞达资讯App总体介绍及关系架构图

    飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云 ...

  7. [原创]互联网金融App测试介绍

    [原创]互联网金融App测试介绍 前端时间非常忙,终于非常忙的时间过去了,抽时间总结下我现在所在公司理财软件App测试,也各位分享下,也欢迎大家提建议,谢谢! 先介绍下我所在公司的产品特点,公司所研发 ...

  8. asp.net MVC中的@model与Model

    asp.net MVC中的@model与Model https://blog.csdn.net/ydm19891101/article/details/44301201 在MVC的实际使用中,我们经常 ...

  9. MVC中Model和model的区别和用户

    MVC中Model和model的区别,它们应该怎么用呢? 使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类). MVC的第一个字母M是Model,承载着View层和 ...

随机推荐

  1. Java访问修饰符(转)

    类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员方法 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - - - static (静态的) - √ - √ - public ...

  2. storm 经常使用类

    弄 <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-core< ...

  3. Linux下安装mysql(1)(CentOS)

    标题是(1)也就是说这次是基础安装,这种方式安装,没有组的创建,权限管理,配置文件更改等,仅仅是最基本的安装,适合第一次在linux上安装mysql的新手 1.准备好安装包(Linux-Generic ...

  4. 收集 天创恒达高清采集卡TC-5A0N7

    版权声明:本文博客琅邪工作室原创文章,博客,未经同意不得转载.

  5. 从文件 I/O 看 Linux 的虚拟文件系统

    1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系 ...

  6. jquery 源码学习(三)

    jQuery源码分析-03构造jQuery对象-源码结构和核心函数,需要的朋友可以参考下.   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟 ...

  7. error: expected declaration or statement at end of input----solved

    error: expected declaration or statement at end of input 解决方法: 1.程序缺少一个括号相应地 2.而不添加头文件 版权声明:本文博主原创文章 ...

  8. Android--MVP设计模式实践

    MVP设计模式是android开发讨论的很火的一个话题,我对设计模式也有一些拙见,为了实践我的一些想法,我在我最新开发的产品中将我心目中的MVP设计模式进行了实践,最后得到了这样的架构. 特点:简单, ...

  9. wpf控件开发基础(5) -依赖属性实践

    原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...

  10. 人工模拟获取latch

    人工模拟获取latch 任意地dump一latches结构文件: SQL> oradebug dump latches 10 ORA-00074: no process has been spe ...