Mysql 圣杯&x2B;BIRT报告-根据BIRT报告的日期选择和传递月份和年份

Mysql 圣杯&x2B;BIRT报告-根据BIRT报告的日期选择和传递月份和年份,mysql,date,grails,birt,Mysql,Date,Grails,Birt,我已经将BIRT报告集成到Grails中,并设计了一个报告。 我在grails应用程序中有一个名为startPeriod(仅限月份和年份)的参数,我想将其传递给BIRT。然后BIRT调用一个存储过程来生成报告 以下是我所拥有的: 我的普惠制页面 <div class="fieldcontain"> <label for="startPeriod"> <g:message code="start.period" default="Start Pe

我已经将BIRT报告集成到Grails中,并设计了一个报告。 我在grails应用程序中有一个名为startPeriod(仅限月份和年份)的参数,我想将其传递给BIRT。然后BIRT调用一个存储过程来生成报告

以下是我所拥有的:

我的普惠制页面

<div class="fieldcontain">
    <label for="startPeriod">
       <g:message code="start.period" default="Start Period" />
    </label>

    <g:datePicker name="startPeriod" value="${startPeriod}" precision="month" noSelection="['':'-Choose-']" relativeYears="[-2..16]" />
</div>
在我的BIRT报告中,我有一个名为startPeriod的报告参数,它链接到SQL参数。我尝试将报表参数的startPeriod的数据类型更改为Date和String。但是,日期并没有被铸造


如何将日期“2014年4月1日星期二00:00:00 EAT”转换为“2014-04-01”(yyyy-mm-dd)?

您没有选择最简单的格式!您可以从grails应用程序直接将yyyy-mm-dd发送到birt报告。否则,将这样的脚本放入与startDate相关的数据集参数的“默认值”表达式中(不要使用链接到报告参数选项):


如果管理本地化,您可能必须用reportContext.getLocale()替换java.util.Locale.ENGLISH。

或者,您可以以毫秒为单位传递日期,然后,在BIRT数据源的SQL查询中,您可以再次将其转换为日期。谢谢您的回答。我对它进行了测试,但即使我将代码更改为SimpleDataFormat(“yyyy-mm-dd”),它仍然没有强制转换它。还有其他选择吗?您是否可以扩展“不强制转换”的含义:上面的代码将您提供的格式强制转换为日期对象或引发异常。此异常的消息会有所帮助,您可以将此强制转换嵌入try…catch块并发布异常消息。您还应该检查BIRT引擎的日志,它可能包含与此相关的警告;在施法之前,它向我表明它是空的。我有正确的参数名。这是什么意思?我猜,由于g:datePicker只显示月份和年份,它正在创建其他变量,如startPeriod_month和startPeriod_year,但它传递的日期类似于“Tue Apr 01 00:00:00 EAT 2014”。是否有足够的信息?是否需要在解析后设置值,如params[“startPeriod”].value=parser.parse(params[“startPeriod”].value);不,如果该值为空,它将不起作用。我假设此报表参数params[“startPeriod”]在报表中声明为“Date”数据类型:您应该尝试将其声明为“String”数据类型,因此至少应正确设置此类值“Tue Apr 01 00:00:00 EAT 2014”。然后,您将能够在回答中提到的dataset参数中解析它。让我知道。
CREATE PROCEDURE `sp_Report`(
    id LONG,
    startPeriod DATE
 )
BEGIN
-- my sql code
END
var parser=new java.text.SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", java.util.Locale.ENGLISH);
parser.parse(params["startPeriod"].value);