Dynpro

Doppelklick im Table Control

Dieser Beitrag zeigt, wie sich ein Doppelklick auf eine Materialnummer im SAP Dynpro Table Control realisieren lässt – inklusive vollständigem ABAP-Beispielreport, Screen-Aufbau, PF-Status-Konfiguration und Schritt-für-Schritt-Anleitung zur Anlage aller beteiligten Objekte.

Fragestellung und Entscheidung zur Umsetzung

Aus einer Telegram-Entwicklergruppe kam die Frage, wie sich ein Dokument durch einen Doppelklick auf die Dokumentnummer in einem Table Control direkt in der zugehörigen Transaktion öffnen lässt. Als Antwort entstand ein kompakter Demoreport, der dieses Verhalten am Beispiel der Materialnummer aus der Tabelle MARA demonstriert: Ein Doppelklick auf die Materialnummer öffnet das Material direkt in der Transaktion MM03.

Umsetzung

Report anlegen

Lege einen Report in SE38 oder SE80 an und kopiere den folgenden ABAP-Code hinein.

Report-Code (96 Zeilen)
REPORT zstkeos_table_control.
 
TABLES mara.
 
TYPES:
  BEGIN OF ts_mara,
    matnr TYPE mara-matnr,
    ersda TYPE mara-ersda,
    ernam TYPE mara-ernam,
    laeda TYPE mara-laeda,
    aenam TYPE mara-aenam,
    vpsta TYPE mara-vpsta,
    pstat TYPE mara-pstat,
    lvorm TYPE mara-lvorm,
  END OF ts_mara.
 
DATA gv_ucomm TYPE syucomm.
DATA gv_initialization TYPE char1.
DATA gv_field TYPE char128.
DATA gv_line TYPE systepl.
 
DATA gs_mara TYPE ts_mara.
 
DATA gt_mara TYPE TABLE OF ty_mara.
 
CONTROLS tc_mara TYPE tableview USING SCREEN 0100.
 
CALL SCREEN 100.
 
*&---------------------------------------------------------------------*
*&      Module  TEST_INIT  OUTPUT
*&---------------------------------------------------------------------*
MODULE tc_init OUTPUT.
  IF gv_initialization IS INITIAL.
    SELECT FROM mara INTO TABLE gt_mara
           FIELDS matnr,
                  ersda,
                  ernam,
                  laeda,
                  aenam,
                  vpsta,
                  pstat,
                  lvorm
           UP TO 100 ROWS.
    gv_initialization = 'X'.
    REFRESH CONTROL 'TC_MARA' FROM SCREEN '0100'.
  ENDIF.
  IF gv_line IS NOT INITIAL.
    SET CURSOR FIELD gv_field LINE gv_line.
  ENDIF.
ENDMODULE.
 
*&---------------------------------------------------------------------*
*&      Module  TEST_MOVE  OUTPUT
*&---------------------------------------------------------------------*
MODULE test_move OUTPUT.
  MOVE-CORRESPONDING gs_mara TO mara.
ENDMODULE.
 
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.
ENDMODULE.
 
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  DATA lv_itab_line TYPE i.
  DATA lv_matnr TYPE matnr.
 
  gv_ucomm = sy-ucomm.
  CLEAR sy-ucomm.
  CASE gv_ucomm.
    WHEN    'BACK'
         OR 'EXIT'
         OR 'CANC'.
      LEAVE PROGRAM.
    WHEN 'MARA'.
      GET CURSOR FIELD gv_field LINE gv_line.
      CASE gv_field.
        WHEN 'MARA-MATNR'.
          lv_itab_line = tc_mara-top_line + gv_line - 1.
 
          READ TABLE gt_mara INTO gs_mara INDEX lv_itab_line.
          IF sy-subrc EQ 0.
            lv_matnr = gs_mara-matnr.
            SET PARAMETER ID 'MAT' FIELD lv_matnr.
            CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
          ENDIF.
      ENDCASE.
  ENDCASE.
ENDMODULE.

Screen 100 anlegen

Lege Screen 100 an und kopiere den folgenden Code in die Flow Logic des Screens.

Flow Logic (15 Zeilen)
PROCESS BEFORE OUTPUT.
  MODULE tc_init.
 
  LOOP AT gt_mara INTO gs_mara WITH CONTROL tc_mara
       CURSOR tc_mara-current_line.
    MODULE test_move.
  ENDLOOP.
 
  MODULE status_0100.
 
PROCESS AFTER INPUT.
  LOOP AT gt_mara.
  ENDLOOP.
 
  MODULE user_command_0100.

Konfiguration der Dynpro-Objekte

PF-Status 0100 anlegen

Lege den PF-Status 0100 wie abgebildet an. Der PF-Status definiert die Funktionscodes, die auf dem Screen verfügbar sind und im Modul USER_COMMAND_0100 ausgewertet werden.

  1. BACK – Zurück zur vorherigen Ebene
  2. EXIT – Programm verlassen
  3. CANC – Verarbeitung abbrechen
  4. MARA – Absprung in die Transaktion MM03 (wird durch den Doppelklick auf die Materialnummer ausgelöst, Funktionscode 4)

Titel 0100 anlegen

Lege den Titel 0100 wie abgebildet an.

Table Control auf Screen 100 platzieren

Platziere das Table Control auf Screen 100 gemäß der folgenden Schritte:

  1. Verwende das normale Table Control – nicht den Table Control Wizard.
  2. Fülle den Screen vollständig mit dem Table Control-Objekt aus.

Felder aus dem Dictionary einfügen:

  1. Öffne das Fenster „Dictionary/Program Fields".
  2. Trage den Tabellennamen „MARA" ein.
  3. Klicke auf Get From Dictionary.
  4. Wähle die gewünschten Felder aus und bestätige mit OK.

Platziere die ausgewählten Felder im grauen Bereich oberhalb des Table Controls.

Felder als Ausgabe konfigurieren:

  1. Doppelklicke auf jedes Feld direkt unterhalb der Spaltenüberschrift.
  2. Deaktiviere für alle Felder die Option Input Field.

Doppelklick für die erste Spalte aktivieren:

  1. Aktiviere für die erste Spalte die Option Responds to double-click.

Test und Ergebnis

Aktiviere alle angelegten Objekte und führe den Report aus. Ein Doppelklick auf eine Materialnummer in der Spalte „Material" öffnet das Material direkt in der Transaktion MM03.

Quellcode auf GitHub herunterladen

Wähle die passende Variante für Dein SAP-Release.

Mindestrelease GitHub
SAP_BASIS 700 Repository öffnen
SAP_BASIS 702 Repository öffnen
SAP_BASIS 740 Repository öffnen
SAP_BASIS 740SP08 Repository öffnen

GitHub Repo mit abapGit importieren

Anleitung zum Import mit abapGit öffnen

Repository-URL zum Kopieren

https://github.com/stekoester/double_click_in_table_control

Zurück zur Blog-Übersicht