变更记录
产品版本
| 更新内容 | 更新日期 |
V5.0 | 初始版本 | 2023年4月27日 |
|
|
|
|
|
|
|
|
|
一、概要介绍
报表添加常用过滤
本文以即时库存为例,查询时能根据常用过滤面板的过滤条件进行查询过滤:
二、实现步骤
1. 元数据添加作为过滤条件的字段
2.代码处理逻辑
2.1 扩展点简介
基于极速报表框架的插件大致分为三类:
表单插件:即标准报表(旧报表)的表单插件。表单插件可处理过滤面板的控制等逻辑;
查询插件:即标准报表(旧报表)的查询插件,查询插件可处理报表查询时的取数等逻辑;
基于极速报表框架的报表还有一个扩展点插件,即在报表数据源配置中配置的Handle插件:
极速报表框架基于平台的报表框架做了封装,查询取数的逻辑还是在查询插件中处理,方法入口仍然是查询插件的query方法,在查询插件运行过程中会调用对应Handle插件的方法进行扩展。
扩展点Handle插件的接口定义如下:
public interface IReportDataHandle {
/**
* 数据查询前,进行上下文设置
* @param ctx
*/
default void setupCtx(ReportDataCtx ctx) {
}
/**
* 修改数据块:增、删、改
* @param blocks
* @param ctx
* @return
*/
default void modifyBlocks(List<SrcBlockConf> blockCollector,ReportDataCtx ctx) {
}
/**
* 在多个数据块作为Union All后,执行的数据转换器
* @param ctx
* @return
*/
default void transFormAfterUnion(List<IDataXTransform> transCollector,ReportDataCtx ctx){
}
/**
* 在执行group前设置group方案,或者其他上下文设置
* @param ctx
*/
default void beforeGroupData(ReportDataCtx ctx){
}
/**
* 在group完之后,执行的数据转换器
* @param ctx
* @return
*/
default void transFormAfterGroup(List<IDataXTransform> transCollector,ReportDataCtx ctx){
}
/**
* 在添加汇总行前设置汇总方案,或者其他上下文设置
* @param ctx
*/
default void beforeAddSumRow(ReportDataCtx ctx){
}
/**
* 在添加完汇总行完之后,执行的数据转换器
* @param ctx
* @return
*/
default void transFormAfterAddSumRow(List<IDataXTransform> transCollector,ReportDataCtx ctx){
}
/**
* 生成最终数据包后,执行的数据转换器
* @param ctx
* @return
*/
default void transformResult(List<IDataTransform> transCollector,ReportDataCtx ctx){
}
/**
* 构建显示列
* @param cols
* @param ctx
* @return
*/
default List<AbstractReportColumn> buildShowColumn(List<AbstractReportColumn> cols, ReportDataCtx ctx){
return cols;
}
/**
* 设置中间表需要的字段
* 默认:页面选择的数值字段和维度字段
* @param repoColFilter
* @param ctx
*/
default void handleBigtableCols(Set<String> repoColFilter,ReportDataCtx ctx){
}
/**
* 设置中间表需要的字段
* 默认:中间表需要的字段
* 字段全集就是字段库所有字段
* @param repoColFilter
* @param ctx
*/
default void handleBlockDataSelectCols(Set<String> repoColFilter,SrcBlockConf blockConf,ReportDataCtx ctx){
}
}
2.2 常用过滤处理逻辑
本文以即时库存报表为例,添加常用过滤所使用的扩展点接口为 setupCtx接口。
实现思路为:在进行数据查询前,将对应的查询条件解析为QFilter设置到查询上下文中,供报表框架后续查询时使用,从而达到过滤的作用,可参考下图中的代码(图中代码可通过反编译获取,类路径:kd.scmc.im.report.algox.realbal.RealBalRptHandle):
按照上述实现思路,大致需要完成两个步骤:
1)解析与传递参数:在表单插件中获取常用过滤中的条件,并解析成QFilter或者对应的值,传递到Handle插件中使用;
2)扩展点中获取参数并设置到上下文中:在Handle插件中拿到传递过来的信息,此处需要统一转换为QFilter,通过setupCtx扩展点设置到报表查询的上下文中,后续工作由报表框架完成。
2.2.1 解析与传递参数
1)由于常用过滤的条件在报表表单插件中获取,在Handle插件中无法直接获取到对应参数,因此需要在表单插件中获取和解析条件参数,通过自定义的参数对象传递到Handle插件中。
即时库存报表自定义的参数对象继承自kd.scmc.im.report.algox.util.RptParam,定义的属性如下图所示(图中代码可通过反编译获取):
2)解析构建和传递参数参考如下代码(图中代码可通过反编译获取,类路径:kd.scmc.im.report.algox.realbal.RealBalRptForm):
2.2.2 扩展点中获取与设置参数
在扩展点Handle插件中获取传递的参数,并解析成QFiter设置到查询的上下文中,参考如下代码:
至此二开步骤结束,后续查询由极速报表框架完成。