2012-01-09 28 views
8

का उपयोग कर जैस्परसेवर रिपोर्ट उत्पन्न करते समय सामग्री में उत्तीर्ण करना मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसका उद्देश्य हमारे वर्तमान पीडीएफ जनरेटर को जैस्पर रीपॉर्ट्स सर्वर से बदलना है। सिस्टम के बीच उच्च स्तर के अमूर्तता तक पहुंचने के लिए आरईएसटी/HTTP एपीआई का उपयोग करना है।REST API

सबसे अच्छा, हम JasperReports सर्वर डेटाबेस से डेटा खींचने नहीं देना चाहते हैं, क्योंकि यह कॉलिंग एप्लिकेशन के आर्किटेक्चर में मौजूदा लॉगिंग और प्रमाणीकरण को बाईपास करेगा। इसके बजाए, हम कॉलिंग एप्लिकेशन में सामग्री निकालने के साथ शुरू करना चाहते हैं, और उसके बाद उस सामग्री को JasperReports सर्वर पर पास कर दें।

हम जांच की काफ़ी किया है, और प्रासंगिक परिणामों की कमी का संकेत है कि यह कैसे आप आमतौर पर JasperReports सर्वर का उपयोग नहीं है। हमारे द्वारा प्राप्त ट्यूटोरियल में इनपुट पैरामीटर आमतौर पर स्केलर मान (पूर्णांक, बूलियन या स्ट्रिंग) होते हैं, न कि जटिल संरचनाएं या ऑब्जेक्ट्स। इसके अलावा, ऐसा लगता है कि प्रत्येक नमूना मानता है कि आप JasperReports सर्वर को डेटाबेस से कनेक्ट करना चाहते हैं।

यदि यह पारित करने के लिए जटिल संरचनाओं में (नक्शे की एक सरणी, जहां कुछ नक्शा तत्वों सरणियों हैं या खुद को मानचित्र) संभव है, ऐसा करने के लिए सबसे अच्छा अभ्यास क्या है? मुझे नहीं पता कि अनुरोध निकाय में ऐसी संरचना को कैसे स्वरूपित किया जाना चाहिए। एसओएपी एपीआई एक बेहतर फिट है?

यदि यह सब पर है कि कैसे आप एक JasperReports सर्वर समाधान डिजाइन चाहिए नहीं है, क्या विकल्प उत्पादों/समाधान अधिक उपयुक्त हैं?

किसी भी इनपुट के लिए अग्रिम धन्यवाद।

+0

आप रिपोर्ट के टेम्पलेट (जेआरएक्सएमएल) फ़ाइल प्राप्त करने के लिए 'get' ऑपरेटर का उपयोग कर सकते हैं। इसके बाद आप जो कुछ भी चाहते हैं उस रिपोर्ट को पास कर सकते हैं (जैस्पर रीपॉर्ट्स एपीआई की मदद से)। उदाहरण के लिए, आप बीन को डेटासोर्स के रूप में पास कर सकते हैं या पैरामीटर के रूप में मानचित्र पास कर सकते हैं। –

+0

आपके उत्तर एलेक्स के लिए धन्यवाद। जैसा कि मैंने अभी नीचे लिखा है, मैंने एक और दृष्टिकोण के साथ जाने का फैसला किया है। भले ही, मुझे यकीन नहीं है कि मैं HTTP एपीआई का उपयोग कर जेआरएक्सएमएल लाने में बिंदु देखता हूं ... – MaxH

उत्तर

7

अनुसंधान पर कई घंटे बिताए जाने के बाद, मुझे लगता है कि मैं अपने स्वयं के प्रश्न का उत्तर देने के लिए तैयार हूं।

JasperReports सर्वर ("JRS" नीचे) मूल रूप से अपने आप में डेटा प्राप्त करने का बनाया गया है। हालांकि डेटा जेआरएस को डेटा के साथ मजबूर करना संभव होगा, मैंने फैसला नहीं किया है।

