نمذجة ABAP: وحدات الماكرو، والروتينات الفرعية، ووحدات الوظائف
⚡ ملخص ذكي
تُتيح تقنية التجزئة في لغة ABAP وضع سلسلة من التعليمات البرمجية في وحدة قابلة لإعادة الاستخدام، يستدعيها البرنامج الرئيسي ببساطة. تشرح هذه الصفحة وحدات الماكرو، والبرامج المضمنة، والإجراءات الفرعية، ووحدات الدوال، ومجموعات الدوال، مع توضيح الصيغة، والأمثلة، ومعايير الاختيار لكل تقنية.

ما هو مفهوم التجزئة المعيارية في لغة ABAP؟
عند تقسيم الشيفرة المصدرية إلى وحدات، يتم وضع سلسلة من تعليمات ABAP في وحدة نمطية. بعد ذلك، بدلاً من وضع جميع التعليمات في البرنامج الرئيسي، يتم استدعاء الوحدة النمطية فقط. عند إنشاء البرنامج، تُعامل الشيفرة المصدرية الموجودة في وحدة التقسيم كما لو كانت موجودة فعليًا في البرنامج الرئيسي.
الحاجة إلى الوحدات النمطية
- تحسين هيكل البرنامج.
- من السهل قراءة الكود
- من السهل الحفاظ على الكود
- تجنب التكرار وتعزيز إعادة استخدام الكود
تقنيات الوحدات المختلفة
- استخدام وحدات الماكرو
- استخدام ملفات التضمين
- روتينات
- وحدات الوظيفة
دعونا ننظر في كل واحد منهم بالتفصيل:
SAP- أباب ماكرو
إذا كنت تريد إعادة استخدام نفس مجموعة العبارات أكثر من مرة في أحد البرامج، فيمكنك تضمينها في ماكرو.
لا يمكنك استخدام الماكرو إلا داخل البرنامج الذي تم تعريفه فيه، ولا يمكن استدعاؤه إلا في أسطر البرنامج التي تلي تعريفه.
يمكن أن تكون وحدات الماكرو مفيدة لإجراء العمليات الحسابية الطويلة أو عبارات الكتابة المعقدة.
بناء الجملة
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.
الإخراج: 2
يتم توسيع الماكرو أثناء وقت الترجمة داخل برنامج واحد فقط. عندما يكون من الضروري مشاركة نفس الكود بين البرامج، يتم استخدام برنامج تضمين بدلاً من ذلك.
تضمين البرامج
تضمين البرامج مخصص فقط لتكوين كود المصدر، ولا يحتوي على واجهة معلمات.
تتيح لك البرامج المضمنة استخدام نفس شفرة المصدر في برامج مختلفة. ويمكن أن تكون مفيدة إذا كان لديك تعريفات بيانات مطولة ترغب في استخدامها في برامج مختلفة.
بناء الجملة
Include <include program Name>
نقاط لملاحظة
- تضمين البرامج لا يمكن أن يطلق على نفسه.
- تضمين البرامج يجب أن يحتوي على بيانات كاملة.
على سبيل المثال:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
تتشارك البرامج المضمنة في التعليمات البرمجية ولكنها لا تستطيع استقبال المعاملات. تضيف الإجراءات الفرعية واجهة المعاملات المفقودة هذه.
روتينات
الإجراءات الفرعية هي الإجراءات التي يمكنك تحديدها في أي منها برنامج ABAP كما يمكن أيضًا استدعاء أي برنامج من أي نوع. عادةً ما يتم استدعاء البرامج الفرعية داخليًا، أي أنها تحتوي على أقسام من التعليمات البرمجية أو الخوارزميات التي تُستخدم بشكل متكرر محليًا. إذا كنت تريد أن تكون الوظيفة قابلة لإعادة الاستخدام في جميع أنحاء النظام، فاستخدم وحدة وظيفة.
بناء الجملة-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= اسم الروتين الفرعي
= يتم تمرير المعلمات
أنواع الروتينات الفرعية
- داخلي
- الروتين الفرعي المحدد في نفس البرنامج الذي يتم استدعاؤه.
- يمكن الوصول إلى كافة كائنات البيانات المعلنة في برنامج ABAP/4 الرئيسي.
- خارجي
- روتين فرعي محدد خارج البرنامج الذي يتم استدعاؤه.
- بحاجة إلى استخدام الخيار أو الإعلان عن كائنات البيانات في الأجزاء الشائعة من الذاكرة.
استدعاء روتين فرعي
الروتينات الفرعية الداخلية
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>].
نقاط لملاحظة
- يُسمح بالمكالمات المتداخلة في الإجراءات الفرعية (أي الأداء داخل نموذج ... ENDFORM ).
- المكالمات العودية ممكنة أيضا.
- لتعريف البيانات المحلية، استخدم عبارة DATA بعد FORM . في كل مرة تدخل فيها الروتين الفرعي، تتم إعادة إنشاء البيانات (بقيمة أولية) ويتم تحريرها في النهاية (من المكدس).
- لتحديد البيانات العامة المستخدمة ضمن روتين فرعي، استخدم عبارة LOCAL بعد FORM . يتم حفظ القيم عند إدخال الروتين الفرعي ثم تحريرها في النهاية (من المكدس)
💡 نصيحة: تُعتبر الإجراءات الفرعية قديمة في كائنات ABAP. ينبغي للتطوير الجديد وضع المنطق القابل لإعادة الاستخدام في أساليب الفئة، واستخدام وحدات الوظائف عند الحاجة إلى واجهة مُفعّلة عن بُعد أو واجهة على مستوى النظام.
وحدات الوظيفة
وحدات الوظائف هي إجراءات ABAP/4 للأغراض العامة والتي يمكن لأي شخص استخدامها. في الواقع، هناك عدد كبير من وحدات الوظائف القياسية المتاحة.
يتم تنظيم الوحدات الوظيفية في مجموعات وظيفية: مجموعات من الوظائف المرتبطة منطقيًا. تنتمي الوحدة الوظيفية دائمًا إلى مجموعة الوظائف.
بناء الجملة-
FUNCTION <function module> <Statements> ENDFUNCTION.
معلومات مهمة مرتبطة بوحدة الوظيفة
- الإدارة
- معلمات الاستيراد/التغيير/التصدير.
- معلمات/استثناءات الجدول.
- توثيق
- كود المصدر – L U01 . هي مجموعة الوظائف
- البيانات العالمية – ل أعلى البيانات العالمية لمجموعة الوظائف - يمكن الوصول إليها عبر الوحدات الوظيفية في المجموعة الوظيفية.
- البرنامج الرئيسي – 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 حرفًا.
- عندما تقوم بإنشاء مجموعة وظيفية أو وحدة وظيفية، يتم إنشاء البرنامج الرئيسي والبرامج المضمنة تلقائيًا.
- تقوم مجموعات الوظائف بتغليف البيانات.
كيفية إنشاء مجموعة وظيفية
- انتقل إلى المعاملة SE80.
- حدد البرنامج في القائمة المنسدلة.
- اكتب اسم مجموعة الوظائف التي تريد إنشاءها. بشكل عام، تبدأ مجموعات الوظائف التي يصنعها المستخدم بالحرف "Z". على سبيل المثال - . اضغط على مفتاح الإدخال.
- لاحظ أنه يتم إنشاء تضمين TOP بشكل افتراضي إذا قام المستخدم بالتحقق من خيار إنشاء تضمين TOP.
كيفية إنشاء وحدة وظيفية
- قم بإنشاء مجموعة وظيفية (قل "ZCAL").
- قم بإنشاء وحدة وظائف، وقم بتعيين السمات مثل (مجموعة الوظائف، والتطبيق، والنص المختصر، ونوع العملية) ثم احفظها.
- يتضمن الملف "LZCALU01" رمز مصدر لوحدة الوظيفة الأولى.
- تضمين الملف "LZCALTOP" سيحتوي على بيانات عالمية.
- البرنامج الرئيسي "SAP"LZCAL" يحتوي على
- البيانات العالمية تتضمن ملف "LZCALTOP"
- تتضمن وحدات الوظائف ملف "LZCALUXX"
- يحددها المستخدم تضمين الملفات "LZCALF.." و"LZCALO.." و"LZCALI.."
- تحديد معلمات الواجهة والاستثناءات
- اكتب الكود المصدري
- تنشيط وحدة الوظائف
- اختبار الوحدة الوظيفية – اختبار فردي وتصحيح الأخطاء
- توثيق وإصدار وحدة وظيفية
كيفية اختيار تقنية التنميط المعياري المناسبة
تتداخل التقنيات الأربع، لذا يعتمد القرار على نطاق إعادة الاستخدام وما إذا كانت هناك حاجة إلى واجهة معلمات.
| تقنية | نطاق إعادة الاستخدام | واجهة المعلمات | أفضل يستخدم لـ |
|---|---|---|---|
| الماكرو | برنامج واحد، بعد سطر التعريف | عناصر نائبة للموقع من 1 إلى 9 | عبارات قصيرة متكررة، حسابات طويلة، مخرجات كتابة معقدة |
| تضمين البرنامج | أي برنامج يقوم بتسمية الملف المضمن | بدون سلوفان | إعلانات البيانات المشتركة وشفرة المصدر المشتركة |
| روتين فرعي (نموذج) | محليًا أو خارجيًا مع PERFORM … IN PROGRAM | استخدام الجداول وتغييرها | يتم إعادة استخدام المنطق بشكل متكرر داخل برنامج واحد |
| وحدة وظيفة | النظام بأكمله، بما في ذلك المكالمات عن بعد | الاستيراد، التصدير، التغيير، الجداول، الاستثناءات | إجراءات مشتركة بين التطبيقات ومُغلفة في مجموعة وظائف |
قاعدة مختصرة تغطي معظم الحالات: استخدم ماكرو للاختصار داخل البرنامج الواحد، وملف تضمين للتصريحات المشتركة، وروتين فرعي للمنطق المحلي، ووحدة دالة كلما كان من الضروري استدعاء الروتين من أي مكان في النظام. هذا كل ما يتعلق بالنمطية في لغة ABAP.
