创建包括自定义 SharePoint 列表和内容类型的提供程序托管的加载项

使用 Visual Studio 的 Office 开发人员工具创建一个 SharePoint 加载项,将云托管的 Web 应用程序与 Sharepoint 托管的自定义列表模板、列表实例和自定义内容类型组合起来。 了解如何使用 REST/OData Web 服务与 SharePoint 加载项 Web 交互,以及如何在 SharePoint 加载项中实现 OAuth。

大多数经典 SharePoint 组件(如自定义内容类型、自定义列表定义和工作流)都可以包含在云托管的 SharePoint 外接程序中。 本文中的简单示例包含以下内容:

  • 一个加载项 Web,它带有:

    • 一些自定义网站栏

    • 一个使用自定义栏的自定义内容类型

    • 一个使用自定义内容类型的自定义列表模板

    • 基于自定义列表定义的一个列表实例

  • 一个从该列表实例中读取数据的 ASP.NET Web 应用程序

创建此 SharePoint 加载项的先决条件

  • Visual Studio

  • Visual Studio 包括 Microsoft Visual Studio 的 Office 开发人员工具,但此类工具有时也会在两次 Visual Studio 更新之间发布新版本。 为了确保工具为最新版本,请运行 Visual Studio 2013 的 Office 开发人员工具安装程序Visual Studio 2015 的 Office 开发人员工具安装程序

  • 安装了 SharePoint,用于测试和调试

    • 这可以位于与开发计算机相同的计算机上,也可以通过远程 SharePoint 安装进行开发。 如果您使用远程安装,则需要在目标安装上安装可再发行的客户端对象模型。 它在 Microsoft 下载中心作为一个可再发行包来提供。 搜索“SharePoint Server 2013 客户端组件 SDK”或“SharePoint Online 客户端组件 SDK”。

    • 必须从开发人员网站网站定义(可以在管理中心创建它)创建测试 SharePoint 网站。

    • 远程 Web 应用程序使用任一 JavaScript 和跨域库OAuth 与加载项 Web 进行通信。 如果使用 OAuth(如本文后面部分的示例所示),必须配置 SharePoint 安装才能使用 OAuth。

    注意

    有关如何设置符合你的需求的开发环境的指南,请参阅两种类型的 SharePoint 加载项:SharePoint 托管的加载项和提供程序托管的加载项

创建加载项需要了解的核心概念

在创建第一个加载项之前,应该对 SharePoint 加载项以及 Sharepoint 托管和提供程序托管的 SharePoint 加载项之间的差异有基本的了解。可以通过下表中的文章了解这些信息。

文章标题 说明
SharePoint 外接程序 了解 SharePoint 中新的外接程序模型,可以利用此模型来创建对最终用户来说是小型且易于使用的解决方案的外接程序。
SharePoint 外接程序体系结构和开发前景的重要方面 了解 SharePoint 外接程序和 SharePoint 外接程序的模型体系结构的各个方面,其中包括外接程序托管选项、用户界面 (UI) 选项、部署系统、安全系统和生命周期。
选择用于开发和托管 SharePoint 外接程序的模式 了解可以托管 SharePoint 加载项的各种方式。

开发 SharePoint 加载项

在本节的过程中,您将在开发计算机上使用 SharePoint 组件和一个远程 Web 应用程序创建一个 SharePoint 外接程序,其中包括一个外接程序 Web。

