集算器作为一种大数据计算工具,不仅在润乾产品体系中能发挥它的巨大作用,在其他绝大部分数据处理、 数据计算领域的项目、产品中,也都有他助力计算的身影。比如 传统的报表工具,报表项目中,80%的报表 可以轻松做出来,20%的因为有大数据量,或者是多样性的非常规数据来源及去向,这时候就需要占用项目 很多的时间去做二次开发支持了,通过集算器则可以轻松的解决这些问题。 这20%的困难问题,几乎所有的报表厂商都会有,润乾可以用集算器来解决,其他报表厂商,也同样可以用集 算器来解决,以此来省去那些占整个项目工期比例最多的二次开发的工作量。 集算器是基于Java解释执行的动态语言,可以在运行过程中拼出代码执行,这样可以获得更大的灵活性, 进一步降低程序设计的复杂度。 集算器应用结构如下 |
这是引入了集算器后报表应用的体系结构图,从图中可以看到,比传统报表应用结构中多了一个计算层:数据源的数据先经过计算层的计算,再传给呈现层去展现。
接下来的内容,我们将以帆软报表工具为例,介绍如何将集算器引入到其报表应用的体系结构中。
1、 加载需要用到的jar包
集算器安装路径esProc\lib下,需要引入三个基础jar包:
dm.jar 集算器计算引擎及JDBC驱动包
icu4j_3_4_5.jar 处理国际化
dom4j-1.6.1.jar 解析配置文件
注:除基础包外,还有一些特定功能的jar,比如要在集算器JDBC中读写Microsoft Office文件,则需要加入poi*.jar、xmlbeans-2.3.0.jar等。
将以上三个基础jar放置到帆软设计器安装路径WebReport\WEB-INF\lib下。
2、 部署xml配置文件
配置文件两个:raqsoftConfig.xml和dfxConfig.xml。
分别可以在[集算器安装目录]\esProc\config和[集算器安装目录]\esProc\classes目录下找到。
复制后放置在帆软的报表应用类路径下,即[帆软安装目录]\ WebReport\WEB-INF\classes。
3、 配置集算器授权
集算器脚本的执行需要授权支持,在获取到授权文件后,可在raqsoftConfig.xml中如下位置配置:
集算器授权.lic
GBK
我们这里以dfx读取excle文件数据为例,读取后展现,简单示例一下。
Excel内容如下
集算器脚本,保存为FR.dfx
其中,A1读取excel文件并将第一个sheet页的数据读入且第一行作为字段名称行。
注:excel或其他数据文件路径可以是绝对也可以是相对。
帆软报表程序数据集的开发方式可参考其文档介绍,本文不做介绍。下面直接看实现的代码(核心为jdbc获取数据,转为帆软可识别的数据格式):
packagecom.fr.data;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.util.ArrayList;
importcom.esproc.jdbc.ResultSet;
importcom.esproc.jdbc.ResultSetMetaData;
publicclass RQ_esProc_dataset extends AbstractTableData {
/**
* bubblegum20170809
*/
private static final long serialVersionUID =1L;
// 定义程序数据集的列名与数据保存位置
private String[] columnNames;
// list形式返回数据作为数据集
private ArrayList valueList = null;
// 实现构建函数,在构建函数中准备数据 ,仅返回前5列数据,f1到f5为字段名
public RQ_esProc_dataset() {
String[] columnNames ={"f1","f2","f3","f4","f5"};
this.columnNames = columnNames;
}
// 准备数据
public void init() {
// 确保只被执行一次
if (valueList != null) {
return;
}
// 保存得到的结果集
valueList = new ArrayList();
Connection con = null;
com.esproc.jdbc.InternalCStatement st;
try{
//建立集算器jdbc连接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//调用存储过程,其中FR是dfx的文件名
st =(com. esproc.jdbc.InternalCStatement)con.prepareCall("call FR()");
//执行
st.execute();
//获取结果集
ResultSet rs = (ResultSet) st.getResultSet();
//简单处理结果集,将结果集中的字段名与数据输出
ResultSetMetaData rsmd =(ResultSetMetaData) rs.getMetaData();
int colCount =rsmd.getColumnCount();
Object[] objArray = null;
while (rs.next()) {
//遍历,仅获取前5列数据转换
objArray= new Object[5];
for (int c = 1; c<=5; c++) {
Object o = rs.getObject(c);
objArray[c-1] = o;
}
valueList.add(objArray);
}
}catch(Exception e){
System.out.println(e);
}finally{
//关闭连接
if (con!=null) {
try {
con.close();
}catch(Exception e) {
System.out.println(e);
}}}}
注:通过以上代码可以看出,集算器不仅仅对报表工具所展现数据处理服务,其他java开发所需数据处理时 也可引入。
最后,将编译的class放置到对应类路径下即可,如classes/com/fr/data
1、 新建工作簿并添加程序数据集
数据集加载后效果(定义的5个字段已显示)
2、 设计简单的网格报表