ABAP मॉड्यूलाइज़ेशन: मैक्रो, सबरूटीन और फ़ंक्शन मॉड्यूल

⚡ स्मार्ट सारांश

ABAP में मॉड्यूलाइज़ेशन स्टेटमेंट्स के अनुक्रम को एक पुन: प्रयोज्य इकाई में रखता है जिसे मुख्य प्रोग्राम बस कॉल करता है। यह पृष्ठ मैक्रो, इन्क्लूड प्रोग्राम, सबरूटीन, फ़ंक्शन मॉड्यूल और फ़ंक्शन ग्रुप्स को सिंटैक्स, उदाहरण और प्रत्येक तकनीक के चयन मानदंड के साथ समझाता है।

  • 🧩 मूल सिद्धांत: मॉड्यूलाइज़ेशन यूनिट इस तरह से उत्पन्न होती है मानो उसका सोर्स कोड कॉलिंग प्रोग्राम में भौतिक रूप से मौजूद हो, इसलिए रनटाइम लागत के बिना संरचना में सुधार होता है।
  • मेक्रो: इसे DEFINE और END-OF-DEFINITION के साथ परिभाषित किया गया है, और यह केवल उस प्रोग्राम के अंदर ही उपयोग किया जा सकता है जो इसे परिभाषित करता है, और केवल परिभाषा पंक्ति के बाद ही।
  • 📄 कार्यक्रम शामिल करें: इसमें कोई पैरामीटर इंटरफ़ेस नहीं होता है और इसका एकमात्र उद्देश्य कई प्रोग्रामों के बीच स्रोत कोड, जैसे कि लंबे डेटा घोषणाओं को साझा करना है।
  • 🔁 उप-दिनांक: FORM और ENDFORM के साथ घोषित, PERFORM के साथ कॉल किया गया, और एक ही प्रोग्राम के भीतर स्थानीय रूप से पुन: उपयोग किए जाने वाले तर्क के लिए उपयुक्त।
  • 🧱 फ़ंक्शन मॉड्यूल: आयात, निर्यात, परिवर्तन, तालिका मापदंडों और अपवादों के लिए टाइप किए गए इंटरफ़ेस के साथ एक सिस्टम-व्यापी रूटीन।
  • 📦 फ़ंक्शन समूह: एक कंटेनर जिसका वैश्विक डेटा उसके अंदर मौजूद प्रत्येक फ़ंक्शन मॉड्यूल द्वारा साझा किया जाता है, जो इसके TOP और UXX इंक्लूड्स के साथ स्वचालित रूप से उत्पन्न होता है।
  • 🧭 चयन नियम: स्थानीय शॉर्टहैंड के लिए मैक्रो, स्थानीय लॉजिक के लिए सबरूटीन और जब रूटीन को पूरे सिस्टम में पुन: उपयोग करने योग्य होना चाहिए तो फंक्शन मॉड्यूल चुनें।

ABAP में मॉड्यूलरकरण

ABAP में मॉड्यूलाइज़ेशन क्या है?

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

मॉड्यूलरीकरण की आवश्यकता

  • कार्यक्रम की संरचना में सुधार करें.
  • कोड को पढ़ना आसान
  • कोड को बनाए रखना आसान
  • अतिरेक से बचें और कोड पुनः उपयोग को बढ़ावा दें

विभिन्न मॉड्यूलरीकरण तकनीकें

  • मैक्रोज़ का उपयोग
  • सम्मिलित फ़ाइलों का उपयोग
  • सबरूटीन्स
  • फ़ंक्शन मॉड्यूल

आइये इनमें से प्रत्येक पर विस्तार से नजर डालें:

SAP- ABAP मैक्रो

यदि आप किसी प्रोग्राम में कथनों के एक ही सेट को एक से अधिक बार पुनः उपयोग करना चाहते हैं, तो आप उन्हें मैक्रो में शामिल कर सकते हैं।

आप मैक्रो का उपयोग केवल उसी प्रोग्राम के भीतर कर सकते हैं जिसमें इसे परिभाषित किया गया है, और इसे केवल प्रोग्राम की उन पंक्तियों में कॉल किया जा सकता है जो इसकी परिभाषा के बाद आती हैं।

मैक्रो लंबी गणनाओं या जटिल WRITE स्टेटमेंट के लिए उपयोगी हो सकते हैं।

