2010-09-02 22 views
6

Soy nuevo en JasperReports. Deseo pasar ArrayList al subinforme de subinforme.¿Cómo pasar ArrayList a JasperReports?

Tengo un informe maestro que contiene un subinforme1 y este subinforme encapsula uno
subinforme2 dentro.

Ahora, ¿cómo pasar arrayList a subinforme2?

Como MasterReport -> SubReport -> SubReport

Nota: Estoy utilizando iReport para crear la plantilla de jaspe y de lista de datos que pasa a Jasper de mi clase DAO java.

A continuación es mi forma de grano Clase

public class CollatReportData extends BaseItem { 

    private List<CusipData> listCusipData = null; 
    private String dealerID = null; 
    private String tripID = null; 
    private String loanNo = null; 
    private String dealerName = null; 
    private String tripDealerLoan = null; 

    public CollatReportData() { 
     super(); 
    } 

    public List<CusipData> getListCusipData() { 
     return listCusipData; 
    } 

    public void setListCusipData(List<CusipData> listCusipData) { 
     this.listCusipData = listCusipData; 
    } 

    public String getDealerID() { 
     return dealerID; 
    } 

    public void setDealerID(String dealerID) { 
     this.dealerID = dealerID; 
    } 

    public String getTripID() { 
     return tripID; 
    } 

    public void setTripID(String tripID) { 
     this.tripID = tripID; 
    } 
} // and so on for other variables.. 

Mi clase java DAO está por debajo

public List<Object> getCollatData(String custName, String ctripid, 
     String dealerid, String userID) { 

    final Connection conn = super.getCurrentConnection(); 
    String sqlQueryTrip = null; 
    ResultSet rsCollat = null; 
    String tripID = null; 
    String dealerID = null; 
    String cusSysID = null; 
    String loanNo = null; 
    String txnNo = null; 
    String cusipNo = null; 
    String cusipStatus = null; 
    String parVal = null; 
    String tripDealerLoan = null; 
    String OldtripDealerLoan = ""; 
    String NewtripDealerLoan = ""; 

    CollatReportData reportData = null; 
    CusipData cusipData = null; 
    List listCusip = new ArrayList<Object>(); 
    List CollatList = new ArrayList<Object>(); 
    try { 
     PreparedStatement pstmtTrip; 
     sqlQueryTrip = "SELECT iscl_sys_id, iscl_trip_id, iscl_trip_dealer_id, " 
       + "iscl_cus_sys_id, iscl_bankref_cd, iscl_bdas_db_cd, " 
       + "iscl_loan_no, iscl_txn_no, iscl_cusip_no, iscl_status_cd, " 
       + "iscl_sec_de_tx, iscl_par_val_am, iscl_market_val_am, " 
       + "scl_pri_source_cd, iscl_colla_mar_val_am, iscl_mature_dt, " 
       + "iscl_sec_ty, iscl_sec_rt, iscl_sec_price_am, iscl_sec_factor, " 
       + "iscl_sec_margin, iscl_sec_accrued_am " 
       + "FROM BDS_DBA.INVCONF_SHELL_COLLAT " 
       + "WHERE iscl_cus_sys_id='" + custName + "'"; 
     pstmtTrip = conn.prepareStatement(sqlQueryTrip); 
     rsCollat = pstmtTrip.executeQuery(); 
     if (rsCollat != null) { 
      while (rsCollat.next()) { 
       tripID = rsCollat.getString("iscl_trip_id"); 
       dealerID = rsCollat.getString("iscl_trip_dealer_id"); 
       loanNo = rsCollat.getString("iscl_loan_no"); 

       tripDealerLoan = tripID + dealerID + loanNo; 
       cusipData = new CusipData(); 
       cusipData.setTripID(tripID); 
       cusipData.setCusipNo(cusipNo); 
       cusipData.setTripDealerLoan(tripDealerLoan); 

       listCusip.add(cusipData); 
      } // end rsCollat 
     } // end if 
     CusipData cusipData1 = new CusipData(); 
     List CusipList = new ArrayList<Object>(); 

     for (int io = 0; io < listCusip.size(); io++) { 
      cusipData1 = (CusipData) listCusip.get(io); 
      NewtripDealerLoan = cusipData1.getTripDealerLoan(); 
      tripID = cusipData1.getTripID(); 
      dealerID = cusipData1.getDealerID(); 
      loanNo = cusipData1.getLoanNo(); 

      if (NewtripDealerLoan.equalsIgnoreCase(OldtripDealerLoan) || OldtripDealerLoan.equalsIgnoreCase("")) { 
       CusipList.add(cusipData1); 

      } 
      if (!NewtripDealerLoan.equalsIgnoreCase(OldtripDealerLoan)) { 
       reportData = new CollatReportData(); 
       reportData.setTripID(tripID); 
       reportData.setTripDealerLoan(NewtripDealerLoan); 
       reportData.setListCusipData(CusipList); 
       //and so on 
       //........ 
       CollatList.add(reportData); 

       CusipList = null; 
      } 
      OldtripDealerLoan = NewtripDealerLoan; 
     } 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println("Inside LoanDetailDAO:strTripQuery:Exception" + sqlQueryTrip + e); 
    } 

    return CollatList; 
} 

