在上一次我们已经编写好了一个带有格式验证功能的Email地址栏,那么如果需要用到这个自定义字段,必须先对其进行注册,通知SharePoint有了一个新的字段类型。其方法就是编写一个xml文件。
先来看一下这个xml文件的内容,再对其进行一一介绍:
<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">EmailField</Field>
<Field Name="ParentType">Text</Field>
<Field Name="TypeDisplayName">Email Field</Field>
<Field Name="TypeShortDescription">Email</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="ShowInListCreate">TRUE</Field>
<Field Name="ShowInSurveyCreate">TRUE</Field>
<Field Name="ShowInDocumentLibraryCreate">TRUE</Field>
<Field Name="ShowInColumnTemplateCreate">TRUE</Field>
<Field Name="FieldTypeClass">EmailField.EmailFieldField,EmailField,Version=1.0.0.0,Culture=neutral,PublicKeyToken=9f4da00116c38ec5</Field>
<RenderPattern Name="DisplayPattern">
<HTML><![CDATA[<a href="mailto: ]]></HTML>
<Column HTMLEncode="TRUE" />
<HTML><![CDATA[">]]></HTML>
<Column HTMLEncode="TRUE" />
<HTML><![CDATA[</a>]]></HTML>
</RenderPattern>
</FieldType>
</FieldTypes>
在“FieldType”一节中,定义了和该字段相关的内容,可以看到其大致分为两个部分:
第一部分是关于该字段类型的一些基本设定,比如类型名称(TypeName)、父类型名称(ParentType),
显示名称(TypeDisplayName)是指在列表设置页面中显示的名称:
而简短描述(TypeShortDescription)则是在创建栏页面中显示的名称:
是否允许用户创建(UserCreatable)指定该字段类型是否可以在创建栏的页面出现,允许用户自行创建(而不是写在列表模板的定义xml文件中)
后面一些就是设置该字段类型是否可以出现在某些列表类型中,比较重要的一个是FieldTypeClass,定义了该字段类型后台对应的类名和程序集名称,注意都要使用全名,中间用逗号分开
而第二部分是通过一系列的RenderPattern设置该字段类型的显示样式。
RenderPattern大致分为几种,HeaderPattern和FooterPattern定义了在视图页面显示该字段时的栏的头尾样式,DisplayPattern定义了字段内容的显示样式,EditPattern和NewPattern为编辑和新建时的样式,以及PreviewDisplayPattern、PreviewEditPattern和PreviewNewPattern定义了在SharePoint Designer中的样式。
可以注意到,这种样式的定义是通过一种奇怪的可以用CDATA方式搀杂html代码的形式定义的,对了,这又是CAML……其中出现的两个Column结点表示该栏的内容。
写到这里,我们可以发现这个xml其实可以写的很复杂,尤其是在RenderPattern的部分,因为CAML允许我们在定义显示样式的时候使用switch条件,这部分的写法很灵活,我们可以多多参考默认的那些字段是怎么写的(在fldtypes.xml中)。
此外,这个xml文件中还会涉及到自定义属性和自定义属性输入界面的控制,这个放到相应的部分再讲。
另外,非常需要值得注意的,这个xml文件必须以“fldtypes_”开头,才可以被SharePoint识别为字段类型的描述文件。
ok,现在我们把上次编译出来的dll文件拽到GAC里,把这个xml文件放到12/TEMPLATE/XML目录中,重启iis(一定要iisreset,仅回收应用程序池是不行的),然后我们就可以在创建栏的地方看到这个自定义字段类型了,并且它的表现也和我们期望的一致。
在新建界面中格式验证失败时:
在显示界面中:
并且,这个字段在编辑界面中无法看到(被我们在代码中屏蔽了)。
这两次内容综合起来,我们可以编写一个很简单的自定义字段类型了,它的功能仅仅是使用默认的那些属性、使用默认的输入界面,加上一些其他属性的初始化功能和数据验证功能,在下一次中,我会介绍一下怎样来自己编写输入界面。
(未完待续)
关于这个字段补充说明一下
<Field Name="FieldTypeClass">EmailField.EmailFieldField,EmailField,Version=1.0.0.0,Culture=neutral,PublicKeyToken=9f4da00116c38ec5</Field>
Name=FieldTypeClass 不能改
EmailField.EmailFieldField 命名空间加类名,记住一定要用全名
EmailField ,程序集的名称。在GAC右单击--〉属性 就可以看到相应的信息