2014-11-04 66 views
0

我有幾個使用每週開始日期和結束日期參數的報告。我們的目標是將這些報告按周安排並通過電子郵件發送給客戶,同時允許他們在必要時登錄並選擇他們自己的日期。在報表方面,我有startdate和enddate java.util日期參數與默認值表達式和服務器端有2個日期類型輸入參數與確切的名稱。Jasper服務器動態日期參數報告調度

默認日期由Groovy腳本計算。日期計算工作得很好;當您登錄到Jasperserver並打開報告時,它們總是正確的,報告可以手動運行。

但是報表調度程序卡住了。我將調度程序設置爲在特定日期(下週一00:05)開始,並將重複設置爲日曆類型,以在每個星期一00:05重複月份。問題是,儘管調度程序工作,它只會使用當前的日期參數,並不會在第二次運行時刷新它們。例如,如果我現在設置調度程序,下個星期一我會將報告發送到我的電子郵件,日期輸入爲startdate:3-11-14,enddate:10-11-14。這對第一次運行是正確的。但是,即將到來的幾周內,它將使用這些特定參數並且不會刷新日期。

我相信我在找什麼非常簡單。我有我的報告正確地計算了一切,我需要從Jasperserver得到的所有信息都是在每個星期一運行它,而不保存輸入參數。如果它只在預定的時間運行它,那麼所有的都會很好,但不知何故,調度程序只會在調度程序設置的日期存儲正確的參數值!

我一直在努力工作多年,真的很煩,我無法找到一個永久的,可靠的解決方案。任何幫助將不勝感激。

回答

0

這可能已經是JasperReports服務器更高版本中的新功能,但我知道這將在4.5及更高版本中工作(並且可能也適用於舊版本)。您將不得不創建一個接受「字符串」的JAVA類,您將不得不預先填充「本月」和「過去10天」之類的內容。根據傳入的字符串,它將返回正確的日期。您可以使用這些預填充字符串創建下拉參數。該類中的方法必須針對每個輸入日期進行編寫。這裏是如何做到這一點的一些實體模型樣品JRXML:

<parameter name="DateInputControl" class="java.lang.String"> 
    <defaultValueExpression><![CDATA["This Month"]]></defaultValueExpression> 
</parameter> 
<parameter name="QueryBeginDate" class="java.util.Date" isForPrompting="false"> 
    <defaultValueExpression> 
     <![CDATA[com.your.package.YourClass.getBeginDate($P{DateInputControl})]]> 
    </defaultValueExpression> 
</parameter> 
<parameter name="QueryEndDate" class="java.util.Date" isForPrompting="false"> 
    <defaultValueExpression> 
     <![CDATA[com.your.package.YourClass.getEndDate($P{DateInputControl})]]> 
    </defaultValueExpression> 
</parameter> 

顯然有一點點更多的工作比這一點,但希望這將讓你失望的路徑。我強烈建議在您的自定義JAVA類中使用JODA時間。

使用此設置,您可以使用「最近10天」等所需的預設計劃,並且您的預定報告將使用滾動日期運行。您的報告的日期現在總是基於當前日期的相對(或動態)。

+0

非常感謝您的回答。我完全得到了JRXML的一部分,但從未寫過Java類,因此現在必須深入研究這一部分。如果你有任何提示/頁面,我可以按照這將是偉大的。感謝致敬。 – Martin83 2014-11-06 16:44:40

+0

也是一個潛在的問題,我想到了:一個下拉菜單,如「上週」或「上個月」的選項是偉大的,但我也需要用戶有選擇他們自己的日期的選項。所以第三個(?)選項必須是「自定義」,以某種方式打開日曆以選擇日期.... – Martin83 2014-11-06 17:16:51