极速报表常用过滤二开案例原创
金蝶云社区-云社区用户8n3z0186
云社区用户8n3z0186
7人赞赏了该文章 699次浏览 未经作者许可,禁止转载编辑于2023年07月28日 11:26:59

极速报表常用过滤二开案例

一、 需求

目前极速报表的过滤条件一般显示在通用过滤控件中,常用过滤面板的条件字段在出厂时已经固定。而常用过滤中的条件相对更加直观,也比较符合旧报表用户的使用习惯,在二开扩展现有报表或基于极速报表开发新报表时,期望在常用过滤面板中添加过滤条件:

image.png


二、 解决方案

步骤一:需在二开扩展现有报表或基于极速报表开发的新报表的元数据中,添加常用过滤面板的过滤条件字段;

步骤二:在查询时,将添加的常用过滤条件解析成QFilter,利用极速报表的扩展点插件,设置到极速报表查询上下文的过滤条件中,极速报表框架会根据设置的过滤条件自动过滤。

三、极速报表扩展点简介:

基于极速报表框架的插件大致分为三类:

表单插件:即标准报表(旧报表)的表单插件。表单插件可处理过滤面板的控制等逻辑;

查询插件:即标准报表(旧报表)的查询插件,查询插件可处理报表查询时的取数等逻辑;

基于极速报表框架的报表还有一个扩展点插件,即在报表数据源配置中配置的Handle插件:

image.png


 

极速报表框架基于平台的报表框架做了封装,查询取数的逻辑还是在查询插件中处理,方法入口仍然是查询插件的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){

                  

         }

}

 

四、 开发者操作步骤

本案例以即时库存报表为例,添加常用过滤所使用的扩展点接口为 setupCtx接口。

实现思路为:在进行数据查询前,将对应的查询条件解析为QFilter设置到查询上下文中,供报表框架后续查询时使用,从而达到过滤的作用,可参考下图中的代码(图中代码可通过反编译获取,类路径:kd.scmc.im.report.algox.realbal.RealBalRptHandle):


 image.png

按照上述实现思路,大致需要完成两个步骤:

1)在报表元数据上添加常用过滤字段;

1)解析与传递参数:在表单插件中获取常用过滤中的条件,并解析成QFilter或者对应的值,传递到Handle插件中使用;

2)扩展点中获取参数并设置到上下文中:在Handle插件中拿到传递过来的信息,此处需要统一转换为QFilter,通过setupCtx扩展点设置到报表查询的上下文中,后续工作由报表框架完成。

步骤1:添加常用过滤字段

image.png


步骤2:解析与传递参数

1)由于常用过滤的条件在报表表单插件中获取,在Handle插件中无法直接获取到对应参数,因此需要在表单插件中获取和解析条件参数,通过自定义的参数对象传递到Handle插件中。

即时库存报表自定义的参数对象继承自kd.scmc.im.report.algox.util.RptParam,定义的属性如下图所示(图中代码可通过反编译获取):

image.png


2)解析构建和传递参数参考如下代码(图中代码可通过反编译获取,类路径:kd.scmc.im.report.algox.realbal.RealBalRptForm

image.png


步骤3:扩展点中获取与设置参数

在扩展点Handle插件中获取传递的参数,并解析成QFiter设置到查询的上下文中,参考如下代码:

image.png


 

至此二开步骤结束,后续查询由极速报表框架完成。

五、用户操作效果演示

image.png


六、开发环境版本

V5.0及以上版本。

七、 适用单据

基于极速报表框架开发的报表均可参考此案例。

八、附件


 

    

赞 7