Sharepoint带自定义属性的FieldType
先閑話幾句,有意義的內(nèi)容在后面。
新項(xiàng)目中,很多東西都感覺(jué)卻要自己寫(xiě)FieldType,如前面所說(shuō),在UI可定制方面,FieldType還有很多不足。雖然貌似今天看到TemplateName會(huì)起一些作用(未測(cè)試),但實(shí)際上修改起來(lái)也是相當(dāng)麻煩的。
今天原本準(zhǔn)備寫(xiě)一個(gè)DateTime的FieldType的,WSS3自帶的的DateTime FieldType在Firefox下沒(méi)有Calendar來(lái)選日期,就為這一個(gè)“小小”功能,原準(zhǔn)備怎么修改原來(lái)的FieldType來(lái)實(shí)現(xiàn)兼容(可以一改就把原有的List中一并做到兼容了,跟RichText改成TinyMCE編輯一樣),結(jié)果是失敗。另外,WSS3的DateTime FieldType彈出的Calendar并不是無(wú)刷新的,點(diǎn)出來(lái)的速度之慢——已經(jīng)超出我忍受的范圍。
另一個(gè)是想增加一個(gè)更好的Dropdownlist,原來(lái)是想增加一個(gè)ComboBox的東東的記得某次看到過(guò)?在某個(gè)同事做的站點(diǎn)上看到過(guò),最終也不知道怎么做出來(lái)的。
WSS自帶的Dropdownlist只有一個(gè)Value屬性,而且,存入的就直接是Value了,估計(jì)是為了簡(jiǎn)化一些細(xì)節(jié)吧。Value和Text是用的同一個(gè)。我想寫(xiě)一個(gè)可以同時(shí)設(shè)置Value和Text屬性的Dropdownlist(我的Value需要數(shù)字值,要拿來(lái)做其它的計(jì)算用)。
之前做的FieldType都只是一個(gè)Edit,一個(gè)Render而已,并不會(huì)在選擇到List的時(shí)候給初始值(像Dropdownlist的Items),看了幾眼那個(gè)代碼覺(jué)得太復(fù)雜了。今天實(shí)在是無(wú)耐,只好自己再硬著頭皮看代碼,并且寫(xiě)出這樣的FieldType。
最后,我看著網(wǎng)上的代碼有不習(xí)慣的地方,看WSPBuilder生成的代碼也有不習(xí)慣的地方,最終么,中和成了一個(gè)我習(xí)慣一些的代碼 :( 成了跟兩邊都不相同,不知這樣會(huì)不會(huì)生成一些麻煩~~~
?
可能有點(diǎn)意義的正文
?
1.FieldType的實(shí)現(xiàn),例子很多,參見(jiàn)末尾的參考
A.《Inside WSS 3.0》(網(wǎng)上有電子書(shū),各部分內(nèi)容都很全面)
B.WSP Builder里面新創(chuàng)建一個(gè)FieldType。
C.VS WSS Extension應(yīng)該也可以生成,我沒(méi)有安裝,沒(méi)測(cè)過(guò)。
2.需要的文件:
普通的FieldType(4個(gè)文件):
fldty_TestField.xml(Field的XML定義)
TestField.cs(Field的定義,會(huì)設(shè)置調(diào)用哪一個(gè)FieldControl來(lái)編輯或顯示)
TestFieldControl.cs(定義此Field的編輯與顯示,以及獲取值的方法[Value],在此要區(qū)分是否Display狀態(tài))
TestFieldEditor.ascx(會(huì)在FieldControl類中被調(diào)用(一般只是FindControl方式去找控件而已,并不是一般的UserControl關(guān)系)
有自定義屬性的增加2個(gè):
TestFieldProEditor.ascx(設(shè)置屬性的UserControl,需要在xml中指明,且有后臺(tái)代碼類)
TestFieldPro.cs(上一個(gè)文件需要的類,基本上跟普通的UserControl一樣了)
多Column的FieldType增加一個(gè):
TestFieldValue.cs(多Column值的定義)
3.WSPBuilder生成的代碼
A.WSPBuilder生成的代碼沒(méi)有TestFieldControl.ascx,是自己直接給出控件的,我還是手動(dòng)把這個(gè)添加上去了,覺(jué)得這樣寫(xiě)起來(lái)要容易一些,修改也簡(jiǎn)便一點(diǎn)。
B.WSPBuilder生成的為帶有自定義屬性的FieldType,我想這種一般不會(huì)太多吧,刪除掉多余的。
C.WSPBuilder生成的東東,TestField.cs寫(xiě)得很復(fù)雜,注冊(cè)屬性等覺(jué)得稍顯麻煩,貌似還帶了緩存OMG,本來(lái)就已經(jīng)夠暈了,這樣寫(xiě)更暈。我一般修改成很簡(jiǎn)單的方式。
4.其它
幾個(gè)小的細(xì)節(jié),我自己開(kāi)始出錯(cuò)的地方:
A.TestFieldEditor.ascx里面有個(gè)ID,應(yīng)該與TestFieldControl.cs里的對(duì)應(yīng),這樣才可以用FindControl來(lái)找控件。
B.在xml里只定義TestFieldProEditor.ascx的位置,TestFieldEditor必須放在指定文件夾了,且似乎文件名隨便起。(沒(méi)看到哪里有指定這個(gè)對(duì)應(yīng)關(guān)系的)
C.如果要做帶屬性的FieldType,必須在xml里也把屬性定義出來(lái)!雖然我實(shí)在想不通這兩者有什么關(guān)聯(lián) :(
但不定出來(lái)就會(huì)出現(xiàn)值存不起去的情況。
5.RenderParten
可能有點(diǎn)復(fù)雜,我一直沒(méi)怎么寫(xiě)。就直接Render了。
另外可以publish一些屬性給外面調(diào)用此控件使用,也可以做到更多的自定義。
6.自定義屬性的一個(gè)Bug
新建的時(shí)候自定義屬性不能保存值,但Update時(shí)則能保存結(jié)果。
處理此Bug的方法WSPBuilder自動(dòng)生成的代碼能應(yīng)對(duì)。
參見(jiàn)另一篇日志:
About sharepoint custom FieldType bug
http://www.cnblogs.com/nonlyli/archive/2008/06/01/1211669.html
?
參考:
1.創(chuàng)建MOSS2007自定義字段類型實(shí)例 (寫(xiě)得簡(jiǎn)單易懂)
2.自定義列表字段類型(1)(2)(3) (可惜還是未完待續(xù))
3.Creating Custom Field Types with a FieldEditorUserControl (attached sample below)?
(詳細(xì),且針對(duì)Custom Properties)
轉(zhuǎn)載于:https://www.cnblogs.com/nonlyli/archive/2008/05/31/1211024.html
總結(jié)
以上是生活随笔為你收集整理的Sharepoint带自定义属性的FieldType的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电信在线防杀毒墙,到底是不是流氓软件
- 下一篇: [转帖]最新FLASH 0DAY 漏洞总