वाक्य - विन्यास

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

मैक्रोज़ पैरामीटर्स का उपयोग कर सकते हैं &N जहाँ एन = 1,2,3…

उदाहरण:-

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

आउटपुट: १

एक मैक्रो केवल एक ही प्रोग्राम के भीतर कंपाइल टाइम पर विस्तारित होता है। जब एक ही कोड को कई प्रोग्रामों के बीच साझा करना आवश्यक होता है, तो इसके बजाय एक इंक्लूड प्रोग्राम का उपयोग किया जाता है।

कार्यक्रम शामिल करें

सम्मिलित कार्यक्रम केवल स्रोत कोड को मॉड्यूलर बनाने के लिए होते हैं, तथा इनमें कोई पैरामीटर इंटरफ़ेस नहीं होता।

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

वाक्य - विन्यास

Include <include program Name>

नोट करने के लिए अंक

  • सम्मिलित कार्यक्रम स्वयं को कॉल नहीं कर सकते।
  • सम्मिलित कार्यक्रमों में पूर्ण विवरण होना चाहिए।

उदाहरण:

INCLUDE ZILX0004.

WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.

================================

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

इनक्लूड प्रोग्राम कोड साझा करते हैं लेकिन पैरामीटर प्राप्त नहीं कर सकते। सबरूटीन उस अनुपलब्ध पैरामीटर इंटरफ़ेस को जोड़ते हैं।

सबरूटीन्स

सबरूटीन ऐसी प्रक्रियाएं हैं जिन्हें आप किसी भी रूप में परिभाषित कर सकते हैं एबीएपी कार्यक्रम और किसी भी प्रोग्राम से कॉल भी कर सकते हैं। सबरूटीन को आम तौर पर आंतरिक रूप से कॉल किया जाता है, यानी, उनमें कोड या एल्गोरिदम के सेक्शन होते हैं जो अक्सर स्थानीय रूप से उपयोग किए जाते हैं। यदि आप चाहते हैं कि कोई फ़ंक्शन पूरे सिस्टम में दोबारा इस्तेमाल किया जा सके, तो फ़ंक्शन मॉड्यूल का उपयोग करें।

वाक्य - विन्यास-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= सबरूटीन का नाम

= पारित किये जा रहे पैरामीटर

सबरूटीन्स के प्रकार

  1. आंतरिक
    • उसी प्रोग्राम में परिभाषित सबरूटीन जिसे बुलाया जा रहा है।
    • मुख्य ABAP/4 प्रोग्राम में घोषित सभी डेटा ऑब्जेक्ट तक पहुँच सकता है।
  2. बाहरी
    • बुलाए जा रहे प्रोग्राम के बाहर परिभाषित सबरूटीन.
    • का उपयोग करने की आवश्यकता है मेमोरी के सामान्य भागों में डेटा ऑब्जेक्ट्स को विकल्प या घोषित करें।

एक सबरूटीन को कॉल करना

आंतरिक सबरूटीन्स

PERFORM <subroutine> [<pass>]

= सबरूटीन का नाम

= पारित किये जा रहे पैरामीटर

मुख्य प्रोग्राम में घोषित डेटा स्वचालित रूप से उपलब्ध होता है।

बाहरी सबरूटीन्स

PERFORM <subroutine>(<Program>) [<pass>].

PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND].

PERFORM (<subroutine>) IN PROGRAM  (<Program>) [<pass>] [IF FOUND].

PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].

नोट करने के लिए अंक

  • सबरूटीन्स में नेस्टेड कॉल की अनुमति है (अर्थात FORM के भीतर PERFORM … ENDFORM )।
  • पुनरावर्ती कॉल भी संभव है।
  • स्थानीय डेटा को परिभाषित करने के लिए, FORM के बाद DATA कथन का उपयोग करें। हर बार जब आप सबरूटीन में प्रवेश करते हैं, तो डेटा फिर से बनाया जाता है (प्रारंभिक मान के साथ) और अंत में (स्टैक से) जारी किया जाता है।
  • सबरूटीन में इस्तेमाल किए जाने वाले वैश्विक डेटा को परिभाषित करने के लिए, FORM के बाद LOCAL कथन का उपयोग करें। जब आप सबरूटीन में प्रवेश करते हैं तो मान सहेजे जाते हैं और फिर अंत में (स्टैक से) जारी किए जाते हैं।

