跳到主要内容

Java处理器

使用自编的Java类来接收和处理数据。

1、在报表中新增Java处理器

点击左侧填报数据源设置中的新增按钮,在下拉选项中选择java处理器。

分别填写

  • 编码:处理器编码,需保证唯一。
  • 名称:处理器名称。
  • 主数据集:一个填报报表只能有一个主数据集,在提交和查询数据时,主数据集将优先处理数据。
  • 类型:选择java处理器具体是什么。spring-key对应java处理器的spring bean namejava-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));
}
}

本例中为方便演示数据是存储在内存中的,实际业务中,doSubmitqueryByIds都需要根据自己的业务来实现。

SubmitData参数说明

参数类型描述说明
singleDataMap单条数据在报表中设计的单条数据,非子表、集合
listDataList<List<Map>>子表、集合数据内层的每个list都存储了一个集合(子表)的所有数据
delIdsMap<Ix,List<主键>>删除的子表、集合数据idIx: 被删除的子表的序号(从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,从老版本升级上来的用户需要调整下自己的实现类。

主要改动如下:

  1. 参数的属性调整为singleData(单条数据)、listData(集合数据)、delIds(删除数据的id)
  2. datas中存储数据,迁移到singleData中。