插件内置了两种装载方式,分别为:
-
Http:通过配置相关请求,实现从 Web 端装载数据。( 比如 JSON 服务等 )
-
单参数:可以实现将装载器界面的数据参数,经过计算后原样传给解析器,主要是供调试使用。( 比如 JSON、XML 等结构化数据 )
3.1.1 Http
当选择Http装载方式时,装载器的内容是一个JSON,里面有4个字段,分别是
具体使用示例如表所示:
}
}
参数 值
bb p_BB
cc p_CC
url: http://example.com/?cc=p_CC
type: get
header:{aa:p_BB}
用户在参数面板中添加的第二类额外参数会作为query参数拼接到url后。
}
}
参数 值
bb p_BB
cc p_CC
url: http://example.com/
type: post
header: {aa:p_BB}
body:
{
cc: p_CC
}
用户在参数面板中添加的第二类额外参数在请求体body里。body为x-www-form-urlencoded模式,内容为cc=p_CC。
JSON
}
}
参数 值
bb p_BB
cc p_CC
url: http://example.com/
type: post
header: {aa:p_BB,
content-type: json}
body:
{
cc: p_CC
}
JSON 实际上是post raw模式,第二类参数会被装载成JSON的格式作为请求体发送。对于POST请求这种方式使用的更普遍。
body有两种装载方式:一种是类似用post的。第二种是直接写body键。
},
body:{
cc:${dd}
}
}
参数 值
bb p_BB
dd p_DD
url: http://example.com/
type: post
header: {aa:p_BB,
content-type: json}
body:
{
cc:p_DD
}
注:示例中的http://example.com/仅为演示,实际请按照真实接口进行调整。
当请求类型为GET时,提供Content-Type参数及body配合使用
"body": {
"age": "123"
}
}
3.1.2 单参数
示例
在装载方式下拉框中选择“单参数”装载方式,在装载器内容框中输入 ${data}${today()} ,在解析方式下拉框中选择“原始数据”解析方式(表示原样返回数据,将在下文3.2.3进行介绍),在参数面板配置参数如下:
参数 值
data myData
点击预览按钮,得到如下结果:
插件内置了三种解析方式,分别为:
-
Json:对结构化的 Json数据进行解析,生成 FineReport 支持的数据模型。
-
Js解析器:通过Js脚本解析数据,生成 FineReport 支持的数据模型。
-
原始数据:原样返回数据,主要是供调试使用。
3.2.1 Json
提供了不完整的JPATH语法。字段含义如下:
-
dataPath:取值默认为root,表示处理全部数据;取值root.key1.key2.arr[1] 表示定位到{ key1 : { key2 : { arr:[ {},{<这里>} ] }} },这种情况下只解析定位路径下的json内容。
-
showmap:提供列名映射,将原始的列名(path1)转换为自定义的列名(value1)。
3.2.2 Js解析器
参照JSON数据集插件中Js语法,$data变量为接受到的原始数据,最终需要通过Js生成如下一个数据表对象
返回的对象样例,column为列名,content为二维数组,保存数据集单元格的值
{
"column":["col1", "col2", "col3"],
"content":[
[1, 2, 3],
[4, 5, 6]
]
}
示例:具体代码请按照实际场景开发
装载器返回数据如下:
{
"monthFactoryWaitingRateDataList": [
{
"factory": "HZC01",
"dayFactoryWaitingRateList": [0,0,0],
"days": ["2023-04-01","2023-04-02","2023-04-03"],
"dayStrs": ["04-01","04-02","04-03"]
},
{
"factory": "HZC02",
"dayFactoryWaitingRateList": [0,0,0],
"days": ["2023-04-01","2023-04-02","2023-04-03"],
"dayStrs": ["04-01","04-02","04-03"]
}
]
}
JS解析器填写示例:
var x =$data;
var column = Object.keys(x.monthFactoryWaitingRateDataList[0]);
var content = [];
for (var i = 0; i < x.monthFactoryWaitingRateDataList.length; i++) {
for (var j = 0; j < x.monthFactoryWaitingRateDataList[i].dayFactoryWaitingRateList.length; j++) {
var contentLine = [];
contentLine.push(x.monthFactoryWaitingRateDataList[i].factory, x.monthFactoryWaitingRateDataList[i].dayFactoryWaitingRateList[j], x.monthFactoryWaitingRateDataList[i].days[j], x.monthFactoryWaitingRateDataList[i].dayStrs[j]);
content.push(contentLine);
}
}
var result = {};
result.column = column;
result.content = content;
return result;
预览数据,效果如下:
Js解析器性能比较低,数据量大的时候要慎用。
3.2.3 原始数据
类比单参数装载器,返回一个只有一个单元格的数据集,数据集的内容是从装载器接受到的原始数据,参数面板无意义。具体示例参照3.1.2。
3.3.1 案例一
获取帆软市场的插件列表
装载方式:Http
选择Http装载方式以实现从 Web 端装载数据。
}
注:1. 具体的装载器逻辑可以单独客制,并没有什么统一的写法规范
2. 接口实际返回Json格式的数据如下(此处做对比说明,实际插件使用过程中,不会出现该步骤)
解析方式 :Json
选择Json解析方式以对结构化的 Json数据进行解析。
{
dataPath:"root.result",
showmap:"path1,value1,path2,value2",
}
即主面板配置如下:
点击预览按钮,返回经格式转换后的数据结果如下:
3.3.2 案例二
假设有如下接口用来获取某城市天气 http://example.com?city=北京
如果我们希望根据模板控件内容动态获取城市的数据,可以在模板中设置一个控件 city
然后在数据工厂面板中进行如下配置:
装载方式:Http
方式一:在装载器中添加同名参数 参数默认值置空
{
url:"http://example.com?city=${city}",
type:"GET",
charset:"UTF-8",
header:{}
}
方式二:在参数面板中手动添加参数city,参数值置空
}
假设接口返回值如下:
{
result:[
{
district:海淀区,
temperature:20,
},
{
district:朝阳区,
temperature:23,
}
]
}
解析方式:Json
{
dataPath:"root.result",
showmap:"district,辖区,temperature,温度"
}
即主面板配置如下:
点击预览按钮,返回经格式转换后的数据结果如下:








