如何開發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.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;code_br_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;code_br_code_br_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,這個程式碼就是這樣的,程式碼的開發其實只要仔細分析就能夠對映到現實生活中的很多事務處理上面~因為程式碼也是人設計的,邏輯總逃脫不了人處理事務的思維。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007877/viewspace-2795497/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從Android到ReactNative開發(三、自定義原生控制元件支援)AndroidReact控制元件
- Android開發之自定義隨機驗證碼控制元件Android隨機控制元件
- Qt自定義開關按鈕控制元件QT控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 自定義Switch控制元件控制元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- 從 Android 到 React Native 開發(三、自定義原生控制元件支援)AndroidReact Native控制元件
- C#自定義控制元件—轉換開關C#控制元件
- iOS自定義控制元件 SlideriOS控制元件IDE
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- winform 自定義容器控制元件ORM控制元件
- WPF Blend 自定義控制元件控制元件
- Flutter 之 自定義控制元件Flutter控制元件
- 如何快速開發靈活自定義報表
- 簡單的自定義表單控制元件控制元件
- UWP自定義ToggleButton控制元件的樣式控制元件
- 自定義控制元件 --- 電池icon控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- Qt實現自定義控制元件QT控制元件
- AngularJS自定義表單控制元件AngularJS控制元件
- 【Android】自定義樹形控制元件Android控制元件
- SQL稽核 | SQLE 如何開發一條自定義的規則SQL
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- Android自定義控制元件 帶文字提示的SeekBarAndroid控制元件
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- rxjs Observable 自定義 Operator 的開發技巧JS
- 自定義控制元件總結和思考控制元件
- WPF自定義FixedColumnGrid佈局控制元件控制元件
- 【自定義使用者控制元件】CNMButton控制元件
- UWP 自定義密碼框控制元件密碼控制元件
- iOS 自定義拖拽式控制元件:QiDragViewiOS控制元件View
- C#自定義控制元件—指示燈C#控制元件
- FlinkSQL自定義函式開發SQL函式
- Vue 3自定義指令開發Vue
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- iOS自定義控制元件:自定義TableView、CollectionView空資料佔點陣圖iOS控制元件View
- WPF滑塊控制元件(Slider)的自定義樣式控制元件IDE