如何開發FineReport的自訂控制項?,finereport控制項
FineReport作為外掛程式化開發的報表軟體,有些特殊需求的功能需要自己開發,開發的外掛程式包帆軟官方有提提供,可以去帆軟論壇上找,本文將主要介紹如何開發一個自訂控制項,這裡講講方法論。
第一步:執行個體化一個註冊控制項的介面
給四個資訊 我們的控制項類,介面類,表徵圖路徑,控制項類型名字
package com.hg.free.plugin.customcombo.param; import com.fr.design.designer.creator.XComboBox;import com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider;import com.fr.form.ui.Widget; public class WidgetRegister extends AbstractParameterWidgetOptionProvider { @Override public Class<? extends Widget> classForWidget() { return CustomComboBox.class; } @Override public Class<?> appearanceForWidget() { return XComboBox.class; } @Override public String iconPathForWidget() { return "/com/fr/web/images/combobox.png"; } @Override public String nameForWidget() { return "自訂下拉框"; } }
第二步,重寫控制項類
package com.hg.free.plugin.customcombo.param; import com.fr.form.ui.ComboBox;import com.fr.ui.DataFilter; public class CustomComboBox extends ComboBox { private static final long serialVersionUID = 7169771062153345236L; @Override public String getXType() { return "customcombo"; } @Override protected DataFilter createDataFilter() { return new CustomComboBoxDataFilter(); }}
因為要改變過濾方式,就要重寫一個過濾器
package com.hg.free.plugin.customcombo.param; import com.fr.form.ui.ComboBoxDataFilter; public class CustomComboBoxDataFilter extends ComboBoxDataFilter { @Override public boolean isMatch(String txt, String filter) { if(null==txt && null!=filter)return false; if(null==txt && null==filter)return true; return txt.indexOf(filter)!=-1; }}
第三步,繼承前端控制項JS
;(function($){ FR.CustomComboBoxEditor = FR.extend(FR.ComboBoxEditor, { _init: function () { FR.CustomComboBoxEditor.superclass._init.apply(this, arguments); } }); $.shortcut("customcombo", FR.CustomComboBoxEditor);})(jQuery);
好了~以上就是全部的代碼開發~然後寫個xml用ant打包成外掛程式就可以了。
代碼解釋:
首先來看這段代碼是什麼意思呢?
就是我定義了一個控制項類型為CustomComboBoxEditor的控制項,他繼承了ComboBoxEditor的全部方法和屬性,並且我把新定義的控制項類型的標記聲明為customcombo,這個標記有啥用勒,其他用途就不說了,單單說在這裡的用途,就是JAVA 本身是不能讓前端取產生什麼控制項的~而是通過告訴前端一個配置,前端的JS引擎(姑且這麼稱呼他吧)~根據這個配置去執行對應的指令碼產生對應的dom樣式之類的~shortcut你就這麼理解~後台返回一個配置是要產生customcombo這個控制項~那麼它就像一個map一樣找到了對應的索引值FR.CustomComboBoxEditor~然後把該控制項的配置丟到這個方法裡面去執行。就產生我們的控制項了。
因為這個例子中並沒有對前端有任何修改的要求~所以就沒做任何改動~下面看後台。
我們這個例子是要修改模糊比對的方式。
那麼原來控制項匹配的機制是怎麼搞的,是這樣的:假設我是一個老闆(媽蛋也只能假設一下了),現在我想瞭解一份紙質合約的細節,但是公司有一大坨紙質合約我怎麼找呢~當然是請個秘書了(美女最好),我告訴她我要的合約大概是有些什麼資訊~然後她去找出來把最後找到的合約給我就可以了。
我們這裡控制項ComboBox就是老闆,ComboBoxDataFilter就是秘書,就是這麼個意思,這裡每個秘書肯定都有自己找合約的一套方法,以前那個秘書是只要有點相關的就都找出來了,新來的這個秘書是只找老闆提示的資訊匹配到的合約~尋找匹配的方法就是isMatch,這個代碼就是這樣的,代碼的開發其實只要仔細分析就能夠映射到現實生活中的很多交易處理上面~因為代碼也是人設計的,邏輯總逃脫不了人處理事務的思維。