历史版本19 :数据工厂数据集 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

1.1 版本

报表服务器版本
JAR 包版本插件版本
10.02019-12-30V2.1
9.02018-01-01V1.1

1.2 应用场景

对 FineReport 的程序数据集接口进行改善和封装。

解决原来的程序数据集配置项难剥离代码的问题,解决原来程序数据集复用率低的问题,解决原来程序数据集在动态参数时无效的问题。

注:使用该插件需要具备最基础的 FineReport 插件开发能力。

1.3 功能介绍

插件提供了额外的取数接口,将 FineReport 的数据集逻辑再次切割为两个部分:

  • 装载器:从数据来源装载数据。

  • 解析器:将装载到的数据组装成 FineReport 支持的数据模型。

插件内置了两个装载器和一个解析器,分别如下:

1)装载器:

  • 参数装载器:数据通过参数直接传入。( 比如 JSON、XML 等结构化数据 )

  • 网络数据装载器:通过配置相关请求,从 Web 端装载数据。( 比如 JSON 服务、WebService 服务等等 )

2)解析器:

  • JSON 解析器:对结构化的 JSON 文本进行解析,生成 FineReport 支持的数据模型。

注:只能解析结构型描述的 JSON,业务型描述的 JSON 无法解析,业务型 JSON 解析依赖具体的业务的描述,需要单独实现解析器。

  • WS 解析器:解析 WS 服务的响应。( 2.4.0版本已移除)

  • 原始解析器:原样返回数据,供调试用。

1.4 更新日志

    2.4.0 

            优化参数传递逻辑。现在默认值在预览时生效了

            移除了wsdl解析器装载器

            调整了单参数装载器逻辑  会影响现有用到单参数的数据集使用

            国际化适配

            

2. 插件介绍编辑

2.1 插件安装

点击下载插件:数据工厂数据集

设计器插件安装方法参照:设计器插件管理

服务器安装插件方法参照:服务器插件管理

2.2 操作方法

1)插件安装后,数据集管理面板新增数据工厂数据集,如下图所示:

Snag_111cc73f.png

2)HTTP 装载器中( 支持${}参数和公式写法 ):

  • type:支持 GET、POST、JSON 这 3 种。

  • properties:是对一些特殊请求需要用到的。( 比如需要在 Header 中携带一些认证属性、Cookie 等 )

   GET:最基础的用法 url:请求的地址,charset,编码格式,header 请求头。

参数栏里面的参数会在后台被分为两类,第一类是装载器界面出现过的参数(${参数}),第二类则是未出现过的。出现过的会解析到装载器配置的字符串里,而剩下的则作为请求的参数

{
    url:"www.114.com",
    type:"GET", 
    charset:"UTF-8",
    header:{
        aa:${bb}
    }
}
参数      值
bb          BB
cc          CC
 
实际请求为 url:www.114.com?cc=CC header:{aa:BB}


POST和GET类似,不同之处就是参数在请求体里 以x-www-form-urlencoded形式传入

{
    url:"www.114.com",
    type:"POST", 
    charset:"UTF-8",
    header:{
        aa:${bb}
    }
}
参数      值
bb          BB
cc          CC
 
实际请求为 url:www.114.com header:{aa:BB} body:cc=CC

JSON 实际上是post raw模式,第二类参数会被装载成JSON的格式作为请求体发送。

body有两种装载方式,一种是类似用post get的


{
    url:"www.114.com",
    type:"JSON", 
    charset:"UTF-8",
    header:{
        aa:${bb}
    }
}
参数      值
bb          BB
cc          CC
 
实际请求为 url:www.114.com  type:post  header。 里面会加上content-type: json
header:{aa:BB}
body为
{
    cc:CC
}

第二种是直接写body键


{
    url:"www.514.com",
    type:"JSON", 
    charset:"UTF-8",
    header:{
        aa:${bb}
    },
    body:{
        cc:${dd}
    }
}
参数      值
bb          BB
dd          DD
 
实际请求为 url:www.514.com  type:post。 header 里面会加上content-type: json
header:{aa:BB}
body为
{
    cc:DD
}


1590397024266349.png

