2014-09-24 122 views
0

NewParameter类型为DATE,在参数窗口中的自定义格式为MM/dd/yyyyBirt报告参数验证

我写了下面的代码来验证用户是否发送正确的格式。如果用户发送24/12/2014,代码应该将错误报告为Invalid format。但是,下面的代码是引发错误甚至当用户发送的正确格式如:11/10/2014

importPackage(Packages.java.lang); 
importPackage(Packages.java.text); 

sdf = new SimpleDateFormat("MM/dd/yyyy"); 
testDate = null; 
dateerror=false; 

try { 
    testDate = sdf.parse(params["NewParameter"]); 
    dataerror=false; 
} catch (e) { 
    errorMessage = "the date you provided is in an invalid date"; 
    eee = e; 
    dateerror=true; 
    reportContext.getDesignHandle().findElement("mytable").drop(); 
} 
+0

删除了将日期参数NewParameter.Declared NewParameter解析为Date数据类型并将CustomFormat格式设置为MM/dd/yyyy并将NewParameter的值设为111/122/2014的功能,但Birt不能抛出该错误。 – 2014-09-26 09:28:18

回答

1

似乎有一个困惑:当我们声明的报告参数为“DATE”,我们不必解析它在报表脚本中,因为它已经是一个java Date对象。因此,这行代码是错误的,因为解析器会想到一个“字符串”类型:

testDate = sdf.parse(params["NewParameter"]); 

自定义格式“MM/DD/YYYY”你链接到报表参数未实际使用的报表引擎:只有网页浏览器才会考虑,以指定日期应该如何显示在参数对话框中。

实现您的要求的最佳方式是定制您的webviewer的客户端JavaScript,以便在Web浏览器中控制日期格式。此方法的一个示例允许通过日历输入日期,例如here

否则,如果您确实需要在报表执行过程中验证格式,虽然它不是很优雅,但唯一的方法是将参数设置为“字符串”类型,并将脚本置于报表的“初始化”事件中。但是在这种情况下,每次在数据集中使用它时都必须解析它,或者在报表变量中解析它。

+0

嗨,我作为字符串类型的NewParameter和验证和测试案例1:12/01/2014它显示其正确的格式(您提供的日期是在有效的日期)。案例2:12-01-2014其显示的格式不正确(您提供的日期在无效日期)。情况3:122/100/20140它显示为正确的格式日期(您提供的日期是在有效的日期)。但在情况3中它不是一个正确的日期,因为你看到.Birt脚本不处理日期函数的解析正确的方式来处理这个问题。 – 2014-09-25 07:18:44