2009-11-20 16 views
10

मैं जावा और आईरपोर्ट (जैस्पर से) का उपयोग करके एक साधारण रिपोर्टिंग प्रोग्राम बना रहा हूं, जो पीसी को अपने आईपी पते, उनके स्थान के साथ दिखाते हुए पीडीएफ में एक रिपोर्ट बनाना है, चाहे वह निष्क्रिय हो या नहीं, इस समय (किसी अन्य सिस्टम द्वारा संभाला गया)), और वर्तमान में संलग्न परियोजनाओं की एक सूची (कहीं और प्रबंधित) भी है।iReport में किसी अन्य सूची में निहित तारों की एक सूची कैसे मुद्रित करूं?

मैं इस बात के लिए यात्रा करना उपयोग कर रहा हूँ, और इस प्रकार एक डमी संग्रह पैदा वर्ग बनाया है:

public class PCReports { 

    public static java.util.Collection PC_collection; 
    public static java.util.Collection generateCollection() { 

     PC_collection = new ArrayList<PCLineDTO>(); 
     PCLineDTO line = new PCLineDTO(); 
     line.setIP("192.168.1.1"); 
     line.setLab("location"); 
     line.setActive(true); 
     line.addProjectName("project1"); 
     line.addProjectName("project2"); 
     line.addProjectName("project3"); 
     PC_collection.add(line); 

     line = new PCLineDTO(); 
     line.setIp("192.168.1.2"); 
     line.setLab("location2"); 
     line.setActive(false); 
     line.addProjectName("project1"); 
     line.addProjectName("project2"); 
     PC_collection.add(line); 

     return PC_collection; 
    } 
} 

इस मामले जा रहा है में इकाई वर्ग:

public class PCLineDTO { 
    private String ip; 
    private String lab; 
    private Boolean active; 
    private ArrayList<String> projects; 
} 

कुछ चारों ओर खोज करने के बाद इंटरनेट, मुझे subreports का उपयोग कर a way to do something similar मिला।

बात यह है कि, मुझे नहीं पता कि इस सब्रेपोर्ट में डेटा स्रोत के रूप में पारित तारों के संग्रह को कैसे प्रिंट किया जाए।

उदाहरण में मैं इंटरनेट पर पाया, मास्टर संग्रह में प्रत्येक आइटम के लिए, subreports प्रत्येक तार का एक संग्रह के बजाय attribute- के लिए अपने स्वयं के गेटर तरीकों -साथ वस्तुओं का एक संग्रह पारित किए गए के रूप में यहां मामला है। उन मामलों में, वे मानों वे iReport वाक्य रचना है, जो मैं उपयोग करने के लिए, उदाहरण के लिए सक्षम नहीं था के माध्यम से उपयोग करने के लिए उनकी आवश्यकता:

$F{project} 

के बाद से iReport जाने वाली वस्तुओं को प्राप्त करता है के भीतर निहित एक getProject विधि के लिए है, लेकिन इस मामले में यह एक साधारण स्ट्रिंग ऑब्जेक्ट है (बिना प्रोजेक्ट विधि के, जैसा कि यह था)।

+0

क्या जैस्पर रिपोर्ट/iReport संस्करण आप उपयोग कर रहे हैं? – medopal

+0

@medopal: शुक्र है, नवीनतम (इस पोस्ट के समय: 3.6.1)। –

उत्तर

17

एक सबरेपोर्ट या उपडेटसेट का उपयोग करें।

subreport नई subreport में तो पास एक संग्रह डेटा स्रोत

JRBeanCollectionDataSource($F{Projects}) 

"केवल इस" नामक एक नया क्षेत्र बनाने वास्तव में, इसका मतलब है संग्रह में पारित सेम मान के समान है मैं चाहता हूँ

अधिक जानकारी के लिए, जाँच वर्ग यहाँ के सोर्स कोड: JRAbstractBeanDataSource

नोट: इस 3.0.0 im यकीन नहीं JasperReport में उपलब्ध है अगर यह पिछले निर्माण में मौजूद है रों। बस SVN जाँच की है, लगता है कि इस सुविधा JasperReports 2.0.0

+1

