zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    frida hook native -- frida hook so层 实例代码讲解
    frida hook 类所有方法(ZenTracker)
    frida hook AES DES RSA 自吐算法
    frida java层和c层打印堆栈 (修复优化)
    frida延时hook的3种方法
    [去广告]x米万能遥控 去掉底部banner广告
    Linux使用C语言连接MYSQL
    Linux一对一通信(UDP)
    Linux一对多的通信
    Linux一对一的通信
  • 原文地址:https://www.cnblogs.com/nonlyli/p/1211024.html
Copyright © 2011-2022 走看看