ABAP-underskjermer Opplæring: Ring underskjermen inn SAP

⚡ Smart oppsummering

ABAP-underskjermer legger inn ett skjermbilde i et område av et annet skjermbilde under kjøretid, sammen med flytlogikken. Denne siden forklarer underskjermområder, CALL SUBSCREEN-setningen i PBO og PAI, dataoverføring og restriksjonene som forårsaker kjøretidsfeil.

  • 🪟 Kjernedefinisjon: En underskjerm er en uavhengig skjerm som vises innenfor et definert område av en hovedskjerm, og flere underskjermer kan dele én hovedskjerm.
  • 🧩 Inkluder analogi: Flytlogikken til den innebygde skjermen settes inn i flytlogikken til hovedskjermen, akkurat som en inkludering settes inn i et program.
  • 🪜 Tre trinn: Definer delskjermområdet, definer delskjermskjermen, og inkluder deretter skjermen i området.
  • ⌨️ PBO-samtale: RING PÅ SKJERM INKLUDERT tilordner et skjermnummer på fire tegn til området og kjører PBO-logikken.
  • ⌨️ PAI-anrop: RING PÅ SKJERM i PAI kjører PAI-logikken til den innebygde skjermen og transporterer dataene fra felt med identisk navn.
  • 🚫 restriksjoner: En underskjerm kan ikke bruke SET PF-STATUS, SET TITTELLINJE, SET SKJERM, LEAVE SCREEN, en egen OK_CODE eller AT EXIT-COMMAND.
  • 🌐 Globale felt: Feltene som brukes av en underskjerm er globale felt deklarert i programmets TOP include.

ABAP-underskjermer

Hva er en underskjerm i SAP ABAP?

Før du leser denne veiledningen, sørg for at du vet hva en Dialogprogram er.

  • En underskjerm er en uavhengig skjerm som vises i et område på en annen («hoved») skjerm.
  • Underskjermer lar deg bygge inn en skjerm i en annen under kjøring. Du kan inkludere flere underskjermer på hovedskjermen.
  • Begrepet underskjerm gjelder både for skjermen du legger inn, og området på hovedskjermen du plasserer den i. Denne opplæringen handler om underskjermområder. De faktiske skjermbildene som er opprettet gjennom SE51-transaksjonen, kalles underskjermskjermer hvis de er definert i skjermattributter.
  • Når du bruker et underskjermbilde, er flytlogikken til den innebygde skjermen også innebygd i flytlogikken til hovedskjermen. Derfor er det å bruke underskjermer på skjermer som å bruke inkluderer i ABAP-programmer.

For å bruke en underskjerm må du følge tre enkle trinn

  1. Definer underskjermområdet(e) på en skjerm
  2. Definer passende underskjermer
  3. Inkluder underskjermbildet i underskjermområdet.

Du må også justere rammen på underskjermen og hovedskjermen. Du må navngi den i feltnavnfeltet.

Videre må du også justere feltene i underskjermen for å få dem til å vises på hovedskjermen. I tilfelle underskjermen er definert til å være større enn det tilgjengelige området i hovedskjermen, vil kun den delen av underskjermen være synlig som passer i det tilgjengelige området. Området måles alltid fra øverste venstre hjørne av skjermen. Derfor bør du ta tilstrekkelig varsomhet mens du definerer underskjermområder og lager underskjermer.

ANRINGSUNDERSKJERM

EKSEMPEL

For eksempel her har vi definert to underskjermområder på hovedskjermen og har festet to forskjellige underskjermer til tilsvarende områder. Når hovedskjermen kalles opp, kalles PBO for hovedskjermen. Men før visning kalles også PBO-ene for hver skjerm festet med underskjermområder på hovedskjermen.

Ring underskjermen inn SAP

Skjermbildet viser hovedskjermen med de to underskjermområdene fylt av to separate underskjermbilder.

Du kan inkludere et underskjermbilde ved å bruke CALL SUBSCREEN-setningen i flytlogikken til hovedskjermen.

Kalle opp underskjermen i PBO

For å inkludere et underskjermbilde i underskjermområdet på hovedskjermen og kalle dets PBO-flytlogikk, bruk følgende setning i PBO-hendelsen på hovedskjermen:

PROCESS BEFORE OUTPUT.

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

Denne setningen tildeler underskjermbildet nummer til underskjermområdet som kalles . Du kan også spesifisere programmet der underskjermbildet er definert (valgfritt). Hvis du ikke spesifiserer programmet eksplisitt, ser systemet etter underskjermbildet i samme ABAP-program som hovedprogrammet. Hvis den ikke finner et tilsvarende underskjermbilde, oppstår det en kjøretidsfeil. PBO-flytlogikken til underskjermbildet er også inkludert på samme punkt. Dette kan kalle PBO-moduler til ABAP-programmet der underskjermbildet er definert. På slutten av underskjermen PBO blir de globale feltene fra programmet sendt til alle identisk navngitte skjermfelt i underskjermbildet. PBO-flytlogikken til underskjermbildet kan i seg selv inkludere ytterligere underskjermer.

