Table Control: Context Menu

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