注1:数据工厂配置界面的缓存是指数据集的缓存,有缓存的话,不走接口取数,直接从缓存里面取数。

注2:缓存有 3 个选项:无、磁盘、内存。选择表示不启用缓存功能,选择磁盘表示缓存到本地磁盘,选择内存表示缓存到内存。

注3:暂不支持BI

1591942143109028.png

3)单参数装载器中:

直接写入数据 (2.4.0版本及以后)


通过 data 带入数据。(2.4.0版本前)

222

4)JSON 解析器:

  • dataPath:就是待展示数据的节点。( 可能并不是所有的数据都要展示,这个是原生实现的,比较简单,只支持部分 JPath 的写法 . [] 示例:root.key1.key2.arr[1] 就表示定位到{ key1 : { key2 : { arr:[ {},{<这里>} ] } } },只解析定位路径下的json内容

  • showmap:因为 JSON 数据字段很多都是一些路径的描述,对于做模板而言看起来会比较吃力,提供一个字段名转义的配置:

例如 path1_key1,path1_key2 这两个字段分别对应姓名,年龄,则写法为:path1_key1,姓名,path1_key2,年龄

222

5)SOAP 装载方式( 目前只支持 10.0 版本 ):

  • wsdl:就是你的 WS 服务 wsdl 的 URL 。

  • operation:就是你要调用的方法名。

  • parameters:就是要传递的相关参数,目前不支持传递数组型参数。

  • cache:默认传递 true 就好了。( 提升速度的,会略微消耗一点内存,如果不介意快慢的可以给 false,节省内存 )

ws.png

3. 接口介绍编辑

3.1 装载器接口

package com.tptj.plugin.hg.fun;

import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.stable.fun.mark.Mutable;

public interface Loader extends Mutable {

String XML_TAG = "TableDataLoader";

    int CURRENT_LEVEL = 1;
    
/**
 * 装载数据
 * @param cal  当前算子
 * @param params  需要用到的参数
 * @param others 其他你可能用到的但是又不希望通过参数控制的配置项
 * @return 保存数据的对象
 */
Object load( Calculator cal, ParameterProvider[] params, String others);

/**
 * 装载器的名字【显示在数据工厂配置界面的下拉列表里面的】,唯一,支持国际化的key
 * @return
 */
String getName();

/**
 * 
 * @return 默认显示的配置【显示在数据工厂配置界面装载器配置文本域里面的,配置项自定义,其实就是放一些,不想写死在代码里,又不希望被参数篡改的部分】
 */
String getDefaultConfig();
}

1591942143109028.png

package com.tptj.plugin.hg.fun;

import com.fr.stable.fun.mark.Mutable;
import com.tptj.plugin.hg.stable.SimpleDataModel;

public interface Resolver extends Mutable {

String XML_TAG = "TableDataResolver";

    int CURRENT_LEVEL = 1;

/**
 * 解析数据
 * @param data 从装载器得到的原始数据
 * @param others  解析时会使用,但是不希望是参数的配置
 * @return 解析出来的二维数据模型
 */
SimpleDataModel parse(Object data, String others );

/**
 * 解析器的名字【显示在数据工厂配置界面的下拉列表里面的】,唯一,支持国际化的key
 * @return
 */
String getName();


/**
 * 
 * @return 默认显示的配置【显示在数据工厂配置界面解析器配置文本域里面的,配置项自定义,其实就是放一些,不想写死在代码里,又不希望被参数篡改的部分】
 */
String getDefaultConfig();

}

plugin.xml 注册

<dependence>    
        <Item key="com.tptj.plugin.hg.tabledata.factory.v10" type="plugin"/>
</dependence>
<extra-core>
    <TableDataLoader class="com.tptj.plugin.hg.tabledata.factory.core.loader.HttpLoader"/>
    <TableDataLoader class="com.tptj.plugin.hg.tabledata.factory.core.loader.SingleParamLoader"/>
    <TableDataResolver class="com.tptj.plugin.hg.tabledata.factory.core.resolver.JSONResolver"/>
</extra-core>

附:

被移除的soap模块,仅兼容用不维护与支持

fine-plugin-com.fr.plugin.jee.tabledata.factory.soap-1.0.zip