跳到主要内容

Api处理器

使用Api接口来接收和处理数据。

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

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

分别填写

  • 编码:处理器编码,需保证唯一。
  • 名称:处理器名称。
  • 主数据集:一个填报报表只能有一个主数据集,在提交和查询数据时,主数据集将优先处理数据。
  • Api地址:输入完整的Api请求地址。

2、编写Api制作Api接口处理器

API接口需要遵循以下规则:

  1. 需要确保Api接口与积木报表之间网络是互通的。
  2. 需要提供Post和Get两个接口,接口地址相同;Post请求接收提交的数据,Get请求查询数据返回给报表。
  3. 接口的基础返回格式如下:
    {
    "success": true,
    "message": "",
    "code": 200,
    "result": {}
    }
参数类型描述说明
successbool是否成功-
messageString消息-
codeint状态码-
resultObject-

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

参数类型描述说明
singleDataMap单条数据在报表中设计的单条数据,非子表、集合
listDataList<List<Map>>子表、集合数据内层的每个list都存储了一个集合(子表)的所有数据
delIdsMap<Ix,List<主键>>删除的子表、集合数据idIx: 被删除的子表的序号(从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"]

出参:

参数类型描述说明
singleDataMap单条数据在报表中设计的单条数据,非子表、集合
listDataList<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版本开始支持集合(子表)数据填报;数据结构也随之变更,从老版本升级上来的用户需要调整下自己的接口。 主要改动如下:

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