2014-09-24 124 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