这是关于开发 SharePoint 托管的 SharePoint 外接程序的基础知识系列文章中的第 4 篇文章。你应该首先熟悉SharePoint 外接程序以及本系列中之前的文章,可在开始创建 SharePoint 托管的 SharePoint 外接程序 | 后续步骤中找到相关内容。
注意
如果已完成有关 SharePoint 托管加载项的本系列文章之一,便已生成 Visual Studio 解决方案,可以在继续阅读本主题的过程中使用。 也可以从 SharePoint_SP-hosted_Add-Ins_Tutorials 下载存储库,再打开 BeforeContentType.sln 文件。
本文将介绍如何向“员工入职培训”SharePoint 加载项添加自定义内容类型。
创建自定义内容类型
在“解决方案资源管理器”中,右键单击项目,再依次选择“添加”>“新文件夹”。 将文件夹命名为“内容类型”。
右键单击新文件夹,再依次选择“添加”>“新项”。 此时,“添加新项”对话框打开,并展开“Office/SharePoint”节点。
选择“内容类型”,将它命名为“NewEmployee”,再选择“添加”。 如果向导提示选择基内容类型,请依次选择“项”和“完成”。
如果内容类型设计器没有自动打开,请选择“解决方案资源管理器”中的“NewEmployee”内容类型,从而打开它。
在设计器中,打开“内容类型”选项卡,并按如下所示填写文本框:
- 内容类型名称:NewEmployee
- 说明:代表新员工
- 组名称:员工入职培训
验证选项卡上的复选框是否均处于未选中状态。 默认情况下,“从父内容类型继承列”复选框可能处于选中状态。 请务必清除此复选框。 此时,选项卡应如下所示:
图 1. “内容类型”选项卡
在设计器中,打开“列”选项卡。
在网格中,选择“单击此处添加列”,打开列的下拉列表,再添加“部门”列。 此列按显示名称“部门”在下拉列表中列出。 对“入职培训阶段”列执行相同的操作。 (如果未列出它们,则可能尚未开始使用正确的 Visual Studio 解决方案。从 BeforeContentType.sln.) 开始完成后,网格应如下所示:
图 2. “列”选项卡
保存文件并关闭设计器。
修改 elements.xml 文件
下一步需要直接处理内容类型的原始 XML。因此,在“解决方案资源管理器”中,选择“NewEmployee”内容类型的 elements.xml 文件子项。
文件中已有所添加两列的“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" />
保存并关闭此文件。
修改内容类型设置
展开“解决方案资源管理器”中的“列表”节点,再选择“新员工入职培训”,打开列表类型设计器。
在设计器中,打开“列”选项卡,再选择“内容类型”按钮。
在“内容类型设置”对话框中,添加“NewEmployee”内容类型。
依次选择类型列表中的“NewEmployee”内容类型和“设为默认值”按钮。
选择“项”内容类型,右键单击内容类型名称左侧的小箭头,再选择“删除”。
对“文件夹”内容类型重复执行上述步骤,让“NewEmployee”成为唯一列出的内容类型。 此时,对话框应如下所示:
图 3. “内容类型设置”对话框
选择“确定”关闭对话框,再保存并关闭此文件。
修改 schema.xml 文件和 element.xml 文件
打开 schema.xml 文件。
查找“Field”元素。 应有下列三个“Field”元素:“Title”、“Division”和“OrientationStage”。 (这些元素可能位于此生成的文件中的单个行上。如果是,请用换行符分隔它们。)
让文件一直处于打开状态,在“解决方案资源管理器”中,展开“网站列”文件夹和“部门”节点,再打开“部门”的 elements.xml 文件。 schema.xml 中的“Field”元素“Division”应与 elements.xml 中的“Field”元素“Division”完全一致。 如果不完全一致,请从“网站列”的 elements.xml 文件中将“Field”元素复制并粘贴到 schema.xml 文件中,以替换不一致的“Field”元素。 关闭 element.xml 文件。
打开“入职培训阶段”的 elements.xml 文件。 在这里,OrientationStage 的两个文件中的 Field 元素必须完全匹配,包括所有子元素,如 CHOICES 和 MAPPINGS 元素。 如果不完全一致,请从 elements.xml 文件中将“Field”复制并粘贴到 schema.xml 文件中,以替换不一致的“Field”元素。 关闭 element.xml 文件。
仍不要关闭 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}" />
将两个占位符“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>
仍不要关闭 schema.xml 文件,找到“BaseViewID”值为“0”的“View”元素。 在其中找到“ViewFields”元素。
将视图“1”中的整个“ViewFields”部分复制到视图“0”中,以覆盖其中的“ViewFields”部分。 此时,这两个视图的“ViewFields”部分应完全相同。
保存并关闭 schema.xml 文件。
在“列表”文件夹中,展开“新员工入职培训”节点及其子列表实例“西雅图新员工”。 应该能够清楚地看到并区分模板的 elements.xml 和实例的 elements.xml。 打开实例的 elements.xml。
向第一个“Row”元素添加两个“Field”元素,让“Row”元素如下所示:
<Row> <Field Name="Title">Tom Higginbotham</Field> <Field Name="Division">Manufacturing</Field> <Field Name="OrientationStage">Tour of building</Field> </Row>
保存并关闭此文件。
运行并测试外接程序
使用 F5 键部署并运行外接程序。 Visual Studio 在测试 SharePoint 网站上临时安装并立即运行此加载项。
在加载项的默认页面打开后,选择“西雅图新员工”链接,打开自定义列表实例。
此时,列表页打开,并显示“部门”和“入职培训阶段”列。 用户无需手动添加,因为它们属于列表内容类型。 最上面的项包含已添加的数据。
图 4. 西雅图新员工列表
尝试向列表添加新项,并编辑现有项。
若要结束调试会话,请关闭浏览器窗口或停止在 Visual Studio 中进行调试。 每次按 F5,Visual Studio 都会撤回旧版加载项并安装最新版本。
将在其他文章中使用此加载项和 Visual Studio 解决方案,因此最好在使用一段时间后,再最后撤回一次加载项。 在“解决方案资源管理器”中,右键单击此项目,再选择“撤回”。
后续步骤
本系列的下一篇文章将介绍如何向 SharePoint 托管 SharePoint 加载项中的页面添加 Web 部件。