نمذجة ABAP: وحدات الماكرو، والروتينات الفرعية، ووحدات الوظائف

⚡ ملخص ذكي

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

  • 🧩 المبدأ الأساسي: يتم إنشاء وحدة نمطية كما لو كان رمزها المصدر موجودًا فعليًا في البرنامج الذي يستدعيها، وبالتالي تتحسن البنية دون تكلفة وقت التشغيل.
  • الماكرو: يتم تعريفها باستخدام DEFINE و END-OF-DEFINITION، وهي قابلة للاستخدام فقط داخل البرنامج الذي يقوم بتعريفها، وفقط بعد سطر التعريف.
  • 📄 تضمين البرنامج: لا يحتوي على واجهة معلمات، ووجوده يقتصر فقط على مشاركة التعليمات البرمجية المصدرية، مثل تعريفات البيانات الطويلة، بين عدة برامج.
  • 🔁 روتين فرعي: يتم الإعلان عنها باستخدام FORM و ENDFORM، ويتم استدعاؤها باستخدام PERFORM، وهي مناسبة للمنطق الذي يتم إعادة استخدامه محليًا داخل برنامج واحد.
  • 🧱 وحدة الوظيفة: روتين على مستوى النظام مع واجهة مكتوبة لاستيراد وتصدير وتغيير معلمات الجداول والاستثناءات.
  • 📦 مجموعة الوظائف: حاوية يتم مشاركة بياناتها العامة بواسطة كل وحدة وظيفية بداخلها، ويتم إنشاؤها تلقائيًا مع تضمينات TOP و UXX الخاصة بها.
  • 🧭 قاعدة الاختيار: اختر ماكرو للاختصارات المحلية، وروتين فرعي للمنطق المحلي، ووحدة وظائف عندما يجب أن يكون الروتين قابلاً لإعادة الاستخدام عبر النظام.

التجزئة في لغة 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.

= اسم الروتين الفرعي

= يتم تمرير المعلمات

أنواع الروتينات الفرعية

  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>].

نقاط لملاحظة

  • يُسمح بالمكالمات المتداخلة في الإجراءات الفرعية (أي الأداء داخل نموذج ... 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 حرفًا.
  • عندما تقوم بإنشاء مجموعة وظيفية أو وحدة وظيفية، يتم إنشاء البرنامج الرئيسي والبرامج المضمنة تلقائيًا.
  • تقوم مجموعات الوظائف بتغليف البيانات.

كيفية إنشاء مجموعة وظيفية

  1. انتقل إلى المعاملة SE80.
  2. حدد البرنامج في القائمة المنسدلة.
  3. اكتب اسم مجموعة الوظائف التي تريد إنشاءها. بشكل عام، تبدأ مجموعات الوظائف التي يصنعها المستخدم بالحرف "Z". على سبيل المثال - . اضغط على مفتاح الإدخال.
  4. لاحظ أنه يتم إنشاء تضمين TOP بشكل افتراضي إذا قام المستخدم بالتحقق من خيار إنشاء تضمين TOP.

كيفية إنشاء وحدة وظيفية

  1. قم بإنشاء مجموعة وظيفية (قل "ZCAL").
  2. قم بإنشاء وحدة وظائف، وقم بتعيين السمات مثل (مجموعة الوظائف، والتطبيق، والنص المختصر، ونوع العملية) ثم احفظها.
  3. يتضمن الملف "LZCALU01" رمز مصدر لوحدة الوظيفة الأولى.
  4. تضمين الملف "LZCALTOP" سيحتوي على بيانات عالمية.
  5. البرنامج الرئيسي "SAP"LZCAL" يحتوي على
    • البيانات العالمية تتضمن ملف "LZCALTOP"
    • تتضمن وحدات الوظائف ملف "LZCALUXX"
    • يحددها المستخدم تضمين الملفات "LZCALF.." و"LZCALO.." و"LZCALI.."
  6. تحديد معلمات الواجهة والاستثناءات
  7. اكتب الكود المصدري
  8. تنشيط وحدة الوظائف
  9. اختبار الوحدة الوظيفية – اختبار فردي وتصحيح الأخطاء
  10. توثيق وإصدار وحدة وظيفية

كيفية اختيار تقنية التنميط المعياري المناسبة

تتداخل التقنيات الأربع، لذا يعتمد القرار على نطاق إعادة الاستخدام وما إذا كانت هناك حاجة إلى واجهة معلمات.

تقنية نطاق إعادة الاستخدام واجهة المعلمات أفضل يستخدم لـ
الماكرو برنامج واحد، بعد سطر التعريف عناصر نائبة للموقع من 1 إلى 9 عبارات قصيرة متكررة، حسابات طويلة، مخرجات كتابة معقدة
تضمين البرنامج أي برنامج يقوم بتسمية الملف المضمن بدون سلوفان إعلانات البيانات المشتركة وشفرة المصدر المشتركة
روتين فرعي (نموذج) محليًا أو خارجيًا مع PERFORM … IN PROGRAM استخدام الجداول وتغييرها يتم إعادة استخدام المنطق بشكل متكرر داخل برنامج واحد
وحدة وظيفة النظام بأكمله، بما في ذلك المكالمات عن بعد الاستيراد، التصدير، التغيير، الجداول، الاستثناءات إجراءات مشتركة بين التطبيقات ومُغلفة في مجموعة وظائف

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

الأسئلة الشائعة

يتم توسيع الماكرو عند إنشائه، ويعمل فقط داخل البرنامج الذي يُعرّفه. أما الروتين الفرعي فهو إجراء حقيقي ذو واجهة معلمات مُحددة النوع، ويمكن استدعاؤه أيضًا من برنامج آخر باستخدام الأمر PERFORM.

يمكن استدعاء وحدة وظائف تم ضبط نوع معالجتها على وحدة تمكين الوصول عن بُعد من وحدة أخرى SAP النظام أو من تطبيق خارجي. يجب تمرير معلماته بالقيمة، ويتم التعامل مع الاستثناءات على أنها أعطال في النظام.

لا يمكن تتبع تنفيذ الماكرو خطوة بخطوة في المصحح، لأنه يتم توسيعه قبل إنشائه. انقل المنطق إلى روتين فرعي أو دالة عند الحاجة إلى تصحيح الأخطاء سطرًا بسطر، واحرص على أن تقتصر الماكروات على عبارات قصيرة.

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

تقوم أدوات الذكاء الاصطناعي بفحص البرنامج، واكتشاف الكتل المتكررة، واقتراح مكان وضع الروتين الفرعي أو الأسلوب أو وحدة الوظائف.tracتيد. هذا الاقتراح يسرع عملية إعادة هيكلة الكود، على الرغم من أن اختبار الوحدة يظل ضروريًا للتأكد من السلوك المتطابق.

تلخيص هذه التدوينة بـ: