Урок за подекрани на ABAP: Обадете се на подекран SAP

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

ABAP подекраните вграждат един екран в област на друг екран по време на изпълнение, заедно с неговата логика на потока. Тази страница обяснява областите на подекраните, оператора CALL SUBSCREEN в PBO и PAI, прехвърлянето на данни и ограниченията, които причиняват грешки по време на изпълнение.

  • 🪟 Основна дефиниция: Подекранът е независим екран, показван в определена област на главния екран, като няколко подекрана могат да споделят един главен екран.
  • 🧩 Включете аналогия: Логиката на потока на вградения екран се вмъква в логиката на потока на главния екран, точно както include се вмъква в програма.
  • 🪜 Три стъпки: Дефинирайте областта на подекрана, дефинирайте екрана на подекрана и след това включете този екран в областта.
  • Обаждане от PBO: ПОДЕКРАН ЗА ОБАЖДАНЕ ВКЛЮЧИТЕЛНО присвоява четирисимволен екранен номер на областта и изпълнява нейната PBO логика.
  • PAI обаждане: ПОДЕКРАН ЗА ОБАЖДАНЕ В PAI изпълнява PAI логиката на вградения екран и пренася данните от полета с еднакви имена.
  • 🚫 Ограничения: Подекранът не може да използва SET PF-STATUS, SET TITLEBAR, SET SCREEN, LEAVE SCREEN, собствен OK_CODE или AT EXIT-COMMAND.
  • 🌐 Глобални полета: Полетата, използвани от подекран, са глобални полета, декларирани в TOP include на програмата.

ABAP подекрани

Какво е подекран в SAP ABAP?

Преди да прочетете този урок, уверете се, че знаете какво Диалогова програма е.

  • Подекранът е независим екран, който се показва в област на друг („главен“) екран.
  • Подекраните ви позволяват да вграждате един екран в друг по време на изпълнение. Можете да включите няколко подекрана на основния екран.
  • Терминът подекран се отнася както за екрана, който вграждате, така и за областта на главния екран, в която го поставяте. Този урок е за подекранни области. Действителните екрани, създадени чрез транзакция SE51, се наричат ​​подекранни екрани, ако са определени в атрибутите на екрана.
  • Когато използвате подекран, логиката на потока на вградения екран също е вградена в логиката на потока на главния екран. Следователно използването на подекрани на екрани е като използване на включвания в ABAP програми.

За да използвате подекран, трябва да следвате три прости стъпки

  1. Определете подекранните области на екрана
  2. Определете подходящи подекранни екрани
  3. Включете подекранния екран в подекранната област.

Освен това трябва да настроите рамката на подекрана и главния екран. Трябва да го наименувате в полето за име на полето.

Освен това трябва да настроите полетата в подекрана, за да се показват в главния екран. В случай че подекранът е дефиниран като по-голям от наличната област в главния екран, ще се вижда само частта от подекрана, която се побира в наличната област. Площта винаги се измерва от горния ляв ъгъл на екрана. Следователно трябва да внимавате достатъчно, докато дефинирате подекранни области и създавате подекрани.

ПОДЕКРАН ЗА ОБАЖДАНЕ

Пример

Например тук сме дефинирали две подекранни области на главния екран и сме прикачили два различни подекрана към съответните области. Всеки път, когато се извика главният екран, се извиква PBO на главния екран. Но преди показване, PBO на всеки екран, прикрепен с подекранни области на главния екран, също се извикват.

Обадете се на подекран SAP

Екранната снимка показва главния екран с двете подекранни области, запълнени от два отделни подекранни екрана.

Можете да включите подекранен екран, като използвате оператора CALL SUBSCREEN в логиката на потока на главния екран.

Извикване на подекрана в PBO

За да включите подекран в областта на подекрана на главния екран и да извикате неговата PBO логика на потока, използвайте следния оператор в събитието PBO на главния екран:

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.

Този оператор присвоява номер на подекранния екран към зоната на подекрана, наречена . Можете също да посочите програмата, в която е дефиниран подекранът (по избор). Ако не посочите изрично програмата, системата търси подекранния екран в същата ABAP програма като основната програма. Ако не намери съответния екран на подекрана, възниква грешка по време на изпълнение. Логиката на PBO потока на подекранния екран също е включена в същата точка. Това може да извика PBO модули на програмата ABAP, в която е дефиниран подекранният екран. В края на подекрана PBO, глобалните полета от програмата се предават на всички екранни полета с идентични имена в подекранния екран. Логиката на PBO потока на подекранния екран може сама да включва допълнителни подекранове.