धन्यवाद, खुशी हुई इससे मदद मिली। बस एक साइड नोट, जब जैस्पर या किसी अन्य ओपन सोर्स प्रोजेक्ट से निपटने पर, मैं स्रोत कोड खींचता हूं और इसे ग्रहण में लाइब्रेरी से जोड़ता हूं। इस तरह अंदर खोदना आसान है। शुभकामनाएं – medopal

+0

मुझे पूरक विवरण यहां मिले हैं: http://community.jaspersoft.com/questions/533552/solved-problem-passing-datasource-subreport –

3

दिलचस्प। मुझे लगता है कि आप सूची का बेहतर उपयोग करेंगे, और उसके बाद प्रोजेक्ट क्लास पर getName() को परिभाषित करेंगे। फिर subreport में एक चर "नाम" परिभाषित करें। यह इस तरह से काम करेगा, और यह आपको परियोजना की अवधि, टीम लीड इत्यादि जैसे आसानी से अतिरिक्त जानकारी जोड़ने की अनुमति देगा।

+0

आपके उत्तर के लिए धन्यवाद। मैंने इसे माना और वास्तव में इसे इस तरह लागू कर सकते हैं, अगर चीजें उस पर आती हैं। हालांकि, अफसोसपूर्वक (और स्वीकार्य रूप से मेरी गलती), कार्यक्रम के अन्य हिस्सों स्ट्रिंग्स की इस सूची का उपयोग कर रहे हैं, और यह सोच रहा था कि परेशानी और त्रुटि के प्रवण कार्य को रोकने और जहां इसका उपयोग किया गया है उसे बदलने के लिए कोई तरीका था या नहीं। –

0

Bozho कहते हैं में कार्यान्वित किया जाता, मामले proyects में जटिल वस्तु की एक सरणी आप के रूप में यह उल्लेख होना चाहिए था: आशा इस

अद्यतन में मदद करता है टाइप java.util.Collection का एक क्षेत्र फिर एक आंतरिक माध्यम से उसी तरह से पास करता है जैसा कि मेडोपोल इंगित करता है। और _THIS फ़ील्ड डालें नहीं।

0

_THIS का उपयोग किए बिना इस पर विस्तृत करने के लिए: मान लीजिए कि जावा बीन में उपबीन की एक सूची है और इस सबबीन का एक जटिल प्रारूप है और हम प्रत्येक उपबीन को कस्टम तरीके से प्रिंट करना चाहते हैं। मैं एक उदाहरण उद्धृत जहां subDataset तत्व रिपोर्ट स्तर पर है और componentElement विस्तार बैंड में है:

<subDataset name="ListOfSubBeans" uuid="66c86e41-c565-4f18-bccf-1a1b2a567585"> 
    <field name="subBeanField_1" class="java.lang.String"> 
     <fieldDescription><![CDATA[subBeanField_1]]></fieldDescription> 
    </field> 
</subDataset> 

... 

     <componentElement> 
      <reportElement x="780" y="0" width="100" height="30" uuid="f73864b9-46dd-4adb-8dad-a6bd8dfae64e"> 
       <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/> 
      </reportElement> 
      <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical"> 
       <datasetRun subDataset="ListOfSubBeans" uuid="a8dd1c2b-3ac0-4ffa-b9d0-08e4890e199a"> 
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfSubBeans})]]></dataSourceExpression> 
       </datasetRun> 
       <jr:listContents height="30" width="100"> 
        <textField> 
         <reportElement x="0" y="0" width="100" height="30" uuid="61700c18-6bb9-45da-a235-b76b9f76a2ea"/> 
         <textFieldExpression><![CDATA[$F{subBeanField_1}]]></textFieldExpression> 
        </textField> 
       </jr:listContents> 
      </jr:list> 
     </componentElement> 

... 

तो, मास्टर डाटासेट मास्टर सेम एक सदस्य चर कि एक सूची है है की घोषणा की है: listOfSubBeans । यह java.util.List का उपयोग jr:list के डेटासोर्स को खिलाने के लिए किया जाता है, जबकि jr:list के फ़ील्ड ListOfSubBeans नामक उप-डेटासेट का उपयोग करके घोषित किए जाते हैं (केस संवेदनशीलता पर ध्यान दें)।

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