0

iReport を使用してレポートを生成する必要があり、2 つの異なるデータベースからデータを取得しようとしています。この記事は (Bilal Siddiqui、JasperReports 3.6 Development Cookbook の著者) によるものです。しかし、毎回次のエラーが発生します。個別には正常に動作しますが、サブレポートを使用するとエラーが発生し始めます。

マスターレポート:-

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="MasterReport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="projectName" class="java.lang.String">
        <defaultValueExpression><![CDATA[]]></defaultValueExpression>
    </parameter>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["D:\\rEPORTS\\"]]></defaultValueExpression>
    </parameter>
    <parameter name="connectionParam" class="java.sql.Connection" isForPrompting="false">
        <defaultValueExpression><![CDATA[java.sql.DriverManager.getConnection("jdbc:mysql://localhost/liferay_6.0.6", "root", "root")]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[QUERY]]>
    </queryString>
    <field name="EMAIL" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="32" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="2" width="100" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="12"/>
                </textElement>
                <text><![CDATA[EMAIL]]></text>
            </staticText>
            <staticText>
                <reportElement x="126" y="2" width="100" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="12"/>
                </textElement>
                <text><![CDATA[Work Station Name]]></text>
            </staticText>
            <staticText>
                <reportElement x="260" y="2" width="100" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="12"/>
                </textElement>
                <text><![CDATA[Work Station Type]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="100" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{EMAIL}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement x="271" y="0" width="200" height="100"/>
                <subreportParameter name="emailAddress">
                    <subreportParameterExpression><![CDATA[$F{EMAIL}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{connectionParam}]]></connectionExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "WorkstationSubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

印刷の入力中にエラーが発生しました... 式の評価中にエラーが発生しました: ソース テキスト: java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/liferay_6.0.6","root","root") 

net.sf.jasperreports.engine.fill.JRExpressionEvalException: 式の評価中にエラーが発生しました: ソース テキスト: java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/liferay_6.0.6","root","root" ) 

4

4 に答える 4

2

iReportでマスター レポートとサブレポートをテストするには、次の手順を試してください。

  1. iReportで接続を作成し、テストします。jar ファイル ( jdbc ドライバー) をアプリケーション (このテスト ケースではiReport ) クラスパスに追加することを忘れないでください。
  2. クエリでマスター レポートを作成します。iReport接続でテストします。
  3. クエリでサブレポートを作成します。iReport接続でテストします。
  4. サブレポートコンポーネントをマスター レポートに追加します。
  5. サブレポートのsubreportExpression式とsubreportParameterExpression式をマスター レポートに設定します。
  6. タイプのパラメーターをjava.sql.Connectionマスター レポートに作成します。それにdefaultValueExpressionを設定します。このパラメーターは、マスター レポートのサブレポートのconnectionExpression式で使用します。
  7. サブレポートとマスター レポートをコンパイルします。
  8. iReportの [プレビュー] ボタンを使用してマスター レポートをテストします。

マスター レポートのスニペット:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["<some_path>"]]></defaultValueExpression>
    </parameter>
    <parameter name="connectionParam" class="java.sql.Connection" isForPrompting="false">
        <defaultValueExpression><![CDATA[java.sql.DriverManager.getConnection("jdbc:oracle:thin:@//<server_name>:<server_port>/<SID_name>", "<user>", "<password>")]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT id, name FROM main_table]]>
    </queryString>
    <field name="ID" class="java.lang.String"/>
    <field name="NAME" class="java.lang.String"/>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <detail>
        <band height="125" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="20" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement x="259" y="25" width="200" height="100"/>
                <subreportParameter name="masterId">
                    <subreportParameterExpression><![CDATA[$F{ID}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{connectionParam}]]></connectionExpression>

                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "several_connections_subreport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

サブレポートのスニペット:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    <parameter name="masterId" class="java.lang.String"/>
    <queryString>
        <![CDATA[SELECT details, id FROM details_table where masterId =$P{masterId}]]>
    </queryString>
    <field name="DETAILS" class="java.lang.String"/>
    <field name="ID" class="java.lang.String"/>
    <title>
        <band height="50">
            <textField>
                <reportElement x="176" y="20" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{masterId}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="125" splitType="Stretch">
            <textField>
                <reportElement x="57" y="17" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{DETAILS}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
于 2012-08-07T12:02:26.347 に答える
1

スコーピオン、

この問題の解決策は、最初にマスター レポートにクエリを記述し、レコードを取得してから、デフォルト値の式で connectionParam を次のように定義することです。

"java.sql.DriverManager.getConnection("jdbc:oracle:thin:@//<server_name>:<server_port>/<SID_name>", "<user>", "<password>")".

あなたの場合、最初に connectionParam を定義したため、Ireport でマスター レポートのクエリを実行できません。

ありがとう、スリカント・カタム

于 2013-01-29T12:23:20.473 に答える