如何对报表查询结果中指定字段进行二次处理?

1 问题描述
在报表场景内,经常会遇到需要对报表查询之后的结果进行二次处理的需求,或者在报表查询结果内,按一定业务逻辑插入一列的场景。面对这些对报表查询结果进行二次干预的需求,可以使用本文的处理方法。
2 解决方法
报表框架在报表数据处理完成后,暴露了一个业务扩展点,在这个业务扩展点,现场可以增加二开扩展实现类,在标品报表框架处理完数据后,加入现场的业务逻辑代码,对报表框架的取数,计算结果再进行一次处理,可以修改最终发送给前端报表控件的报表数据,以达到现场需要干预报表取数结果的目标,实现现场需要的效果。
现场增加埋点实现类
现场需要增加业务扩展点,在标品报表框架处理完数据后,加入现场的业务逻辑代码,对报表框架的取数,计算结果再进行一次处理。
报表扩展点截图如下:

点击“绑定插件”按钮,绑定现场新增的处理实现类,举例如下图:
kd.hr.hrptmc.customcall.ReportCustomCalPlugin//现场需要按二开规范命包路径及类名

现场实现类处理
现场增加的实现类,需要增加判断,对指定的报表数据处理,基于原DataSet,增加现场的二开处理后,构造一个新的DataSet并返回,就可以了。
代码样例如下:
package kd.hr.hrptmc.customcall;//这里要换成现场二开的包路径,按二开规范来
import com.google.common.collect.Lists;
import kd.bos.algo.Algo;
import kd.bos.algo.DataSet;
import kd.bos.algo.DataSetBuilder;
import kd.bos.algo.Row;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.hr.hbp.business.extpoint.report.cal.IReportCustomCalPlugin;
import kd.hr.hbp.common.model.complexobj.HRComplexObjContext;
import kd.hr.hrptmc.business.repcalculate.model.ReportCalculateInfo;
import java.util.List;
import java.util.Random;
/**
* 报表埋点插件实现类//类名根据现场需要命名,文档中类名仅用做样例说明
*/
public class ReportCustomCalPlugin implements IReportCustomCalPlugin {
private static final Log LOGGER = LogFactory.getLog(ReportCustomCalPlugin.class);
@Override
public DataSet doAfterCalDataSet(DataSet dataSet, HRComplexObjContext hrComplexObjContext, Object obj) {
ReportCalculateInfo reportCalculateInfo = (ReportCalculateInfo) obj;
DataSet resultDataSet = dataSet;
Random random = new Random();
// 增加判断,对指定的报表才进行处理;遍历原有结果集,增加对指定字段的处理,构造新的结果集;
if (1893457359150370816L == reportCalculateInfo.getReportId()) {
String[] fieldNam
如何对报表查询结果中指定字段进行二次处理?
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



