So habe ich es gemacht:
Einsatzmöglichkeiten
Wenn Sie Zellen, Zeilen oder Spalten den Style
mc_style_button zuweisen, stellt das ALV Grid Control die zugehörigen Zellen als Drucktaste dar. Der Benutzer sieht dann unmittelbar, daß er weiter Informationen zur Zelle erhält, indem er auf sie klickt. Das ALV Grid Control löst dann das Ereignis button_click aus.
Ablauf
Hinweis
Um alle Zellen einer Spalte als Drucktaste darzustellen, verwenden Sie das
Feld STYLE des Feldkatalogs.
Um Zeilen oder einzelne Zellen als Drucktaste darzustellen, gehen Sie folgendermaßen vor:
Definieren Sie die
Layout-Struktur vom Typ LVC_S_LAYO .
Erweitern Sie Ihre Ausgabetabelle um eine Zellentabelle vom Typ
LVC_T_STYL wie im folgenden Beispiel:
DATA: BEGIN OF GT_OUTTAB OCCURS 0.
INCLUDE STRUCTURE
<DDIC-Struktur> .
DATA: CT TYPE LVC_T_STYL. "Table buttons
DATA: END OF GT_OUTTAB.
Selektieren Sie Ihre Daten und kopieren Sie sie in die Ausgabetabelle.
Lesen Sie in einem Loop jeweils eine Zeile der Ausgabetabelle. Eine Zeile der Zellentabelle hat die Felder
FIELDNAME und STYLE . Belegen Sie diese Felder folgendermaßen:
Wenn alle Zellen einer Zeile als Drucktaste dargestellt werden sollen, weisen Sie dem Feld
style das Attribut cl_gui_alv_grid=>mc_style_button zu. Das Feld fieldname bleibt in diesem Fall leer.
Wenn nur bestimmte Spalten der Zeile wie eine Drucktaste aussehen sollen, hängen Sie pro Spalte eine Zeile an die Zellentabelle an. Dem Feld
fieldname weisen Sie den Namen der gewünschten Spalte und dem Feld style das Attribut cl_gui_alv_grid=>mc_style_button zu.
Weisen Sie den Namen der internen Tabelle dem Feld
stylefname der Layout-Struktur zu (in unserem Fall 'CT', siehe Schritt 2).
Übergeben Sie die Layout-Struktur und die Ausgabetabelle mit der Methode
set_table_for_first_display.
Ergebnis
Das ALV Grid Control gibt die mit dem Attribut gekennzeichneten Zellen als Drucktaste aus.
Code: Alles auswählen.
DATA: BEGIN OF gt_werks_daten OCCURS 0.
INCLUDE STRUCTURE zqms_qm_werke.
DATA: t_style TYPE lvc_t_styl. "Style Tabelle
DATA: END OF gt_werks_daten.
DATA: go_alv TYPE REF TO cl_gui_alv_grid,
go_container TYPE REF TO cl_gui_custom_container,
gs_werks_daten LIKE LINE OF gt_werks_daten,
gt_fieldcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
gt_mat_pruefarten TYPE TABLE OF qmat.
WRITE '.'. "Damit der ALV einen Screen hat
gs_werks_daten-disgr = '1000'.
APPEND gs_werks_daten TO gt_werks_daten.
* Feldkatalog aufbauen
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZQMS_QM_WERKE'
CHANGING
ct_fieldcat = gt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF go_alv IS INITIAL.
CREATE OBJECT go_alv
EXPORTING
i_parent = cl_gui_container=>default_screen
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
CHECK sy-subrc = 0.
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'ZQMS_QM_WERKE'
CHANGING
it_outtab = gt_werks_daten
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
OTHERS = 4.
ELSE.
CALL METHOD go_alv->refresh_table_display.
ENDIF.
Ganz einfach: GT_WERKS_DATEN mit DATA und OCCURS ergibt eine Tabelle mit Kopfzeile. Daher ist GT_WERKS_DATEN eine Struktur und keine Tabelle. Um auf die Tabelle zu verweisen musst du die GT_WERKS_DATEN[] Syntax verwenden.Murdock hat geschrieben:Und nun sagt der Compiler:
"GT_WERKS_DATEN" ist nicht typkompatibel zum formalen Parameter "IT_OUTTAB".
Wie gesagt, ich habe es zum Laufen bekommen (Types anstatt Data), aber ist das jetzt ein Fehler in der SAP Beschreibung oder habe ich was übersehen?
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Murdock