使用自定义数据源了解Jrxml

时间:2016-06-25 19:56:20

标签: jasper-reports

我正在使用自定义数据源创建Jasper报告。 我正在使用iReport创建报告。 虽然我可以看到报告在web上的各种文章之后工作,但是我无法理解生成的Jrxml如何知道它应该从自定义JRDatasource获取数据? 我看不到Jrxml在任何地方指向我的自定义数据源类

有人可以提供更多信息吗?

这是生成的Jrxml

void ReadRecursive(JToken token, ref CommunicationMessage root)
{
    var p = token as JProperty;

    if (p != null && p.Name == "Skill")
    {
        foreach (JArray child in p.Children())
        {
            foreach (JObject skill in child.Children())
            {
                // Create/add a Skill message instance for current Skill (JObject)
                var skillMsg = new CommunicationMessage { Key = p.Name };

                // Populate Childs for current skill instance
                skillMsg.Childs = new List<CommunicationMessage>();
                foreach (JProperty skillProp in skill.Children())
                {
                    skillMsg.Childs.Add(new CommunicationMessage
                    {
                        Key = skillProp.Name,
                        Value = (string)skillProp.Value
                    });
                }

                root.Childs.Add(skillMsg);
            }
        }
    }

    // Recurse
    foreach (JToken child in token.Children())
        ReadRecursive(child, ref root);
}

有人可以与自定义数据源共享Jrxml吗?

1 个答案:

答案 0 :(得分:1)

经过大量研发后,我能够解决问题。 这是&#34; .jrxml&#34;文件,允许您在Jasper报告中绘制表,其中表的数据来自自定义数据源。

您可以在网上找到很多文章,解释如何编写自定义数据源,但它们都没有提供如何在jrxml文件中使用自定义数据源的示例。

<?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="custom" language="groovy" pageWidth="595" pageHeight="420" whenNoDataType="BlankPage" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" scriptletClass="de.hybris.platform.cockpit.reports.scriptlets.DateTimeScriptlet" resourceBundle="localization/jasperreports">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<subDataset name="custome_datasource">      
    <queryString>
        <![CDATA[select 1 from DUAL]]>
    </queryString>
    <field name="productCode" class="java.lang.String"/>
    <field name="stockLevelStatus" class="java.lang.String">
        <fieldDescription><![CDATA[stockLevelStatus]]></fieldDescription>
    </field>
</subDataset>   
<queryString>
    <![CDATA[select 1 from DUAL]]>
</queryString>
<title>
    <band height="80" splitType="Stretch">
        <staticText>
            <reportElement x="10" y="0" width="500" height="30"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Arial" size="16" isBold="true"/>
            </textElement>
            <text><![CDATA[Stock Level Status Report]]></text>
        </staticText>
    </band>
</title>
<detail>
    <band height="340" splitType="Stretch">
         <componentElement>
            <reportElement key="table" x="0" y="0" width="555" height="238"/>
            <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="custome_datasource">
                    <dataSourceExpression><![CDATA[new my.dataproviders.StockLevelDataProvider()]]></dataSourceExpression>
                </datasetRun>
                <jr:column  width="130">
                    <jr:columnHeader height="30" rowSpan="1">                           
                        <staticText>
                            <reportElement x="0" y="0" width="92" height="25" backcolor="#99CCFF"/>
                            <textElement textAlignment="Center" verticalAlignment="Middle">
                                <font fontName="Arial" size="9" isBold="true"/>
                            </textElement>
                            <text><![CDATA[ProductCode]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="10" width="90" height="20"/>
                            <textElement textAlignment="Center" verticalAlignment="Middle">
                                <font fontName="Arial" size="9" isBold="false"/>
                            </textElement>
                            <textFieldExpression class="java.lang.String"><![CDATA[$F{productCode}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="130">
                    <jr:columnHeader height="30" rowSpan="1">
                        <staticText>
                            <reportElement x="0" y="0" width="92" height="25" backcolor="#99CCFF"/>
                            <textElement textAlignment="Center" verticalAlignment="Middle">
                                <font fontName="Arial" size="9" isBold="true"/>
                            </textElement>
                            <text><![CDATA[StockLevel]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:detailCell  height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="10" width="90" height="20"/>
                            <textElement textAlignment="Center" verticalAlignment="Middle">
                                <font fontName="Arial" size="9" isBold="false"/>
                            </textElement>
                            <textFieldExpression class="java.lang.String"><![CDATA[$F{stockLevelStatus}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
    </band>
</detail>