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.

  • 🪟 Kärndefinition: En delskärm är en oberoende skärm som visas inuti ett definierat område av en huvudskärm, och flera delskärmar kan dela en huvudskärm.
  • 🧩 Inkludera analogi: Flödeslogiken för den inbäddade skärmen infogas i flödeslogiken för huvudskärmen, precis som en include infogas i ett program.
  • 🪜 Tre steg: Definiera delskärmsområdet, definiera delskärmsskärmen och inkludera sedan den skärmen i området.
  • ⌨️ PBO-samtal: SAMTAL PÅBUNDSSKÄRM INKLUSIVE tilldelar ett skärmnummer med fyra tecken till området och kör dess PBO-logik.
  • ⌨️ PAI-samtal: SAMTAL PÅBUNDSSKÄRM I PAI körs PAI-logiken för den inbäddade skärmen och transporteras data från fält med identiskt namn.
  • ???? begränsningar: En underskärm får inte använda SET PF-STATUS, SET TITLEBAR, SET SCREEN, LÄMNA SKÄRM, en egen OK_CODE eller AT EXIT-COMMAND.
  • 🌐 Globala fält: Fälten som används av en underskärm är globala fält som deklarerats i programmets TOP include.

ABAP-underskärmar

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

  1. Definiera underskärmsområde(n) på en skärm
  2. Definiera lämpliga underskärmar
  3. 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.

Ring underskärmen in SAP

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Anropa underskärmen: Lägg till CALL SUBSCREEN till PBO och PAI på huvudskärmen, som visas nedan.
  6. 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.

Vanliga frågor

En flikremsa är en behållare vars fliksidor själva är underskärmsområden. Underskärmen är innehållet, och flikremsan avgör bara vilken av dessa underskärmar som för närvarande är synlig för användaren.

En huvudskärm kan innehålla flera delskärmsområden, och varje område visar en delskärm åt gången. En delskärm kan själv bädda in ytterligare delskärmar, så kapslingen begränsas endast av skärmstorleken och läsbarheten.

Data transporteras endast mellan skärmfält och programfält som har identiska namn och deklareras globalt. En delskärm som hämtas från ett annat program transporterar ingenting om inte värdena skickas explicit av kod.

Ja. AI-assistenter läser den korta dumpen och flödeslogiken och pekar sedan på de vanliga orsakerna, såsom ett saknat skärmnummer, en förbjuden SET PF-STATUS inuti underskärmen eller en CALL SUBSCREEN placerad inuti CHAIN.

AI-analysverktyg skannar en modulpool, identifierar skärmar med dubbletter av layouter och föreslår en enda återanvändbar delskärm med CALL SUBSCREEN-satserna som ersätter dem. Förslaget granskas innan skärmarna tas bort.

Sammanfatta detta inlägg med: