Kontextus menük | SAPtippek.hu - Iránytű az SAP világában
SAPtippek logo2


SAPtippek a Facebookon is!
Mivel sokak számára már szinte kizárólag a FB az egyetlen hírforrás, ezért a SAPtippeket egy ideje már ott is elérhetitek, mégpedig a 
http://www.facebook.com/SAPtippek címen.
Csatlakozzatok az oldalhoz, ha tetszenek az ott megjelent cikkek, rövidhírek, akár kommentelhettek is! 
Találkozzunk a Facebookon!...



Első Második
Elmélet

  • Frontend Services komponens
  • ABAP Objects
  • CL_CTMENU osztály (SE24)
  • Menu Painter
  • Dynprók
  • Listák

A SAP GUI Frontend Services komponense (amely egyébként a Custom Control megvalósításáért is felelős) lehetőséget nyújt ún. kontextus menük (azaz a jobb gombos menük) létrehozására. Azért nevezik ezt kontextus menünek, mert érzékeny arra, hogy hol, milyen képernyő-környezetben kerül a jobb egérgomb lenyomásra.

A Frontend Services ezen szolgáltatását is, mint ahogy az a komponens szolgáltatások esetén elterjedten használt, egy ún. wrapper objektummal fedik le, azaz teszik a metódusait és attribútumait használhatóvá a fejlesztői környezetben. Esetünkben ez a CL_CTMENU ABAP wrapper class. Ennek metódusait a SE24 tranzakció segítségével lehet megismerni.

A CL_CTMENU osztály metódusai lehetővé teszik a jobbgombos menük tételeinek dinamikus definícióját, a menü megjelenítését, funkciói meghívását. A fejlesztőnek azonban elegendő a menutételek és a mögötte lévő funkciók definiálásáról gondoskodni, a megjelenítés és a funkciók meghívása már automatikusan megtörténik.

Mivel az SAP alapvetően kétféle képernyőt használ (dynpro és lista), mindkettőn megnézzük hogyan lehet kontextus menüt létrehozni. Mindkét megvalósításban közös azonban, hogy képernyő központú, azaz a standard képernyő kezelés részeként megvalósított megoldásokra épít. A lista a GUI státus mögé épített funkcionalitásra, míg a dynpro a dynpro-logika mögé épített funkcionalitásra.



Kontextus menü listán

REPORT ZSOMI_GOS_CTMENU_TESZT .

SET PF-STATUS 'CTMST'.
WRITE: 'XXXXXXXXXXXXXXXXXXXX'.

FORM on_ctmenu_request USING l_menu TYPE REF TO cl_ctmenu.
CALL METHOD l_menu->add_function
EXPORTING fcode = ‘EXIT'
text = ‘Kilépés’(001).
ENDFORM.

AT USER-COMMAND.
CHECK sy-ucomm = 'EXIT'.
LEAVE TO SCREEN 0.




A létrehozott programodhoz hozz létre egy GUI statust! Ezen a következőket kell tenned:

  • Be kell kapcsolni a kontextus menü kezelést:
    • Ugrás->Tulajdonságok->F-bill. Kiosztás
    • A kapott dialógus boxban kapcsold be a „Lista kontextusmenüvel” funkciót. (Ne lepődj meg, ez bekapcsolja az „F-gombok standard funkciók kezeléséhez listákban” pucukát is.)
  • Ez eddig jó, de nem elég. Az egyes funkciókódokat is aktiválni kell, ha az alapértelmezetten nem az. Márpedig a %CTX nem az. Tehát:
    • Nyisd le a „Funkcióbillentyűk” részterületet
    • Állítsd a kurzort a %CTX funkcióra
    • Bökj rá a „Funkciókód” feliratú gonbra! (Ez váltja inaktívból aktívvá és vissza a kijelölt funkciót.)

A program ettől kezdve kontextus-érzékeny lesz. Ne felejtsd el azonban beállítani a frissen létrehozott GUI statust! A jobb egérgomb ott lesz aktív (ott adja az általad definiált menüpontokat), ahol a képernyőre kiírásra került valami. Mindenhol máshol a standard jobb-menüt hozza.

A jobbegérgomb klikk hatására a Frontend kivált egy eseményt, amit a listaképernyő mögé épített program-logika kezel. Ez az esemény hatására meghívja az on_ctmenu_request nevű FORM-ot és átadja neki az aktuális Context Menu objektumpéldány címét. (Az objektumpéldányt az ABAP lista mögötti logika hozza létre, a fejlesztpnek ezzel nincs dolga.)

Ez az a pont, ahol megmondhatjuk, hogy mi is legyen a listánkon. Célszerű megnézni hol is van a kurzorunk (GET CURSOR LINE lin.) és ennek megfelelően hozzáadni a sorokat a listához. A dián látható példaprogram az egyszerűség kedvéért nem teszi ezt meg, de a DEMO_LIST_CONTEXT_MENU standard demo programban látsz erre megoldást. Ráadásul a fenti program mindössze egy tételt ad a listához, ez pedig a kilépés funkció.

A „FORM on_ctmenu_request” lefutása után az ABAP list processor átadja a vezérlést a Frontend Services komponensnek és automatikusan megjelenik a frissen definiált kontextus menü. Ennek bármely elemét kiválasztva ugyanaz a dolog törénik, mintha a funkciót pl. egy gombnyomással váltotta volna ki a felhasználó: a vezérlés az AT USER-COMMAND eseménykezelőre adódik.



Első Második