दे नहीं JRS डेटा ही लाने का सबसे स्पष्ट दोष यह है कि यह अब JRS वेब इंटरफेस से रिपोर्ट उत्पन्न करने के लिए संभव होगा। यदि क्लाइंट एप्लिकेशन पूर्वनिर्धारित प्रारूप में डेटा की आपूर्ति के लिए ज़िम्मेदार है तो अन्य प्रणालियों से एकीकरण भी असंभव या मुश्किल हो जाता है।

परियोजना मैं पर काम कर रहा हूँ में, हम एक कस्टम JRS डेटास्रोत रिमोट एक्सएमएल डेटा स्रोत पर आधारित है, कि क्लाइंट अनुप्रयोग के XML API का आह्वान निर्माण करने का फैसला किया है। दूसरे शब्दों में, क्लाइंट एप्लिकेशन जेआरएस से एक रिपोर्ट का अनुरोध करता है, और जेआरएस क्लाइंट एप्लिकेशन से इसके डेटा का अनुरोध करता है। एक्सएमएल एपीआई को हमारी सभी रिपोर्टिंग जरूरतों को पूरा करने के लिए विस्तारित करना होगा, लेकिन मेरी राय में यह एक अच्छी बात है। अच्छा एपीआई कवरेज भविष्य में काम में आ जाएगा।

मुझे आशा है कि ये विचार किसी के समान प्रश्न रखने में मदद करेंगे।

+0

अच्छा जवाब। अपने स्वयं के प्रश्न का उत्तर देने के बाद आप-लेकिन आपको अपने उत्तर को स्वीकार करने की आवश्यकता नहीं है। आपको अपना स्वीकार करना चाहिए – mdahlman

0

जैसा कि आपने लिखा था, जेआरएस के लिए डेटा लाने का अधिक प्राकृतिक तरीका है। हालांकि, मुझे विपरीत तरीके से जाना होगा - मैं एक आरईएसटी कॉल के माध्यम से जेआरएस रेपो में बैठने की रिपोर्ट करने के लिए डेटा पोस्ट करता हूं।

मैं अपने पैरामीटर "xmlDocument" में एक्सएमएल डेटा पास करता हूं और, "चाल" के माध्यम से, एक निष्पादित रिपोर्ट आगे एक्स-पथ क्वेरी के लिए इस एक्सएमएल का उपयोग कर सकती है। मैं एक्सएमएल फ़ाइल है कि मैं का पूर्वावलोकन करने के लिए उपयोग के साथ XML डेटा एडाप्टर बनाने

<parameter name="xmlDocument" class="java.lang.String"> 
    <defaultValueExpression><![CDATA["<?xml version=\"1.0\" encoding=\"UTF-8\"?><documentData></documentData>"]]></defaultValueExpression> 
</parameter> 

डिजाइनिंग चरण में:

XmlDocument सिर्फ एक सरल स्ट्रिंग है। ध्यान दें कि एक्सएमएल एडाप्टर चुनने के बाद एक नया पैरामीटर XML_INPUT_STREAM दिखाई दिया।

फिर मैंने रिपोर्ट जेआरएस को प्रकाशित की। रिपोर्ट निष्पादन के दौरान, जब रिपोर्ट किसी भी डेटा स्रोत से जुड़ा हुआ नहीं है, यह XML_INPUT_STREAM पैरामीटर बजाय (फ़ॉलबैक डेटा स्रोत के रूप में) पढ़ता है, कि इस प्रकार दिखता है:

<parameter name="XML_INPUT_STREAM" class="java.io.InputStream" isForPrompting="false"> 
    <defaultValueExpression><![CDATA[new java.io.ByteArrayInputStream($P{xmlDocument}.getBytes("UTF-8"))]]></defaultValueExpression> 
</parameter> 

मैं लपेट InputStream करने के लिए "XmlDocument" स्ट्रिंग।