
# 一、需求
二开报表按组织进行分组,合计每一组的金额,并且将合计行高亮显示。
# 二、思路与方案
1. 使用报表取数插件,查询出DataSet之后,用algo的groupBy、sum计算每个组织的数量,然后用union将合计的结果集与原DataSet进行合并,最后用orderBy对分组名称排序。
2. 高亮行可以用界面规则来做,但报表的界面规则是在前端解析的,前端解析只支持红框内的表达式(如下截图这些表达式),不支持红框外的匹配符,例如不支持 like "%xxx%" 的表达式,因此,我们需要为报表添加额外字段,来告诉报表,哪一行需要高亮显示。

# 三、实现过程
## 1.创建报表

## 2.拖入一些字段
下面这四个字段,
- 组织名称的字段类型是文本,将作为分组条件
- 名称字段的字段类型是文本,库存物品的名称
- 金额字段的字段类型是金额,将作为合计值
- 是否高亮的字段类型是整数,将作为界面规则的前置条件

## 3.配置界面规则

### 3.1前置条件

### 3.2成立时的界面规则,调整背景色

## 4.编写报表取数插件并注册

插件代码如下
```
import kd.bos.algo.DataSet;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.FilterItemInfo;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.entity.report.parser.IParser;
import kd.bos.entity.report.parser.QFilterParserFactory;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
public class MReportListDataPlugin extends AbstractReportListDataPlugin {
@Override
public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
// 查询原始数据
DataSet dataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "kdec_materials_storage",
"name as kdec_name, kdec_amountfield, kdec_orgfield.name as kdec_orgname",
// 请开发者按自己的业务需求过滤原始数据,本案例的QFilter为空
null, n