列表内容类型(不是文档库)的杀手级用途是什么?

时间:2009-08-20 04:53:49

标签: sharepoint moss content-type

我在网上看到很多博客,文章和讨论让我相信自定义内容类型是SharePoint网站中必须使用的功能 - 特别是在关注SharePoint / MOSS网站的无代码自定义时

然而,在对该主题进行了几个小时的定向研究之后,内容类型(用于列表,而不是用于文档库)的使用对我来说似乎并不那么令人印象深刻:

  • (1)我可以在同一个列表中对相似类型的记录(例如任务和里程碑)进行分组,并为列表中的每种记录分配一组自定义字段(以及这些字段中的不同选项)。
  • e.g。任务内容类型可能具有“已分配给”字段和状态字段,其选项包括“未启动,正在进行,已完成,已放弃”;里程碑内容类型可以跳过“分配给”字段,并提供状态字段,其选项为“未完成,已完成,已放弃”。
  • 但是,为什么不创建单独的列表?在一个列表中对不同内容类型进行分组的一个原因是,您可以创建一个工作流并让它处理该列表中的所有内容类型。如果你有两个单独的列表,你必须创建两次工作流程,并在两个地方维护任何更新 - 对接时的巨大痛苦。
  • (2)当我为每种内容类型设置不同的字段集时,SharePoint将自动为每个内容生成不同的“新项目”和“编辑项目”表单 - 仅显示/请求与一种内容类型实际相关的字段或另一个。
  • e.g。当我创建一个新的Task项时,SharePoint创建的输入表单自动包含“Assigned To”字段;当我创建新的里程碑项时,SharePoint创建的输入表单不包括“已分配给”字段,从而使用户更容易(并保持数据更清晰)。
  • (3)每种内容类型的工作流程 - 虽然工作流程只能与一个列表关联,但您也可以将工作流程与内容类型相关联。这为您提供了两个机会:
  • 使用适合每种内容类型的不同操作和条件创建不同的工作流程。
  • 创建一个对单个内容类型进行操作的工作流,并在多个列表中使用该内容类型。 (然后你会以某种方式看待事物,从而获得“多个列表中的相同工作流程”。)
  • (4)我可以在List中创建某种类型的记录,然后配置一些东西,使得“type”的所有记录都是只读的(即在创建后不能编辑)。
  • (5)过滤查询:http://www.sharepointblogs.com/mossms/archive/2009/07/23/filtered-lookups-across-content-types.aspx

我错过了什么吗?是否存在一些我没有看到的列表中的自定义内容类型的使用场景,这使它们成为SharePoint必须使用的功能?

3 个答案:

答案 0 :(得分:4)

Janis和Alex的观点都很好。以下是我自己的一些内容:

  1. Janis绘制的“阶级”类比是一个很好的类比。内容类型不仅仅是数据 - 它们是与数据相关的行为。这种“行为可移植性”使我们能够停止将SharePoint数据视为仅仅位于列表中。列表限制特别有限;内容类型打破了这种约束。

  2. 内容类型本质上是分层的,支持继承(正如Janis所提到的)。您可以根据需要创建复杂的层次结构,就像类层次结构一样。层次继承字段中更深层次的内容类型以及继承链中更高层次的代码相关元素。您可以选择将父行为保留在派生类型中或覆盖它。

  3. 我特别喜欢的内容类型(与行为可移植性相关)是指定查看和处理数据的自定义表单的能力。我不是在谈论插入列表表单页面的 FormTemplates ;我说的是你自己的工艺经验。 SharePoint的整个“以列表为中心”的思维方式可以通过精心设计的表单颠倒过来,这些表单通过内容类型的XmlDocument结构中指定的 FormUrl 元素绑定。如果需要,空白ASPX页面将成为您的画布。

  4. 在一天结束时,我想它归结为此(对我来说):我可以考虑数据绑定到列表和列表的行为,或者我可以考虑数据在性质上更像OOP内容类型。 Microsoft已经对SharePoint平台中的内容类型进行了大量投资,并且他们为在任何站点的信息体系结构中使用它们提出了强有力的论据。选择不使用它们可能会产生一些惊喜。

    以下是一个例子:MOSS记录中心。 MOSS记录中心的“胆量”利用内容类型作为路由和排序机制来简化生活(http://blogs.msdn.com/recman/archive/2006/09/12/750034.aspx)。如果您有大量没有内容类型分类的数据,并且您选择利用记录中心...哎哟。

    这是另一个例子:搜索。通过基于内容类型的定义明确的信息体系结构,分区搜索范围可以变得更加容易,因为内容类型几乎可以毫不费力地转换为托管属性。使用我当前的客户端,我们可以轻松识别和分类内容,以便自动包含范围。

    极端示例:发布网站。在不使用内容类型的情况下,您甚至无法利用发布网站功能,因为所有发布布局都与内容类型相关联,以便将列表数据与布局占位符对齐。

    我可以继续,但希望这可以让您了解哪些内容类型可以作为开发人员和管理员同时为您做。您当然不需要 来使用它们,但它们确实代表了WSSv2 / SPS 2003的特定于列表的数据日的改进。

    为了它的价值!

答案 1 :(得分:3)

我认为他们是班级。为什么不对您的数据进行分类?

例如,您可以将context menu itemsevent listenersworkflows附加到内容类型。或者,如果事实证明您需要其他字段,只需将其添加到内容类型,并将其添加到使用数据的所有位置。

答案 2 :(得分:2)

它们是我必须使用的功能的原因是因为我经常在站点的许多位置部署相同的列表。要更改列表列,我可以更改父内容类型,并更新使用该内容类型的所有列表。

但是Janis says也是关于对数据进行分类的。仔细考虑数据结构并在内容类型中定义它。然后可以在需要的任何地方部署该内容类型,并始终集中更新。这使得数据结构的管理保持一致,可预测和可重复。

这也是一个好兆头,无论是谁开发解决方案,都要注意规划和匹配产品的业务需求。否则它可以表明存在创建临时列表的倾向,这通常最终会成为维护的噩梦。