WSS3SDK之:更新子内容类型
当您修改某内容类型后,您可以选择推送这些改动到所有子级。当推送操作拷贝变化到基于该内容类型的网站或列表内容类型时,他并不会覆盖整个内容类型。相反,进行覆盖的范围会根据是通过用户界面还是对象模型而有所不同。
通过用户界面更新子内容类型
当您通过用户界面编辑一个网站内容类型,并在内容类型设置页面进行修改后,所有页面中包含的设置都会通过推送进行覆盖。因此,我们推送的粒度是由分组在各页上的设置决定的。每次您在内容类型设置页面中进行的任何改动后,该页上所有的设置项都会在推送操作中进行覆盖。
下面是各内容类型设置页所包含设置的一个摘要:-
高级设置 该页面包含下列设置项:
-
文档模板URL
-
文档模板文件本身, 如果您在网站中选择了一个已存在的模板或者上传了一个模板
- 只读属性
-
-
新建栏设置 该页用来管理新建到内容类型中的栏。
-
栏设置 该页面包含下列设置项:
-
必填
- 隐藏
- 从内容类型中移除栏
-
通过对象模型更新子内容类型
对象模型我推送操作提供了更粗的粒度。当我们通过对象模型更改了某个网站内容类型后,代码实际上只是更改了该内容类型在内存中的表现。仅仅当我们调用Update方法后,WSS才会提交这些更改到网站数据库中。
下面的例子中,通过代码给一个网站内容类型Specification添加了两栏,然后推送更改到所有子内容类型。
C#
SPContentType myCT = web.ContentTypes["Specification"];
myCT.Fields.Add(Field1);
myCT.Fields.Add(Field2);
myCT.Update();
更新自定义设置到子内容类型
您也可以在XML文档的粒度上通过对象模型推送自定义设置。每个内容类型都有一个XML文档集合,第三方解决方案可以用来存储自定义设置信息。我们可以通过推送操作覆盖特定的XML文档。要注意的是WSS并不会在覆盖前判断该XML文档是否正在被使用或是否是其他过程所必需。您也可以在推送操作中整个删除XML文档。
当更新子内容类型时的考虑
要知道,推送操作会覆盖子内容类型所作的更改,如果这些更改正好落入推送操作粒度的范围内。举例来说,假设您在子内容类型里变更了一栏。如果您随后对父内容类型中的该栏作出其他改变,甚至删除该栏,并推送变化, Windows SharePoint Services将覆盖您(或更有可能是其他人)原先在子内容类型上所作的变更。如果你推送的变化不再适用于子内容类型,这些变化将被忽略。例如,如果您推送栏设顶的变化到一个已被从子内容类型中删除的栏,这些变化将被忽略。 Windows SharePoint Services不会将栏添加回子内容类型。
如果您尝试对标记为只读子内容类型执行推送操作,推动操作将失败,除非您在推送操作中有设置父内容类型为读/写(read/write)的操作。
推送的变化不是一个全有或全无的操作;若推送的变化,对于某一子内容类型未能成功, Windows SharePoint
Services会继续推送变化到任何余下的子内容类型。在推送结束后, Windows SharePoint
Services会返回一个过程中错误的清单。
如果子内容类型定义为密封的,推送操作会在该内容类型上失败。
注意:
要创建或管理一个网站内容类型,您必须至少是该网站的网站设计者。如果您对某些子网站没有适当的存取权限,推送操作在这些子网站中的内容类型上将会失败。