subReport woes (passing data)

Hi,

I am using a very old jasperreports library (2.0.4) which is installed at a customer site, I am not allowed to upgrade it at this time.

They have the data that needs to be reported in a non SQL based old system, and I do calls to the reports and use jasper templates

I finally got the main report to show it's colors a day or so back, but now I am trying to add a subreport to it where the datasource is NOT an SQL Query.

basically I got the data in as an array of objects which in turn has the "fields" I need the report to print.
I could of course, loop through this list and build something out of it before I call the report, and I will do that if nessesary

But at this moment, I am getting nothing through, not even the static texts in the subreport.

I would be extremely grateful for some very simple working example of a master.jrxml which calls a subreport.jrxml with parametrized data like the one I got
or at least one that send it through the call to the masters fillReport via the map in such a way that the subReport can pick it up as a multicolumn datafeed.
What I have basically is the master report with no info on the subreport, in fact the whole detail band is empty in the exported xml
 

This is my parametermap that I send in to fillReport {
  RoleCode=1X6B1XX,
  FlagReportTemplate=null,
  FlagObjList=[GenericObject:PIMS, GenericObject:FTSO, GenericObject:PTSO],
  RuleObjList=[GenericObject:CCRL010?, GenericObject:CCRL020?, GenericObject:CRBO010?, GenericObject:CRBO020?, GenericObject:CRBO030?,
                       GenericObject:CRBO040?, GenericObject:CRBO050?, GenericObject:CRBO060?, GenericObject:LBDE1, GenericObject:LSTD1BEH, GenericObject:LZFU,
                       GenericObject:LZOT, GenericObject:PARGU200, GenericObject:SPR],
  RoleOwners=S22X68,SY6025,
  RoleDescription=NNN IT - Development - Developer SAS,
  RuleReportTemplate=net.sf.jasperreports.engine.JasperReport@1032529
}

This is the subReport.jrxml

<?xml version="1.0" encoding="UTF-8"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
   name="NNN-ruleSubReport"
   columnCount="3"
   printOrder="Vertical"
   orientation="Portrait"
   pageWidth="595"
   pageHeight="842"
   columnWidth="178"
   columnSpacing="0"
   leftMargin="0"
   rightMargin="0"
   topMargin="0"
   bottomMargin="0"
   whenNoDataType="NoPages"
   isTitleNewPage="false"
   isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" /> <parameter name="RoleCode" isForPrompting="false" class="java.lang.String"/>
<parameter name="RoleSubReport" isForPrompting="false" class="java.lang.Object"/>
<parameter name="RuleObjList" isForPrompting="false" class="java.lang.Object"/> <field name="rule" class="java.lang.String"/>
<field name="description" class="java.lang.String"/>
<field name="system" class="java.lang.String"/>  <background>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </background>
  <title>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </title>
  <pageHeader>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </pageHeader>
  <columnHeader>
   <band height="20"  isSplitAllowed="true" >
    <rectangle>
     <reportElement
      mode="Transparent"
      x="0"
      y="0"
      width="80"
      height="20"
      forecolor="#999999"
      key="rectangle-1"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <rectangle>
     <reportElement
      mode="Transparent"
      x="80"
      y="0"
      width="430"
      height="20"
      forecolor="#999999"
      key="rectangle-2"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <rectangle>
     <reportElement
      mode="Transparent"
      x="510"
      y="0"
      width="85"
      height="20"
      forecolor="#999999"
      key="rectangle-3"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <staticText>
     <reportElement
      mode="Opaque"
      x="0"
      y="0"
      width="80"
      height="20"
      forecolor="#000000"
      backcolor="#CCCCCC"
      key="staticText-1"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="NNN Basic" size="12" isBold="true"/>
     </textElement>
    <text><![CDATA[Rule]]></text>
    </staticText>
    <staticText>
     <reportElement
      mode="Opaque"
      x="80"
      y="0"
      width="430"
      height="20"
      forecolor="#000000"
      backcolor="#CCCCCC"
      key="staticText-2"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="NNN Basic" size="12" isBold="true"/>
     </textElement>
    <text><![CDATA[Description]]></text>
    </staticText>
    <staticText>
     <reportElement
      mode="Opaque"
      x="510"
      y="0"
      width="85"
      height="20"
      forecolor="#000000"
      backcolor="#CCCCCC"
      key="staticText-3"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="SEB Basic" size="12" isBold="true"/>
     </textElement>
    <text><![CDATA[System]]></text>
    </staticText>
   </band>
  </columnHeader>
  <detail>
   <band height="81"  isSplitAllowed="true" >
    <rectangle>
     <reportElement
      x="0"
      y="0"
      width="80"
      height="18"
      forecolor="#999999"
      key="rectangle-5"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <rectangle>
     <reportElement
      x="80"
      y="0"
      width="430"
      height="18"
      forecolor="#999999"
      key="rectangle-4"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <rectangle>
     <reportElement
      x="510"
      y="0"
      width="85"
      height="18"
      forecolor="#999999"
      key="rectangle-6"/>
     <graphicElement stretchType="NoStretch" pen="Thin"/>
    </rectangle>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      x="0"
      y="0"
      width="80"
      height="18"
      key="textField"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="NNN Basic" size="12"/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$F{rule}]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      x="80"
      y="0"
      width="430"
      height="18"
      key="textField"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="NNN Basic" size="12"/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$F{description}]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      x="510"
      y="0"
      width="85"
      height="18"
      forecolor="#000000"
      key="textField"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement verticalAlignment="Middle">
      <font fontName="NNN Basic" size="12"/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$F{system}]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      x="9"
      y="60"
      width="84"
      height="19"
      key="textField-1"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement>
      <font/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$P{RoleCode}]]></textFieldExpression>
    </textField>
   </band>
  </detail>
  <columnFooter>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </columnFooter>
  <pageFooter>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </pageFooter>
  <summary>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </summary>
</jasperReport>
johan.andersson's picture
Joined: Apr 9 2013 - 6:55am
Last seen: 8 years 5 months ago

1 Answer:

Well,

As I suspected I could not get it to work with the data stacked as it is.
To get the subreport actually filling out I hade to rearrange the list of objects that I had to a List of Maps... i.e.
the ruleObjList will be converted into a ruleMapList 
 

List dataList;
dataList = new java.util.ArrayList();
 
Looping through the list of earlier objects...
{
  Map dataMap = new java.util.HashMap();
  dataMap.put("rule", "ruledata");
  dataMap.put("whatever","whatever you think data");
  dataList.add(dataMap);
}
 
then add that list to the Map you send as parameters to the main report which and copy that down to the subreport in the templates.
...
Map pm;
pm = new java.util.HashMap();
pm.put("ruleList", dataList);
...


I had to change the receiving class in the report too...

<dataSourceExpression>
  <![CDATA[new net.sf.jasperreports.engine.data.JRMapCollectionDataSource($P{RuleObjList})]]>
</dataSourceExpression>
<subreportExpression  class="net.sf.jasperreports.engine.JasperReport">
  <![CDATA[$P{RuleSubReport}]]>
</subreportExpression>

But it looks like it works this way at least...

johan.andersson's picture
Joined: Apr 9 2013 - 6:55am
Last seen: 8 years 5 months ago
Feedback