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中。