💡टिप: ABAP ऑब्जेक्ट्स में सब-रूटीन अप्रचलित माने जाते हैं। नए विकास में पुन: प्रयोज्य लॉजिक को क्लास के मेथड्स में रखा जाना चाहिए, और रिमोट-इनेबल्ड या सिस्टम-वाइड इंटरफ़ेस की आवश्यकता होने पर फ़ंक्शन मॉड्यूल का उपयोग किया जाना चाहिए।

फ़ंक्शन मॉड्यूल

फ़ंक्शन मॉड्यूल सामान्य प्रयोजन ABAP/4 रूटीन हैं जिनका उपयोग कोई भी कर सकता है। वास्तव में, बड़ी संख्या में मानक फ़ंक्शन मॉड्यूल उपलब्ध हैं।

फ़ंक्शन मॉड्यूल को फ़ंक्शन समूहों में व्यवस्थित किया जाता है: तार्किक रूप से संबंधित फ़ंक्शनों का संग्रह। फ़ंक्शन मॉड्यूल हमेशा फ़ंक्शन समूह से संबंधित होता है।

वाक्य - विन्यास-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

फ़ंक्शन मॉड्यूल से संबंधित महत्वपूर्ण जानकारी

  • प्रशासन
  • आयात/परिवर्तित/निर्यात पैरामीटर.
  • तालिका पैरामीटर/अपवाद.
  • दस्तावेज़ीकरण
  • स्रोत कोड – L यू०१ . फ़ंक्शन समूह है
  • वैश्विक डेटा – एल शीर्ष .फ़ंक्शन समूह के लिए वैश्विक डेटा-फ़ंक्शन समूह में फ़ंक्शन मॉड्यूल में सुलभ।
  • मुख्य कार्यक्रम – SAPएल . उस फ़ंक्शन समूह के लिए सभी सम्मिलित फ़ाइलों की सूची शामिल है

फ़ंक्शन मॉड्यूल को कॉल करें

फ़ंक्शन मॉड्यूल को कॉल करने के लिए, CALL FUNCTION कथन का उपयोग करें:

CALL FUNCTION <module>

[EXPORTING  f1 = a 1.... f n = a n]

[IMPORTING  f1 = a 1.... f n = a n]

[CHANGING   f1 = a 1.... f n = a n]

[TABLES     f1 = a 1.... f n = a n]

[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]

[OTHERS = ro]].

प्रत्येक फंक्शन मॉड्यूल एक फंक्शन ग्रुप के अंदर रहता है, इसलिए अगले सेक्शन में बताया गया है कि वह कंटेनर कैसे काम करता है।

फ़ंक्शन समूह

फ़ंक्शन समूह फ़ंक्शन मॉड्यूल के लिए कंटेनर हैं। वास्तव में, मानक फ़ंक्शन समूहों की एक बड़ी संख्या है।
किसी फ़ंक्शन समूह के सभी फ़ंक्शन मॉड्यूल समूह के वैश्विक डेटा तक पहुँच सकते हैं।

जैसे निष्पादन योग्य प्रोग्राम (प्रकार 1) और मॉड्यूल पूल (प्रकार M), फ़ंक्शन समूहों में स्क्रीन, चयन स्क्रीन और सूचियाँ हो सकती हैं।

नोट करने के लिए अंक

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

फ़ंक्शन समूह कैसे बनाएं

  1. ट्रांजेक्शन SE80 पर जाएं.
  2. ड्रॉपडाउन में प्रोग्राम का चयन करें।
  3. उस फ़ंक्शन समूह का नाम लिखें जिसे आप बनाना चाहते हैं। आम तौर पर उपयोगकर्ता द्वारा बनाए गए फ़ंक्शन समूह “Z” से शुरू होते हैं। उदाहरण के लिए – . एंटर कुंजी दबाएं.
  4. ध्यान दें कि यदि उपयोगकर्ता TOP include बनाने का विकल्प चेक करता है तो TOP include डिफ़ॉल्ट रूप से बन जाता है।

