这段一直在做“润乾报表”的相关事宜。

这玩意儿没有用过,现在正在一边看文档一边动手干。有以前的老同事摸索了一些经验,内部消失成录制好的AVI的视频了。现在也在看。Google不出来更多有关“润乾”的资料了。只得自己摸索。现在记录下来在“过河”过程中摸到的解决或未解决的“石头”。
 
软件环境如下:润乾设计器4.0,Oracle 9i,Windows Advance Server 2000,JDK 1.6.02

一、 对表中一列设置单元格格式时,如果查询出该列的值中有空值存在,就会报空指针异常,但如果使用“if(value()==null,’’)”把空值(null)转为空串的话,其在单元格里设置的显示格式对于有数据的行就不会生效,仍以默认格式输出。

 
准备知识:

一、 if()

函数说明:

根据布尔表达式的不同计算结果,返回不同的值。本函数从左到右计算,先出现的布尔表达式先算,如果出现为true的表达式,则返回相应的结果,后面的不再计算。如果没有一个布尔表达式为true,而且有缺省值表达式,则返回缺省值,否则返回null。

语法:

if(boolExp1,valueExp1{,boolExp2,valueExp2 {,boolExp3,valueExp3 {, {defaultExp}}}})

参数说明:

boolExp(n)        布尔表达式,如果结果为真,则返回对应的值表达式计算结果

valueExp(n)        值表达式,和布尔表达式一一对应

defaultExp        缺省值表达式,如果所有布尔表达式结果都为假,则返回本表达式计算结果

返回值:

数据类型不定,由valueExp(n)的运算结果决定。

示例:

例1:if(value()>100,-65536,value()<=100 and value()>80,-16776961,-14336 )

  表示当前格的值大于100时,返回-65536颜色值,当前格的值小于等于100且大于80时,返回-16776961颜色值,否则返回-14336颜色值


二、 value()

     函数说明:

        取得当前单元格的值

     语法:

        value()

     返回值:

        当前单元格的值

 

三、 dateTime()

   函数说明:

        将字符串或长整数转换成日期时间

   语法:

        dateTime(string)

        dateTime(long)

   参数说明:

        string        格式为yyyy-MM-dd HH:mm:ss的字符串

        long        以微秒计的长整数

   返回值:

        日期时间

   

   示例:

        例1:dateTime("2006-01-01 10:20:30")        返回:2006-01-01 10:20:30

        例2:dateTime("2006-01-01 10:20:30:111")    返回:2006-01-01 10:20:30

        例3:dateTime(12345)                返回:1970-01-01 08:00:12


问题原因:

如果在该单元格里设置了对null值的解决判断语句后,系统会把符合判断的值进行设定,即设定成“value()==null,”后值的,而不满足条的值(即value()不为null)的值直接进行输出。并不遵循在单元格里设置的格式。

 
解决方法:

    基本思想是把为null和不为null两种情况的值统一输出,都使用润乾提供的内部函数进行处理。这样就可以看成是统一下格式。如果对单元格设置的格式对其中之一生效,那么另一种情况的输出也同样生效。其中用的三个内置函数if(),value()和dateTime()。最终拼出的判断语句如下:

if(value()==null,’’,value()!=null,dateTime(ds3.birthday))

注:当value()等于null时,用’’空串代表,如果value()不等于null时,将查询出来的日期型变量进行一次转换,这次转换其实只是强调一下转换为默认日期格式,不使用dateTime()应该也是可以的。但个人认为使用一下,可以保证数据在最大可能性下的正确。

二、 按照“润乾”所提供的手册中所讲例子,不能在报表的“行属性”中设置“报表尾”,会提示“行类型排列不正确”的错误。从手册里没有找到有关“行属性”中那堆行类型排序的说明。到 2007 年 10 月 9 日下午 15 时 16 分前 没有解决。这个不是急活,待有空再来解决。