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内容类型作为基础内容类型,完成。

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


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


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


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


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


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。


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


There's more

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

1. 创建联系人列表。

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

3. 点击内容类型部分下,现有网站内容类型的“添加”链接。

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

5. 添加新联系人。


Deployment of previous solution

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

添加feature依赖步骤:

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

2. 点击添加。


3. 选择Feature1,点击添加。

Inherits attribute in content type

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


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

See also

1. 创建网站栏

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


故障分析

在本机测试时出现错误,提示无效字段名

原因是引用Field的FieldRef方法中参数Name属性是必需的。添加Name=“ContactType”,调试部署成功。
原文地址:https://www.cnblogs.com/crazygolf/p/3856623.html