ABAP модулация: макроси, подпрограми и функционални модули

⚡ Умно обобщение

Модуларизацията в ABAP поставя поредица от оператори в многократно използваема единица, която главната програма просто извиква. Тази страница обяснява макроси, включва програми, подпрограми, функционални модули и функционални групи, със синтаксис, примери и критерии за избор за всяка техника.

  • 🧩 Основен принцип: Модуларизираната единица се генерира така, сякаш нейният изходен код физически присъства в извикващата програма, така че структурата се подобрява без разходи за изпълнение.
  • Макро: Дефинира се с DEFINE и END-OF-DEFINITION, може да се използва само в програмата, която го дефинира, и само след реда за дефиниране.
  • 📄 Включи програма: Не носи интерфейс за параметри и съществува единствено за споделяне на изходен код, като например декларации за дълги данни, между няколко програми.
  • 🔁 Подпрограма: Декларира се с FORM и ENDFORM, извиква се с PERFORM и е подходящ за логика, използвана повторно локално в рамките на една програма.
  • 🧱 Функционален модул: Системна рутина с типов интерфейс за импортиране, експортиране, промяна на параметри на таблици и изключения.
  • 📦 Функционална група: Контейнер, чиито глобални данни се споделят от всеки функционален модул вътре в него, генериран автоматично с неговите TOP и UXX include-и.
  • 🧭 Правило за избор: Изберете макрос за локално съкращение, подпрограма за локална логика и функционален модул, когато рутината трябва да може да се използва многократно в цялата система.

Модулизация в ABAP

Какво е модуларизация в ABAP?

Когато модулизирате изходния код, поставяте поредица от ABAP оператори в модул. След това, вместо да поставите всички оператори в основната програма, просто извиквате модула. Когато програмата се генерира, изходният код в модуларната единица се третира така, сякаш действително присъства физически в основната програма.

Необходимост от модулиране

  • Подобрете структурата на програмата.
  • Лесен за четене код
  • Лесен за поддръжка на кода
  • Избягвайте излишъка и насърчава повторното използване на кода

Различни техники за модулиране

  • Използване на макроси
  • Използване на включени файлове
  • Подпрограми
  • Функционални модули

Нека разгледаме подробно всеки от тях:

SAP- ABAP макрос

Ако искате да използвате повторно един и същ набор от изрази повече от веднъж в програма, можете да ги включите в макрос.

Можете да използвате макрос само в програмата, в която е дефиниран, и може да бъде извикан само в редове от програмата, следващи дефиницията му.

Макросите могат да бъдат полезни за дълги изчисления или сложни WRITE оператори.

Синтаксис

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

Макросите могат да използват параметри &N където 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>].

Посочва забележка

  • Вложените извиквания са разрешени в подпрограми (т.е. PERFORM в рамките на FORM … ENDFORM).
  • Възможни са и рекурсивни повиквания.
  • За да дефинирате локални данни, използвайте оператора DATA след FORM. Всеки път, когато влезете в подпрограмата, данните се създават отново (с първоначална стойност) и се освобождават в края (от стека).
  • За да дефинирате глобални данни, използвани в рамките на подпрограма, използвайте командата LOCAL след FORM. Стойностите се запазват, когато влезете в подпрограмата и след това се освобождават в края (от стека)

💡 Съвет: Подпрограмите се считат за остарели в ABAP обектите. Новите разработки трябва да поставят логика за многократна употреба в методи на клас и да използват функционални модули, когато е необходим отдалечен или системен интерфейс.

Функционални модули

Функционалните модули са ABAP/4 процедури с общо предназначение, които всеки може да използва. Всъщност има голям брой налични стандартни функционални модули.

Функционалните модули са организирани във функционални групи: колекции от логически свързани функции. Функционален модул винаги принадлежи към функционална група.

Синтаксис-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

