1.6 Rest数据源
1.6.1 新建Rest数据源
在UniEAP Report产品中要使用Rest数据源,需新建Rest数据源,位置如下:
rest数据源是通过一个http的网络接口来获取数据,需要准备的信息如下图:
1.6.2 请求地址
rest数据源支持GET和POST两种请求,要根据填入的接口地址来确认具体的请求方法。
1.6.3 请求参数
对于GET请求,用户可携带Params和Headers类型的参数;对于POST请求,用户可携带Params、Headers和Body类型的参数。 Params和Headers参数可以选择参数的值的类型:固定值,动态参数和系统变量,其中动态参数就是我们在报表中定义的报表参数,
Body参数目前只支持json格式。我们也可以在json中通过固定的写法来引用报表参数和系统变量。报表参数可以通过 $参数标识 来引用; 系统变量同样通过 $参数标识 来引用,如下图:
1.6.4 数据解析
数据解析决定的我们如何解析接口返回的数据,通过指定解析路径的方式可以解析Json格式并带有列表/数组的接口返回结果: 解析路径默认值是一个正斜线“/”,这种情况下表示接口返回的json格式是一个数组,格式如下:
[{
"orderId": "2016010313265448",
"orderDate": "2016-01-03",
"category": "食品",
"goods": "面包",
"count": 2,
"cost": 2.8,
"payment": 8.8,
"buyer": "徐先生",
"province": "江西省",
"city": "南昌市"
}, {
"orderId": "2016011352714789",
"orderDate": "2016-01-13",
"category": "服装",
"goods": "男士T恤",
"count": 1,
"cost": 41.0,
"payment": 180.0,
"buyer": "胡先生",
"province": "辽宁省",
"city": "大连市"
}]
如果请求返回的数据格式为:
{
"responseCode": "200",
"responseMsg": "success",
"responseValue": [{
"orderId": "2016010313265448",
"orderDate": "2016-01-03",
"category": "食品",
"goods": "面包",
"count": 2,
"cost": 2.8,
"payment": 8.8,
"buyer": "徐先生",
"province": "江西省",
"city": "南昌市",
}, {
"orderId": "2016011352714789",
"orderDate": "2016-01-13",
"category": "服装",
"goods": "男士T恤",
"count": 1,
"cost": 41.0,
"payment": 180.0,
"buyer": "胡先生",
"province": "辽宁省",
"city": "大连市"
}]
}
那么解析路径的值应该是“/responseValue”
通过指定解析路径的方式可以解析Json格式并带有列表/数组的接口返回结果,如果接口返回的结果不是json格式或者需要一定逻辑处理那么可以选择二次开发,通过自定义解析类解析数据。
1.6.4.1 数据解析方法扩展
我们提供了一个数据解析接口,需要依据此接口进行扩展:
package com.neusoft.report.dataset.executer.rest;
import java.util.List;
import java.util.Map;
public interface ParseDataHandler {
/**
* 解析接口返回数据
*
* @param result
* @return
*/
public List<Map<String, Object>> getDataList(String result);
}
接口只有一个getDataList方法,此接口的入参为rest接口的返回值,即:Json格式的数据,getDataList返回值为一个单纯的列表数据。
实现接口时可搭建report的二次开发工程,在实现好对应接口后,将实现类编译成class文件,按照实现类的全限定名将class文件放到report部署包中,在进行Rest数据源维护时,勾选“另指定数据解析类”,并填写类的全限定名,这个Rest数据源在解析数据时就会使用指定的类进行解析,而不是用默认的解析方法了。如下图:
1.6.4.2 js解析函数
除了以上两种数据解析方式外,还支持js函数解析,点击“解析函数”会打开,js函数解析代码编辑页面,如下图
parseFunction函数的入参data,即为rest接口返回的原始数据,在parseFunction函数体内,需要使用javascript原生的方法,将接口返回的原始数据转化为report能识别的二维数据数据(例如函数体内定义的table对象)。
编辑完parseFunction函数体以后,可点击测试执行,验证函数体书写的正确性,如果rest数据源中使用了报表参数,在点击测试执行时,会打开报表参数赋值页面, 为报表参数赋值好后,点击确定,验证函数体书写正确性。
1.6.5 用户认证
目前认证的方式只支持OAuth 2.0的客户端模式(Client Credentials)。