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