本文介绍了在报表中动态设置小数字段精度的需求、思路、实现过程及注意事项。通过选择报表插件事件,在插件中找到并修改小数字段精度属性,并展示了如何在Java代码中设置精度。特别提醒了当前平台版本对动态添加小数字段精度控制的限制,并提供了开发环境版本要求和下载样例元数据补丁包、Java代码的说明。
关键词:报表、小数精度
一、需求
在报表中动态设置小数字段的精度
二、思路与方案
报表相关插件中提供了多个事件可进行二开,我们只需选择合适的事件来进行业务逻辑开发即可。关于动态设置小数字段精度,我们不知道如何着手开发时,可先在设计器中添加小数字段,然后在插件中断点找到控制其精度的属性,最后反过来在插件中通过接口设置即可。
三、实现过程
1. 以采购申请单(kdec_template_purapply)为例,其设计器界面如下图所示。
2. 其报表设计器(kdec_report_demo2)界面如下图所示。为简化样例,该报表的查询数据源 & 各字段映射的数据源字段均通过配置完成,不另外开发取数插件去实现业务数据展示。
3. 动态设置小数字段的精度。
@Override public void afterBindData(EventObject e) { this.setDecimalReportColumnStycle(); super.afterBindData(e); } /** * 设置小数字段精度 */ private void setDecimalReportColumnStycle() { MainEntityType type = getModel().getDataEntityType(); DecimalProp prop = (DecimalProp) type.getProperty("kdec_decimal"); int precision = 15; int scale = 3; prop.setPrecision(precision); prop.setScale(scale); }
四、效果图
注意:为了复现样例效果,需先在采购申请单(kdec_template_purapply)中新增测试数据。
五、开发环境版本
V4.0.015(含)以上
六、注意事项
1. 在当前案例所依赖的平台版本中,只能动态设置设计器中预置的小数字段精度,动态添加的小数字段的精度暂控制不了(kd.bos.entity.report.ReportColumn.setScale(int)不生效)。各位小伙伴如遇业务有此类需求,请提单给平台处理。后期平台如支持该功能请以平台实际功能为准。
2. 文章附件中包含样例元数据补丁包、Java代码源码。各位小伙伴下载附件之后解压,然后导入元数据(在MC中以更新补丁的形式升级 or 在开发平台下直接导入元数据压缩包),并将Java文件放到本地开发工具(Eclipse/Idea)中,重启服务,运行代码即可查看效果。
七、参考资料
苍穹报表列表设置小数字段精度.zip(30.14KB)
推荐阅读