向 SharePoint 托管的 SharePoint 加载项添加自定义内容类型

这是关于开发 SharePoint 托管的 SharePoint 外接程序的基础知识系列文章中的第 4 篇文章。你应该首先熟悉SharePoint 外接程序以及本系列中之前的文章,可在开始创建 SharePoint 托管的 SharePoint 外接程序 | 后续步骤中找到相关内容。

注意

如果已完成有关 SharePoint 托管加载项的本系列文章之一,便已生成 Visual Studio 解决方案,可以在继续阅读本主题的过程中使用。 也可以从 SharePoint_SP-hosted_Add-Ins_Tutorials 下载存储库,再打开 BeforeContentType.sln 文件。

本文将介绍如何向“员工入职培训”SharePoint 加载项添加自定义内容类型。

创建自定义内容类型

  1. 在“解决方案资源管理器”中,右键单击项目,再依次选择“添加”>“新文件夹”。 将文件夹命名为“内容类型”

  2. 右键单击新文件夹,再依次选择“添加”>“新项”。 此时,“添加新项”对话框打开,并展开“Office/SharePoint”节点。

  3. 选择“内容类型”,将它命名为“NewEmployee”,再选择“添加”。 如果向导提示选择基内容类型,请依次选择“项”和“完成”

  4. 如果内容类型设计器没有自动打开,请选择“解决方案资源管理器”中的“NewEmployee”内容类型,从而打开它。

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

    • 内容类型名称:NewEmployee
    • 说明:代表新员工
    • 组名称:员工入职培训
  6. 验证选项卡上的复选框是否均处于选中状态。 默认情况下,“从父内容类型继承列”复选框可能处于选中状态。 请务必清除此复选框。 此时,选项卡应如下所示:

    图 1. “内容类型”选项卡

    内容类型设计器,其中类型名称为“NewEmployee”、说明为“代表新员工”、组为“员工入职培训”。

  7. 在设计器中,打开“列”选项卡

  8. 在网格中,选择“单击此处添加列”,打开列的下拉列表,再添加“部门”列。 此列按显示名称“部门”在下拉列表中列出。 对“入职培训阶段”列执行相同的操作。 (如果未列出它们,则可能尚未开始使用正确的 Visual Studio 解决方案。从 BeforeContentType.sln.) 开始完成后,网格应如下所示:

    图 2. “列”选项卡

    内容类型设计器的“列”选项卡,网格中列出了“员工”、“部门”和“入职培训阶段”。

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

修改 elements.xml 文件

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

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

    <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Employee" />
    <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Employee" />
    
  3. 保存并关闭此文件。

修改内容类型设置

  1. 展开“解决方案资源管理器”中的“列表”节点,再选择“新员工入职培训”,打开列表类型设计器。

  2. 在设计器中,打开“列”选项卡,再选择“内容类型”按钮。

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

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

  5. 选择“项”内容类型,右键单击内容类型名称左侧的小箭头,再选择“删除”

  6. 对“文件夹”内容类型重复执行上述步骤,让“NewEmployee”成为唯一列出的内容类型。 此时,对话框应如下所示:

    图 3. “内容类型设置”对话框

    只列出“NewEmployee”这一个内容类型的“内容类型设置”对话框。

  7. 选择“确定”关闭对话框,再保存并关闭此文件。

