birt参数处理琐碎记录

------在数据集的beforeopen方法中替换:
var sql = "select * from tablename where 1=1 and ...";
this.queryText = sql;

++++++ 说明this.queryText 是指整个sql语句

------ birt的修改记录
所属项目org.eclipse.birt.report.viewer
修改类 所属包及类名org.eclipse.birt.report.service.ReportEngineService
修改目的:将session中的sql放在上下文中
修改方法:
private void runAndRenderReport(HttpServletRequest request,
IReportRunnable runnable, OutputStream outputStream, String format,
Locale locale, boolean rtl, Map parameters, boolean masterPage,
boolean svgFlag, Boolean embeddable, List activeIds,
HTMLRenderContext htmlRenderContext) throws RemoteException {
//lbd add20061117
context.put("hql", request.getSession().getAttribute("hql"));
}
所属项目org.eclipse.birt.report.engine
修改类 所属包及类名org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter
修改目的:将上下文中的sql取出依据dataSet的名字替换设计文件中的slq
修改方法:
IOdaDataSetDesign newOdaDataSet( OdaDataSetHandle modelDataSet,
ExecutionContext context ) throws BirtException
{// lbd modify 2006117
if (queryTextBinding != null) {
System.out.print("替换以前的sql" + queryTextBinding + "\r\n");
Map map = context.getAppContext();
Map sqlmap = (Map) map.get("hql");
if (sqlmap.get(dteDataSet.getName()) != null) {
queryTextBinding = (String) sqlmap.get(dteDataSet.getName());
System.out.print("替换以后的sql" + queryTextBinding + "\r\n");
}
}
if (needPropertyBinding() && queryTextBinding != null
&& queryTextBinding.length() > 0) {
dteDataSet
.setQueryText(evaluatePropertyBindingExpr(queryTextBinding));
} else {
System.out.print("替换以前的sql" + modelDataSet.getQueryText() + "\r\n");
Map map = context.getAppContext();
Map sqlmap = (Map) map.get("hql");
if (sqlmap.get(modelDataSet.getName()) != null) {
queryTextBinding = (String) sqlmap.get(dteDataSet.getName());
System.out.print("替换以后的sql" + queryTextBinding + "\r\n");
}
//dteDataSet.setQueryText(modelDataSet.getQueryText());
dteDataSet.setQueryText(queryTextBinding);
}
}

------ 开发人员作带打印的查询时注意事项
在有打印的界面时要在查询的action方法中添加如下的代码:
//移除session中已经存在的数据集的map
if (request.getSession().getAttribute("hql") != null) {
request.getSession().removeAttribute("hql");
}
//将执行的hql转换为sql语句Employer是hql中的类名。AB01是数据库中要查询的表名
hql=hql.replace("Employer","AB01" );
hql=hql.replace("as","" );
//构造数据集的map dataSet1是数据集的名字, hql是对应的sql语句
HashMap map = new HashMap();
map.put("dataSet1", hql);
//将数据集的map放与session中
request.getSession().setAttribute("hql", map);
目的是将查询的sql保存在session中以便在打印时使用该sql。
另外在数据库SYSPRINTCONFIG表中插入如下数据
DATASETNAME =dataSet1 ;//对应map中的dataSet1
SQL = Select ab01.aab001, ab01.aaa021,ab01.aab003, ab01.aab004,ab01.aab019, ab01.aae004,ab01.aae005,ab01.aab020,ab01.aae119,ab01.aab021 From AB01 where 1=1
//对应map中的hql
Descript=基本信息管理 -> 单位信息管理 -> 单位查询: 单位查询
//对应页面的功能信息
Actionid=com.lbs.apps.basicinfo.rp.EmployerAction.printEmployer
//对应打印action的包类及方法
fillepathname=reports\basicinfo\employerList.rptdesign
//对应报表设计文件的相对路径及文件名。该字段在报表设计完毕以后在修改。开始时为空!
--------
实施人员开发报表注意事项
实施人员在做报表打印时数据集的名字和对应的sql语句从数据库的SYSPRINTCONFIG表中取得
比如做如下的打印
基本信息管理 -> 单位信息管理 -> 单位查询: 单位查询的打印可以利用如下语句来得到相关的数据集名字和对应的sql
select * from sysprintconfig where Descript like '基本信息管理 -> 单位信息管理 -> 单位查询: 单位查询'
这里得到
DATASETNAME =dataSet1 ;//对应map中的dataSet1
SQL = Select ab01.aab001, ab01.aaa021,ab01.aab003, ab01.aab004,ab01.aab019, ab01.aae004,ab01.aae005,ab01.aab020,ab01.aae119,ab01.aab021 From AB01 where 1=1
Descript=基本信息管理 -> 单位信息管理 -> 单位查询: 单位查询
Actionid=com.lbs.apps.basicinfo.rp.EmployerAction.printEmployer

将你设计的报表的数据集用dataSet1作为报表设计中的data set的名字
Select ab01.aab001, ab01.aaa021,ab01.aab003, ab01.aab004,ab01.aab019, ab01.aae004,ab01.aae005,ab01.aab020,ab01.aae119,ab01.aab021 From AB01 where 1=1
作为你的报表设计中的sql
其他的按照原先的做就可以了,开发完毕以后和开发人员联系把报表信息添加到系统中
如果找不到相应的信息请于开发人员联系。
++++++++ 修改的结果是 可以把整个sql 或者是参数放在session
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值