搜索文章

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 报表技术分享 > 快逸API计算报表组

快逸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;

publicConnection getConnection(){

try {

Class.forName(driver);

conn=DriverManager.getConnection(url, user, passwd);

} 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模式下计算报表组并展现的需求就实现了。

本文标签: