一、 案例需求描述
报表的个性化需求很多,往往不同的客户都会根据其业务使用情况提出需要特殊展示的内容;
很多客户非常喜欢报表表头的小漏斗过滤,相较于录入报表的筛选条件,操作更加方便;
报表的字段类型也很多,如基础资料、文本、数值等等,不同字段类型的过滤,在技术实现方式差别很大,且平台无法提供统一的解决方案,所以需要业务针对具体字段类型特殊处理;
这里提供一个demo工程作为案例,供二开参考实现报表的漏斗过滤功能。
二、 解决方案
各业务插件自己实现漏斗过滤逻辑,总体步骤为:
设置界面显示漏斗图标
报表查询插件中获取漏斗过滤条件
对原始过滤条件进行加工
编写过滤逻辑
三、 实现步骤
步骤1
设置界面显示漏斗
在报表表单插件的setSortAndFilter中设置需要支持漏斗过滤的字段:
设置完后页面会显示漏斗图标:
步骤2
报表查询插件中获取漏斗过滤条件
从平台的ReportQueryParam中获取漏斗QFilter,然后设置到自定义参数中供后续查询使用。
步骤3
对原始过滤条件进行加工
总的步骤为:从步骤2的自定义参数中获取原始过滤条件,进行加工,转换成数据过滤能使用的条件。
以下列举了常用的3种字段类型的过滤场景供参考。
3.1
文本类型字段过滤
这种可直接通过字段过滤数据源单据的场景无需额外转换,直接将原始漏斗过滤条件设置到报表框架上下文参数 ReportDataCtx的pageFs中。
3.2
基础资料类型字段过滤
基础资料类型的过滤相对复杂些,比如漏斗传过来的条件是material = ‘demo’,但是报表界面显示的是物料编码,即用户预期的是根据物料编码过滤,因此需要转换成material.number = ‘demo’。又比如业务插件自己进行了处理,某些情况下优化成了id去查询,这时则需要转换成material.id = ‘demo’。总之需要结合业务插件具体实现去转换,这里以转换成编码为例供参考。
3.3
数量类型字段过滤
此场景为字段非数据源单据上的字段,而是通过业务插件(IReportDataHandle实现类)追加的字段,此处无需任何处理,步骤4.3中直接实现过滤即可。
步骤4
编写过滤逻辑
4.1
文本类型字段过滤
需要过滤的字段和数据是数据源上配置的单据和字段,报表框架通用逻辑中会获取步骤3中设置的pageFs过滤条件对单据进行过滤,这种情况下无需编写额外的过滤逻辑。
报表框架公共逻辑取pageFs过滤条件:
4.2
基础资料类型字段过滤
同步骤4.1.
4.3
数量类型字段过滤
数据或字段是在框架根据数据源取数后业务插件做的追加操作,因此需要业务自己在IReportDataHandle实现类中找到合适的时点实现过滤。假设数量字段是在transFormAfterUnion这个阶段追加的,那么可以选择transFormAfterUnion之后再进行过滤,比如在transformResult这个节点进行过滤。
四、用户操作效果演示
五、开发环境及版本
苍穹版本号:V5.0.003
星瀚版本号:V5.0.003
六、适用单据范围
适用于供应链所有报表
七、来源客户或项目
供应链中台服务部
八、附件