1. 概述
1.1 版本
报表服务器版本 | JAR 包版本 | 插件版本 |
---|
10.0 | 2018-07-31 | V1.0 |
1.2 应用场景
FR系统提供了强大的数据支持功能,支持多种数据库和类型,并提供了异构数据源模型,使得同一张报表的数据可以来源于同一数据库的多个不同表,或多个不同数据库。
数据JSON服务API功能插件是将报表数据集、报表结果输出为JSON格式内容,并作为WEB接口服务开放,提供给报表系统前端或者其他系统使用。
1.3 功能介绍
插件功能提供JSON数据接口服务功能。
主要功能:
OS-235新增功能点:
- 新增接口调用支持跨域取数功能。
- 支持FRM模板取数功能。
- 支持多模板多数据集查询。
- 接口返回数据,支持国密加密处理功能。
2. 插件介绍
2.1 插件安装
点击下载插件:数据JSON服务API插件
设计器插件安装方法参照 设计器插件管理
服务器安装插件方法参照 服务器插件管理
2.2 操作方法
安装插件完成后,即可使用JSON接口服务功能。
2.2.1 数据集JSON服务API(多条件查询)
新版接口接口调用支持跨域请求调用、支持FRM模板取数、多模板多数据集查询。
URL地址 | http://ip:port/webroot/decision/api/dataset |
METHOD | POST |
Content-Type | application/json |
RAW | { "dataset": [{ "report_path": "tabledataService/Parameter_3.cpt", "datasource_name": "ds2", "page_number": -1, "page_size": 2, "parameters": [{ "name": "产品类型", "type": "String", "value": "饮料" }, { "name": "地区", "type": "String", "value": "华北" } ] }, { "report_path": "tabledataService/data.frm", "datasource_name": "ds1", "page_number": -1, "page_size": 1, "parameters": [{ "name": "company", "type": "String", "value": "VINET" }] }], "timestamp": "123456789", "sign": "761ad529b27019576de1ab4af5f9a394" } |
Response响应 | [{ "report_path": "tabledataService/Parameter_3.cpt", "datasource_name": "ds2", "err_code": 0, "err_msg": "", "total_page_number": 1, "page_number": -1, "page_size": 2, "data": [{ "地区": "华北", "销售员": "张颖", "产品类型": "饮料", "产品": "苹果汁", "销量": 250.0, "英文简称": "zhangying" }, ......... { "地区": "华北", "销售员": "韩文", "产品类型": "饮料", "产品": "柳橙汁", "销量": 760.0, "英文简称": "hanwen" }] }, { "report_path": "tabledataService/data.frm", "datasource_name": "ds1", "err_code": 0, "err_msg": "", "total_page_number": 1, "page_number": -1, "page_size": 1, "data": [{ "产品名称": "猪肉", "库存量": 0, "成本价": 20.0, "单价": 39.0 }, ......... { "产品名称": "三合一麦片", "库存量": 38, "成本价": 5.0, "单价": 7.0 }] }] |
参数说明:
- dataset:单个或多个数据集相关参数信息。
- report_path:报表模板路径名称(必须项),支持CPT和FRM模板。例如 tabledataService/Parameter_3.cpt、tabledataService/data.frm。
- datasource_name:数据集名称(必须项);
- page_number:页码(必须项);
- page_size:每页行数(必须项);
- parameters:数据集参数(可选);参数名对应数据集中参数名;
- timestamp:当前时间的毫秒数(用于签名认证,可选);
- sign:安全签名(用于签名认证,可选);
响应说明:
- err_code:0为正常,其他参见错误码表;
- err_msg:错误信息;
- total_page_number:总页数;
- page_number:当前页码;
- page_size:每页行数(必须项);
- data:获取到的JSON数据;数据key为数据集列名。
数据集JSON示例:
访问报表Parameter_3.cpt的数据集内容。
获取data结果:
2.2.2 数据集JSON服务API
URL地址 | http://ip:port/webroot/decision/api/data 支持跨域 |
| http://ip:port/webroot/decision/url/api/data |
METHOD | POST |
Content-Type | application/json |
RAW | { "report_path": "Parameter_3.cpt", "datasource_name": "ds2", "page_number": 1, "page_size": 100, "timestamp": "123456789", "sign": "468705dc60eff5f67438f9b94ed15245", "parameters": [{ "name": "地区", "type": "String", "value": "华北" }, { "name": "产品类型", "type": "String", "value": "饮料" } ] } |
Response响应 | { err_code : 0, err_msg : "", total_page_number : 10, page_number : 1, page_size : 10, data : [{key1:v11,key2:v12,...},...] } |
参数说明:
- report_path:报表模板路径名称(必须项),例如 doc/Parameter_3.cpt。
- datasource_name:数据集名称(必须项);
- page_number:页码(必须项);
- page_size:每页行数(必须项);
- parameters:数据集参数(可选);参数名对应数据集中参数名;
- timestamp:当前时间的毫秒数(用于签名认证,可选);
- sign:安全签名(用于签名认证,可选);
响应说明:
- err_code:0为正常,其他参见错误码表;
- err_msg:错误信息;
- total_page_number:总页数;
- page_number:当前页码;
- page_size:每页行数(必须项);
- data:获取到的JSON数据;数据key为数据集列名。
数据集JSON示例:
访问报表Parameter_3.cpt的数据集内容。
获取data结果:
2.2.3 报表结果JSON服务API
新版接口接口调用支持跨域请求调用。
URL地址 | http://ip:port/webroot/decision/api/report 支持跨域 |
| http://ip:port/webroot/decision/url/api/report |
METHOD | POST |
Content-Type | application/json |
RAW | { "report_path": "tabledataService/Parameter_3.cpt", "start_page": 1, "end_page": 1, "timestamp": "123456789", "sign": "468705dc60eff5f67438f9b94ed15245", "parameters": [ { "name": "产品类型", "type": "String", "value": "饮料" }, { "name": "地区", "type": "String", "value": "华北" } ] } |
Response响应 | { "err_code": 0, "err_msg": "", "start_page": 1, "end_page": 1, "total_page_number": 1, "data": [ { "A1": "华北销售额", "A2": "地区" } ] } |
参数说明:
- report_path:报表模板路径名称(必须项),例如 tabledataService/Parameter_3.cpt。
- start_page:报表内容起始页码(必须项);
- end_page:报表内容结束页码(必须项);
- parameters:报表面板参数(可选);参数名对应模板参数空间名称;
- timestamp:当前时间的毫秒数(用于签名认证,可选);
- sign:安全签名(用于签名认证,可选);
响应说明:
- err_code:0为正常,其他参见错误码表;
- err_msg:错误信息;
- total_page_number:总页数;
- start_page:报表内容起始页码;
- end_page:报表内容结束页码;
- data:获取到的JSON数据;数据key为行列码标识。
报表结果JSON示例:
访问报表Parameter_3.cpt的数据集内容。
参数JSON转换规则
参数类型 | 类型值 | 示例 |
字符串 | String | {"name":"aa","type":"String","value":""} |
整型 | Integer | {"name":"aa","type":"Integer","value":""} |
双精度型 | Double | {"name":"aa","type":"Double","value":""} |
日期 | Date | {"name":"aa","type":"Date","value":""} |
布尔型 | Boolean | {"name":"aa","type":"Boolean","value":""} |
公式 | Formula | {"name":"aa","type":"Formula","value":""} |
2.2.4 调用接口管控
安全签名配置
安全签名用于控制接口调用的权限验证。
报表平台管理页面(数据决策系统)-》管理系统-》系统管理-》点击‘常规’选项卡,配置‘JSON服务接口插件’的秘钥内容。如图
如配置了秘钥,系统会依规则计算MD5值与sign比较,相同即符合。
国密认证
国密认证用于对接口返回的 data,进行加密处理,避免信息泄露。
在插件参数页面的 启用国密认证 ,维护 SM2 App ID、SM2公钥、SM2私钥的值,即可生效使用。
获取到 加密data,先通过公钥验证签名sigature,再通过key和私钥解密得到对称加密密码,然后使用对称密码解密得到数据。
接口返回加密数据示例:
错误码表
err_code | err_msg |
0 | 正常 |
10 | report_path参数值不正确 |
11 | datasource_name参数值不正确 |
12 | page_number参数值不正确 |
13 | page_size参数值不正确 |
14 | 报表模板文件不存在 |
15 | 安全签名不正确 |
16 | start_page参数值不正确 |
17 | end_page参数值不正确 |
20 | 报表数据集为空 |
2.2.5 报表内容导出JSON文件
在设计器打开对应报表文件,点击菜单“模板”->“模板web属性”->“分页预览属性”,会看到插件对应 JSON导出。先选择为“为该模板单独设置”项,再选择对应组件添加即可。
如图:
预览报表时,工具栏会显示导出按钮,点击即可执行。
3. 插件示例
在报表中新增按钮,并添加事件。js代码如下:
$.ajax({
url: "http://localhost:8075/webroot/decision/url/api/data",
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: JSON.stringify({
"report_path": "GettingStarted.cpt",
"datasource_name": "ds1",
"page_number": 1,
"page_size": 100,
"parameters": [{
"name": "地区",
"type": "String",
"value": "华北"
}]
}),
success: function(data) {
alert("导出成功" + data.toString());
},
error: function() {
alert("baocuo");
}
});
示例模板:
示例模板.cpt
以上。
11 Comments
Nicholas.Jee-李昊宇
功能上和开放平台的数据集接口有重合
Nicholas.Jee-李昊宇
数据集JSON服务与开放平台的 3.2 模板数据集数据服务有一定的重叠
开放平台插件- FineReport帮助文档 - 全面的报表使用教程和学习资料 (fanruan.com)
Nicholas.Jee-李昊宇
用了hutool这个库,不是特别推荐
Louis
已修改,SM2、SM4加解密用内置库实现。
Icey.Zhang-张洁
新增功能5:多个CPT模板导出EXCEL合并压缩包下载功能
这个功能看起来和插件名字没有什么关系,为什么要增加这个
Louis
新增调用接口,多个CPT模板导出EXCEL合并压缩包下载功能。此项为二开任务JSD8693,,合并入插件作为通用功能。
此插件打算作为服务接口集合,后续通用的二开定制功能接口,合并进来。更侧重精细功能点和试点,避免与开放平台插件重合。
Icey.Zhang-张洁
安全配置页面选项能不能优化一下显示。目前所有选项都是在同一页面排列展示,看不出来各选项的逻辑,不清楚是都要填还是两个加密方式
Louis
已优化,上面截图已更新。
接口调用-MD5秘钥,用于 调用接口权限控制。
其余4项,用于接口返回数据的加密操作功能。
Nicholas.Jee-李昊宇
这个功能思想和开放平台的部分功能有类似
Louis
新增接口调用支持跨域取数功能。支持FRM模板取数功能。支持多模板多数据集查询。
这三项,是按照客户需求定制功能,因不能算二开流程,进行插件功能迭代方式。
接口返回数据,支持国密加密处理功能。此项为 已完成二开任务JSD8815功能,合并入插件作为通用功能。
新增调用接口,多个CPT模板导出EXCEL合并压缩包下载功能。此项为二开任务JSD8693,,合并入插件作为通用功能。
Louis
数据集JSON服务与开放平台功能说明:
1. 数据集JSON服务上架时间比开放平台插件,要更早些。数据集功能重复,非主观意愿造成。
2. 数据集JSON服务插件,后续更侧重精细功能点和试点,避免与开放平台插件重合。
请审核,谢谢。