SharePoint 加载项有下列两种基本类型:SharePoint 托管和提供商托管。 为了能够做出最明智的决策,以选择最适合方案开发的加载项类型,请先了解这两种类型 SharePoint 加载项的共同点。

设备应用(如移动应用)并不算是真正的“SharePoint 加载项”,即使应用访问 SharePoint,也不例外。 对于从 SharePoint 外部启动的 Web 应用,也是如此。 若要开发此类应用,请参阅 从移动和原生设备应用访问 SharePoint

  • SharePoint 加载项为独立式功能 ,可扩展 SharePoint 网站功能,从而解决明确定义的业务问题。
  • 加载项不包含在 SharePoint 服务器上运行的自定义代码 。 相反,所有自定义逻辑都可以“上移”到云中,也可以“下移”到客户端计算机中,亦可以“迁移”到 SharePoint 场或 SharePoint Online 订阅外的本地服务器。 不在 SharePoint 服务器上运行自定义代码可以向 SharePoint 管理员保证,加载项既不会损坏服务器,也不会降低 SharePoint Online 网站的性能。
  • SharePoint 外接程序中的业务逻辑可以通过 SharePoint 中包含的某些客户端 API 来访问 SharePoint 数据 。 您的外接程序使用哪一个 API 取决于您做出的其他一些设计决策。
  • 几乎所有主要类型的 SharePoint 组件都可作为 SharePoint 加载项 的一部分,包括页面、列表、工作流、自定义内容类型、列表模板、Web 部件等。
  • 其中安装了 SharePoint 加载项且用户可从中启动加载项的 SharePoint 网站称为“主机 Web”。 不过,SharePoint 组件通常位于主机 Web 的特殊子 Web(称为“加载项 Web”)中。
  • SharePoint 加载项可以通过下列多种方式安装到 SharePoint 网站
    • 沉浸式完整页面 SharePoint 应用体验 作为沉浸式整页体验 ,可以具有 SharePoint 页面的外观。
    • SharePoint 应用的应用程序部件体验 作为网页的一部分,使用一种称为外接程序部件的特殊控件 来显示包含外接程序的 iframe 元素。
    • SharePoint 应用的自定义操作体验 作为 UI 命令,用于扩展 列表、文档等的功能区和菜单。
    • 用户安装的所有 SharePoint 加载项在 SharePoint 网站的“网站内容”页上都有对应的磁贴。 单击磁贴即可运行加载项。
    • SharePoint 加载项是使用 加载项清单 进行配置。 加载项清单是一个 XML 文件,其中声明了加载项的基本属性、运行位置以及 SharePoint 应在加载项启动时执行的操作。 此清单还可指定加载项支持的语言、加载项依赖的 SharePoint 服务和功能,以及加载项需要获取对主机 Web 的哪些权限等。 (SharePoint 加载项可完全控制自己的加载项 Web。)
    • SharePoint 加载项是通过加载项包进行分发 ,其中始终至少包含加载项清单。 (如果没有任何 SharePoint 组件,加载项清单可能就是加载项包中的唯一内容。)如果加载项的加载项 Web 中有 SharePoint 组件,这些组件会以一组 XML 文件的形式包含在此包中。 此包中没有在 SharePoint 外部托管的远程组件(如远程 Web 应用或数据库),这些组件与加载项包分开部署。 (不过,加载项清单确实会指定远程组件的 URL。)
    • 加载项包也可以包含 Office 加载项。 如果 SharePoint 加载项已安装,Office 加载项便会添加到 SharePoint 中的 Office 加载项目录。 用户可以通过目录将 Office 加载项安装到 Office 应用(如 Word 或 Excel)中。
    • 查看 Office 应用商店 中的一些 SharePoint 加载项 ,了解可以开发的内容。 或者打开 SharePoint 网站并安装一些免费的 SharePoint 外接程序。只需导航到 “网站内容”|添加加载项|SharePoint Store

      对经验丰富的 SharePoint 开发人员的几点提示

      我们已经停用包含自定义服务器端代码的 沙盒解决方案。 仍然支持"无代码"的 沙盒解决方案 或仅包含 JavaScript 的 沙盒解决方案。

      SharePoint 加载项不使用服务器端 SharePoint 对象模型。 SharePoint 对客户端对象模型进行了大幅扩充。 虽然 SharePoint 服务器对象模型中的一些 API 不适用于客户端对象模型,但这些 API 几乎完全都是与安全相关的管理类。 可应对这些情况的自定义 SharePoint 逻辑更适用于 Windows PowerShell 脚本或经典 SharePoint 场解决方案。 若要了解如何选择 SharePoint 加载项、经典 SharePoint 场解决方案和沙盒解决方案,请参阅 SharePoint 加载项与 SharePoint 解决方案对比

      加载项包的两种分发或销售方法

      加载项包可通过下列两种方式进行分发:

    • 分发到组织加载项目录 :这是 SharePoint Online 订阅或本地场中的专用 SharePoint 网站集。 这种方法适用于专为特定组织定制的加载项。
    • 分发到 Office 应用商店 : 此应用商店负责市场营销环节(从发现到购买再到更新)。 Microsoft 提供了“卖家面板” ,有助于通过 Office 应用商店销售加载项。
    • 在通过任一方法部署完外接程序后,就可在 SharePoint 网站的"添加外接程序"页面上提供以供安装。 如果外接程序需要访问主机 Web 或其父订阅的权限,SharePoint 将提示要安装该外接程序的用户授予这些权限。

      当您需要更新加载项以修复缺陷或添加功能时,可在加载项清单中进行更改并提供加载项的版本号。 然后将加载项包重新部署到商店或加载项目录中。 用户会在 24 小时内在 SharePoint UI 中收到通知,提示有可用的更新。 只要单击一次即可安装此更新。

      两种类型的 SharePoint 外接程序:SharePoint 托管和提供程序托管

      SharePoint 托管的 SharePoint 外接程序

      SharePoint 承载的加载项几乎完全由加载项 Web 中的 SharePoint 组件组成。 这些组件有时被称为占据 SharePoint 的核心地位。

      用户可以转到已安装加载项的 SharePoint 网站的“网站内容” 页,通过其上的磁贴来运行 SharePoint 托管加载项,这一点与所有 SharePoint 加载项一样。 它还可以根据需要在主机 Web 中添加另外两种 UI 组件:加载项部件和自定义操作(即自定义功能区按钮或菜单项)。 除此之外,SharePoint 托管加载项中的其他所有内容都部署到加载项 Web。 这些组件使用 XML 文件以声明方式进行定义,可以包含下列部分等:

    • 自定义页面
    • 模块(文件集)
    • 列表和库实例
    • 自定义列表表单和视图
    • 自定义内容类型
    • Web 模板
    • 内置列(不是自定义列)
    • 内置 Web 部件(不是自定义 Web 部件)
    • JavaScript 文件
    • 加载项 Web 的自定义按钮和菜单项
    • SharePoint 托管加载项中的所有业务逻辑都使用 JavaScript,无论是直接在自定义页面中,还是在通过自定义页面引用的 JavaScript 文件中。 使用提供的 JavaScript 版 SharePoint 对象模型 (JSOM),加载项可以对 SharePoint 数据轻松执行 CRUD(创建、读取、更新和删除)操作。

      SharePoint 托管加载项中的自定义页面通常是 ASP.NET 页面 (ASPX),可以声明方式引用 ASP.NET 和现成 SharePoint 控件,而没有任何代码隐藏。 不过,可以使用客户端呈现选项和自定义 JavaScript 来自定义 SharePoint 控件。

      SharePoint 托管加载项中的 JavaScript 可以访问加载项 Web 外的数据和资源,具体是使用下列两种可安全处理浏览器的同源策略的技术之一:特殊 JavaScript 跨域库或特定 JavaScript WebProxy 类。 使用这些技术,SharePoint 托管加载项可以处理主机 Web 、父订阅或 Internet 上其他任何位置中的数据。

      提供商托管 SharePoint 加载项

      提供商托管加载项可以包含 SharePoint 托管加载项中的所有 SharePoint 组件。 不过,提供商托管加载项与 SharePoint 托管加载项有区别,因为前者至少包含一个在 SharePoint 场或 SharePoint Online 订阅外部托管的远程组件(如 Web 应用、服务或数据库)。 这可以是与 SharePoint 场或云服务位于同一企业网络中的服务器。 外部组件可以托管在任何 Web 托管堆栈上,其中包括 Linux、Apache、MySQL 和 PHP (LAMP) 堆栈。

      “提供商”是指拥有服务器或云帐户的任何人。 它可以是拥有要安装加载项的 SharePoint 场或 SharePoint Online 租户的相同公司或组织。 不过,加载项的开发人员也可以成为提供商。 通常,如果加载项是为一个组织而创建,此组织就负责托管。 不过,如果加载项是为多个组织而创建,更可能是由开发人员托管远程组件。 如果 SharePoint 加载项是通过 Office 应用商店进行市场营销,必须采用开发人员托管方式,因为开发人员没有加载项购买者的任何联系信息。 在这种情况下,加载项的各种实例都知道远程组件的 URI,因为加载项清单已对此进行指定。

      可以完全灵活地对远程组件使用托管框架。 无需使用 Microsoft 堆栈。 可以使用任何 Web 托管框架,包括 LAMP(Linux、Apache 服务器、MySQL、PHP)、MEAN(MongoDB、ExpressJS、AngularJS、Nodejs)、Java、Python 等。还可以使用非 Microsoft 开发工具。 此外,远程组件还可以托管在非 Microsoft 云服务中。

      使用特殊的部件版式控制, 可以为加载项中的远程页面指定 SharePoint 页面外观

      远程数据可以是 Blob、缓存、消息队列、内容交付网络 (CDN) 和数据库 等。 数据库可以是任何类型,包括面向关系和对象的类型。 可通过多种方式访问远程数据。 例如,您可以使用 Business Connectivity Services (BCS) 在 SharePoint 列表中呈现数据。 另一种选择是,在远程 Web 应用程序的页面上的网格中公开数据。

      SharePoint 外接程序 使用 SharePoint API 连接 SharePoint 功能(搜索、工作流、社交网络、分类、用户配置文件和 BCS 等)并与之进行集成。 这样用户就可以阅读文档、进行搜索、与人员联系、执行 CRUD 操作等。 提供多个 API 集:

    • 如果远程组件是使用 .NET 进行实现,可以使用托管代码 SharePoint 客户端对象模型 (CSOM) 库。
    • 对于不基于 .NET 的远程组件,可以使用一组 REST/OData API 访问 SharePoint 数据。 如果更希望使用 OData 接口,也可以通过 .NET 客户端使用它们。
    • 虽然前面提到 JSOM 库 不能用于远程页面,但提供商托管加载项的加载项 Web 中可以包含自定义 SharePoint 页面,这些页面中的 JavaScript 能够使用 JSOM 库。
    • 正如用户和组一样,能够访问 SharePoint 的提供程序托管的外接程序也是安全主体 。 和用户一样,外接程序主体也必须经过身份验证和授权。 外接程序需要具有对主机 Web 中的 SharePoint 数据执行操作的权限。 在大多数方案中,用户通过 SharePoint 外接程序使用 SharePoint 的有效权限是用户权限与外接程序权限的交集,虽然在某些方案中用户可以使用某个外接程序执行原本并不具备执行权限的操作。

      提供商托管加载项可以连接到任何内部或公共 Web 服务 。与 SharePoint 托管加载项不同,提供商托管加载项可以 处理 SharePoint 列表和列表项事件 ,如向文档库添加项。

      选择 SharePoint 开发路径

      准备好开始了吗?

    • 如果您是经验丰富的 SharePoint 开发人员,我们建议您从 SharePoint 承载的加载项开始着手。 它们与您过去构建的 SharePoint 扩展类型最为相似。

      开始创建 SharePoint 托管的 SharePoint 外接程序

    • 如果你是经验丰富的 ASP.NET Web 应用程序开发人员,我们建议你从 SharePoint 托管的外接程序开始着手。 它们是围绕 Web 应用程序生成的。

      开始创建提供程序托管的 SharePoint 外接程序

    • 如果你想要在非 Microsoft 堆栈上开发提供程序托管的外接程序,下面介绍了入门方法:

    • 安装适用于堆栈的工具(如果尚无这些工具的话)。
    • 创建 Office 365 开发人员帐户,用于测试和调试目的。 有关详细信息,请转到在 Office 365 上为 SharePoint 外接程序设置开发环境 ,或者如果已有Office 365订阅,只需 在其上创建开发人员网站 即可。
    • 加载项将使用 SharePoint 的 REST/OData API 对 SharePoint 数据执行 CRUD 操作:
  •