SharePoint2010内容类型剖析(一)

SharePoint 2010 在上一版本的基础上进一步发展了内容类型对象。本系列作为一个专题,试图对其进行一个深入的剖析。方便大家在自己的自定义解决方案中对其进行定制。

内容类型的定义

SharePoint 2010 中,内容类型是我们要应用到特定内容类别的可重用的设置集合。

  • 利用内容类型,可通过集中、可重用的方式管理某类别的信息的基础架构(如文档、项目或文件夹类型的元数据和行为)。
  • 定义在网站层次上,独立于网站中的任何文档库或列表。
  • 可以将一个内容类型用在多个列表或文档库中。甚至,可能是在整个网站集范围内共用。
  • 一个列表或文档库可以附加多个内容类型。在用户点击“新建”时 ,可以选一种内容类型。其中每个内容类型都可以拥有独立的栏设置,工作流设置和其它相关行为。

一个企业内部的典型应用

“费用报告”内容类型:用户完成一个费用报告的提交工作可以分成以下步骤


SharePoint2010内容类型剖析(一)

创建内容类型,然后挂到列表或库上,如下图:
SharePoint2010内容类型剖析(一)

内容标准化

公司内除了“费用报告”外,还有“采购订单”和“发票”两种文件类型。这三种类型的文档有一些共同点。比如,都是财务类文档,包含有金额信息。但是,它们各自又都有些独有的要求,使用不同的文档模板和工作流。创建4个内容类型:第一个内容类型为“财务文件”,用于封装组织中所有财务文件公共的数据需求。其余3个为“采购订单”、“发票”、“费用报告”,继承“财务文件”公共的部分,并在进一步扩展出自身独特的部分。可以把它们用在同一个文档库中,以实现公司财务文档的统一管理。

SharePoint2010内容类型剖析(一)

内容类型的范围

  • 内容类型的范围用于定义内容类型的可用性
  • 内容类型的范围等于定义该内容类型的站点及其所有子站点
  • 由此可得,在顶级站点添加的内容类型将在整个网站集内可用。
    下图为内容类型范围的一个例子。通过折线所框的面积,可以形象化的理解各个内容类型的可用范围。  

SharePoint2010内容类型剖析(一)

内容类型封装数据需求

内容类型是封装某类信息的数据需求的一种手段。它可以包含以下信息:

  • 元数据属性(或称为栏)
  • 特定的新建,编辑,查看表单
  • 基于用户的操作,在特定情况下启动的工作流
  • 对于文档,指定其文档模板
  • 其他自定义信息

继承原则

  • 永远不会从头开始创建内容类型的。必须基于一个现有的内容类型来创建新内容类型会自动继承父代的元数据,工作流,以及其他行为。
  • 实际使用中,和构建基类一样。首先定义好基本内容类型。例如,我们构建一个财务文档内容类型,代表公司内所有财务类文档。然后,以此为父,新建两个内容类型:发票和采购订单。根据继承原则,我们可以将一些共同的元素放在父内容类型中。这样新的内容类型将自动具有这些元素。
  • “网站设置”里面的“网站内容类型”库中就可以看到这种模式。可以用于列表的最基本的内容类型是项目。联系人、链接 、 评论、 任务、事件 、通知、文章、问题、 消息等等都继承自项目。同理,可以用于文档库的最基本内容类型是文档。Wiki网页、表单、都柏林核心栏、空白页、母版页、图片、资产等等都继承自文档。而图像、音频、视频由继承自资产。因此,在创建内容类型时,一定要首先想好将来是用于文档库还是用于列表。
  • 继承原则的主要用途是隔离变化的传播。理解时可以类比为NTFS文件系统的权限继承或者对于开发人员可以类比为类的继承。

下图为 SharePoint自带的一些内容类型及其在内容类型管理页面中显示的层次关系:

SharePoint2010内容类型剖析(一)

子内容类型

每个内容类型都包含父内容类型的一个引用。这样,就实现了从父代到子代的变更推送。

推送只会覆盖发生变更的部分,不会整个覆盖。

通过UI更新子内容类型

内容类型的某个设置页面包含的所有设置项都将在推送过程中被覆盖.
内容类型通常包含下列设置页

  1. 高级设置页面
    • 文档模板的URL
    • 实际的文档模板文件,可选择网站中现有的模板,或上传一个模板文件
    • 只读属性
  2. 添加网站栏到网站内容类型的页面
  3. 修改栏设置的页面
    • 必需(必须包含信息
    • 隐藏(将不显示在表单中)
    • 从内容类型中删除该栏

更新子内容类型的注意事项

  • 如果子内容类型的更改落在父内容类型的推送粒度范围内,则将被覆盖。比如,我们在子内容类型的一栏上修改了某些设置,然后对父级的栏模板上又进行修改,甚至删除,这时的推送就会覆盖子内容类型原有的修改
  • 每个推送操作只会针对当时的父内容类型的变更。也就是说,一旦错过了这次推送。以后再想推送这些变化就很困难了。这种情况下只能撤销原先的更改,然后重做,再进行推送。比如,我们从父CT删除了以栏,但当时没有推送。任何后续的推送过程都将不会包含从子CT中删除该列的操作。若要从子CT删除该栏,我们必须在父CT上将栏添加回去,然后再删除它,然后再执行推送操作。
  • 如果所推送的变更对子代不再适用,则会被忽略。比如,如果我们推送一个在子代中已被删除的栏的设置,该设置将被忽略。这种情况下SharePoint是不会从新把栏添加回CT的。
  • 如果子代设置为只读,则推送操作会失败。除非推送操作包含父代的只读/可写设置。
  • 变更的推送不是一个全或无的过程。指定子CT上报的错不会影响其他的子CT。在推送结束后,SharePoint会给出一个错误清单。
  • 如果子CT定义为密封的,则推送操作会失败。
  • 创建或管理网站内容类型需要有网站设计者权限。如果你在某个子网站上没有所需的权限,则在该子站点中包含的CT上推送会失败。

 

你可能感兴趣的:(SharePoint)