拼吾爱程序人生

首页 » .Net编程 » Visual Studio.NET » MOSS中创建自定义内容类型
cobra - 2008-6-12 22:54:00
文/carysun  出处/博客园

一:简要介绍

某类内容的一组可重用设置,使用内容类型可一致管理元数据,模板以及项目和文档的行为。内容类型在网站级别定义并用于列表和库。站点内容类型是可以独立于任何特定站点集合、站点、列表或文档库而建立的元数据定义。

MOSS系统提供的在 %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\12\Template\Features\Ctypes 文件夹中定义,你可以查看该文件夹中的ctypeswss.xml文件包含所有内容类型的定义。

二:系统内容类型

Code


在ctypeswss.xml文件中的第一个内容类型为System,所有的内容类型最终都是从System内容类型继承而来的,从下图可以清晰的看出:

 附件: 您所在的用户组无法下载或查看附件

三:内容类型的ID

上图右边代表内容类型的ID,每一个内容类型都有一个ID的属性,这个ID是内容类型的唯一标识,每一个内容类型的ID都包括他父内容类型的ID,所以所有内容类型的前两位就是Sytem内容类型的ID,这样我们就可以通过解析内容类型的id来分析内容类型的继承体系。

内容类型的ID有两种命名的方式:

1. 父内容类型ID+两个十六进制数(不包括”00”)

2. 父内容类型id+“00”+十六进制的GUID

这里System内容类型是个特例,他的id是“0x”,其他的内容类型必须遵守上面两种约定的一种。第一种由于只包括两个十六进制数所以他强调的是id的简洁性,第二种包括GUID强调的是该内容类型的唯一性。每一种都有适合的情况。

父内容类型ID+两个十六进制数(不包括”00”)

Wss一般使用这种方式来生成默认的内容类型,比如基本的内容类型Item的id是0x01,Item是System的儿子,Document的id是0x0101,folder的id是0x0120,通过解析id你可以看出Document和folder都是Item的儿子,如下图:

 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


父内容类型id+“00”+十六进制的GUID

Wss使用这种命名id的方式创建内容类型主要在以下两种情况

1. 站点内容类型(基于其他类型创建的)

2. 列表类型(将站点类型添加到列表中时,得到的站点类型实例的拷贝)

例如有一个内容类型的id是"0x010100D5C2F139516B419D801AC6C18942554D",通过这个id可以看出以下两点:

1. 是Document内容类型的直接基础而来的。

2. 当Document内容类型被填加到列表时一个列表内容类型被创建,。

当父类型是以下情况时,我们推荐你使用GUID的方式创建内容类型的id

1. 父类型为wss默认的内容类型,比如Document

2. 通过第三方工具开发的内容类型,这种你要确定第三方开发的内容类型和wss默认提供的没有冲突。

内容类型id的长度最大是512bytes即不能超过 1,024 个字符。由于有这个限制我们的id命名可以根据需要灵活的去控制,否则就会出现超出的情况。

 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

.NET的异常处理的几个误区
反思.NET中的反射机制
CodeSmith 4.1.1支持Visual Studio 2008 Beta 2
聚焦.NET开源世界里的奇葩:Beagle
利用.NET修改设置系统时间的两中方法
让.Net 程序脱离.net framework框架运行
水晶报表编程及问题总结
刷新页面后保留密码框的值
如何对Web.Config加密与解密访问
ListView和CSS Friendly
从.Net类库代码来看Asp.net运行时
如何通过需要验证的邮件服务器发送邮件?
cobra - 2008-6-12 23:02:00
四:创建自定义内容类型

1. 我们创建一个基于Event类型的自定义内容类型,项目结构如下图:

 附件: 您所在的用户组无法下载或查看附件


2. OnlineEvent.xml文件是内容类型的定义文件,每一个Field节点代表不同的网站栏,FieldRef节点代表网站栏在该内容类型中的引用。我们定义了四个网站栏分别为Status Field,Number Of Attendees,Event Type,Audience Type。具体代码如下:

Code


3.部署完成后我们去“网站设置—网站内容类型库”中即可以看到,下面是部分截图:

 附件: 您所在的用户组无法下载或查看附件


其中的标题,地点,开始时间等都是由Event继承而来的。

4.我们新创建一个日历的列表,然后去“设置—列表设置—高级设置”中设置为允许管理内容类型,如下图:

 附件: 您所在的用户组无法下载或查看附件


5.然后该日历列表的设置面板里就会出现内容类型的设置,如下图:

 附件: 您所在的用户组无法下载或查看附件


6.我们点击“从现有网站内容类型添加”来把我们刚才自定义的内容类型OnlineEvent添加进来,并删除原来的事件内容类型。

7.这时我们返回日历列表,点击新建就会使用我们自定义的内容类型来创建,如下图“

 附件: 您所在的用户组无法下载或查看附件


8.如果现在我们创建OnlineEvent内容类型的项目他会使用MOSS本身的样式,MOSS本身使用NewForm.aspx ,EditForm.aspx,DispForm.aspx。每一个页面都包含一个ListFormWebPart。接着我们就创建自定义的新建,编辑和显示页面,OnlineEventAdd.aspx,OnlineEventDisplay.aspx,OnlineEventEdit.aspx分别对应新建,显示和编辑页面,相应的.cs文件为他们后台的代码文件。

我们在新建,显示和编辑页面时他们产生的URL是有一定规律的,例

http://carysun/_layouts/ONLINEEVENT/OnlineEventAdd.aspx?List=22c18dec%2D33f7%2D42eb%2D9632%2D630384b99e52&RootFolder=%2FLists%2FCalendar&ContentTypeId=0x010200730061EB7D784BB786F4AC157702B8C70010F7F00BE575CB40AA1B113235A36982&Source=http%3A%2F%2Fcarysun%2FLists%2FCalendar%2Fcalendar%2Easpx

主要包括以下几部分:

List:列表的id

ID:这个条目的ID

Source: 返回的URL

我们使用SetValues方法来给相应的item赋值,注意最后一定要调用Update方法来更新。

Code


具体的代码请参考附件中的源代码。

9.我们要在OnlineEvent.xml中添加如下设置来指定使用我们自定义的页面:

Code


10.填加EventHandler事件处理程序,在新建和更新的时候判断来保证该列表中的项目标题不能重复,我们需要重写ItemAdding和ItemUpdating,代码如下:

Code


重新编译后OnlineEvent.xml中会自动填加如下部分:

Code


成功部署后我们自定义的页面如下图

 附件: 您所在的用户组无法下载或查看附件


如果我新建的项目的标题和现有的冲突就会有如下提示:

 附件: 您所在的用户组无法下载或查看附件


代码下载:
 附件: 您所在的用户组无法下载或查看附件
1
查看完整版本: MOSS中创建自定义内容类型
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: