ALV-Anzeige im Selection-Mode mit angepassten Zellenfarben
Transcription
ALV-Anzeige im Selection-Mode mit angepassten Zellenfarben
ajanzen.com ALV-Anzeige im Selection-Mode mit angepassten Zellenfarben ajanzen.com 1 Einleitung In dem vorliegenden Dokument wird anhand eines Beispiels auf die Möglichkeit einer schnell programmierten Visualisierung von Informationen unter Verwendung der Klasse CL_SALV_TABLE eingegangen. Zusätzlich wird gezeigt, wie der SelectionMode aktiviert und Zellenfarben angepasst werden können. Das komplette Beispielcoding ist in Kapitel 3 enthalten. Nähere Informationen zum Ablauf können Kapitel 2 entnommen werden. 1 ajanzen.com 2 Informationen zur Programmlogik Im vorliegenden Beispiel werden die Informationen aus Tabelle SFLIGHT in eine interne Tabelle selektiert und in Form eines ALVs (siehe Abbildung unten) mit angepassten Zellenfarben visualisiert. Zusätzlich wird der Selektionsmodus so geändert, sodass das Markieren mehrerer Zeilen möglich ist. Im ersten Schritt des ALV-Aufrufes wird über die FACTORY-Methode der Klasse CL_SALV_TABLE eine Instanz derselben Klasse erzeugt. Außerdem wird der Factory-Methode die Tabelle mit den anzuzeigenden Informationen direkt mitgegeben. Eine zusätzliche Angabe eines Feldkataloges ist nicht notwendig, da sich die CL_SALV_TABLE-Klasse die Dictionary-Informationen anhand der Tabellenfelder eigenständig ermittelt. Anschließend wird durch Aufruf von Methode SET_OPTIMIZE() der Klasse CL_SALV_COLUMNS_TABLE die Spaltenbreite an den Inhalt angepasst. Hinweis: Bei Klasse CL_SALV_COLUMNS_TABLE handelt es sich um das Hauptobjekt zur Verwaltung von ALV-Spalten. Das Setzen eines Selektionsmodus erfolgt über ein eigenständiges Selektionsobjekt vom Typ der Klasse CL_SALV_SELECTIONS. Für dieses Vorgehen wird Methode SET_SELECTION_MODE( ) der benannten Klasse aufgerufen. Hinweis: Neben dem im Beispiel verwendeten Selektionsmodus existieren noch weitere Modi. Diese sind als Attribute in Interface IF_SALV_C_SELECTION_MODE enthalten. Dem nächsten Schritt kann das Vorgehen zum Ändern der Farben einzelner Zellen bzw. einer ganzer Zeilen entnommen werden. Dabei ist zu beachten, dass die Farbinformation in einer eigenständigen Tabelle enthalten ist. Diese Tabelle ist vom Typ LVC_T_SCOL und wird als Bestandteil der Tabelle mit den zu visualisierenden Informationen deklariert. In dem Beispielcoding hat die Farbinformationstabelle die Bezeichnung COLOR (siehe Abbildung 1). 2 ajanzen.com Abbildung 1: Um Farbinformationen erweiterte Struktur Aus der Typisierung in Abbildung 1 ist ersichtlich, dass die Angabe der Farbinformationen pro Datensatz der internen Datentabelle erfolgt. Dieses Vorgehen bietet den Vorteil der datensatzscharfen Farbsteuerung. Beim Festlegen der Farbinformationen kann gesteuert werden, ob diese für die gesamte Zeile (Datensatz), oder nur für bestimmte Zellen der Zeile gültig sind. Gilt eine Farbinformation ausschließlich für bestimmte Zellen (siehe Abbildung 2 roter Rahmen), ist der Spaltenname mitzugeben. Farbinformationen ohne Angabe eines Spaltennamens (siehe Abbildung 2 grüner Rahmen) gelten für die gesamte Zeile. Abbildung 2: Steuerung der zellen- bzw. zeilenabhängigen Farbinformationen Durch Aufruf von Methode SET_COLOR_COLUMN() des ALV-Spaltenobjektes wird dem ALV mitgeteilt, in welcher Strukturkomponenten die Farbinformationen enthalten sind. Die in SAP mögliche Farbpalette ist relativ überschaubar, kann jedoch durch die Attribute INT und INV der Struktur LVC_T_SCOL-COLOR etwas differenziert werden. In Abbildung 3 sind die möglichen Farbausprägungen aufgeführt. Diese können über die links benannten Nummern gesteuert werden. So werden in Abbildung 2 beispielsweise die Farben mit den Nummern 3 und 7 verwendet. 3 ajanzen.com Abbildung 3: Steuerung von ALV-Farben durch Zahlenvergabe Zusätzlich werden die ALV-Standardfunktionen mit Methode SET_ALL() der Klasse CL_SALV_FUNCTIONS_LIST aktiviert. Abschließend findet die eigentliche Datenvisualisierung unter Verwendung der Methode DISPLAY() statt. Aus Abbildung 4 ist das Ergebnis des Reports ersichtlich. Dabei ist durch den roten Rahmen der Selektionsmodus gekennzeichnet. Der grüne Rahmen hebt Zellen mit geänderten Farben hervor. Abbildung 4: ALV im Selektionsmodus mit angepassten Zellenfarben Wie in Abbildung 4 gezeigt, sind die Spalten Mandant, Carrier, Flug-Nr. und Flugdatum blau gefärbt. Diese Farbe wird von SAP automatisch verwendet, um Schlüsselfelder zu kennzeichnen. Dabei hat die Farbdarstellung von Schlüsselfeldern eine höhere Priorität als manuell gesetzt Farbinformationen für eine Zeile. Bei Bedarf kann die Schlüsselfeld-Eigenschaft einer Spalte wie folgt deaktiviert werden: 4 ajanzen.com * Instanz für Spalten holen DATA: gr_column TYPE REF TO cl_salv_column_table. gr_columns = gr_salv->get_columns( ). * Die relevante Spalte ermitteln gr_column ?= gr_columns->get_column( 'MANDT' ). * Schlüsseleigenschaft ausschalten gr_column->set_key( abap_false ). " nur ein ' ' Zum Einfärben ganzer Spalten kann folgende Logik verwendet werden: DATA: gr_column TYPE REF TO cl_salv_column_table. DATA: gs_color TYPE lvc_s_colo. gr_columns = gr_salv->get_columns( ). gr_column ?= gr_columns->get_column( 'PAYMENTSUM' ). gs_color-col = 5. gr_column->set_color( gs_color ). 5 3 Coding *--------------------------------------------------------------------* * Das vorliegende Programm dient der Demonstration eines SALV im * Selection-mode mit geänderten Farben einzelner Zellen * * Date: 27.03.2015 *--------------------------------------------------------------------* * Änderungen *--------------------------------------------------------------------* REPORT zaj_ren_con_funct_salv. TYPES: BEGIN OF gs_sflight_ty. INCLUDE STRUCTURE sflight. TYPES: color TYPE lvc_t_scol. TYPES: END OF gs_sflight_ty. DATA: gr_salv TYPE REF TO cl_salv_table. DATA: gr_columns TYPE REF TO cl_salv_columns_table. DATA: gr_functions TYPE REF TO cl_salv_functions_list. DATA: gr_selections TYPE REF TO cl_salv_selections. DATA: gt_sflight TYPE STANDARD TABLE OF gs_sflight_ty. DATA: gr_err_salv TYPE REF TO cx_salv_msg. DATA: gv_string TYPE string. DATA: gs_color TYPE lvc_s_scol. FIELD-SYMBOLS: <gs_sflight> TYPE gs_sflight_ty. START-OF-SELECTION. *************************************************************************** **** * Selektion der anzuzeigenden Daten *************************************************************************** **** SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight. IF sy-subrc NE 0. * In diesem Fall wird eine leere Tabelle angezeigt ENDIF. *************************************************************************** **** * Daten anzeigen *************************************************************************** **** TRY. * ALV-Instanz erzeugen CALL METHOD cl_salv_table=>factory EXPORTING list_display = if_salv_c_bool_sap=>false IMPORTING r_salv_table = gr_salv CHANGING t_table = gt_sflight. CATCH cx_salv_msg INTO gr_err_salv. * Fehler anzeigen gv_string = gr_err_salv->get_text( ). MESSAGE gv_string TYPE 'E'. ENDTRY. * Instanz für Spalten holen gr_columns = gr_salv->get_columns( ). * Spaltenbreite optimieren gr_columns->set_optimize( abap_true ). " nur ein 'X' *************************************************************************** **** * Selection-Mode aktivieren *************************************************************************** **** * Instanz des Selection-Objektes holen gr_selections = gr_salv->get_selections( ). * Selektionsmodus setzen gr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ). *************************************************************************** **** * Zellenfarbe ändern *************************************************************************** **** * nun werden selektiv ein paar Zellen eingefärbt LOOP AT gt_sflight ASSIGNING <gs_sflight>. CLEAR: gs_color. IF sy-tabix LE 5. * so will ich in den ersten fünf Zeilen die Farbe von PRICE ändern gs_color-fname = 'PRICE'. gs_color-color-col = 5. APPEND gs_color TO <gs_sflight>-color. ELSEIF sy-tabix GE 10 AND sy-tabix LE 15. * in den nächsten Zeilen 10 - 15 will ich die Farbe von * SEATSOCC anpassen gs_color-fname = 'SEATSOCC'. gs_color-color-col = 3. APPEND gs_color TO <gs_sflight>-color. ELSEIF sy-tabix EQ 8. * und Zeile 8 will ich KOMPLETT einfärben gs_color-color-col = 7. APPEND gs_color TO <gs_sflight>-color. ENDIF. ENDLOOP. * dem ALV mitteilen, in welcher Strukturkomponente die Farbinformationen zu * finden sind gr_columns->set_color_column( 'COLOR' ). *************************************************************************** **** * Alle Standard-Funktionen auf aktiv setzen *************************************************************************** **** * Instanz für Funktionen holen gr_functions = gr_salv->get_functions( ). * Alle Standardfunktionen aktivieren gr_functions->set_all( abap_true ). " nur ein 'X' * Die eigentliche Anzeige gr_salv->display( ).