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.
BACK– Zurück zur vorherigen EbeneEXIT– Programm verlassenCANC– Verarbeitung abbrechenMARA– Absprung in die TransaktionMM03(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:
- Verwende das normale Table Control – nicht den Table Control Wizard.
- Fülle den Screen vollständig mit dem Table Control-Objekt aus.
Felder aus dem Dictionary einfügen:
- Öffne das Fenster „Dictionary/Program Fields".
- Trage den Tabellennamen „MARA" ein.
- Klicke auf
Get From Dictionary. - 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:
- Doppelklicke auf jedes Feld direkt unterhalb der Spaltenüberschrift.
- Deaktiviere für alle Felder die Option
Input Field.
Doppelklick für die erste Spalte aktivieren:
- 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