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 {@Overridepublic Class<? extends Widget> classForWidget() {return CustomComboBox.class;}@Overridepublic Class<?> appearanceForWidget() {return XComboBox.class;}@Overridepublic String iconPathForWidget() {return "/com/fr/web/images/combobox.png";}@Overridepublic 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;@Overridepublic String getXType() {return "customcombo";}@Overrideprotected DataFilter createDataFilter() {return new CustomComboBoxDataFilter();}}

因为要改变过滤方式,就要重写一个过滤器

package com.hg.free.plugin.customcombo.param;import com.fr.form.ui.ComboBoxDataFilter;public class CustomComboBoxDataFilter extends ComboBoxDataFilter {@Overridepublic 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,这个代码就是这样的,代码的开发其实只要仔细分析就能够映射到现实生活中的很多事务处理上面~因为代码也是人设计的,逻辑总逃脱不了人处理事务的思维。

转载于:https://www.cnblogs.com/laoA188/p/6183458.html

如何开发FineReport的自定义控件?相关推荐

  1. iOS开发-关于自定义控件很值得一看的文章(一)

    2019独角兽企业重金招聘Python工程师标准>>> 简介 本文将是一个关于Cocoa Touch中UIKit框架的自定义控件系列教程,我们将从基础开始,由浅入深,分析讲解自定义控 ...

  2. web控件开发系列(四) 自定义控件属性(下)

    控件在WEB开发时经常要用到,虽然有部分已经存在工具箱里,但有时总需要根据自己的要求,开发一些合适自己的控件.接上一节,已经说过了控件的属性, 例如,我们需要一组属性的集合时,这时我们需要用到的就是复 ...

  3. 金蝶K3开发-工业单据自定义控件

    工业单据金蝶本身提供了单据自定义,但功能有限.通过开发,单据头和单据体均可实现下拉框.复选框.多行显示文本框等自定义字段,这些是系统本身的自定义无法实现的. 单据头也可以增加自定义图标字段,显示如快递 ...

  4. iOS开发-关于自定义控件很值得一看的文章( 三)

    2019独角兽企业重金招聘Python工程师标准>>> 触摸响应链UIResponder UIView继承自UIResponder(响应链类),继承了相应的响应链方法: - (voi ...

  5. [通达OA二次开发]FineReport 与通达OA集成 如何实现统一登录。

    通达OA的首页文件是加密的,无法配置单点登陆可以在拿取用户名和密码的地方传给FR登录地址注册一下.下面就详细的讲一下如何进行配置. 可以在js里面拿到用户名,就和FR文档的单点登录里面一样做 var  ...

  6. ZLComboBox自定义控件开发详解

    [引言]距离上一回写博客已经有一些时日了,之前的爱莲iLinkIT系列主要是讲解了如何用NodeJS来实现一个简单的"文件传送"软件,属于JavaScript中在服务器端的应用. ...

  7. JEECG整合finereport快速搭建与开发

    JEECG整合finereport快速搭建与开发 FineReport介绍          FineReport报表软件具有完备的报表填报功能,支持多级汇总填报.利用这一报表工具,用户即可把企业的业 ...

  8. javafx 自定义控件_JavaFX技巧10:自定义复合控件

    javafx 自定义控件 用JavaFX编写自定义控件是一个简单直接的过程. 需要一个控件类来控制控件的状态(因此命名). 外观需要控件的外观. 而且通常不是用于自定义外观CSS文件. 控件的一种常见 ...

  9. ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(1)读者序】★★★...

    本书主要内容 大部分开发人员在学习Asp.net的过程中都有这样的体会,使用Asp.net开发很多年,但仍然感觉对Asp.net技术的了解比较少,对知识点的了解比较模糊:以及,在工作过程中经常接到克刻 ...

最新文章

  1. java 虚拟机的工作原理
  2. [转] Boost智能指针——scoped_ptr
  3. 一个简单的if else优化
  4. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
  5. 4.平凡之路-封装帮助类和加载属性文件
  6. Gstreamer之video转码(七)
  7. Shortest Prefixes(poj 2001)
  8. 【转】微波射频工程师必读经典参考书
  9. 2019最新《web前端课程+项目实践课程》高清无拼凑
  10. Hadoop HA HDFS启动错误之org.apache.hadoop.ipc.Client: Retrying connect to server问题解决
  11. C#调用默认浏览器打开网页的几种方法
  12. WPS for Linux添加字体
  13. pandas数组(pandasSeries)的运算及案例---初学基础
  14. winfows 切换 双屏_Win10系统如何设置双屏显示?windows10设置双屏显示的方法
  15. Metasploit工具使用(下)
  16. 决策理论与方法——决策概念与分类
  17. java 条形码校验_Java 之 商品条形码的验证
  18. openlayer5 半径不准 画圆_openlayers绘制圆形时设置半径以米为单位
  19. 可口可乐造型设计_一组可口可乐创意海报设计和标识视觉形象设计
  20. micro-app-vue2 vue3 超详细快速入门指南 学习记录

热门文章

  1. 咋一看DWoo 比 Smarty要好
  2. css图片上漂浮着文字效果
  3. cs中ComboBox以设置DataSource方式填充后,清除选项出错
  4. ICCV2021 |优胜劣汰,MIT团队提出自适应多模态选取框架用于视频理解
  5. ACM MM2021 | 腾讯优图实验室9篇论文入选,含弱监督图像描述及定位、表格结构识别等研究方向...
  6. 使用Disentangling形式的损失函数回归2D和3D目标框
  7. 强化学习能挑战众多世界冠军,人类亦能利用强化学习成为冠军
  8. 华为服务器型号2285,华为服务器2285磁盘阵列设置
  9. 【python教程入门学习】通过运行python脚本来更改Windows背景
  10. Python中的星号:用途及使用方法(下篇)