在SharePoint2007 中提供了一个非常强大的东东——ContentType, 似乎整 Moss2007的自定义列表都是构建于ContentType之上的。
为了能够自己实现SharePoint 2007的自定义列表功能,我研究了一下Content Type。具体功能上的描述,可以看董章河老兄的Blog,已经对ContentType 的功能有比较详尽的描述。
这里就不详述了,这里主要介绍的是当我们在站点上添加一个内容类型后,并且配置它,会在数据库中产生什么数据,产生的数据有什么意义。
如图,我添加了一个内容类型名字为"第二个内容类型",他的父级内容类型是"链接"。
然后我看见在SharePoint 的数据库中的ContentTypes表中新增了一条数据如下(同时还在站点的 _cts文件夹下产生一个同名文件夹,用来放内容类型的模板)
中间的几个字段比较有意思,
一个是ContentTypeID 和一般的ID列不同,它居然存储的是二进制的数据,看了一些介绍后,只发现一个好处把这段二进制的编码翻译成16进制后,
表示了和其他内容类型的继承关系。打个比方:内容类型A的ID 是 0x01010D,内容类型B的ID是 0x0101,那么表明A是继承于B。看起来真是奇怪的想法,还是我
智商太低了不能理解。。。
还有一个IsFromFeature 这个字段从意思上来说,就是是否来源于Feature。对于Feature的功能意义我还不是很了解,只知道可以用它来安装站点列,安装Webpart,安装内容类型。
所以对上面这个字段的意义也拿不准,猜想是是否由Feature创建的意思,我是在SPS上手工创建的自然就是False了。
最后分析一下Definition字段,
<ContentType ID="0x010500AA7D48B0C398CD45943874E5587286B1" Name="第二个内容类型" Group="自定义内容类型" Description="啊啊啊" Version="1">
<Folder TargetName="_cts/第二个内容类型" /><FieldRefs>
<FieldRef ID="{c042a256-787d-4a6f-8a8a-cf6ab767f12d}" Name="ContentType" />
<FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" Required="FALSE" Hidden="TRUE" />
<FieldRef ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" Name="LinkTitle" Hidden="TRUE" />
<FieldRef ID="{bc91a437-52e7-49e1-8c4e-4698904b2b6d}" Name="LinkTitleNoMenu" Hidden="TRUE" />
<FieldRef ID="{c29e077d-f466-4d8e-8bbe-72b66c5f205c}" Name="URL" Required="TRUE" />
<FieldRef ID="{9da97a8a-1da5-4a77-98d3-4bc10456e700}" Name="Comments" />
<FieldRef ID="{2a9ab6d3-268a-4c1c-9897-e5f018f87e64}" Name="URLwMenu" />
<FieldRef ID="{aeaf07ee-d2fb-448b-a7a3-cf7e062d6c2a}" Name="URLNoMenu" />
</FieldRefs>
<XmlDocuments><XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">PEZvcm1UZW1wbGF0ZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc2hhcmVwb2ludC92My9jb250ZW50dHlwZS9mb3JtcyI+PERpc3BsYXk+TGlzdEZvcm08L0Rpc3BsYXk+PEVkaXQ+TGlzdEZvcm08L0VkaXQ+PE5ldz5MaXN0Rm9ybTwvTmV3PjwvRm9ybVRlbXBsYXRlcz4=</XmlDocument></XmlDocuments>
</ContentType>
很明显可以看出这就是该内容类型的定义信息。然后再向"第二个内容类型"中添加两栏,一个是新增的站点栏"_Version",一个是原有的站点栏"第二个站点栏"。
该内容类型的Definition变成如下内容,看上去非常正常。
ontentType ID="0x010500AA7D48B0C398CD45943874E5587286B1" Name="第二个内容类型" Group="自定义内容类型" Description="啊啊啊" Version="3">
<Folder TargetName="_cts/第二个内容类型" />
<FieldRefs>
<FieldRef ID="{c042a256-787d-4a6f-8a8a-cf6ab767f12d}" Name="ContentType" />
<FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" Required="FALSE" Hidden="TRUE" />
<FieldRef ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" Name="LinkTitle" Hidden="TRUE" />
<FieldRef ID="{bc91a437-52e7-49e1-8c4e-4698904b2b6d}" Name="LinkTitleNoMenu" Hidden="TRUE" />
<FieldRef ID="{c29e077d-f466-4d8e-8bbe-72b66c5f205c}" Name="URL" Required="TRUE" />
<FieldRef ID="{9da97a8a-1da5-4a77-98d3-4bc10456e700}" Name="Comments" />
<FieldRef ID="{2a9ab6d3-268a-4c1c-9897-e5f018f87e64}" Name="URLwMenu" />
<FieldRef ID="{aeaf07ee-d2fb-448b-a7a3-cf7e062d6c2a}" Name="URLNoMenu" />
<FieldRef ID="{78be84b9-d70c-447b-8275-8dcd768b6f92}" Name="_Version" />
<FieldRef ID="{ae0bd35f-bdbb-4a81-93e6-375e2bc62ad7}" Name="第二个站点栏" />
</FieldRefs><XmlDocuments><XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">PEZvcm1UZW1wbGF0ZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc2hhcmVwb2ludC92My9jb250ZW50dHlwZS9mb3JtcyI+PERpc3BsYXk+TGlzdEZvcm08L0Rpc3BsYXk+PEVkaXQ+TGlzdEZvcm08L0VkaXQ+PE5ldz5MaXN0Rm9ybTwvTmV3PjwvRm9ybVRlbXBsYXRlcz4=</XmlDocument></XmlDocuments>
</ContentType>
但是仔细一看,多了一行自定义站点列的信息。站点列的信息为什么存在这里,那么自带的站点列存在哪里呢? 有待研究。
<Field Type="Text" DisplayName="第二个站点栏" Description="萨打法" Required="FALSE" MaxLength="255" Group="自定义栏" ID="{ae0bd35f-bdbb-4a81-93e6-375e2bc62ad7}" SourceID="{51f0af26-ef34-4b23-acbe-278242187d77}" StaticName="第二个站点栏" Name="第二个站点栏"></Field>