从Jasper中的参数加载文件

时间:2015-11-19 15:53:02

标签: jasper-reports

我刚开始编写jasper报告(以及一般的SQL)。我们正在尝试在报告结尾处加载RTF或HTML文件作为披露。我们这样做的方法是在SQL的一部分中选择文件名(“Disclosure”):

SELECT
....
'Disclosure' as Disclosure
FROM
...

然后,显然,有一个领域:

<field name="Disclosure" class="java.lang.String"/>

最后,在报告的摘要部分,我们使用了loadfile实用程序:

<textFieldExpression   class="java.lang.String"><![CDATA[JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP})]]></textFieldExpression>

如果报告返回数据,这可以很好地工作。但是如果原始查询的结果没有返回任何记录,则报告中不包含该公开(因为查询的结果显然是什么)。

我认为我们可以通过提供“Disclosure”作为参数轻松解决这个问题,但是当我将其更改为$ P而不是$ F.我收到有关无效io文件类型的错误。

我也尝试创建一个变量并将$ V设置为我们传入的$ P的值,但也没有运气。

是否有一个加载文件类型的实用程序会加载一个参数,就像我们在字段中一样?还有其他建议吗?

感谢帮助!!!

1 个答案:

答案 0 :(得分:1)

我现在更了解你的问题所以我编辑答案,你正在打电话

JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP})

你不知道这个功能是什么,但你知道如果你传递了字符串&#34; Disclosure&#34;它有效。

班级JasperFileRuntimeUtility在您的图书馆内(它不是官方的碧玉报告功能),尝试搜索您的项目或图书馆。

它有一个静态方法public static String loadFile(String value, Map<?,?> map)

用$ F {Disclosure} =&#34; Disclosure&#34;

调用metod
JasperFileRuntimeUtility.loadFile($F{Disclosure}, $P{REPORT_PARAMETERS_MAP})

JasperFileRuntimeUtility.loadFile("Disclosure", $P{REPORT_PARAMETERS_MAP})

不会有任何不同,结果将是相同的(因为该方法没有其他的想法,然后你称之为什么参数)。

通常也会拨打$ P {Disclosure} =&#34; Disclosure&#34;

JasperFileRuntimeUtility.loadFile($P{Disclosure}, $P{REPORT_PARAMETERS_MAP})

会是一样的,但是由于参数映射被传递,函数可以看到这个参数,也许还可以做其他事情......

然而,更可能的是,由于参数映射传递给函数,您可能有scriptlet或其他设置static字段的调用,当您没有结果时,对loadFile的调用是没有工作,因为尚未设置这些静态字段。

因此,如果它没有正常工作&#34; Disclosure&#34;这肯定是这种情况..

玩得开心!