一个比较好的birt问题解决网址: http://www.myexception.cn/h/1335919.html

1,Birt的JavaScript脚本简单调试

Birt中的js脚本不能用alert直接弹出提示,也没法用断点跟踪(至少我没发现)。用一个简单方法可以打印,在脚本里写上

importPackage(Packages.java.lang);
  System.out.println("test===");

就可以再控制台里打印出来,进行简单的调试了。

需要注意的是,必须要把报表部署在tomcat下才能打印,用Preview预览模式不能打印。

2,Eclipse Birt使用动态sql创建data set

来自: http://3ccoder.iteye.com/blog/545550

    Eclipse Birt可以使用sql query来创建数据集,通过在报表中设置参数(Parameter)来传递客户端的用户输入,同时可以设置data set参数并且与报表参数关联(这两个参数是不同的),这样可以将客户端的用户输入传递给data set的参数供sql query的where语句使用,这是通常的创建sql语句的做法,但是种方法只适合固定的sql语句,对于动态的sql就不适用了。
如这样一条sql query

  1. select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay
  2. from user_table user
  3. where user.second_name = ?
  4. and  user.sex = ?

定义两个报表参数SecondName,Sex定义两个data
set参数secondname,sex并与报表参数关联,用户查看报表时必须要输入姓和性别作为查询条件,

如果不输则对应的参数值就是null,假如查
姓李的人,性别不输,
则sql语句就变成这样select ... from ... where user.second_name = '李'
and user.sex = null
显然这样的sql是查不出结果的,
哪有sex是null的人呢?对于这种情况应该是如果用户某一个参数不输则不将它做为查询条件,
上面的sql应该变成
select ... from ... where user.second_name =
'李'就合理了,
 
方法有两种:

一、date set编辑器中有property binging的属性,可以在右边的query text框中设输入sql语句,或者用expression生成器辅助生成sql语句

  1. var query = " select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay";
  2. query += " from user_table user";
  3. query += " where user.second_name = ?"
  4. if(param["Sex"].value != null){
  5. query += " and  user.sex = '" + param["Sex"].value + "'";
  6. }
  7. this.text = query;

我试了一下,这种方法没有成功,可能我哪里写的有误吧。

二、利用script,在data set的before open事件中

  1. var query = " select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay";
  2. query += " from user_table user";
  3. query += " where user.second_name = ?"
  4. var sex = reportContext.getParameterValue("Sex");
  5. if(sex != null){
  6. query += " and  user.sex = '" + sex + "'";
  7. }
  8. this.queryText = query;

我试了一下,这种方法成功了

 
   注意: 还是需要在 数据集的 查询 里面写sql语句的,通常我们就写 select XXX from  YYY 就可以了,where语句后面的,尤其是需要条件判断的 就写在脚本中.
 
   比如我写的:一点片段  
var termId = reportContext.getParameterValue("终端ID");  这种形式是正确大的
params["自助银行"] , 这种拿不到值,需要改掉
// 机构号
this.queryText+=" where SELFCUR.BIZ_MAIN_TRANS.BANK_NO='" + params["自助银行"] + "'";

// 终端号或者柜员号二选一
if(params["终端ID"]!= null){
this.queryText += " and SELFCUR.BIZ_MAIN_TRANS.TERM_ID= '" + params["终端ID"] + "'";
}else{
this.queryText += " and SELFCUR.BIZ_MAIN_TRANS.TELL_NO= '" + params["柜员ID"] + "'";
}

这两种方法的区别在于:第一种方法是在报表run的时候创建data set,因此在data
set编辑器里是没有办法像通常那样预览的

    而第二种方法是写在data set的beforeOpen中的,所以在打开data
set之前会创建data set因此可以像通常那样预览数据集结果等等

      第一种方法中用param["sex"].value获得Sex参数值,而第二种方法需要利用reportContext来获取Sex参数的值
 
     经过我的试验现在的birt版本,在第二种中,获取报表参数值时采用 params["终端ID"] params["终端ID"].value 即可.

另外需要注意的是在拼凑sql时要细心,例如如果参数是String类型时前后一定要加上一对''(具体的取决于所使用的数据库,笔者使用的是oracle) 