la clase DAO anterior devuelve la lista y pasando esta plantilla Arraylist a Jasper a través Hashmap Param.

A continuación es mi muestra plantilla Jasper Maestro, de aquí que estoy pasando ArrayList a subinforme como

 <parameter name="list" isForPrompting="false" class="java.util.List"/> 

    <detail> 
     <band height="100" isSplitAllowed="true" > 
      <subreport isUsingCache="true"> 
       <reportElement 
        x="30" 
        y="20" 
        width="170" 
        height="40" 
        key="subreport-1"/> 
       <dataSourceExpression><![CDATA[new JRBeanCollectionDataSource($P{list})]]></dataSourceExpression> 
       <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "Collateral_SubReport1.jasper"]]></subreportExpression> 
      </subreport> 
     </band> 
    </detail> 

donde $p{list} es ArrayList. y utilizar esta lista para imprimir en subreport1 asusual

mientras se ejecuta el código, que estoy recibiendo el error abajo:

Error retrieving field value from bean : tripID

Gracias por su ayuda por adelantado.

+0

Por cierto, realmente debería leer más sobre los genéricos de Java, no los está utilizando correctamente. – Bozho

+0

¿se resolvió este problema? Estoy frustrado ya que estoy teniendo el problema similar. El objeto de lista de matriz que tiene otro objeto de lista de matriz y otro objeto de lista de matriz. tengo 3 niveles –

Respuesta

9

Se hace pasando una colección de datos de código: new BeanCollectionDataSource(yourArrayList);

Y a continuación, para obtener el JasperPrint objeto:

JasperPrint jasperPrint = 
     JasperFillManager.fillReport(jasperReport, params, dataSource); 

Para pasar a un informe integrado, tiene dos opciones:

  • Si se trata de un informe integrado por fila, simplemente tiene la matriz como una propiedad del bean. Es decir. List<Something> donde Something tiene una propiedad de tipo List<AnotherThing>
  • Si es uno para todo el informe, páselo como parámetro (params arriba).
+0

sí lo sé. pero cómo pasarlo ¿Me puede dar algún ejemplo de código de ejemplo brevemente? puedo pasar arrayList al primer subinforme pero no puedo pasar a supreport2 desde el subinforme1 (master-sureport1-subinforme2). subreport2 está dentro de subinforme1 – Manu

+0

, primero muestra algún código, ¿cómo está obteniendo su informe en código Java? – Bozho

+0

@Bozho ... mi codificación es enorme, así que no pude publicarla aquí. Lo siento por eso. podría publicar algún código de muestra que se utiliza para pasar el Arraylist al subinforme del subinforme. – Manu

5

Paso: 1 definir un campo como
nombre campo = "listCusipData" y class = "java.util.ArrayList"

Paso: 2 utilizan esta expresión dentro de su sub informe dataSourceExpression
nueva net.sf .jasperreports.engine.data.JRBeanCollectionDataSource ($ F {listCusipData}, false)