2010-09-02 14 views
6

मैं JasperReports पर नया हूं। मैं subreport के subreport करने के लिए ArrayList पास करना चाहता हूँ।ArrayList को JasperReports में कैसे पास करें?

मेरे पास मास्टर रिपोर्ट है जिसमें एक सब्रेपोर्ट 1 है और यह सब्रेपोर्ट 1 एक
subreport2 को अंदरूनीकृत करता है।

अब सरलीस्ट 2 को subreport2 कैसे पास करें?

तरह MasterReport -> SubReport -> SubReport

नोट: मैं iReport उपयोग कर रहा हूँ जैस्पर खाका बनाने के लिए और पारित करने DataList मेरी डीएओ जावा वर्ग से Jasper करने के लिए।

नीचे मेरी फार्म सेम कक्षा

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.. 

मेरे डीएओ जावा वर्ग नीचे

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; 
} 

ऊपर डीएओ वर्ग सूची रिटर्न और HashMap परम के माध्यम से इस Arraylist जैस्पर करने के लिए टेम्पलेट गुजर रहा है है।

नीचे मेरी नमूना मास्टर जैस्पर टेम्पलेट यहां से मैं की तरह

 <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> 

जहां $p{list}ArrayList है subreport को ArrayList गुजर रहा है। अग्रिम में आपकी मदद के लिए

Error retrieving field value from bean : tripID

धन्यवाद: और asusual

subReport1 में मुद्रित करने के लिए कोड चलाते समय मैं नीचे त्रुटि हो रही है इस सूची का उपयोग।

+0

बीटीडब्ल्यू, आपको वास्तव में जावा जेनरिक के बारे में और अधिक पढ़ना चाहिए - आप उन्हें सही तरीके से उपयोग नहीं कर रहे हैं। – Bozho

+0

इस समस्या को हल किया गया? मैं निराश हूं क्योंकि मुझे एक ही समस्या है। सरणी सूची ऑब्जेक्ट जिसमें कोई अन्य सरणी सूची ऑब्जेक्ट और अन्य सरणी सूची ऑब्जेक्ट है। मेरे पास 3 स्तर हैं। –

उत्तर

9

यह एक संग्रह डेटा स्रोत को पारित करके किया जाता है: new BeanCollectionDataSource(yourArrayList);

और फिर JasperPrint वस्तु प्राप्त करने के लिए:

    :

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

    एक subreport को पारित करने के लिए, आपके पास दो विकल्प

  • यदि यह एक सब्रेपोर्ट-प्रति-पंक्ति है, तो बस सरणी को बीन की संपत्ति के रूप में रखें। अर्थात। List<Something> जहां Something में List<AnotherThing>
  • की एक संपत्ति है, यदि यह पूरी रिपोर्ट के लिए है, तो इसे पैरामीटर (params ऊपर) के रूप में पास करें।
+0

हाँ मुझे पता है। लेकिन इसे कैसे पास किया जाए। क्या आप मुझे संक्षेप में कुछ नमूना उदाहरण कोड प्रदान कर सकते हैं। मैं सरलीसूची को पहले सबरेपोर्ट में पास करने में सक्षम हूं लेकिन subreport1 (मास्टर-sureport1-subreport2) से supreport2 को पास करने में सक्षम नहीं हूं। subreport2 subreport1 – Manu

+0

के अंदर है, तो आप पहले कुछ कोड दिखाते हैं - आप जावा कोड में अपनी रिपोर्ट कैसे प्राप्त कर रहे हैं। – Bozho

+0

@ बोझो .. मेरा कोडिंग बहुत बड़ा है, इसलिए मैं इसे यहां पोस्ट नहीं कर सका। इसके लिए क्षमा करें। क्या आप कुछ नमूना कोड पोस्ट कर सकते हैं जिसका उपयोग सब्रेपोर्ट को सबरेपोर्ट के सबरेपोर्ट में पास करने के लिए किया जाता है। – Manu

0

आप सूचियों और/या उप-रिपोर्ट, डेटा स्रोत और जेआरबीन कोलेक्शन डेटासोर्स का उपयोग करके ऐसा कर सकते हैं।

चेक इस उदाहरण:

http://siempredesdeelcurro.blogspot.com.es/2013/06/jasper-reports-crear-report-utilizando.html

यह स्पेनिश में है, लेकिन अपने नाम से मुझे लगता है कि आप इसे पढ़ने के लिए सक्षम हो जाएगा;)

गैर स्पेनिश बोलने वालों तुम अब भी रूप में इसका इस्तेमाल कर सकते हैं ट्यूटोरियल के अंत में आप XML को jrxml टेम्पलेट्स के साथ पा सकते हैं।

5

चरण: 2 उपयोग अपने उप रिपोर्ट dataSourceExpression
नई net.sf अंदर इस अभिव्यक्ति: 1 की तरह
क्षेत्र नाम = "listCusipData" और वर्ग = "java.util.ArrayList"

चरण एक क्षेत्र को परिभाषित .jasperreports.engine.data.JRBeanCollectionDataSource ($ F {listCusipData}, false)

संबंधित मुद्दे