Api处理器
使用Api接口来接收和处理数据。
1、在报表中新增Api处理器
点击左侧填报数据源设置中的新增按钮,在下拉选项中选择Api处理器。
 分别填写
分别填写
- 编码:处理器编码,需保证唯一。
- 名称:处理器名称。
- 主数据集:一个填报报表只能有一个主数据集,在提交和查询数据时,主数据集将优先处理数据。
- Api地址:输入完整的Api请求地址。
2、编写Api制作Api接口处理器
API接口需要遵循以下规则:
- 需要确保Api接口与积木报表之间网络是互通的。
- 需要提供Post和Get两个接口,接口地址相同;Post请求接收提交的数据,Get请求查询数据返回给报表。
- 接口的基础返回格式如下:
{
 "success": true,
 "message": "",
 "code": 200,
 "result": {}
 }
| 参数 | 类型 | 描述 | 说明 | 
|---|---|---|---|
| success | bool | 是否成功 | - | 
| message | String | 消息 | - | 
| code | int | 状态码 | - | 
| result | Object | - | 
2.1、填报(提交数据)接口
代码示例
/**
 * 填报数据缓存
 */
public static final Map<String, Map<String, Object>> SUBMIT_CACHE_DATA = new HashMap<>();
/**
 * 填报api处理器 填报数据示例
 * @param params
 * @return
 * @author chenrui
 * @date 2024/8/29 16:58
 */
@PostMapping("/submit/handle")
public Result<?> submitFormData(@RequestBody Map<String,Object> data) {
    log.info("接收到提交的数据:{}", JSONObject.toJSONString(data));
    List<String> ids = new ArrayList<>();
    String genShortUuid = RandomUtil.getInstance().genShortUuid();
    SUBMIT_CACHE_DATA.put(genShortUuid,data);
    ids.add(genShortUuid);
    return Result.OK(ids);
}
入参:
versions 1.8.2+ | 2024-09-13
| 参数 | 类型 | 描述 | 说明 | 
|---|---|---|---|
| singleData | Map | 单条数据 | 在报表中设计的单条数据,非子表、集合 | 
| listData | List<List<Map>> | 子表、集合数据 | 内层的每个list都存储了一个集合(子表)的所有数据 | 
| delIds | Map<Ix,List<主键>> | 删除的子表、集合数据id | Ix: 被删除的子表的序号(从0开始);List<主键>:被删除数据的主键值 | 
如果提交的数据中有
jmRecordId代表这是一条编辑的数据,jmRecordId是这条数据的主键值。
入参报文示例:
单条数据报文示例
{
    "singleData": {
        "order_code": "1",
        "order_date": "2024-09-11 00:00:00",
        "descc": "22",
        "jmRecordId": "993816826335285248"
    }
}
主子表(列表)报文示例
{
    "singleData": {
        "order_code": "1",
        "order_date": "2024-09-11 00:00:00",
        "descc": "22",
        "jmRecordId": "993816826335285248"
    },
    "listData": [
        [
            {
                "jmRecordId": "994386177849380864",
                "product_name": "5",
                "price": 4
            },
            {
                "product_name": "6",
                "product_name": "5",
                "price": 4
            }
        ],
        [
            {
                "jmRecordId": "994386177849380864",
                "op": "order",
                "op_time": 2024-09-10 00:00:00
            }
        ]
    ],
    "delIds": {
        "0": [
            "994122418224386048"
        ]
    }
}
出参: 插入的数据的主键值集合:
["994122418224386048","994122418224386049"]
2.2、查询数据接口
代码示例
/**
 * 填报数据缓存
 */
public static final Map<String, Map<String, Object>> SUBMIT_CACHE_DATA = new HashMap<>();
/**
 * 填报api处理器 获取数据示例
 * @param dataIds
 * @return
 * @author chenrui
 * @date 2024/8/29 16:58
 */
@GetMapping("/submit/handle")
public Result<?> queryFormData(@RequestParam List<String> dataIds) {
    log.info("开始查询数据{}", dataIds);
    Map<String,Object> datas = new HashMap<>();
    for (String id : dataIds) {
        datas = SUBMIT_CACHE_DATA.get(id);
    }
    return Result.OK(datas);
}
入参: 系统会将数据的主键值作为参数传给处理器
["07b3912e628e4e61a98cc6099b37d10c"]
出参:
| 参数 | 类型 | 描述 | 说明 | 
|---|---|---|---|
| singleData | Map | 单条数据 | 在报表中设计的单条数据,非子表、集合 | 
| listData | List<List<Map>> | 子表、集合数据 | 内层的每个list都存储了一个集合(子表)的所有数据 | 
出参报文示例:
单条数据报文示例
{
    "success": true,
    "message": "",
    "code": 200,
    "result": {
        "singleData": {
            "jmRecordId": "993816826335285248"
            "order_code": "1"
        }
    }
}
主子表(列表)报文示例
{
    "success": true,
    "message": "",
    "code": 200,
    "result": {
        "singleData": {
            "jmRecordId": "993816826335285248"
            "order_code": "1"
        },
        "listData": [
            [
                {
                    "jmRecordId": "994386177849380864",
                    "product_name": "5",
                    "price": 4,
                },
                {
                    "product_name": "6",
                    "price": 123,
                }
            ],
            [
                {
                    "jmRecordId": "994386177849380864",
                    "op": "order",
                    "op_time": 2024-09-10 00: 00: 00,
                }
            ]
        ],
    }
}
数据主键值(
jmRecordId)的处理说明: 单条数据的新增后,处理器需要返回该数据的主键值;在编辑数据时,系统会自动将该主键值拼接到数据中。列表数据新增时,处理器只会返回主数据的
主键值,此时积木报表并不知道集合中每条数据的主键值是什么。在编辑页面,查询数据时需要处理器为每条集合数据新增一个jmRecordId属性来记录这条数据的主键值。
v1.8.2+版本数据结构变更说明
v1.8.1版本只支持单条数据填报,提交的数据结构只有一个datas集合用来存储单条数据。v1.8.2版本开始支持集合(子表)数据填报;数据结构也随之变更,从老版本升级上来的用户需要调整下自己的接口。
主要改动如下:
- 移除参数datas,调整为singleData(单条数据)、listData(集合数据)、delIds(删除数据的id)
- 原datas中存储数据,迁移到singleData中。