फ़ंक्शन मॉड्यूल कैसे बनाएं

  1. एक फ़ंक्शन समूह बनाएं (मान लें “ZCAL”).
  2. एक फंक्शन मॉड्यूल बनाएं, उसमें (फंक्शन ग्रुप, एप्लीकेशन, शॉर्ट टेक्स्ट और प्रोसेस टाइप) जैसे एट्रिब्यूट सेट करें और सेव करें।
  3. सम्मिलित फ़ाइल "LZCALU01" में प्रथम फ़ंक्शन मॉड्यूल का स्रोत कोड होगा।
  4. सम्मिलित फ़ाइल “LZCALTOP” में वैश्विक डेटा होगा।
  5. मुख्य कार्यक्रम “SAPLZCAL” में शामिल है
    • वैश्विक डेटा फ़ाइल “LZCALTOP” शामिल करें
    • फ़ंक्शन मॉड्यूल में फ़ाइल “LZCALUXX” शामिल है
    • उपयोगकर्ता परिभाषित फ़ाइलें “LZCALF..”, “LZCALO..” और “LZCALI..” शामिल करें
  6. इंटरफ़ेस पैरामीटर और अपवाद परिभाषित करें
  7. स्रोत कोड लिखें
  8. फ़ंक्शन मॉड्यूल सक्रिय करें
  9. फ़ंक्शन मॉड्यूल का परीक्षण – एकल परीक्षण और डिबगिंग
  10. फ़ंक्शन मॉड्यूल का दस्तावेज़ीकरण और रिलीज़ करना

सही मॉड्यूलाइज़ेशन तकनीक का चुनाव कैसे करें

ये चारों तकनीकें एक-दूसरे से मिलती-जुलती हैं, इसलिए निर्णय पुन: उपयोग के दायरे और पैरामीटर इंटरफ़ेस की आवश्यकता है या नहीं, इस पर निर्भर करता है।

तकनीक पुन: उपयोग का दायरा पैरामीटर इंटरफ़ेस के लिए सबसे अच्छा उपयोग किया जाता है
मैक्रो परिभाषा पंक्ति के बाद एक प्रोग्राम स्थितिगत प्लेसहोल्डर &1 से &9 संक्षिप्त दोहराए गए कथन, लंबी गणनाएँ, जटिल WRITE आउटपुट
कार्यक्रम शामिल करें कोई भी प्रोग्राम जो शामिल का नाम देता है कोई नहीं साझा डेटा घोषणाएँ और साझा स्रोत कोड
सब रूटीन (फॉर्म) स्थानीय, या बाहरी, PERFORM … IN PROGRAM के साथ उपयोग करना, बदलना, तालिकाएँ एक ही प्रोग्राम के भीतर बार-बार उपयोग किया जाने वाला तर्क
समारोह मॉड्यूल रिमोट कॉल सहित संपूर्ण सिस्टम आयात करना, निर्यात करना, बदलना, टेबल, अपवाद विभिन्न अनुप्रयोगों में साझा की जाने वाली और एक फ़ंक्शन समूह में समाहित नियमित प्रक्रियाएँ

एक संक्षिप्त नियम अधिकांश मामलों को कवर करता है: एक ही प्रोग्राम के भीतर संक्षिप्त भाषा के लिए मैक्रो का उपयोग करें, साझा घोषणाओं के लिए इंक्लूड का उपयोग करें, स्थानीय लॉजिक के लिए सबरूटीन का उपयोग करें, और जब भी रूटीन को सिस्टम में कहीं से भी कॉल किया जाना आवश्यक हो, तो फंक्शन मॉड्यूल का उपयोग करें। ABAP में मॉड्यूलरिटी का यही सार है।

अक्सर पूछे जाने वाले प्रश्न

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

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

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

ABAP डेवलपमेंट टूल्स में मौजूद AI कोड असिस्टेंट एक साधारण विवरण से फंक्शन मॉड्यूल का ढांचा, उसका पैरामीटर इंटरफ़ेस और उसके अपवाद तैयार कर सकते हैं। डेवलपर फिर भी लॉजिक की समीक्षा करता है, मॉड्यूल को सक्रिय करता है और ट्रांसपोर्ट से पहले उसका परीक्षण करता है।

एआई उपकरण किसी प्रोग्राम को स्कैन करते हैं, दोहराए गए ब्लॉकों का पता लगाते हैं, और सुझाव देते हैं कि सबरूटीन, मेथड या फंक्शन मॉड्यूल को कहाँ हटाया जाना चाहिए।tracयह सुझाव रिफैक्टरिंग को गति देता है, हालांकि समान व्यवहार की पुष्टि के लिए यूनिट टेस्टिंग अभी भी आवश्यक है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: