润乾API计算报表组
一些客户要把报表组放到CS模式下运行,而不是我们平时所使用的BS模式,客户在CS模式中要展现报表组,并且用API给报表构造所需要的数据库连接,也就是数据源。这样也就没有了我们平时配置的数据库连接池等属性,所有的代码都要写到一个java类里面。
下面就用代码来示范一下如何在CS模式中实现报表组的计算和展现。
第一步:制作好一个报表组,也就是rpg文件,报表组的样式如下图所示:
值得注意的是由于是在java类里面,没有报表应用的运算环境,所以子报表都用绝对路径的形式引入。
第二步:在java类里面获取报表运算所需要的数据库连接。
这里写了一个连接demo数据库的工具类,类返回的是一个Connection对象,类的代码如下:
import java.sql.*;
public class ConnectDemo {
private String driver = “org.hsqldb.jdbcDriver”;
private String url = “jdbc:hsqldb:hsql://localhost/runqianDB”;
private String user = “sa”;
private String passwd = “”;
Connection conn = null;
public Connection getConnection(){
try {
Class.forName(driver);
conn=DriverManager.getConnection(urluserpasswd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
}
第三步:将数据库连接放到报表的运算环境中,并且设定报表的数据源。
对应的代码如下:
ConnectDemo cd = new ConnectDemo();
Connection conn = cd.getConnection();
DataSourceConfig dsc = new DataSourceConfig(DBTypes.UNKNOWN,true“GBK”“GBK”false);
Context ctx = new Context();
ctx.setConnection(“demo”, conn);
ctx.setDataSourceConfig(“demo”, dsc);
ctx.setDefDataSourceName(“demo”);//设置默认数据源
第四步:计算报表组,并分别在CS模式中展示报表组中的报表项。
用API构造报表引擎,在调用上一步中构造的报表组运算环境运算报表,并分别在CS模式中展示报表组中的报表项,具体的代码如下:
ExtCellSet.setLicenseFileName(“D:/安装文件/润乾安装/License4.0[64100621100826_640000]/技术应用中心专用授权Server2010-12-31V4.0Windows.lic”);//设置授权
GroupEngine ge = new GroupEngine(reportgroup, ctx);//构造引擎
IReport report1 = ge.get(0);//计算报表组中的报表项1
IReport report2 = ge.get(1); //计算报表组中的报表项2
CSReport csr1 = new CSReport(report1);
JFrame frame1 = new JFrame();
frame1.getContentPane().add(csr1.getDisplayPane());
frame1.setSize(1200, 800);
frame1.setLocation(200, 100);
frame1.setVisible(true);
CSReport csr2 = new CSReport(report2);
JFrame frame2 = new JFrame();
frame2.getContentPane().add(csr2.getDisplayPane());
frame2.setSize(1200, 800);
frame2.setLocation(200, 100);
frame2.setVisible(true);
完整的代码如下所示:
import java.sql.Connection;
import javax.swing.JFrame;
import com.runqian.base4.util.DBTypes;
import com.runqian.report4.model.engine.ExtCellSet;
import com.runqian.report4.usermodel.CSReport;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.DataSourceConfig;
import com.runqian.report4.usermodel.IReport;
import com.runqian.report4.usermodel.ReportGroup;
import com.runqian.report4.util.ReportUtils;
import com.runqian.report4.ide.GroupEngine;
public class TestGroup {
/**
* @param args
* @throws Throwable
*/
public static void main(String[] args) throws Throwable {
String group = “F:/group.rpg”;
ReportGroup reportgroup = ReportUtils.readReportGroup(group);
ConnectDemo cd = new ConnectDemo();
Connection conn = cd.getConnection();
DataSourceConfig dsc = new DataSourceConfig(DBTypes.UNKNOWN,true, “GBK”, “GBK”, false);
Context ctx = new Context();
ctx.setConnection(“demo”, conn);
ctx.setDataSourceConfig(“demo”, dsc);
ctx.setDefDataSourceName(“demo”);
ExtCellSet.setLicenseFileName(“D:/安装文件/润乾安装/License4.0[64100621100826_640000]/技术应用中心专用授权Server2010-12-31V4.0Windows.lic”);
GroupEngine ge = new GroupEngine(reportgroup, ctx);
IReport report1 = ge.get(0);
IReport report2 = ge.get(1);
CSReport csr1 = new CSReport(report1);
JFrame frame1 = new JFrame();
frame1.getContentPane().add(csr1.getDisplayPane());
frame1.setSize(1200, 800);
frame1.setLocation(200, 100);
frame1.setVisible(true);
CSReport csr2 = new CSReport(report2);
JFrame frame2 = new JFrame();
frame2.getContentPane().add(csr2.getDisplayPane());
frame2.setSize(1200, 800);
frame2.setLocation(200, 100);
frame2.setVisible(true);
}
}
运行上面的代码后可以看到如下图的效果:
报表组中的两个报表项都被计算出来,并且在frame中展现了,这样在CS模式下计算报表组并展现的需求就实现了。