自定义列表字段类型(0)
SharePoint中若干自定制开发的内容,从目前我接触到的来讲,从开发语言上首先可以分为两大类,.net类和C++类,其中C++类主要是关于搜索中的IFilter和Protocol Handler的编写,使用的是COM的技术,这个回头有时间再说吧(或者有条件的话可以找微软要几份文档,之前帮微软做过文档和几个demo)。
然后就.net类的来说,我认为最为复杂的有两个内容,一个是工作流(我指的是vs开发的工作流),开发SharePoint工作流的话,除了要对SharePoint工作流的一些概念有所了解、对InfoPath有所了解之外,最重要的是WF(Workflow Foundation),这个研究的不太多;另外一个比较复杂的东西,就是自定义列表字段类型。就几次培训的反馈来说,普遍认为这个很麻烦,如果之前没有看过相关资料的话,2、3个小时之内很难把这个东西学明白。
于是从今天开始,准备写一个自定义列表字段类型的专题,争取涉及到其中可能会用到的各个方面。
之所以先从“0”开始,因为这次内容先不涉及到自定义的字段类型,先来看一下SharePoint中内置的那些字段类型,以及他们在对象模型中是什么样的。
首先下面这张图相信如果用过SharePoint的人应该再熟悉不过了:
这张图上基本上涵盖了大部分SharePoint内置的字段类型。如果我们装的是MOSS的话,还会多一个“业务数据”类型。
其实在wss3.0中,还多了一个可能一般使用者很少会见到的内置字段类型,叫“评估范围”,这种字段类型只在“调查”列表中会出现,并且不能在其他种类的列表中使用(即使通过对象模型也不能把它加到一个普通列表或者文档库中)。在新建一个调查列表的时候,创建列表的页面中,不是“确定”按钮,而是“下一步”,点这个按钮就会提示我们输入一些问题,这个时候就可以看到这个“评估范围”字段类型了:
这个字段类型主要的作用就是打分(有点像是youtube里面给视频打分的那种机制),可以设置分成几个分值,并且可以选择是否有空的项目(默认是N/A),以及将这些分值划分为三档,每一档的名称(好像只能是三档):
它的输入界面和输出界面都比较友好:
以上就是这个不太常见的列表字段类型的大概介绍,觉得这个字段类型写的还是很好的,其实我们可以通过自定义字段类型的方式,写出更加强大的字段类型出来。在此之前,先来看一下在SharePoint的对象模型中,字段都是怎样描述的。
如果之前曾经接触过一写SharePoint开发,我们会知道在对象模型中描述字段的类是SPField(对应的集合类是SPFieldCollection),这个类描述了一个字段中常用的一些属性(比如标题、内部名称、默认值、是否允许为空等等,以及在wss3.0中新加的是否在新建/编辑/显示等界面上显示这个字段——这个功能是只能通过自己写代码完成的,对应的属性叫ShowIn****,这是一个nullable的bool值,和普通bool值的用法有所区别)。
那么实际上,在SharePoint中内置的那些字段类型也都有各自的对象模型与之对应,这些类一般叫做SPField****,它们都是SPField的子类,各自扩展了特有的一些属性设定(比如单行文本中的最大长度、数字中的小数点位数等),有些比较复杂的字段类型还会有值类型于之对应,这些类一般叫做SPField****Value(****和它对应的字段类型的类名中的部分相同)。下面先大致看一下常用的内置字段类型:
1、单行文本 - SPFieldText
这个可能是用的最为广泛的字段类型了,它的输入界面就是一个单行文本框,没有数据验证功能(除了是否为空)。可以设置最大长度(局限在255以内)。
2、多行文本 - SPFieldMultiLineText
输入界面是一个textarea,根据设置不同,可以是纯文本或者是带格式文本的(按照html格式保存的)。
3、数字 - SPFieldNumber
输入界面是textbox,但是带有数据验证(是否为数字,以及最大/最小值等)。
4、货币 - SPFieldCurrency
和数字其实差不多,只不过现实的时候会多一个货币符号。
5、是/否 - SPFieldBoolean
一个CheckBox
6、日期 - SPFieldDateTime
一个带picker的textbox,可以选择“日期和时间”或“仅日期”
7、选项(单选) - SPFieldChoice
可以以dropdownlist或者radio button的形式出现。这个字段有点点特别,虽然它看上去只能存一个值,但其实它是多选类(SPFieldMultiChoice)的子类……
---------分割线(以上可以算是简单类型)--------------
8、选项(多选) - SPFieldMultiChoice
如果使用多选,那么是通过一组checkbox输入的。在这个类里面定义了这个字段中究竟有哪些选项(通过Choices属性,自然,作为它子类的SPFieldChoice也有这个属性)。于之相对应的,可以通过SPFieldMultiChoiceValue类来访问它的值。
9、评估范围 - SPFieldRatingScale
刚才介绍过了,它其实也是多选类(SPFieldMultiChoice)的子类。于之对应的值类型为SPFieldRatingScaleValue。
10、链接或图片 - SPFieldUrl
可以是链接,也可以是图片,它包含url和描述信息两个部分,通过其值类型SPFieldUrlValue可以很方便的得到这两部分。
11、查阅项 - SPFieldLookup
通过dropdownlist完成单选,一个特殊的listbox完成多选(wss3.0支持查阅项多选了!),由于每个被查阅的项会有id和文本,所以也需要有值类型,这个比较特殊,有两种值类型,SPFieldLookupValue和SPFieldLookupValueCollection(因为支持多选了嘛)。然后在SPFieldLookup类中,定义了要查阅哪个列表的哪个字段,以及是哪个网站上的列表。是的!wss3.0中的查阅项其实是支持跨网站查阅的(通过设定LookupWebId属性),但是在默认的界面上并没有暴露出一点。所以一个跨网站查阅项是一个很值得一做的自定义字段类型!
12、用户和用户组 - SPFieldUser
它的输入是通过一个带有AJAX支持的输入框完成的,这是一个很强大的控件。其实这个类是SPFieldLookup的子类,因为它们做的事情在本质上都差不多。相应的,其值类型SPFieldUserValue也是SPFieldLookupValue的子类,还有SPFieldUserValueCollection……
13、多栏 - SPFieldMultiColumn
这是另一个很特殊的字段类型,默认情况下我们无法直接使用它,使用它的唯一途径就是通过自定义字段类型继承它来完成我们的需求。顾名思义,这是一个能在一个字段中储存多个信息的字段类型。
好,那么现在我们已经了解了SharePoint内置的这些字段类型,之所以需要了解它们的目的除了方便“日常应用”外,最为重要的,我们正是通过继承这些字段类,来编写一个自定义字段类型的。也就是说,我们要先找到一个和需求功能类似的字段类型,继承它!