设置 Visual Studio 解决方案及其元素

  1. 在 Visual Studio 中,从“新建项目向导”的模板树中的“Office SharePoint | 加载项”节点(在“C#”或“Visual Basic”下)创建一个 SharePoint 加载项项目。 选择“提供程序托管”托管选项。 在本文后部分的示例中,使用 C# 语言和项目名称 LocalTheater

  2. 在向导中,选择“完成”

  3. 在清单设计器中打开 AppManifest.xml 文件。 Title 元素将项目名称作为其默认值。 将它替换为更友好的名称,因为这是用户在用户界面中看到的外接程序的名称。

  4. 指定加载项的 Name。 这是内部名称,只能包含 ASCII 字符且不能包含空格;例如,LocalTheater。

  5. 在 Web 应用程序项目中打开 Web.config 文件,并将元素 <customErrors mode="Off"/> 添加到 system.web 元素。

  6. 检查以确认在 Web 应用程序项目中有对下列程序集的引用。 如果 Visual Studio 版本未自动添加引用,请现在添加它们。

    • Microsoft.IdentityModel.dll。 此程序集与 Windows Identity Foundation (WIF) 一起安装到全局程序集缓存中。 由于这是 .NET Framework 3.5 程序集,默认情况下会在“添加引用”对话框的“框架”节点中将其筛选掉。 可以通过直接浏览到开发计算机的 C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5 目录添加对它的引用。

    • Microsoft.IdentityModel.Extensions.dll。 可以通过直接浏览到开发计算机的 C:\Program Files\Reference Assemblies\Microsoft\Microsoft Identity Extensions\1.0 文件夹添加对它的引用。

    • System.IdentityModel.dll。 此程序集是 .NET Framework 4 的一部分,它显示在“添加引用”对话框的“程序集”|“框架”节点上。

  7. 如果远程 Web 应用程序访问主机 Web 以及加载项 Web 中的信息,必须向 AppManifest.xml 文件添加 AppPermissionRequests 元素(具有一个或多个 AppPermissionRequest 子元素)。 (本文后续示例中的 Web 应用程序仅访问外接程序 Web。外接程序主体自动具有外接程序 Web 所需的所有权限,因此示例中的AppManifest.xml没有 AppPermissionRequests 元素。) 有关外接程序权限请求以及如何添加外接程序权限的详细信息,请参阅 SharePoint 中的外接程序权限

添加 SharePoint 组件

将 SharePoint 组件添加到加载项的方式与将其添加到经典服务器场解决方案完全相同。 然而,并非每一种 SharePoint 组件都可以包含在 SharePoint 加载项中。 这些组件的用途在 SharePoint 加载项中通过其他方式完成。

有关在 SharePoint 加载项中可以包含哪些类型的 SharePoint 组件以及如何将其包含在项目中的详细信息,请参阅 SharePoint 加载项中可以包含的 SharePoint 组件类型

为了适应后续示例,请使用下列过程,它们提供的示例说明了如何使用 Visual Studio 将自定义栏、内容类型、列表模板和列表实例添加到 SharePoint 加载项。

创建自定义栏类型

  1. 在“解决方案资源管理器”中,将 SharePoint“网站栏”项添加到名为 Actor 的 SharePoint 加载项项目。

  2. 在新网站列的 elements.xml 文件中,将“Field”元素编辑为包含下面示例中的属性和值,只不过不得更改 Visual Studio 为“ID”属性生成的 GUID 值。 别忘了大括号“{}”。

    <Field ID="{generated GUID}" 
        Name="Actor" 
        Title="Actor" 
        DisplayName="Actor/Actress" 
        Group="Theater and Movies" 
        Description="The person cast, perhaps tentatively, in the role" 
        Type="Text" 
    />
  1. 将另一个“网站栏”添加到名为 CastingStatus 的项目。

  2. 在新网站栏的 elements.xml 文件中,编辑 Field 元素,使其具有以下示例中显示的属性和值,只是不应从 Visual Studio 为其生成的值更改 ID 属性的 GUID。

  <Field ID="{generated GUID}" 
      Name="CastingStatus" 
      Title="CastingStatus"
      DisplayName="Casting Status" 
      Group="Theater and Movies" 
      Description="The current casting status of the role" 
      Type="Choice">
  </Field>
  1. 因为这是选择字段,您必须指定可能的选项、用户在进行选择时它们应在下拉列表中出现的顺序以及默认选项。 将以下子标记添加到 Field 元素。
  <CHOICES>
      <CHOICE>Not Started</CHOICE>
      <CHOICE>Audition Scheduled</CHOICE>
      <CHOICE>Auditioned</CHOICE>
      <CHOICE>Role Offered</CHOICE>
      <CHOICE>Committed to Role</CHOICE>
  </CHOICES>
  <MAPPINGS>
      <MAPPING Value="1">Not Started</MAPPING>
      <MAPPING Value="2">Audition Scheduled</MAPPING>
      <MAPPING Value="3">Auditioned</MAPPING>
      <MAPPING Value="4">Role Offered</MAPPING>
      <MAPPING Value="5">Committed to Role</MAPPING>
  </MAPPINGS>
<Default>Not Started</Default>

创建自定义内容类型

  1. 在“解决方案资源管理器”中,将 SharePoint“内容类型”项添加到名为 ActingRole 的 SharePoint 加载项项目。 如果向导提示选择基内容类型,请依次选择“项”和“完成”

  2. 如果内容类型设计器没有自动打开,请在“解决方案资源管理器”中选择“ActingRole”内容类型以打开它。

  3. 在设计器中打开“内容类型”选项卡,并按如下所示填写文本框:

    • 内容类型名称:ActingRole

    • 说明:Represents a role in a play or movie.

    • 组名称:Theater and Movies

  4. 验证选项卡上的复选框是否均处于选中状态。 默认情况下,“从父内容类型继承列”复选框可能处于选中状态。 请务必清除此复选框。

  5. 在设计器中,打开“栏”选项卡。

  6. 使用网格向内容类型添加两个网站栏。 它们将在下拉列表中按其显示名称列出:Actor/ActressCasting Status。 (如果未列出它们,则可能在添加自定义网站栏后未保存项目。选择 “保存所有) ”。

  7. 保存文件并关闭设计器。

  8. 下一步需要直接在内容类型的原始 XML 中执行操作,因此,在“解决方案资源管理器”中,选择“ActingRole”内容类型的 elements.xml 文件子项。

  9. 文件中已有针对添加的两栏的 FieldRef 元素。 添加两个内置 SharePoint 列的“FieldRef”元素,作为现有两个元素的同级元素。 下面是这两个元素的标记。 必须对 ID 属性使用与下面一样的 GUID,因为这两个内置字段类型的 ID 固定不变。 在自定义网站栏的两个“FieldRef”元素的正上方添加这些标记。

  <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />

请注意,我们将这些字段指定了自定义显示名称:Character,即表示戏剧或电影中的角色。

创建自定义列表模板和列表实例

  1. 将 SharePoint 列表项添加到名为 CharactersInShow 的 SharePoint 加载项项目。 在“SharePoint 自定义向导”的“选择列表设置”页上,保留默认“CharactersInShow”上的列表显示名称,选择“创建自定义列表的依据”选项,并在下拉列表中选择“默认值(空白)”。 选择“完成”

  2. 完成向导后,会创建一个“CharactersInShow”列表模板,它带有一个名为“CharactersInShowInstance”的子列表实例。 默认情况下,列表设计器可能已打开。 在后面的步骤中会使用它。

  3. 打开“CharactersInShow”列表模板的 elements.xml 子项(不是“CharactersInShowInstance”的 elements.xml 子项)。

  4. DisplayName 属性中添加空格使其更为友好:Characters In Show

  5. Description 属性设置为 The characters in a play or movie.

  6. 保留所有其他属性的默认值,再保存并关闭此文件。

  7. 如果列表设计器未打开,请在“解决方案资源管理器”中选择“CharactersInShow”节点。

  8. 在设计器中,打开“栏”选项卡,然后选择“内容类型”按钮。

  9. 在“内容类型设置”对话框中,添加“ActingRole”内容类型。

  10. 依次选择类型列表中的“ActingRole”内容类型和“设为默认值”按钮。

  11. 选择“项”内容类型,右键单击内容类型名称左侧显示的小箭头,然后选择“删除”

  12. 对“文件夹”内容类型重复执行上述步骤,让“ActingRole”成为唯一列出的内容类型。 选择“确定”关闭对话框。

  13. 现在“栏”列表中有三个栏。 选择“标题”,右键单击内容类型名称左侧显示的小箭头,然后选择“删除”。 现在应该仅列出两个栏,即“Actor/Actress”和“Casting Status”

  14. 打开设计器的“列表”选项卡。 此选项卡用于为列表实例(而不是列表模板)设置某些值。

  15. 将此选项卡上的值更改为以下内容:

  • 标题:Characters in Hamlet

  • 列表 URL:Lists/CharactersInHamlet

  • 说明:The characters in Hamlet and casting information.

将复选框保留为其默认状态,保存文件并关闭设计器。

  1. 列表实例可能仍在“解决方案资源管理器”中使用旧名称。 如果是这样,打开“CharactersInShowInstance”的快捷菜单,选择“重命名”,并将名称更改为 CharactersInHamlet

  2. 打开 schema.xml 文件。

  3. 文件中可能有两个 ContentType 元素,其中一个元素的 Name 属性值为 ActingRole,另一个为 ListFieldsContentType。 只有名为 ActingRole 的属性属于本项目,所以删除任何其他 ContentType 元素。

    注意

    ContentType 元素之间可能没有换行符,在这种情况下,最初可能只显示一个。 向右滚动并仔细检查其他元素。

  4. Fields 元素应具有两个 Field 元素 (如果它们之间没有换行符,则在一行上)。 其中一个应与 Actor 网站栏 elements.xml 中的 Field 元素完全相同,另一个应与 CastingStatus 网站栏 elements.xml 中的 Field 元素完全相同。 如果不完全一致,包括所有子元素(如 CHOICESMAPPINGS 元素),请从网站栏 elements.xml 文件中复制 Field 元素并将其粘贴到 schema.xml 文件中,以替换不一致的 Field 元素。

  5. 仍在 schema.xml 文件中,在 BaseViewID 值为“0”的 View 元素中,将现有的 ViewFields 元素替换为以下标记。 (将此 GUID 用于名为 LinkTitle.) 的 FieldRef

  <ViewFields>
    <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />
    <FieldRef Name="Actor" ID="{GUID from the site column elements.xml}" />
    <FieldRef Name="CastingStatus" ID="{GUID from the site column elements.xml}" />
  </ViewFields>
  1. 将这两个缺少的 ID 属性值替换为在各自网站列 elements.xml 文件中的 GUID。 别忘了大括号“{}”。

  2. 仍在 schema.xml 文件中,在 BaseViewID 值为“1”的 View 元素中,将现有 ViewFields 元素替换为以下标记。 (将此 GUID 用于名为 LinkTitle.) 的 FieldRef

  <ViewFields>
    <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  </ViewFields>
  1. 将 添加到上一视图的 和 CastingStatusActor两个 FieldRef 元素作为 FieldRefLinkTitle同级复制到此 ViewFields 元素。

  2. 保存并关闭 schema.xml 文件。

  3. 打开作为"CharactersInHamlet"的列表实例的子项的 elements.xml 文件。

  4. 通过添加以下标记作为 ListInstance 元素的子项,用一些初始数据填充列表。

    <Data>
      <Rows>
        <Row>
          <Field Name="Title">Hamlet</Field>
          <Field Name="Actor">Tom Higginbotham</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">Claudius</Field>
          <Field Name="Actor"></Field>
          <Field Name="CastingStatus">Not Started</Field>
        </Row>
        <Row>
          <Field Name="Title">Gertrude</Field>
          <Field Name="Actor">Satomi Hayakawa</Field>
          <Field Name="CastingStatus">Auditioned</Field>
        </Row>
        <Row>
          <Field Name="Title">Ophelia</Field>
          <Field Name="Actor">Cassi Hicks</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">The ghost</Field>
          <Field Name="Actor">Lertchai Treetawatchaiwong</Field>
          <Field Name="CastingStatus">Role Offered</Field>
        </Row>
      </Rows>
    </Data>
  1. 在“解决方案资源管理器”中,选择“Feature1”,打开功能设计器。 在设计器中,将“标题”设置为 Theater and Movie Data Components 并将“说明”设置为 Site columns, content types, and list instances for data about theater and movies.。 保存文件并关闭设计器。

  2. 如果“解决方案资源管理器”中的“Feature1”尚未重命名,请打开其快捷菜单,选择“重命名”并将其重命名为 TheaterAndMovieDataComponents

对远程 Web 应用程序项目进行编码

像开发任何其他 Web 应用程序一样,为您首选的平台堆栈开发 Web 应用程序。 对于 Microsoft 堆栈,可以使用 REST/OData Web 服务或 SharePoint 中的客户端对象模型之一。 对于非 Microsoft 堆栈,可以使用 SharePoint 中的 REST/OData 终结点对外接程序 Web 中的数据执行创建/读取/更新/删除 (CRUD) 操作。

注意

将对程序集的引用添加到 Visual Studio 中的 Web 应用程序项目中时,将程序集的 Copy Local 属性设置为 True,直到你知道该程序集已安装在 Web 服务器上,或能确保该程序集已在部署加载项前安装。 .NET Framework 安装在 Microsoft Azure Web 角色和 Azure 网站中。 不过,SharePoint 客户端程序集和各种 Microsoft 托管代码扩展和基础组件并未安装。 Visual Studio的 Office 开发人员工具自动添加对 SharePoint 加载项中常用的某些程序集的引用,并设置 Copy Local 属性。

对于后续示例,你将开发一个 ASP.NET Web 应用程序。 请执行下列步骤。

  1. 打开 Default.aspx 文件,将文件的 body 元素替换为以下标记。 标记会添加一个“获得演员表”按钮,当选择此按钮时,会读取加载项 Web 中的“哈姆雷特中的角色”列表并在 GridView 控件(仅当按下该按钮后,才会出现此控件)中显示其数据。
  <body >
    <form id="form1" runat="server">
      <div>
        <h2>Local Theater</h2>
      </div>
      <asp:Literal ID="Literal1" runat="server"><br /><br /></asp:Literal>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get the Cast"/>
      <asp:Literal ID="Literal2" runat="server"><br /><br /></asp:Literal>
      <asp:GridView ID="GridView1" runat="server" Caption="The Cast" ></asp:GridView>
    </form>
  </body>

  1. 打开 Default.aspx.cs 文件,并向其中添加以下 using 语句。
  using Microsoft.SharePoint.Client;
  using Microsoft.IdentityModel.S2S.Tokens;
  using System.Net;
  using System.IO;
  using System.Xml;
  using System.Data;
  using System.Xml.Linq;
  using System.Xml.XPath;
  using Microsoft.SharePoint.Samples;

其中最后一个语句引用在 TokenHelper.cs 文件中声明的命名空间。


3. 将以下字段添加到 **Default** 类。 '''csharp SharePointContextToken contextToken;string accessToken;Uri sharepointUrl;```
  1. Page_Load 方法替换为下列代码,这些代码使用TokenHelper 类从符合 OAuth 的安全令牌服务器获取令牌。 然后,访问令牌存储在按钮的 CommandArgument 属性中,供以后通过按钮的单击事件处理程序进行检索。
    protected void Page_Load(object sender, EventArgs e)
  {
      TokenHelper.TrustAllCertificates();
      string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);

      if (contextTokenString != null)
      {
          // Get context token
          contextToken = TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);

          // Get access token
          sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
          accessToken = TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority).AccessToken;
          
          // Pass the access token to the button event handler.
          Button1.CommandArgument = accessToken;
      }
  }

  1. 将以下事件处理程序添加到 Default 类。 处理程序首先检索存储在按钮 CommandArgument 属性中的访问令牌。
    protected void Button1_Click(object sender, EventArgs e)
  {
      // Retrieve the access token that the Page_Load method stored
      // in the button's command argument.
      string accessToken = ((Button)sender).CommandArgument;
  }

  1. 该处理程序需要重新获取关于回发的经过修改的加载项 Web URL,因此添加以下代码。
      if (IsPostBack)
    {
        sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
    }

  1. 添加以下行(它使用 SharePoint REST/OData 终结点之一)来获取列表数据。 在此示例中,代码读取部署到加载项 Web 的“哈姆雷特中的角色”列表。 通过此服务的 API,只需一行代码即可轻松选择列表并指定从列表返回三个字段。

请注意,在 OData URL 中,必须使用字段(栏)的内部名称而不是显示名称,以便代码使用 TitleActorCastingStatus 而不是 CharacterActor/ActressCasting Status。 有关 REST/OData Web 服务的详细信息,请参阅在 SharePoint REST 请求中使用 OData 查询操作

    // REST/OData URL section
    string oDataUrl = "/_api/Web/lists/getbytitle('Characters In Hamlet')/items?$select=Title,Actor,CastingStatus";

  1. 添加以下代码,它们使用 System.Net 命名空间的 HttpWebRequestHttpWebResponse 类来构建 HTTP 请求和响应对象。
  // HTTP Request and Response construction section
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + oDataUrl);
  request.Method = "GET";
  request.Accept = "application/atom+xml";
  request.ContentType = "application/atom+xml;type=entry";
  request.Headers.Add("Authorization", "Bearer " + accessToken);
  HttpWebResponse response = (HttpWebResponse)request.GetResponse();

  1. 添加以下代码以分析 ATOM 格式的响应 XML。 它使用System.Xml 的类 。Linq 命名空间,用于分析返回的数据,并构造 SharePoint 列表中的项 的列表<T> 。 (也可以使用 System.Xml 命名空间的类。)

请注意,在 SharePoint 返回的 XML 中,entry 元素的子元素保留有关列表项的元数据。 SharePoint 列表项的实际行数据在 properties 元素中向下嵌套两个层。 因此, 使用 Elements<T> 扩展方法两次来筛选出较高级别。

  // Response markup parsing section
  XDocument oDataXML = XDocument.Load(response.GetResponseStream(), LoadOptions.None);
  XNamespace atom = "http://www.w3.org/2005/Atom";
  XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
  XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 

  List<XElement> entries = oDataXML.Descendants(atom + "entry")
                          .Elements(atom + "content")
                          .Elements(m + "properties")
                          .ToList();

  1. 添加以下 LINQ 查询,以构造一个匿名类型的 IEnumerable<T> 集合,该集合仅具有所需的属性,而不需要其他属性。 请注意,尽管代码必须通过项的内部名称 Title 引用项的标题字段,仍可以将匿名类型中的属性名称(对其分配值)命名为 Character。 其结果之一是当集合绑定到一个网格控件时,页面上显示更适当的名称 Character
  var entryFieldValues = from entry in entries
  select new { Character=entry.Element(d + "Title").Value, 
               Actor=entry.Element(d + "Actor").Value, 
               CastingStatus=entry.Element(d + "CastingStatus").Value };

  1. 处理程序的最后使用以下代码将数据绑定到页面上的 GridView 控件。 网格中的列标题默认为匿名类型的属性名称:CharacterActorCastingStatus。 可以使用 GridView 控件的属性来控制列标题到名称和格式,因此可以使用 Actor/ActressCasting Status 匹配 SharePoint 中的列标题。 为简单起见,这里不介绍这些技术。 (也可以使用 DataGrid 控件。)
    GridView1.DataSource = entryFieldValues;
    GridView1.DataBind();

  1. 保存所有文件。

测试和调试 SharePoint 加载项

  1. 若要测试 SharePoint 加载项及其远程 Web 应用程序,请在 Visual Studio 中选择 F5 键。 Web 应用程序将部署到 IIS Express(位于 localhost 上)。 SharePoint 加载项安装到目标 SharePoint 网站。 (在后续示例中,远程加载项尝试与主机 Web 交互且加载项主体自动拥有对加载项 Web 的权限,因此系统提示授予权限。目标 SharePoint 网站的“网站内容”页面打开后,会看到其中列出了新加载项。

  2. 选择 SharePoint 加载项,远程 Web 应用程序将打开并转到你在 AppManifest.xml 文件的 StartPage 元素中指定的页面。 根据需要使用 Web 应用程序来验证它能否正常工作。 在本主题的后续示例中,只需选择该按钮。 这样做会创建一个网格并用加载项 Web 的“哈姆雷特中的角色”列表填充它。

发布 SharePoint 加载项

若要发布 SharePoint 加载项,请将加载项包上传到公司加载项目录或 Office 加载项应用商店。 有关详细信息,请参阅发布到 Office 应用商店或组织的加载项目录发布 SharePoint 加载项

故障排除

如果外接程序无法正常工作,您应该考虑 CAML 标记中是否有错误阻止了 SharePoint 组件的部署。 使用类似于以下内容的过程(它基于后续示例)以验证部署。

测试加载项 Web 的设置

  1. 打开主机 Web 的“网站设置”页。 在“网站集管理”部分,选择“网站层次结构”链接。

  2. 在“网站层次结构”页上,您会看到按其 URL 列出的外接程序。 不要启动它。 相反,请复制该 URL并在其余步骤中使用该 URL。

  3. 导航到 URL_of_app_web/_layouts/15/ManageFeatures.aspx,并在打开的“网站功能”页上验证“Theater and Movie Data Components”是否在 SharePoint 加载项中按字母顺序排列的功能列表上,以及其状态是否为“活动”

  4. 导航到 URL_of_app_web/_layouts/15/mngfield.aspx,并在打开的“网站栏”页上验证“Theater and Movies”组是否在网站栏的列表中,以及它是否包含新自定义网站栏“Actor/Actress”和“Casting Status”

  5. 导航到 URL_of_app_web/_layouts/15/mngctype.aspx,并在打开的“网站内容类型”页上验证“Theater and Movies”组是否在内容类型的列表中,以及它是否包含新的“ActingRole”内容类型。

  6. 选择指向 ActingRole 内容类型的链接。 在打开的“网站内容类型”页上,验证内容类型是否有两个新的网站栏类型“Actor/Actress”和“Casting Status”,并验证是否已对项标题字段分配自定义显示名称:Character

  7. 导航到 URL_of_app_web/_layouts/15/mcontent.aspx,并在打开的“网站库和列表”页上验证是否存在“自定义‘哈姆雷特中的角色’”链接。

  8. 选择“自定义‘哈姆雷特中的角色’”链接,并在列表设置页上验证是否只有列表的内容类型是自定义“ActingRole”内容类型,并且是否在“栏”部分列出了两个新网站栏“Actor/Actress”和“Casting Status”。 (“标题”栏可能显示其内部名称 Title 而不是对其分配的显示名称 Character。)

注意

如果此页上没有“内容类型”部分,必须启用管理内容类型。 单击“高级设置”链接,在“高级设置”页上,启用内容类型的管理,然后选择“确定”。 将返回到上一页,那里现在有“内容类型”部分的列表。

  1. 页面顶部附近是列表的“Web 地址”。 将其复制并粘贴到浏览器中的地址栏,然后导航到该列表。 验证列表是否包含已创建的示例项。 (“标题”栏可能显示其内部名称 Title 而不是对其分配的显示名称 Character。)

另请参阅