Navnet av underskjermområdet må legges inn direkte uten omvendt komma. Du kan spesifisere navnene og enten som bokstaver eller variabler. Hvis du bruker variabler, må du deklarere og fylle ut variabler med identisk navn i ABAP-programmet. Skjermnummeret må være på 4 tegn. Hvis du ikke tilordner et underskjermbilde til et område, forblir det tomt.

Kalle opp underskjermen i PAI

For å kalle PAI-flytlogikken til underskjermbildet, bruk følgende setning i PAI-flytlogikken på hovedskjermen:

PROCESS AFTER INPUT.

CALL SUBSCREEN <area>.

Denne setningen inkluderer PAI-flytlogikken til underskjermbildet inkludert i underskjermområdet i PBO-arrangementet. Dette kan kalle PAI-moduler til ABAP-programmet der underskjermbildet er definert. Data transporteres mellom identisk navngitte felt i underskjermbildet og ABAP-programmet enten når PAI-hendelsen utløses, eller ved de tilsvarende FIELD-setningene i PAI-flytlogikken til underskjermbildet.

Slik oppretter og bygger du inn en underskjerm

De tre trinnene som er nevnt tidligere utføres på skjermen Painter og i flytlogikken til hovedskjermen. Sekvensen nedenfor oppretter én hovedskjerm med et enkelt underskjermområde.

  1. Opprett underskjermområdet: Åpne hovedskjermen, for eksempel skjerm 100, i skjermbildet Painter (SE51). Velg Underskjerm elementet fra elementlinjen, tegn det på oppsettet og skriv inn et navn, for eksempel SUB_AREA, i Navn-feltet. Dette navnet brukes senere i CALL SUBSCREEN-setningen.
  2. Opprett underskjermbildet: Opprett en annen skjerm, for eksempel skjerm 110, og angi skjermtypen til Underskjerm i attributtene. En underskjerm har ikke noe OK-kodefelt og ingen egen GUI-status.
  3. Plasser feltene: Tegn inndatafeltene på skjerm 110. Hold oppsettet innenfor størrelsen på underskjermområdet, fordi bare den delen som passer vises, målt fra øvre venstre hjørne.
  4. Deklarer de globale dataene: Plasser feltene i TOP include-filen i modulpoolen, slik at både hovedskjermen og underskjermen leser de samme globale variablene.
  5. Ring underskjermen: Legg til CALL SUBSCREEN til PBO-en og PAI-en på hovedskjermen, som vist nedenfor.
  6. Aktiver og test: Aktiver skjermbildene og programmet, og start deretter transaksjonen. Underskjermområdet fylles av skjerm 110, og modulene kjører innenfor flytlogikken til skjerm 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: Lagre skjermnummeret i en global variabel i stedet for en literal når området må vise et annet underskjermbilde avhengig av brukerinput. Variabelen må ha samme navn i programmet og i CALL SUBSCREEN-setningen.

Poeng å huske

  • Navn på elementer i underskjermer i en skjerm skal være unike
  • Du bør ikke ha OK_CODE eller FCODE vedlagt med underskjerm. OK_CODE for selve hovedskjermen er OK_CODE for underskjermen
  • Underskjermer kan ikke ha noen dialogmoduler som inneholder SET TITTELBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN eller LEAVE TO SCREEN. Dette vil forårsake kjøretidsfeil.
  • Du må kalle det i flytlogikken (både PBO og PAI) på hovedskjermen.
  • CALL SUBSCREEN er ikke tillatt i CHAIN..ENDCHAIN ​​og LOOP ENDLOOP-setninger
  • Kan ikke ha en AT EXIT-COMMAND-modul
  • Feltene du bruker er de globale feltene. De må deklareres i toppen inkluderer
  • Hvis du bruker underskjermer fra en annen dialogprogram dataoverføringen vil ikke skje med mindre du legger til spesifikk kode.

⚠️ Advarsel: Hvis CALL SUBSCREEN plasseres inni CHAIN ​​… ENDCHAIN ​​eller inni en skjermløkke, produseres en syntaksfeil, og hvis et skjermnummer anropes som ikke finnes, produseres en kjøretidsfeil ved første visning.

Spørsmål og svar

En fanestripe er en beholder der fanesider i seg selv er underskjermområder. Underskjermen er innholdet, og fanestripen bestemmer bare hvilken av disse underskjermene som for øyeblikket er synlig for brukeren.

En hovedskjerm kan inneholde flere underskjermområder, og hvert område viser én underskjerm om gangen. En underskjerm kan selv legge inn ytterligere underskjermer, slik at nestingen kun er begrenset av skjermstørrelsen og lesbarheten.

Data transporteres kun mellom skjermfelt og programfelt som har identiske navn og deklareres globalt. En underskjerm hentet fra et annet program transporterer ingenting med mindre verdiene sendes eksplisitt av kode.

Ja. AI-assistenter leser short dump-en og flytlogikken, og peker deretter på de vanlige årsakene, for eksempel et manglende skjermnummer, en forbudt SET PF-STATUS inne i underskjermen, eller en CALL SUBSCREEN plassert inne i CHAIN.

AI-analyseverktøy skanner en modulpool, oppdager skjermbilder med dupliserte oppsett og foreslår en enkelt gjenbrukbar underskjerm med CALL SUBSCREEN-setningene som erstatter dem. Forslaget gjennomgås før skjermbildene slettes.

Oppsummer dette innlegget med: