带query函数的润乾报表API后台导出excel空指针问题

一、问题描述:
报表动态参数表达式使用了query函数,在api运算导出报表的时候,该动态参数无法正常计算,具体报错如下:

如果该动态参数不使用query函数,则可以正常导出

二、原因分析:

计算前没准备好环境,dsc=null导致query函数无法正常计算,从而出现空指针的报错。

三、解决方案:
在Java文件中增加如下代码:
cxt.setDefDataSourceName("oracle");
cxt.setConnection("oracle", con);
DataSourceConfig dsoc = new DataSourceConfig(DBTypes.getDBType("oracle"), true, "GBK", "GBK", false);
cxt.setDataSourceConfig("oracle", dsoc);

附完整代码示例:
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import com.raqsoft.dm.Sequence;
import com.raqsoft.report.base.DBTypes;
import com.raqsoft.report.model.ReportDefine;
import com.raqsoft.report.usermodel.Context;
import com.raqsoft.report.usermodel.Engine;
import com.raqsoft.report.usermodel.IReport;
import com.raqsoft.report.usermodel.ParamMetaData;
import com.raqsoft.report.util.ReportUtils;
import com.raqsoft.report.usermodel.DataSourceConfig;
public class Test {
public static void main(String[] args) throws Throwable {
// TODO Auto-generated method stub
//第一步,读取报表模板
Context cxt = new Context(); //构建报表引擎计算环境
String reportFile = "F:\\aaa.rpx"; //该文件名可以为绝对路径,也可以相对当前程序启动路径
File flic = new File("E:/授权文件/内部测试版/集算报表内部测试版.lic");
FileInputStream lis = new FileInputStream(flic);
Sequence.readLicense( Sequence.P_RPT, lis);
//设置数据源
ReportDefine rd = (ReportDefine)ReportUtils.read(reportFile);
Connection con = null;
try{
Driver driver = (Driver) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
DriverManager.registerDriver(driver);
con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test","runqian");
}catch (Exception e){
e.printStackTrace(); }

//增加DataSourceConfig配置
cxt.setDefDataSourceName("oracle");
cxt.setConnection("oracle", con);
DataSourceConfig dsoc = new DataSourceConfig(DBTypes.getDBType("oracle"), true, "GBK", "GBK", false);
cxt.setDataSourceConfig("oracle", dsoc);
System.out.println("-------"+cxt.getDataSourceConfig("oracle")+"--------");
//参数传递
ParamMetaData pmd = rd.getParamMetaData(); //从报表定义中取得参数元对象ParamMetaData
String paramOrMocrName = "";
if(pmd != null){
paramOrMocrName = pmd.getParam(0).getParamName(); //获取参数名
cxt.setParamValue(paramOrMocrName,"77777"); //设参数值
}
//第二步,运算报表
Engine enging = new Engine( rd, cxt);
IReport iReport = enging.calc();
ReportUtils.exportToExcel("F:/test.xls",iReport,false);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值