业务背景
报表工具开发:
报表根据菜单配置的入口参数动态加载报表常用过滤条件和报表数据。
报表查询支持数据库 SQL 语句方式查询(不是 KSQL,支持分库标识)。这块主要满足公司实施交付人员和客户 IT的习惯,后续文章再讲。
思路方案
报表常用过滤条件动态添加过滤字段:
采用动态表单处理过滤字段生成,报表表单插件 showForm 方式填充到常用过滤条件。
报表过滤控件对于 FilterInfo 的处理:因为常用过滤条件字段动态生成,导致 ReportFilter.toFilterInfo() 中找不到过滤字段,FilterInfo 过滤字段为空。采用报表表单插件重写 beforeQuery() 利用子页面生成 FilterInfo 过滤字段。
实现步骤
新建动态表单空白页面,表单插件中动态添加过滤字段。(动态添加字段参考资料: https://developer.kingdee.com/article/229185045905218048?productLineId=29#9 )
a) 过滤字段标识:我参考编码规则使用 开发商标识+随机码+yymmdd 实现。(实际报表工具有单独功能维护过滤字段配置)
b) 需要注意重写 getEntityType() 时,如下图示例代码基础资料字段需要设置 RefIdProp , 这样 getModel().getValue() 才可以获取到值。
showForm 显示动态过滤字段页面,如下图示例代码。(我选择动态表单方式实现,后期扩展性好可以满足客户特殊的个性化需求,按需替换对应页面,所以没有选择直接在报表表单中实现)
处理报表过滤面板 FilterInfo:通过 PageId 获取过滤字段子页面,根据子页面实体元数据的字段集合,如下图示例代码循环获取字段控件,调用 FieldEdit.getDefaultFilters() 添加到 FitlerInfo 。
实现效果
动态生成过滤字段效果:
FilterInfo 处理效果:
开发环境版本
苍穹 5.0.011
注意事项
动态生成过滤字段,基础资料需要设置 RefIdProp。因为 FieldEdit.getDefaultFilters()内部实现通过 getModel().getValue() 取值。
推荐阅读