user1767178
user1767178

Reputation: 33

Calling Java API in the iReport expression

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:

In 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

Answers (2)

Alex K
Alex K

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.

Setting classpath in iReport

More info about using srciptlets you can find here.

Upvotes: 3

Satheesh Cheveri
Satheesh Cheveri

Reputation: 3679

You field type should be String , not utils.Hello

Upvotes: 0

Related Questions