我刚开始编写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的值,但也没有运气。
是否有一个加载文件类型的实用程序会加载一个参数,就像我们在字段中一样?还有其他建议吗?
感谢帮助!!!
答案 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;
调用metodJasperFileRuntimeUtility.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;这肯定是这种情况..
玩得开心!