金蝶SHR,在列表对某个金额字段汇总展示的需求
接到这个需求的初衷是因为二开了一个内推费用计算,其中有一列本次发放奖金,希望能做个汇总,以便转薪酬后去汇总核对
刚开始也翻看了薪酬查询的表格底部汇总,捣鼓了半天搞不出来,恕我无能。。。
后面换种方式,就自己干脆在列表头旁边增加一个汇总字段,不在底部了
问题又来了,我怎么能得到当前列表的数据,且去汇总??
仔细阅读了底部查询逻辑,使用query查询用的查询是QueryExecutorFactory这个里面的接口
直接上代码:
String query = "com.kingdee.eas.custom.cmpemp.app.InternalCalcQuery";
IQueryExecutor exec = QueryExecutorFactory.getRemoteInstance(new MetaDataPK(query));
try {
exec.setObjectView(defaultEntityViewInfo);
String[] strArray = {"thisBonus"};
IRowSet sumSet = exec.sum(strArray);
if(sumSet.next()){
String setString = sumSet.getString("thisBonus");
if(StringUtils.isNotEmpty(setString)){
BigDecimal thisBonus = new BigDecimal(setString);
logger.error("===thisBonus:"+thisBonus);
String plainString = thisBonus.stripTrailingZeros().toPlainString();
logger.error("===plainString:"+plainString);
gridDataEntity.setUserdata(plainString);
}else{
gridDataEntity.setUserdata("0");
}
}
} catch (BOSException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
}
刚好里面有个sum汇总,直接满足了需求,既可以拿到前端传递的参数,还可以直接汇总,不用重新写sql,这种方法就是根据前端筛选条件动态查询汇总和列表数据,不用单独点合计
还有一些特殊设置,比如忽略0等等
//设置过滤的sql条件
exec.setObjectView(entityViewInfo);
//设置忽略排序
exec.option().isIgnoreOrder = true;
exec.option().isAutoIgnoreZero = true;
exec.option().isAutoTranslateBoolean = true;
exec.option().isAutoTranslateEnum = true;
exec.option().isIgnorePermissionCheck = false;
其实还可以分组,获取打印的sql等,可以仔细查看com.kingdee.bos.dao.query.IDataProvider
这个类