SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

上篇文章中,我们学习了如何创建网站栏。本文中我们使用声明XML创建网站栏,并添加到联系人内容类型。


联系人内容类型提供了在SharePoint中储存联系人的方法。它提供了不同的栏来储存联系人姓名、电话、传真、网页等。它并不提供分类这些联系人的方法。我们将拓展这个内容类型,这样我们可以分类我们的联系人为sales lead、customer或vendor。


Getting ready

你应该成功完成之前的练习。


How to do it

1. 管理员身份打开VS2010IDE。

2. 新建项目,选择.NET Framework框架。

3. 选择内容类型。

4. 命名ContactsContentType,确定。

5. 选择部署为沙盒解决方案,下一步。

6. 确保选择Contact内容类型作为基础内容类型,完成。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

7. 添加一个新的空白元素SiteColumns。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

8. 在SiteColumns元素下的Elements.xml中,添加xml创建新的网站栏。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

9. 我们将在内容类型中引用这个域。在ContentType1下的Elements.xml中,添加域引用。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

10. 按下F5运行项目。这将创建内容类型和网站栏。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

11. 导航到网站栏,你会看到新网站栏Contact Type在新组Chapter3 Columns下。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型


How it works

严格的讲,我们开发自定义内容类型时,必须从现有可用的内容类型进行拓展。之前讲过item(0x01)是我们在继承内容类型时走的最深的地方,不能从system内容类型(0x)继承。


ContentType1下的Elements.xml描述了内容类型的架构。它有属性定义姓名、组、描述和版本。ID属性是无任何格式的GUID。内容类型的ID总是带有父内容类型和两个0的前缀。因为我们基于Contact,前缀是0x010600.ID属性提供了内容类型的唯一标识。


Inherits属性指定了所有来自父内容类型的域用在子内容类型中。所以,我们仍有定义在contact内容类型的所有域,但我们也增加了选项栏选择联系人类型。


当feature被部署以后,SharePoint读取xml架构并创建域。我们创建了新网站栏,类型为选项,并提供可选的选项。所有这些信息在XML架构中提供。因为VS中没有特定模板创建网站栏,我们增加新空白元素,并提供架构创建栏。我们不必这样做。你可以在内容类型的Elements.xml中指定域定义。但是有个分开的Elements.xml是个好实践。后面我们将展示如何在内容类型的Elements.xml中包含域定义。


在网站栏架构中,你可以看到GUID的ID属性。工具-创建GUID。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

选择注册表格式,复制。这个ID属性在内容类型中引用域时用到。其他属性定义栏目。


There's more

按下列步骤使用创建的内容类型:

1. 创建联系人列表。

2. 从列表设置页,点击“高级设置”,“允许管理内容类型”选择是。

3. 点击内容类型部分下,现有网站内容类型的“添加”链接。SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

4. 这将添加我们的内容类型到列表。移除掉原来默认的内容类型。

5. 添加新联系人。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

Deployment of previous solution

之前的例子展示了网站栏必须先部署这样才能在内容类型中引用。我们需要添加第二个feature到项目,添加内容类型元素并删除第一个feature中的内容类型。创建feature依赖--feature2依靠feature1的部署。确保网站栏在内容类型部署前被部署。

添加feature依赖步骤:

1. 双击Feature2打开feature设计器。点击功能激活依赖项边的+。

2. 点击添加。

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

3. 选择Feature1,点击添加。

Inherits attribute in content type

上面我们知道,Inherits属性指定所有父内容类型的域在子中使用。如果我们想删除子中一个栏目(在父中可用).确保设置Inherits属性为false,使用RemoveFieldRef元素:

SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型

通过添加上面的XML到内容类型的Elements.xml中,我们将从内容类型中删除First Name Phonetic和Last Name Phonetic栏。

See also

1. 创建网站栏

2. 使用对象模型创建自定义内容类型


故障分析

在本机测试时出现错误,提示无效字段名
SP2010开发和VS2010专家"食谱"--第四章节—列表定义和内容类型(2)--拓展现有内容类型
原因是引用Field的FieldRef方法中参数Name属性是必需的。添加Name=“ContactType”,调试部署成功。