birt-j脚本调试 & 动态sql的实现的更多相关文章

  1. 浏览器调试动态js脚本

    前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引入的,可能是因为这样所以不显示出来,但是如果不能断点调试,只 ...

  2. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  3. Java数据持久层框架 MyBatis之API学习七(动态 SQL详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  4. db2存储过程动态sql被截断

    编写存储过程,使用动态sql时,调试时发现变量赋值后被截断. 关键代码如下: 实现的效果是先把上下游做对比的sql语句和相关参数存入RKDM_DATA_VOID_RULE, 执行存储过程后把两个sql ...

  5. mybatis动态sql——(六)

    0     什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 通过mybatis提供的各种标签方法实现动态拼接sql.

  6. MySQL通过视图(或临时表)实现动态SQL(游标)

    >参考de优秀文章 写MySQL存储过程实现动态执行SQL Dynamic cursor in stored procedure MySQL通过视图(或临时表)实现动态SQL(游标). 因在实现 ...

  7. 【长文】Spring学习笔记(七):Mybatis映射器+动态SQL

    1 概述 本文主要讲述了如何使用MyBatis中的映射器以及动态SQL的配置. 2 MyBatis配置文件概览 MyBatis配置文件主要属性如下: <settings>:相关设置,键值对 ...

  8. Mysql - 游标/动态sql/事务

    游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...

  9. 用脚本定时监控SQL Server主从一致性

    用脚本定时监控SQL Server主从一致性 首先说一下我们的环境 我们使用的是事务复制,复制是单向的,主服务器和从服务器都在同一个机房,当然不同机房也可以,只需要改一下IP和端口 下面的脚本在我们的 ...

随机推荐

  1. mysql服务器主从数据库同步配置(转)

    <a href=""></a> <p>首先需要在同一个局域网内的两台机器(当然也可以用一台机器虚拟两台机器出来),都安装上mysql服务.< ...

  2. java 数组去重总结

    如果一个数组中有重复元素,用什么方法可以去重?有其他方法继续更新 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> ...

  3. Springboot系列文章

    一.springboot简介1.前世今生 在boot没有出现之前,基于spring的开发,常常需要配置大量的xml文件.工程狮们苦不堪言,渐渐厌倦了配置文件的复制黏贴.spring家族因为这件事,也经 ...

  4. 【JBoss】数据库连接配置小结(转)

    数据库驱动位置: %JBOSS_HOME%\server\default\lib目录下. 数据库配置文件位置:JBOSS_HOME\docs\examples\jca\XXXX-ds.xml < ...

  5. 安全终端模拟工具Xshell 5使用密钥认证登录配置详细教程

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. Xshell支持SSH1 / SSH2协议,密码和DSA / RSA公钥用户认证方式等各种安全功能,并对各种加密算法进行加密.使用内置的Xshe ...

  6. CY7C68013A控制传输

    大家好,你们的大熊又回来了.本篇文章我们来重点了解一下USB设备的四大传输方式之一--控制传输.不同于其他三种传输方式,控制传输有其独特的作用和功能,是一个USB设备必须支持的传输方式.控制传输对带宽 ...

  7. 说说我和QQ和她的故事

    这篇文章纯属感慨而写, 没有教学性质,额我是Jyang 2780217151是我现在用的QQ,然而这并不是我要说的 大概在11年还是12年的时候,我玩这些所谓的黑客圈子,以前的网名我就不说了. 我记得 ...

  8. SpringBoot 注解事务声明式事务

    转载请注明: http://www.cnblogs.com/guozp/articles/7446477.html springboot 对新人来说可能上手比springmvc要快,但是对于各位从sp ...

  9. anaconda安装加速镜像问题解决

    Anaconda使用conda连接网络出现错误 我使用的是windows10 64bit下的Anaconda2,在安装和更新包的时候出现以下报错信息. 这是使用默认源安装包的报错信息: C:Users ...

  10. 斐波那契数列—Java

    斐波那契数列想必大家都知道吧,如果不知道的话,我就再啰嗦一遍, 斐波那契数列为:1 2 3 5 8 13 ...,也就是除了第一项和第二项为1以外,对于第N项,有f(N)=f(N-1)+f(N-2). ...