1.6 API数据源的实现步骤

概述

API数据源即自定义数据源,是UniEAP Report产品中数据源的的扩展方式之一。用户通过实现约定的接口,自己写代码来获取或生成数据,理论上可以让任意来源的数据为报表所用。例如,编写查询数据库的代码,返回相应的数据,就可以替代SQL数据源、存储过程数据源。

实现步骤

1.实现com.neusoft.report.engine.dataset.executer.api. APIDataEntity接口,该接口又继承com.neusoft.report.engine.dataset.datasource. DataEntity接口。要实现的方法列表如下。

// 查询满足条件的数据
public void query(Map params, Map context);
// 如果数据实体中还有更多数据,则返回true,否则返回false。
public boolean hasNext();
// 返回数据实现中的下一个数据项
public Object[] next();
// 返回数据实体中数据项的个数
public int size();
// 返回数据实体的名称
public String getName();
// 返回对于数据实体的描述信息
public String getComments();
// 返回数据实体中所有域(字段)的名字集合
public String[] getFieldNames();
// 根据域名返回数据实体中的某个域
public Field getField(String name);
// 返回数据实体中所有域的集合
public Field[] getFields();
// 返回数据实体中域的个数
public int fieldSize();
// 返回数据实体的分类信息,例如直接返回”api”
public String getCategory();

几点说明:

a) com.neusoft.report.engine.dataset.datasource.Field,类似于关系型数据库中列的概念,是对列信息的描述,包含字段名称、字段类型和字段描述。本身是一个接口,其实现类的定义如下:

public class FieldImpl implements Serializable, Field {

    private static final long serialVersionUID = 1308755359669685961L;

    /** 字段名称 */
    private String name;

    /** 字段类型 */
    private byte type;    

    /** 字段Comments */
    private String comments;

    public FieldImpl(String name, byte type, String comments ){
        this.name = name;
        this.type = type;
        this.comments = comments;
    }

    public String getName() {
        return this.name;
    }

    public byte getType() {
        return this.type;
    }

    public String getComments(){
        return this.comments;
    }

}

type字段的取值可以使用com.neusoft.report.commonbase.datavalue.DataValue中的常量,以下为几种常用类型:

public static final byte STRING    = 1;
public static final byte BOOLEAN   = 2;
public static final byte INTEGER   = 3;
public static final byte DECIMAL   = 4;
public static final byte DATETIME  = 5;

b) next()方法的返回值Object数组。相当于关系型数据库表中的一行,数组中的每个值分别对应一个字段(Field)。c) query()方法,它的params参数包含了各报表参数、系统变量的值,context参数包含了一些上下文信息,如报表id、用户id、本次访问报表的HTTP请求等。

在query()方法中获取报表参数的值,可以有两种方法。

(1) 通过params参数获取:

// 获取整型参数type的值
int type = DataValueUtil.intValue(((DataValue) params.get("type")));
// 获取字符串参数id的值
String id = DataValueUtil.stringValue(((DataValue) params.get("id")));

(2) 通过context获取HTTP请求对象,再取参数值。除报表参数外,这种方法也可用于获取其他的请求参数:

// 获取HTTP请求对象
HttpServletRequest req = (HttpServletRequest) context.get("HTTP_REQUEST");
// 获取整型参数type的值
int type = Integer.valueOf(req.getParameter("type"));

2.在\WEB-INF\conf\unieap\report\datasource.xml文件中添加API数据源的配置,例如:

<Category Name="api" Caption="自定义数据源"
 SourceClass="com.neusoft.unieap.dataset.datasource.impl.APIDataSource"
QuerierClass="com.neusoft.unieap.dataset.executer.api.APIDataSetExecuter">
    <DataSource Name="sample API" Caption="API 样例库">
        <DataEntity Name="APIDataSetSample" Caption="products">
            <Parameters>
                <Param Name="classname" Value='com.neusoft.unieap.dataset.executer.api.APIDataSetSample />
            </Parameters>
        </DataEntity>
    </DataSource>
</Category>

其中APIDataSetSample是自定义数据源的实现类,DataEntity的Caption属性可以取任意有一定意义的值。

创建API数据集

(1)在数据集管理菜单上,点击“+”按钮,选择Api数据集,如下图所示:

1

(2)选择配置好的数据源并添加标题名称,如下图所示:

2

(3)点击下方确定即成功创建数据集,如下图所示:

3

results matching ""

    No results matching ""

    results matching ""

      No results matching ""