修改 schema.xml 文件和 element.xml 文件

  1. 打开 schema.xml 文件。

  2. 查找“Field”元素。 应有下列三个“Field”元素:“Title”、“Division”和“OrientationStage”。 (这些元素可能位于此生成的文件中的单个行上。如果是,请用换行符分隔它们。)

  3. 让文件一直处于打开状态,在“解决方案资源管理器”中,展开“网站列”文件夹和“部门”节点,再打开“部门”的 elements.xml 文件。 schema.xml 中的“Field”元素“Division”应与 elements.xml 中的“Field”元素“Division”完全一致。 如果不完全一致,请从“网站列”的 elements.xml 文件中将“Field”元素复制并粘贴到 schema.xml 文件中,以替换不一致的“Field”元素。 关闭 element.xml 文件。

  4. 打开“入职培训阶段”的 elements.xml 文件。 在这里,OrientationStage 的两个文件中的 Field 元素必须完全匹配,包括所有子元素,如 CHOICESMAPPINGS 元素。 如果不完全一致,请从 elements.xml 文件中将“Field”复制并粘贴到 schema.xml 文件中,以替换不一致的“Field”元素。 关闭 element.xml 文件。

  5. 仍不要关闭 schema.xml 文件,在“BaseViewID”值为“1”的“View”元素中,找到子元素“ViewFields”,再添加以下两个“FieldRef”元素作为它的子元素。 这两个元素可能已存在,但缺少“ID”属性。 如果是这样,请添加 ID 属性。

    <FieldRef Name="Division" ID="{GUID from the Field element}" />
    <FieldRef Name="OrientationStage" ID="{GUID from the Field element}" />
    
  6. 将两个占位符“ID”属性值替换为对应“Field”元素中的 GUID,这些“Field”元素位于 schema.xml 文件中早些时候包含的“NewEmployee”内容类型的“ContentType”元素中。 不要忘记帧大括号“{}”。 值为“1”的“View”的子元素“ViewFields”应如下所示(GUID 可能会有所不同):

    <ViewFields>
      <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Employee" />
      <FieldRef Name="Division" ID="{509d2d67-9a96-4596-9b3b-58449cdcc6ff}" />
      <FieldRef Name="OrientationStage" ID="{38a3b54c-acf3-4ddf-b748-55c7c28d4cc2}" />
    </ViewFields>
    
  7. 仍不要关闭 schema.xml 文件,找到“BaseViewID”值为“0”的“View”元素。 在其中找到“ViewFields”元素。

  8. 将视图“1”中的整个“ViewFields”部分复制到视图“0”中,以覆盖其中的“ViewFields”部分。 此时,这两个视图的“ViewFields”部分应完全相同。

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

  10. 在“列表”文件夹中,展开“新员工入职培训”节点及其子列表实例“西雅图新员工”。 应该能够清楚地看到并区分模板的 elements.xml 和实例的 elements.xml。 打开实例的 elements.xml。

  11. 向第一个“Row”元素添加两个“Field”元素,让“Row”元素如下所示:

    <Row>
      <Field Name="Title">Tom Higginbotham</Field>
      <Field Name="Division">Manufacturing</Field>
      <Field Name="OrientationStage">Tour of building</Field>
    </Row>
    
  12. 保存并关闭此文件。

运行并测试外接程序

  1. 使用 F5 键部署并运行外接程序。 Visual Studio 在测试 SharePoint 网站上临时安装并立即运行此加载项。

  2. 在加载项的默认页面打开后,选择“西雅图新员工”链接,打开自定义列表实例。

  3. 此时,列表页打开,并显示“部门”和“入职培训阶段”列。 用户无需手动添加,因为它们属于列表内容类型。 最上面的项包含已添加的数据。

    图 4. 西雅图新员工列表

    显示“部门”和“入职培训阶段”列的“西雅图新员工”列表。

  4. 尝试向列表添加新项,并编辑现有项。

  5. 若要结束调试会话,请关闭浏览器窗口或停止在 Visual Studio 中进行调试。 每次按 F5,Visual Studio 都会撤回旧版加载项并安装最新版本。

  6. 将在其他文章中使用此加载项和 Visual Studio 解决方案,因此最好在使用一段时间后,再最后撤回一次加载项。 在“解决方案资源管理器”中,右键单击此项目,再选择“撤回”

后续步骤

本系列的下一篇文章将介绍如何向 SharePoint 托管 SharePoint 加载项中的页面添加 Web 部件