Handledning för ABAP-underskärmar: Ring in underskärmen SAP
⚡ Smart sammanfattning
ABAP-delskärmar bäddar in en skärm i ett område på en annan skärm vid körning, tillsammans med dess flödeslogik. Den här sidan förklarar delskärmsområden, CALL SUBSCREEN-satsen i PBO och PAI, dataöverföring och de begränsningar som orsakar körtidsfel.

Vad är en underskärm i SAP ABAP?
Innan du läser den här handledningen, se till att du vet vad en Dialogprogram är.
- En underskärm är en oberoende skärm som visas i ett område på en annan (”huvud”) skärm.
- Underskärmar låter dig bädda in en skärm i en annan under körning. Du kan inkludera flera underskärmar på huvudskärmen.
- Termen underskärm gäller både för skärmen som du bäddar in och området på huvudskärmen där du placerar den. Denna handledning handlar om underskärmsområden. De faktiska skärmarna som skapas genom SE51-transaktionen kallas underskärmsskärmar om de definieras i skärmattribut.
- När du använder en underskärm, är flödeslogiken för den inbäddade skärmen också inbäddad i flödeslogiken på huvudskärmen. Därför är att använda underskärmar på skärmar som att använda inkluderar i ABAP-program.
För att använda en underskärm måste du följa tre enkla steg
- Definiera underskärmsområde(n) på en skärm
- Definiera lämpliga underskärmar
- Inkludera underskärmsskärmen i underskärmsområdet.
Du måste också justera ramen för underskärmen och huvudskärmen. Du måste namnge den i fältnamnsfältet.
Vidare måste du också justera fälten på underskärmen för att få dem att visas på huvudskärmen. Om underskärmen är definierad att vara större än det tillgängliga området på huvudskärmen, kommer endast den del av underskärmen att vara synlig som passar i det tillgängliga området. Området mäts alltid från skärmens övre vänstra hörn. Därför bör du vara tillräckligt försiktig när du definierar underskärmsområden och skapar underskärmar.
RING UNDERSKÄRM
EXEMPEL
Här har vi till exempel definierat två underskärmsområden på huvudskärmen och har kopplat två olika underskärmar till motsvarande områden. Närhelst huvudskärmen anropas, anropas PBO för huvudskärmen. Men före visning kallas även PBO:erna för varje skärm som är ansluten till underskärmsområden på huvudskärmen.
Skärmdumpen visar huvudskärmen med de två underskärmsområdena fyllda av två separata underskärmar.
Du kan inkludera en underskärmsskärm med CALL SUBSCREEN-satsen i flödeslogiken på huvudskärmen.
Anropa delskärmen i PBO
För att inkludera en underskärmsskärm i underskärmsområdet på huvudskärmen och anropa dess PBO-flödeslogik, använd följande uttalande i PBO-händelsen på huvudskärmen:
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
Detta uttalande tilldelar underskärmsskärmen nummer till underskärmsområdet som kallas . Du kan också ange i vilket program underskärmsskärmen definieras (valfritt). Om du inte anger programmet explicit, letar systemet efter underskärmen i samma ABAP-program som huvudprogrammet. Om den inte hittar en motsvarande underskärmsskärm uppstår ett körtidsfel. PBO-flödeslogiken för underskärmen ingår också vid samma punkt. Detta kan anropa PBO-moduler i ABAP-programmet där underskärmen är definierad. I slutet av underskärmen PBO skickas de globala fälten från programmet till alla identiskt namngivna skärmfält på underskärmen. PBO-flödeslogiken för underskärmen kan i sig inkludera ytterligare underskärmar.
Namnet av underskärmsområdet måste anges direkt utan inverterade kommatecken. Du kan ange namnen och antingen som bokstaver eller variabler. Om du använder variabler måste du deklarera och fylla i identiskt namngivna variabler i ABAP-programmet. Skärmnumret måste vara 4 tecken långt. Om du inte tilldelar en underskärmsskärm till ett område förblir den tom.
Anropa delskärmen i PAI
För att anropa PAI-flödeslogiken för underskärmen, använd följande sats i PAI-flödeslogiken på huvudskärmen:
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
Detta uttalande inkluderar PAI-flödeslogiken för underskärmen som ingår i underskärmsområdet i PBO-evenemanget. Detta kan anropa PAI-moduler i ABAP-programmet där underskärmen är definierad. Data transporteras mellan identiskt namngivna fält på underskärmsskärmen och ABAP-programmet antingen när PAI-händelsen utlöses, eller vid motsvarande FIELD-satser i PAI-flödeslogiken på underskärmen.
Hur man skapar och bäddar in en underskärm
De tre stegen som listats tidigare utförs på skärmen Painter och i flödeslogiken för huvudskärmen. Sekvensen nedan skapar en huvudskärm med ett enda underskärmsområde.
- Skapa underskärmsområdet: Öppna huvudskärmen, till exempel skärm 100, i skärmmenyn Painter (SE51). Välj Delskärm elementet från elementfältet, rita det på layouten och ange ett namn som SUB_AREA i fältet Namn. Det namnet används senare i CALL SUBSCREEN-satsen.
- Skapa underskärmen: Skapa en andra skärm, till exempel skärm 110, och ställ in dess skärmtyp till Delskärm i attributen. En underskärm har inget OK-kodfält och ingen egen GUI-status.
- Placera fälten: Rita inmatningsfälten på skärm 110. Håll layouten inom delskärmens storlek, eftersom endast den del som får plats visas, mätt från det övre vänstra hörnet.
- Deklarera globala data: Placera fälten i den övre include-fältet i modulpoolen, så att både huvudskärmen och underskärmen läser samma globala variabler.
- Anropa underskärmen: Lägg till CALL SUBSCREEN till PBO och PAI på huvudskärmen, som visas nedan.
- Aktivera och testa: Aktivera skärmarna och programmet och starta sedan transaktionen. Delskärmsområdet fylls av skärm 110, och dess moduler körs inuti flödeslogiken på skärm 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.
💡 Tips: Lagra skärmnumret i en global variabel istället för en literal när området måste visa en annan underskärm beroende på användarinmatning. Variabeln måste ha samma namn i programmet och i CALL SUBSCREEN-satsen.
Poäng att komma ihåg
- Namn på element i underskärmar inom en skärm ska vara unika
- Du bör inte ha OK_CODE eller FCODE kopplad till underskärmen. OK_CODE för själva huvudskärmen är OK_CODE för underskärmen
- Underskärmar kan inte ha några dialogmoduler som innehåller SET TITLE RAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN eller LEAVE TO SCREEN. Detta kommer att orsaka körtidsfel.
- Du måste anropa det i flödeslogiken (både PBO och PAI) på huvudskärmen.
- CALL SUBSCREEN är inte tillåtet i CHAIN..ENDCHAIN- och LOOP ENDLOOP-satser
- Kan inte ha en AT EXIT-COMMAND-modul
- Fälten som du använder är de globala fälten. De måste deklareras i toppen inkluderar
- Om du använder underskärmar från en annan dialogprogram dataöverföringen kommer inte att ske om du inte lägger till specifik kod.
⚠️ Varning: Att placera CALL SUBSCREEN inuti CHAIN … ENDCHAIN eller inuti en skärmLOOP producerar ett syntaxfel, och att anropa ett skärmnummer som inte finns producerar ett körtidsfel vid den första visningen.

