Sharepoint带自定义属性的FieldType

先闲话几句,有意义的内容在后面。

新项目中,很多东西都感觉却要自己写FieldType,如前面所说,在UI可定制方面,FieldType还有很多不足。虽然貌似今天看到TemplateName会起一些作用(未测试),但实际上修改起来也是相当麻烦的。

今天原本准备写一个DateTime的FieldType的,WSS3自带的的DateTime FieldType在Firefox下没有Calendar来选日期,就为这一个“小小”功能,原准备怎么修改原来的FieldType来实现兼容(可以一改就把原有的List中一并做到兼容了,跟RichText改成TinyMCE编辑一样),结果是失败。另外,WSS3的DateTime FieldType弹出的Calendar并不是无刷新的,点出来的速度之慢——已经超出我忍受的范围。

另一个是想增加一个更好的Dropdownlist,原来是想增加一个ComboBox的东东的记得某次看到过?在某个同事做的站点上看到过,最终也不知道怎么做出来的。

WSS自带的Dropdownlist只有一个Value属性,而且,存入的就直接是Value了,估计是为了简化一些细节吧。Value和Text是用的同一个。我想写一个可以同时设置Value和Text属性的Dropdownlist(我的Value需要数字值,要拿来做其它的计算用)。

之前做的FieldType都只是一个Edit,一个Render而已,并不会在选择到List的时候给初始值(像Dropdownlist的Items),看了几眼那个代码觉得太复杂了。今天实在是无耐,只好自己再硬着头皮看代码,并且写出这样的FieldType。

最后,我看着网上的代码有不习惯的地方,看WSPBuilder生成的代码也有不习惯的地方,最终么,中和成了一个我习惯一些的代码 :( 成了跟两边都不相同,不知这样会不会生成一些麻烦~~~

 

可能有点意义的正文

 

1.FieldType的实现,例子很多,参见末尾的参考

A.《Inside WSS 3.0》(网上有电子书,各部分内容都很全面)

B.WSP Builder里面新创建一个FieldType。

C.VS WSS Extension应该也可以生成,我没有安装,没测过。

2.需要的文件:

普通的FieldType(4个文件):

fldty_TestField.xml(Field的XML定义)

TestField.cs(Field的定义,会设置调用哪一个FieldControl来编辑或显示)

TestFieldControl.cs(定义此Field的编辑与显示,以及获取值的方法[Value],在此要区分是否Display状态)

TestFieldEditor.ascx(会在FieldControl类中被调用(一般只是FindControl方式去找控件而已,并不是一般的UserControl关系)

有自定义属性的增加2个:

TestFieldProEditor.ascx(设置属性的UserControl,需要在xml中指明,且有后台代码类)

TestFieldPro.cs(上一个文件需要的类,基本上跟普通的UserControl一样了)

多Column的FieldType增加一个:

TestFieldValue.cs(多Column值的定义)

3.WSPBuilder生成的代码

A.WSPBuilder生成的代码没有TestFieldControl.ascx,是自己直接给出控件的,我还是手动把这个添加上去了,觉得这样写起来要容易一些,修改也简便一点。

B.WSPBuilder生成的为带有自定义属性的FieldType,我想这种一般不会太多吧,删除掉多余的。

C.WSPBuilder生成的东东,TestField.cs写得很复杂,注册属性等觉得稍显麻烦,貌似还带了缓存OMG,本来就已经够晕了,这样写更晕。我一般修改成很简单的方式。
4.其它

几个小的细节,我自己开始出错的地方:

A.TestFieldEditor.ascx里面有个ID,应该与TestFieldControl.cs里的对应,这样才可以用FindControl来找控件。

B.在xml里只定义TestFieldProEditor.ascx的位置,TestFieldEditor必须放在指定文件夹了,且似乎文件名随便起。(没看到哪里有指定这个对应关系的)

C.如果要做带属性的FieldType,必须在xml里也把属性定义出来!虽然我实在想不通这两者有什么关联 :(

但不定出来就会出现值存不起去的情况。

5.RenderParten

可能有点复杂,我一直没怎么写。就直接Render了。

另外可以publish一些属性给外面调用此控件使用,也可以做到更多的自定义。

6.自定义属性的一个Bug

新建的时候自定义属性不能保存值,但Update时则能保存结果。

处理此Bug的方法WSPBuilder自动生成的代码能应对。

参见另一篇日志:

About sharepoint custom FieldType bug

http://www.cnblogs.com/nonlyli/archive/2008/06/01/1211669.html

 

参考:

1.创建MOSS2007自定义字段类型实例 (写得简单易懂)

2.自定义列表字段类型(1)(2)(3) (可惜还是未完待续)

3.Creating Custom Field Types with a FieldEditorUserControl (attached sample below) 

(详细,且针对Custom Properties)

posted @ 2008-05-31 00:30  果果’er  阅读(1387)  评论(3编辑  收藏  举报