2014-11-04 89 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