Reputation: 33
I'm trying to attach a call to a Java library into the iReport expression.
I tried this with a very simple library returning a hello world string.
package utils;
public class Hello {
public static String hello()
{
return "Hello";
}
}
Within iReport, i want to use this API. I compiled the above library into a jar file. Added the location in Tools -> Options -> Classpath.
then tried the following:
new utils.Hello().hello()
utils.Hello
. Then using the field.hello()
in the expressionIn both cases, it complains that it cannot resolve hello. However its in the classpath. I've also tried to right click on the report root and add utils.Hello/utils
to the Java import directive. Neither of which seemed to pick up the class.
Any advice is greatly appreciated.
Upvotes: 3
Views: 5812
Reputation: 22857
Your right expression might be like this:
<textFieldExpression><![CDATA[utils.Hello.hello()]]></textFieldExpression>
The working sample:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ..>
<queryString>
<![CDATA[SELECT DISTINCT city FROM address ORDER BY city]]>
</queryString>
<field name="CITY" class="java.lang.String"/>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[utils.Hello.hello()]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
You can also add import instruction to the report. In this case the expression will be:
<textFieldExpression><![CDATA[Hello.hello()]]></textFieldExpression>
The working sample:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ... whenNoDataType="AllSectionsNoDetail">
<import value="utils.Hello"/>
<title>
<band height="41">
<textField>
<reportElement x="188" y="11" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[Hello.hello()]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
Note: For both samples the jar file (with utils.Hello class) must be in classpath.
More info about using srciptlets you can find here.
Upvotes: 3