接到这个需求的初衷是因为二开了一个内推费用计算,其中有一列本次发放奖金,希望能做个汇总,以便转薪酬后去汇总核对
刚开始也翻看了薪酬查询的表格底部汇总,捣鼓了半天搞不出来,恕我无能。。。
后面换种方式,就自己干脆在列表头旁边增加一个汇总字段,不在底部了
问题又来了,我怎么能得到当前列表的数据,且去汇总??
仔细阅读了底部查询逻辑,使用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
这个类