Java处理器
使用自编的Java类来接收和处理数据。
1、在报表中新增Java处理器
点击左侧填报数据源设置中的新增按钮,在下拉选项中选择java处理器。
分别填写
- 编码:处理器编码,需保证唯一。
- 名称:处理器名称。
- 主数据集:一个填报报表只能有一个主数据集,在提交和查询数据时,主数据集将优先处理数据。
- 类型:选择java处理器值具体是什么。
spring-key
对应java处理器的spring bean name
;java-class
对应类的完全限定名。 - 值:根据类型不同填写不同的对应的值。
2、编写Java代码制作Java提交处理器
编写Java代码,实现ISubmitHandler
接口,并实现doSubmit
函数:接收提交数据,和queryByIds
函数:查询回显数据。
示例如下:
package com.jeecg.modules.jmreport.submit;
import org.jeecg.modules.jmreport.api.data.ISubmitHandler;
import org.jeecg.modules.jmreport.api.vo.SubmitData;
import org.jeecg.modules.jmreport.common.util.RandomUtil;
import org.jeecg.modules.jmreport.common.vo.Result;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 提交处理器示例
* @Author: chenrui
* @Date: 2024/8/14 17:33
*/
@Component("demoSubmitHandler")
public class DemoSubmitHandler implements ISubmitHandler {
public static final Map<String,SubmitData> CACHE_DATA = new HashMap<>();
@Override
public Result<List<String>> doSubmit(SubmitData data) {
List<String> ids = new ArrayList<>();
String genShortUuid = RandomUtil.getInstance().genShortUuid();
CACHE_DATA.put(genShortUuid, data);
ids.add(genShortUuid);
return Result.OK(ids);
}
@Override
public Result<SubmitData> queryByIds(List<String> dataIds) {
String id = dataIds.get(0);
return Result.OK(CACHE_DATA.get(id));
}
}
本例中为方便演示数据是存储在内存中的,实际业务中,
doSubmit
和queryByIds
都需要根据自己的业务来实现。
SubmitData
参数说明
参数 | 类型 | 描述 | 说明 |
---|---|---|---|
singleData | Map | 单条数据 | 在报表中设计的单条数据,非子表、集合 |
listData | List<List<Map>> | 子表、集合数据 | 内层的每个list都存储了一个集合(子表)的所有数据 |
delIds | Map<Ix,List<主键>> | 删除的子表、集合数据id | Ix: 被删除的子表的序号(从0开始);List<主键>:被删除数据的主键值 |
数据主键值(
jmRecordId
)的处理说明: 单条数据的新增后,处理器需要返回该数据的主键值
;在编辑数据时,系统会自动将该主键值
拼接到数据中。列表数据新增时,处理器只会返回主数据的
主键值
,此时积木报表并不知道集合中每条数据的主键值是什么。在编辑页面,查询数据时需要处理器为每条集合数据新增一个jmRecordId
属性来记录这条数据的主键值
。
v1.8.2+
版本数据结构变更说明
v1.8.1
版本只支持单条数据填报,提交和返回的数据类型是org.jeecg.modules.jmreport.api.data.ISubmitHandler.Data
,该类型只有一个datas
列表来存储单条数据。v1.8.2
版本开始支持集合(子表)数据填报;数据类型也随之变更org.jeecg.modules.jmreport.api.vo.SubmitData
,从老版本升级上来的用户需要调整下自己的实现类。
主要改动如下:
- 参数的属性调整为
singleData
(单条数据)、listData
(集合数据)、delIds
(删除数据的id) - 原
datas
中存储数据,迁移到singleData
中。