无
标准的帆软报表产品中只支持基于标准JDBC或JNDI的数据查询和几种基础的文件数据。对于非标JDBC数据库、WebService、REST、实时库、RPC等等的数据接口系统的对接需要依赖数据集接口接入。
以往开发者大多都接触过程序数据集的基本实现方法。程序数据集从功能上是可以满足开发者对数据的绝大部分诉求的。不过对于报表制作人员来说,程序数据集存在叫非常明显的短板就是使用并不友好。制作人员需要记住大量的类名和业务的关联关系,或者需要手动添加大量的参数实现“配置化”,但是又无法解决参数配置化导致的参数引入问题(比如某些敏感配置只能在制作模板的时候指定,禁止从URL/参数面板等地方引入)。为了给报表制作人员提供更好的使用体验和安全体验,产品内设计了TableDataDefineProvider接口,让开发者得以用插件的形式向用户提供数据集扩展。需要注意的是,该接口不同于ServerTableDataDefineProvider,仅作用于设计器上编辑模板数据集扩展。
package com.fr.design.fun; import com.fr.base.TableData; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.stable.fun.mark.Mutable; import com.fr.stable.fun.mark.Aftermath; /** * @author : richie * @since : 7.1.1 * 自定义报表数据集界面接口,单独存在的一个个数据集 */ public interface TableDataDefineProvider extends Mutable, Aftermath { String XML_TAG = "TableDataDefineProvider"; int CURRENT_LEVEL = 1; /** * 自定义的数据集设置界面所对应的数据集类型 * @return 数据集的类型 */ Class<? extends TableData> classForTableData(); /** * 自定义数据集设置界面所对应的初始化数据集类型,在一种数据集有多个实现的时候有效 * @return 数据集类型 */ Class<? extends TableData> classForInitTableData(); /** * 自定义的数据集设置界面所对应的界面类型 * @return 数据集界面类型 */ Class<? extends AbstractTableDataPane> appearanceForTableData(); /** * 自定义数据集设置界面在菜单上的现实名字 * @return 名字 */ String nameForTableData(); /** * 自定义数据集在新建的时候名字前缀 * @return 名字前缀 */ String prefixForTableData(); /** * 自定义数据集在菜单上现实的图标 * @return 图标 */ String iconPathForTableData(); } |
产品线 | 版本 | 支持情况 | 备注 |
---|---|---|---|
FR | 8.0 | 支持 | |
FR | 9.0 | 支持 | |
FR | 10.0 | 支持 | |
BI | 3.6 | 支持 | |
BI | 4.0 | 支持 | |
BI | 5.1 | 支持 | |
BI | 5.1.2 | 支持 | |
BI | 5.1.3 | 支持 |
<extra-designer> <TableDataDefineProvider class="your class name"/> </extra-designer> |
当数据集类型选择列表被触发时,会调用TableDataCreatorProducer#createReportTableDataCreator方法。此时,会读取所有插件中申明的TableDataDefineProvider实例。因为数据集添加是在设计器上操作的,而实际数据集的计算是属于服务器的功能范畴,所以TableDataDefineProvider还有个作用就是解耦,对于一个具体的数据集最终只会把tabledata的class名保存到cpt/frm中。
iconPathForTableData :返回的图标路径(如:/com/demo/hg/resources/images/main.png)。需要注意,因为这个接口没有做图片的统一缩放,所以需要开发者自己准备好16*16(px)大小的图标。否则会显得很不协调。
classForTableData: 接口需要返回一个TableData接口类。实际开发时为了方便开发提高效率和稳定性,要求开发者全部继承AbstractParameterTableData[注意点]
classForInitTableData:这个接口如果已经实现了classForTableData的话,目前没有什么实质性的作用,不过一般要求开发者保留性的与classForTableData返回相同的class。
demo地址:demo-table-data-define
UniversalServerTableDataProvider
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。