Um einen Context-Status/Context Menü (Rechte Maustaste) anzulegen, gibt es mehrere Möglichkeiten.
Bei allen muss bei einem Feld hier TC REIHENFOLGE im Layoutmanager ON_CTMENU_
der Context-Status/Context Menü – hier REIHENFOLGE – eingetragen sein.
Diese Einstellung ruft dann die Form – hier – ON_CTMENU_REIHENFOLGE auf.
1)
Context-Status/Context Menü in SE41 / SE80 definieren und einbinden.
FORM on_ctmenu_reihenfolge USING l_menu TYPE REF TO cl_ctmenu.
TRY .
DATA: oerror TYPE REF TO cx_root, "Abstrakte Oberklasse aller globalen Exceptions (s. Anzeige Klasse CX_ROOT in SE80)
lv_txterror TYPE string,
lv_txterror_long TYPE string.
* Menü mit GUI-Status 0201 belegen
data prog type sy-repid.
prog = sy-repid.
CALL METHOD:l_menu->load_gui_status
EXPORTING program = prog "prog
status = '0201' "'CONTEXT_MENU_1'
menu = l_menu.
CATCH cx_root INTO oerror.
lv_txterror_long = oerror->get_longtext( ). "Langtext kann über 50 Zeichen sein
MESSAGE lv_txterror_long TYPE 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
ENDFORM. "ON_CTMENU_REIHENFOLGE
2)
Context-Status/Context Menü im Programm definieren, mit Untermenü.
FORM on_ctmenu_reihenfolge USING l_menu TYPE REF TO cl_ctmenu.
TRY .
DATA: oerror TYPE REF TO cx_root, "Abstrakte Oberklasse aller globalen Exceptions (s. Anzeige Klasse CX_ROOT in SE80)
lv_txterror TYPE string,
lv_txterror_long TYPE string.
* Untermenü anhängen an l_menu FUNKTIONIERT
DATA right_clk TYPE REF TO cl_ctmenu. "Context Menue
CREATE OBJECT right_clk.
CALL METHOD: right_clk->add_function
EXPORTING fcode = 'OPEN'
text = 'Open',
right_clk->add_function
EXPORTING fcode = 'CUT'
text = 'Cut',
right_clk->add_function
EXPORTING fcode = 'PASTE'
text = 'Paste',
right_clk->add_function
EXPORTING fcode = 'MOVE'
text = 'Move',
l_menu->add_submenu
EXPORTING menu = right_clk
text = 'OPTIONS'.
CATCH cx_root INTO oerror.
lv_txterror_long = oerror->get_longtext( ). "Langtext kann über 50 Zeichen sein
MESSAGE lv_txterror_long TYPE 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
ENDFORM. "ON_CTMENU_REIHENFOLGE
3)
Context-Status/Context Menü definieren
FORM on_ctmenu_reihenfolge USING l_menu TYPE REF TO cl_ctmenu.
TRY .
DATA: oerror TYPE REF TO cx_root, "Abstrakte Oberklasse aller globalen Exceptions (s. Anzeige Klasse CX_ROOT in SE80)
lv_txterror TYPE string,
lv_txterror_long TYPE string.
* Menü dirket erzeugen. Kein Create Object notwendig !!!
CALL METHOD: l_menu->add_function
EXPORTING fcode = 'FREI'
text = 'Freigeben',
l_menu->add_function
EXPORTING fcode = 'DATU'
text = 'Datum vergeben',
l_menu->add_function
EXPORTING fcode = 'REIH'
text = 'Reihenfolge vergeben',
l_menu->add_function
EXPORTING fcode = 'ARBN'
text = 'Arbeitsplatz-Neu',
l_menu->add_function
EXPORTING fcode = 'ARBP'
text = 'Arbeitsplatz ändern',
l_menu->add_function
EXPORTING fcode = 'ENDT'
text = 'Eckendtermin setzen'.
CATCH cx_root INTO oerror.
lv_txterror_long = oerror->get_longtext( ). "Langtext kann über 50 Zeichen sein
MESSAGE lv_txterror_long TYPE 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
ENDFORM. "ON_CTMENU_REIHENFOLGE
4)
Context-Status/Context Menü in SE41 erzeugen, mit Code anreichern
FORM on_ctmenu_reihenfolge USING l_menu TYPE REF TO cl_ctmenu.
TRY .
DATA: oerror TYPE REF TO cx_root, "Abstrakte Oberklasse aller globalen Exceptions (s. Anzeige Klasse CX_ROOT in SE80)
lv_txterror TYPE string,
lv_txterror_long TYPE string.
* Menü mit GUI-Status 0201 belegen
data prog type sy-repid.
prog = sy-repid.
CALL METHOD:l_menu->load_gui_status
EXPORTING program = prog "prog
status = '0201' "'CONTEXT_MENU_1'
menu = l_menu.
* Menü zusätzlich aufbauen
CALL METHOD: l_menu->add_function
EXPORTING fcode = 'REIH'
text = 'Reihenfolge vergeben',
l_menu->add_function
EXPORTING fcode = 'ARBN'
text = 'Arbeitsplatz-Neu',
l_menu->add_function
EXPORTING fcode = 'ARBP'
text = 'Arbeitsplatz ändern',
l_menu->add_function
EXPORTING fcode = 'ENDT'
text = 'Eckendtermin setzen'.
"insert_at_the_top = abap_true.
CATCH cx_root INTO oerror.
lv_txterror_long = oerror->get_longtext( ). "Langtext kann über 50 Zeichen sein
MESSAGE lv_txterror_long TYPE 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
ENDFORM. "ON_CTMENU_REIHENFOLGE