更新子内容类型
上次修改时间: 2010年12月1日
适用范围: SharePoint Foundation 2010
本文内容
通过用户界面更新子内容类型
通过对象模型更新子内容类型
更新子内容类型时的注意事项
每个内容类型包含一个对其基于的网站内容类型的引用。这将使 Microsoft SharePoint Foundation 2010 能够将对父内容类型所做的更改传播或向下推送 到其子网站和列表内容类型。
在对网站内容类型进行更改时,可以通过用户界面或对象模型将这些更改向下推送到其所有子网站。当向下推送操作将所做的更改复制到基于此网站内容类型的网站或列表内容类型时,不会覆盖整个内容类型。但是,所覆盖的内容的范围是不同的,具体取决于是通过用户界面还是对象模型来执行更改和向下推送操作。
通过用户界面更新子内容类型
在通过用户界面编辑网站内容类型并在内容类型设置页上进行更改时,该页上包含的所有设置在向下推送操作过程中将被覆盖。因此,可以向下推送的更改的精度由在每个页上分组的设置定义。每当在内容类型设置页进行任何更改时,此页上的所有设置在向下推送操作过程中将被覆盖。
以下是每个内容类型设置页包含的设置的摘要:
高级设置 此页包含以下设置:
文档模板 URL
如果选择网站上的现有模板或上载模板文件,则为实际的文档模板文件
只读属性
新的列设置 此页对向网站内容类型添加新列进行管理。
列设置 此页包含以下设置:
必需
隐藏
从网站内容类型中移除列
通过对象模型更新子内容类型
通过使用对象模型,可以在向下推送操作中提供更高的精度。当通过对象模型对网站内容类型进行更改时,实际上是代码对网站内容类型在内存中的表示形式进行这些更改。只有在调用 Update 方法时,SharePoint Foundation 才会将这些更改提交回网站数据库。
示例:向内容类型添加栏
下面的代码示例创建一个网站栏,将该栏添加到属于自定义内容类型(在此示例中为"Specification")的字段的集合,然后将这些更改向下推送到基于 Specification 的所有内容类型。
备注
不能以声明方式将栏添加到现有网站内容类型,即不能通过更新功能 XML 文件实现此目的。
using (SPWeb oWebsite = new SPSite("http://MyServer/sites/MySiteCollection/MyWebSite").OpenWeb())
{
SPList oList = oWebsite.GetList("MyWebSite/Lists/MyList");
SPFieldCollection collFields = oWebsite.Fields;
string strNewColumn = collFields.Add("MyNewColumn", SPFieldType.Text, false);
SPFieldLink oFieldLink = new SPFieldLink(fields[strNewColumn]);
SPContentType oContentType = oList.ContentTypes["Specification"];
oContentType.FieldLinks.Add(oFieldLink);
oContentType.Update(true);
}
Using oWebsite As SPWeb = New SPSite("http://MyServer/sites/MySiteCollection/MyWebSite").OpenWeb()
Dim oList As SPList = oWebsite.GetList("MyWebSite/Lists/MyList")
Dim collFields As SPFieldCollection = oWebsite.Fields
Dim strNewColumn As String = collFields.Add("MyNewColumn", SPFieldType.Text, False)
Dim oFieldLink As New SPFieldLink(fields(strNewColumn))
Dim oContentType As SPContentType = oList.ContentTypes("Specification")
oContentType.FieldLinks.Add(oFieldLink)
oContentType.Update(True)
End Using
更新内容类型中的子自定义信息
也可以通过使用对象模型向下推送 XML 文档精度的自定义设置。每个内容类型都具有一个 XML 文档集合,第三方解决方案可使用此集合来存储自定义设置信息。可以使用向下推送操作覆盖特定的 XML 文档。请注意,对于确定在覆盖 XML 文档之前,当前需要为任何进程使用此文档还是文档对于任何进程是必需的,SharePoint Foundation 不会带来任何影响。还可以将 XML 文档作为向下推送操作的一部分完全删除。
有关存储带有内容类型内的自定义信息的 XML 文档的详细信息,请参阅内容类型中的自定义信息。
更新子内容类型时的注意事项
请注意,向下推送操作将覆盖对子内容类型所做的更改(如果这些更改在向下推送操作的精度内)。例如,假定已对子内容类型中的列进行更改。如果稍后对父模板中的此列进行其他更改或甚至删除此列,并向下推送这些更改,则 SharePoint Foundation 将覆盖您甚或其他人最初在子内容类型中进行的更改。
每个向下推送操作此时只会向下推送对父内容类型所做的更改。如果在进行更改时不向下推送这些更改,则稍后无法轻松向下推送这些更改。在大多数情况下,将强制您撤消以前的更改,重新进行这些更改,然后向下推送此组更改。例如,假定从父内容类型中删除列但此时不向下推送更改。任何后续向下推送操作将不会包含从子内容类型中删除此列。若要稍后从子内容类型中删除此列,则必须将此列添加回父内容类型,重新删除它,然后执行向下推送操作。
如果向下推送不再适用于子内容类型的更改,则将忽略这些更改。例如,如果向下推送已从子内容类型中删除的列的列设置更改,则将忽略这些更改。SharePoint Foundation 不会将列添加回子内容类型中。
如果试图对标记为只读的子内容类型执行向下推送操作,则除非将父内容类型设置为作为向下推送操作的一部分进行读/写,否则向下推送操作将失败。
向下推送更改不是全有全无的操作;如果向下推送对给定子内容类型的更改失败,则 SharePoint Foundation 将继续向下推送对任何剩余子内容类型的更改。在向下推送操作结束时,SharePoint Foundation 将返回一个遇到的错误的列表。
如果将子内容类型定义为已密封,则对该内容类型执行的向下推送操作将失败。
备注
若要在网站上创建或管理网站内容类型,则必须具有对该网站的"Web Designer"访问权限。如果不具有对子网站的适当访问权限,则对此子网站中包含的内容类型执行的向下推送操作将失败。
有关只读内容类型和密封的内容类型的详细信息,请参阅内容类型变更控制。