Името от областта на подекрана трябва да се въведе директно без кавички. Можете да посочите имената и или като литерали, или като променливи. Ако използвате променливи, трябва да декларирате и попълните променливи с идентични имена в програмата ABAP. Номерът на екрана трябва да е с дължина 4 знака. Ако не зададете подекран на дадена област, тя остава празна.

Извикване на подекрана в PAI

За да извикате логиката на PAI потока на подекранния екран, използвайте следния оператор в логиката на PAI потока на главния екран:

PROCESS AFTER INPUT.

CALL SUBSCREEN <area>.

Този израз включва логиката на PAI потока на подекранния екран, включен в подекранната област в събитието PBO. Това може да извика PAI модули на програмата ABAP, в която е дефиниран подекранният екран. Данните се транспортират между полета с еднакви имена в екрана на подекрана и програмата ABAP или когато се задейства събитието PAI, или при съответните оператори FIELD в логиката на PAI потока на екрана на подекрана.

Как да създадете и вградите подекран

Трите стъпки, изброени по-рано, се изпълняват на екрана Painter и в логиката на потока на главния екран. Последователността по-долу създава един главен екран с една подекранна област.

  1. Създайте областта на подекрана: Отворете главния екран, например екран 100, в Екран Painter (SE51). Изберете Подекран елемент от лентата с елементи, нарисувайте го върху оформлението и въведете име, например SUB_AREA, в полето Име. Това име се използва по-късно в оператора CALL SUBSCREEN.
  2. Създайте подекранния екран: Създайте втори екран, например екран 110, и задайте типа му на Подекран в атрибутите. Подекранът няма поле за код OK и няма собствен статус на графичния потребителски интерфейс.
  3. Поставете полетата: Начертайте полетата за въвеждане на екран 110. Запазете оформлението в рамките на размера на областта на подекрана, защото се показва само частта, която се побира, измерена от горния ляв ъгъл.
  4. Декларирайте глобалните данни: Поставете полетата в ТОП списъка с включени данни на модулния пул, така че и главният екран, и подекранът да четат едни и същи глобални променливи.
  5. Извикайте подекрана: Добавете CALL SUBSCREEN към PBO и към PAI на главния екран, както е показано по-долу.
  6. Активиране и тестване: Активирайте екраните и програмата, след което стартирайте транзакцията. Подекранната област се запълва от екран 110, а неговите модули се изпълняват в рамките на логиката на потока на екран 100.
* Flow logic of the main screen 100
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'.

PROCESS AFTER INPUT.
  CALL SUBSCREEN sub_area.
  MODULE user_command_0100.

💡 Съвет: Съхранявайте номера на екрана в глобална променлива, вместо в литерал, когато областта трябва да показва различен подекран в зависимост от потребителския вход. Променливата трябва да носи едно и също име в програмата и в оператора CALL SUBSCREEN.

Точки за запомняне

  • Имената на елементите на подекраните в рамките на един екран трябва да бъдат уникални
  • Не трябва да имате OK_CODE или FCODE, прикачени към подекран. Самият OK_CODE на основния екран е OK_CODE на подекран
  • Под-екраните не могат да имат диалогови модули, съдържащи SET TITLEBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN или LEAVE TO SCREEN. Това ще доведе до грешка по време на изпълнение.
  • Трябва да го извикате в логиката на потока (както PBO, така и PAI) на главния екран.
  • CALL SUBSCREEN не е позволен в операторите CHAIN..ENDCHAIN ​​и LOOP ENDLOOP
  • Не може да има модул AT EXIT-COMMAND
  • Полетата, които използвате, са глобалните полета. Те трябва да бъдат декларирани в горния списък
  • Ако използвате подекрани от друг диалогова програма прехвърлянето на данни няма да се случи, освен ако не добавите конкретен код.

⚠️ Предупреждение: Поставянето на CALL SUBSCREEN вътре в CHAIN ​​… ENDCHAIN ​​или вътре в screen LOOP води до синтактична грешка, а извикването на несъществуващ номер на екран води до грешка по време на изпълнение при първото показване.

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

Лентата с раздели е контейнер, чиито страници с раздели сами по себе си са области на подекрани. Подекранът е съдържанието и лентата с раздели само определя кой от тези подекрани е видим в момента за потребителя.

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

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

Да. Асистентите с изкуствен интелект прочитат краткия дъмп и логиката на потока, след което посочват обичайните причини, като например липсващ номер на екран, забранен SET PF-STATUS в подекрана или CALL SUBSCREEN, поставен във веригата CHAIN.

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

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