2010-11-12 20 views
8

में सीएफपीओएस को आरएफसी_READ_TABLE को कॉल करते समय मुझे DATA_BUFFER_EXCEED क्यों मिला, मेरे जावा/ग्रोवी कार्यक्रम में आवश्यकता इस प्रकार है: उपयोगकर्ताओं को तालिका इनपुट और तालिका फ़ील्ड को क्वेरी इनपुट पैरामीटर के रूप में इनपुट करने की अनुमति है और कुछ क्वेरी परिणाम प्राप्त करने की उम्मीद है एसएपी। उपयोगकर्ता इनपुट से, मुझे तालिका का नाम [सीडीपीओएस] और [सीडीएचडीआर] मिलता है। एसएपी दस्तावेज और googling पढ़ने के बाद, मैंने पाया कि ये परिवर्तन दस्तावेज़ लॉग भंडारण टेबल हैं। लेकिन मुझे कोई रिमोट कॉल फ़ंक्शंस नहीं मिला जिसका उपयोग जावा में इस तरह के प्रश्नों को करने के लिए किया जा सकता है। तब मैंने बहिष्कृत आरएफसी, "आरएफसी_READ_TABLE" का उपयोग किया और केवल इस आरएफसी के आधार पर अनुकूलित प्रश्नों का निर्माण करने की कोशिश की। हालांकि, मैंने पाया कि अगर मैं इस आरएफसी को पास किए गए वांछित फ़ील्ड की संख्या 2 से अधिक है, तो मुझे अधिकतम पंक्तियों को सीमित करने के बावजूद मुझे हमेशा DATA_BUFFER_EXCEED त्रुटि मिलती है।जावा

मैं सैप सिस्टम में एबीएपी डेवलपर होने के लिए अधिकृत नहीं हूं और मौजूदा सिस्टम में कोई भी एफएम नहीं जोड़ सकता, इसलिए मैं जावा में इस आवश्यकता को पूरा करने के लिए केवल कोड लिख सकता हूं।

क्या मैं कुछ गलत कर रहा हूं? क्या आप मुझे उस मुद्दे पर कुछ संकेत दे सकते हैं?

अग्रिम में बहुत धन्यवाद! वर्तमान व्यवस्था के लिए 512 वर्ण -

उत्तर

8

DATA_BUFFER_EXCEEDED केवल तभी क्षेत्रों आप पढ़ना चाहते हैं की कुल चौड़ाई डेटा के पैरामीटर के चौड़ाई से अधिक है, एसएपी रिहाई के आधार पर भिन्न हो सकते हैं जो होता है। पंक्तियों की संख्या के साथ इसका कोई लेना-देना नहीं है, लेकिन एक डेटासेट का आकार। तो सवाल यह है कि FIELDS पैरामीटर की सामग्री क्या हैं? यदि यह खाली है, तो इसका मतलब है "सभी फ़ील्ड पढ़ें।" सीडीएचडीआर चौड़ाई में 1 9 2 वर्ण है, इसलिए मुझे लगता है कि समस्या सीडीपीओएस है जो 774 वर्ण चौड़ी है। मुख्य मुद्दा फ़ील्ड VALUE_OLD और VALUE_NEW, दोनों 245 वर्ण होंगे। यहां तक ​​कि यदि आपको डेवलपर पहुंच नहीं मिलती है, तो आपको संरचनाओं को विस्तार से जांचने में सक्षम होने के लिए केवल पढ़ने-योग्य शब्दकोश पहुंच प्राप्त करने के लिए किसी को भी उकसाया जाना चाहिए।

निर्बाध प्लग: RCER में RFC_READ_TABLE के लिए एक रैपर क्लास है जो फ़ील्ड हैंडलिंग का ख्याल रखती है और यह सुनिश्चित करती है कि चयनित फ़ील्ड की कुल चौड़ाई फ़ंक्शन मॉड्यूल द्वारा लगाई गई सीमा से नीचे है।

यह भी ध्यान रखें कि ये तालिकाएं उत्पादन वातावरण में बड़ी हो सकती हैं - अरबों प्रविष्टियों को सोचें। इन तालिकाओं पर अत्यधिक पढ़ने के संचालन करके आप आसानी से अपने डेटाबेस को पीसने के लिए ला सकते हैं।

+0

बहुत धन्यवाद! आपकी व्याख्या बहुत स्पष्ट है। मैं आरसीईआर में खुदाई करूंगा और रैपर वर्ग की जांच करूँगा। मैं सोच रहा हूं कि कोई रिमोट फ़ंक्शन मॉड्यूल या बीएपीआईएस है ताकि हम बदले गए दस्तावेज़ की जानकारी पढ़ सकें, क्योंकि लेनदेन "rsscd100" करता है। –

+0

मुझे कोई नहीं पता, क्षमा करें। परिवर्तन दस्तावेजों तक पहुंचने के लिए यह असामान्य है - आपको इसके लिए क्या चाहिए? – vwegert

+0

हाय vwegert, मैंने आरसीईआर परियोजना की जांच की। क्या आपके पास एक्लिप्स आरसीपी ऐप्स से स्वतंत्र कोई शाखा संस्करण है? –

0

DATA_BUFFER_EXCEED त्रुटि के आसपास एक तरीका है। हालांकि एसएपी ओएसएस नोट 382318 के अनुसार ग्राहक के उपयोग के लिए यह फ़ंक्शन जारी नहीं किया गया है, लेकिन आप इस समस्या के आसपास पैरामीटर पास करने के तरीके के साथ इस समस्या को हल कर सकते हैं। यह एक ऐसा क्षेत्र नहीं है जो आपकी त्रुटि पैदा कर रहा है, लेकिन यदि डेटा की पंक्ति 512 बाइट से अधिक है तो यह त्रुटि उठाई जाएगी। निश्चित रूप से सीडीपीओएस के पास यह मुद्दा होगा!

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

तालिका CDPOS के अपने उदाहरण का उपयोग करना, कुछ इस तरह निर्दिष्ट करें और आप जाने के लिए अच्छा होना चाहिए ... (सावधान रहना, CDPOS बड़े पैमाने पर प्राप्त कर सकते हैं! आप यह निर्दिष्ट और एक जहां खंड पारित करना चाहिए!)

मैदान = 'OBJECTCLAS' .... मैदान = 'objectId'

जावा में यह के रूप में व्यक्त किया जा सकता है ..

listParams.setValue (यह।getpObjectclas(), "ऑब्जेक्टक्लास");

फ़ील्ड को सीमित करके आप लौट रहे हैं आप इस त्रुटि से बच सकते हैं।

+0

... पिछले साल नवंबर में मैंने यही जवाब दिया था, बस अलग-अलग वाक्यांश? – vwegert

+2

मैंने "FIELDS" पैरामीटर और जावा उदाहरण का उपयोग करके उदाहरण के साथ अपनी व्याख्या को स्पष्ट करने का प्रयास किया .... केवल "रैपर क्लास" के संदर्भ के बजाय। आपने ओएसएस नोट 382318 का उल्लेख नहीं किया है, जिसमें कहा गया है कि यह फ़ंक्शन मॉड्यूल ग्राहकों को जारी नहीं किया गया है। यह एसएपी द्वारा असमर्थित फ़ंक्शन मॉड्यूल है और मैं समुदाय को इसके बारे में जागरूक करना चाहता था। – SteveB