Важна информация, свързана с функционален модул

  • Администрация
  • Импортиране/промяна/експортиране на параметри.
  • Параметри/изключения на таблицата.
  • документация
  • Изходен код – L U01 . е функционалната група
  • Глобални данни – Л TOP .Глобални данни за функционалната група - Достъпни във функционалните модули във функционалната група.
  • Основна програма – 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”. например – . Натиснете Enter.
  4. Обърнете внимание, че ТОП включването се създава по подразбиране, ако потребителят маркира опцията за създаване на ТОП включване.

Как да създадете функционален модул

  1. Създайте функционална група (кажете „ZCAL“).
  2. Създайте функционален модул, задайте атрибути като (Функционална група, Приложение, Кратък текст и Тип процес) и запазете.
  3. Включеният файл „LZCALU01“ ще има изходния код на първия функционален модул.
  4. Включващият файл „LZCALTOP“ ще има глобални данни.
  5. Основна програма “SAPLZCAL” съдържа
    • Глобални данни Включете файл „LZCALTOP“
    • Функционалните модули включват файл „LZCALUXX“
    • Дефинирани от потребителя Включете файлове „LZCALF..“, „LZCALO..“ и „LZCALI..“
  6. Дефинирайте параметри на интерфейса и изключения
  7. Напишете изходния код
  8. Активиране на функционален модул
  9. Тестване на функционалния модул – единичен тест и отстраняване на грешки
  10. Документиране и пускане на функционален модул

Как да изберем правилната техника за модулизация

Четирите техники се припокриват, така че решението зависи от обхвата на повторна употреба и от това дали е необходим интерфейс за параметри.

Техника Обхват на повторното използване Интерфейс с параметри Най-добре се използва за
Макро Една програма, след дефиниционния ред Позиционни заместители от &1 до &9 Кратки повтарящи се оператори, дълги изчисления, сложен WRITE изход
Включи програма Всяка програма, която назовава включването None Споделени декларации за данни и споделен изходен код
Подпрограма (FORM) Локално или външно с PERFORM … IN PROGRAM ИЗПОЛЗВАНЕ, ПРОМЯНА, НА ТАБЛИЦИ Логика, използвана често повторно в рамките на една програма
Функционален модул Цялата система, включително отдалечени повиквания ИМПОРТ, ЕКСПОРТИРАНЕ, ПРОМЯНА, ТАБЛИЦИ, ИЗКЛЮЧЕНИЯ Рутини, споделени между приложенията и капсулирани във функционална група

Едно кратко правило обхваща повечето случаи: използвайте макрос за съкращения в рамките на една програма, include за споделени декларации, подпрограма за локална логика и функционален модул, когато рутината трябва да може да се извиква от всяка точка на системата. Това е всичко за модулността в ABAP.

Въпроси и Отговори

Макросът се разгръща по време на генериране и работи само в рамките на програмата, която го дефинира. Подпрограмата е реална процедура с интерфейс с типизирани параметри, която може да бъде извикана и от друга програма с PERFORM.

Функционален модул, чийто тип обработка е зададен на Модул с дистанционно активиране, може да бъде извикан от друг SAP система или от външно приложение. Параметрите му трябва да се предават по стойност, а изключенията се обработват като системни повреди.

Макрос не може да бъде преодолян в дебъгера, защото е разгънат преди генериране. Преместете логиката в подпрограма или метод, когато е необходимо дебъгване ред по ред, и ограничете макросите до кратки оператори.

Асистентите за AI код в инструментите за ABAP разработка могат да изготвят скелет на функционален модул, неговия интерфейс с параметри и неговите изключения от просто описание. Разработчикът все пак преглежда логиката, активира модула и го тества преди транспортиране.

Инструментите с изкуствен интелект сканират програма, откриват повтарящи се блокове и предлагат къде трябва да се премахне подпрограма, метод или функционален модул.tracted. Предложението ускорява рефакторирането, въпреки че модулното тестване остава необходимо, за да се потвърди идентично поведение.

Обобщете тази публикация с: