SAP: Icons in ABAP verwenden (mit Codebeispielen)

SAP stellt über 1000 Icons zur Verfügung. Diese lassen sich in eigenen Programmen verwenden, z.B. in ALV-Listen, Dialogen (Dynpros), Selektionsbildschirmen oder in Reportausgaben. Hier findest du Codebeispiele für die wichtigsten Anwendungsfälle.

Icons finden

Um Icons in eigenen Programmen zu verwenden, benötigst du den Code des Icons oder (besser noch) die zugehörige sprechende Konstante, z.B. „@[email protected]“ oder ICON_CHECKED.

Zur Anzeige aller Icons hat SAP zwei Standardreports bereitgestellt: RSTXICON und  SHOWICON. Beide werden über die Transaktion SE38 aufgerufen. Die Ausgaben sind ähnlich. Die Alternative dazu ist die direkte Anzeige in SE16 für die Tabelle ICON. Hier die drei Möglichkeiten im direkten Vergleich. Ich halte SE16 für die hilfreichste Variante.

Der Standard-Report RSTXICON:

Das Selektionsbild von RSTXICON:

Die Ausgabe von RSTXICON

Der Standard-Report SHOWICON

Die Einstiegsmaske von SHOWICON

Die Ausgabe von SHOWICON

Die Tabellenanzeige SE16 für die Tabelle ICON

Der Parameterdialog zur Tabelle ICON. Bitte daran denken, die max. Anzahl der Ausgabe hochzusetzen, es gibt knapp über 1000 Ergebniszeilen

Die Tabellenausgabe von ICON

Lass uns diese drei Wege miteinander vergleichen: Was ist der einfachste Weg, einen Icon-Code zu finden?

Über die Reports

Alle drei Wege listen die Icons auf. Letztendlich wirst du aber einen Icon-Code oder eine Icon-Konstante kopieren wollen. In beiden Reports benötigst du hierzu CTRL-Y und ein vorsichtiges Rumprökeln mit der Maus, um die Werte aus dem Dialog in den Copy/Paste-Puffer zu bekommen.

Über SE16

Deutlich einfacher ist der Weg über die Tabellenanzeige SE16 auf der Tabelle ICON. Jedenfalls dann, wenn Du in SE16 die Anzeige auf ALV-Grid gestellt hast. (Falls du diesen Trick noch nicht kennst: öffne SE16. Im Selektionsbild (vor dem Anzeigen der eigentlichen Tabellendaten) gehst du im Menü auf „Einstellungen/Benutzerparameter“ und wählst im folgenden Dialog „ALV-Grid“. Dies ist in SE16 immer die sinnvollste Einstellung, auch für alle andere Tabellen.)

In der Ausgabe von SE16 kannst du dann die Zellen direkt mit der Maus anklicken und auf CTRL-C drücken, damit hast du wahlweise die beschreibende Konstante im Puffer (bei Klick auf den Namen) oder, wenn du das Icon anklickst, den 4-stelligen Icon-Code.

Icons über den Namen finden

Nun hat SAP über 1000 Icons und man kann da lange blättern. Aber auch hier bietet SE16 oft eine schnelle Lösung. Stell dir vor, du suchst ein Icon mit einem Pfeil nach links. Gib in SE16 einfach als Namen „*LEFT*“ ein und du bekommst diese handliche Übersicht:

Und du siehst, dass ICON_ARROW_LEFT das Icon ist, nach dem du gesucht hast.

In welcher Tabelle werden die SAP-Icons gespeichert?

Alle verwendbaren Icons finden sich in der Tabelle ICON. Dazu gehört noch die Texttabelle ICONT mit textuellen Beschreibungen in den installierten Landessprachen. Hier die Tabellendefinition aus SE11:

In der Tabelle ICON sind die folgenden Spalten wichtig:

  • ID: typ icon_d, ein Characterstring mit Länge 4. Achtung: se16 in Tabelle ICON zeigt in dieser Spalte unmittelbar das ICON, also das Bild. Mehr dazu unten in den Codebeispielen.
  • NAME: ist die Konstante, unter der man das Icon sinnvoll in ABAP ansprechen sollte. Man kann da auch die ID verwenden, aber die ist halt im Programmcode nicht sprechend.
  • OLENG: die Ausgabelänge in Druckausgaben: ist meist 2, aber ein paar Warnicons sind größer, und die liegende Ampel ist auch 4 groß. 
  • Button, Status, Message, Function und Textfield sind Flags, ob sich das Icon für diesen Zweck eignet. Das wird auch im SAP-Code an vielen Stellen abgefragt, um Konsistenz sicherzustellen. ggf. wird der Einsatz eines Icons für einen nicht vorgesehenen Zweck ignoriert. Man kann die Verwendbarkeit z.B. mit dem Funktionsbaustein ICON_CHECK prüfen. Eingabe ist der Icon-Code sowie eine Liste der gewünschten Iconverwendungen. Das Ergebnis ist nur dann OK, wenn es ein Icon mit dem angefragten Code gibt und wenn mindestens eine der angeforderten Verwendungen auch bei diesem Icon hinterlegt ist. 
  • I_CLASS, I_GROUP, I_MEMBER sind die Gruppierungen aus der offiziellen SAP Icon-Guideline in https://experience.sap.com/files/guidelines/icons_sap/index.htm Dort findet sich eine umfangreiche Darstellung, welche Icons aus Sicht von SAP für welchen Zweck geplant sind. Wenn es dir wichtig ist, dass sich die Masken deines Programms möglichst gut in das einpassen, was in SAP gängig ist, dann lohnt sich hier ein näherer Blick.

Der Datentyp für SAP-Icons

Die SAP-Domäne für Icons lautet ICON, das ist ein 4-stelliges Characterfeld. Dazu gibt es dann eine Reihe von passenden Datenelementen, die sich auf diese Domäne beziehen, z.B. ICON_D, das auch in der Tabelle ICON verwendet wird. Dieses Datenelement sollte für die meisten Anwendungsfälle im eigenen Code geeignet sein.

ICON-Konstanten in ABAP verwenden

Die sprechenden Icon-Konstanten aus SE16 werden in einem Typepool definiert. Du erreichst ihn über

include <icon>

oder über

type-pools: icon.

In einem normalen Report in SE38 scheint es aber auch zu gehen, ohne das noch einmal gesondert anzumelden.

Leider funktioniert anscheinend die Autovervollständigung im Code nicht, weder in SE38 in der SAP-GUI noch im ABAP-Editor von Eclipse.

Ausgabe von Icons in Selektionsbildschirmen

In den Selektionsbildschirmen eines Reports kann man Icons direkt verwenden.

Es reicht, im Editmodus die @-Kürzel einzugeben:

Im Anzeigemodus ist dann das Icon zu sehen:

Zur Laufzeit wird das Icon dann im Selektionsbild angezeigt:

Allerdings funktioniert dies nur, wenn das Icon am Anfang des jeweiligen Textes steht.

Ausgabe von Icons in einem Report

Icons können direkt mittels write ausgegeben werden. Das Icon muss aber offenbar am Anfang eines Textes stehen, andernfalls wird der @-String tatsächlich ausgegeben. Wenn ein Icon mittendrin stehen soll, dann muss man stücken, also den Text in mehreren write-Statements ausgeben oder per Komma trennen.

lf_icon = icon_okay.
write : / lf_icon.

write : '@[email protected] Test', '@[email protected]'.

Die Ausgabe sieht so aus:

Ausgabe von Icons in Zellen einer ALV-Liste

Icons lassen sich auch sehr einfach in eigenen ALV-Listen verwenden. Es reicht, den Datentyp der Icon-Spalte auf ein Icon-Datenelement zu setzen. Die ALV-Liste macht dann alles von ganz allein. Hier ein Beispiel:

  • Zunächst definieren wir den Datentyp für die Anzeige, hier ganz einfach ein Icon und irgend etwas anderes, z.B. eine Kundennummer.
  • Dazu legen wir einen Tabellentyp an und füllen diesen mit Beispieldaten, jeweils Icon und Kundennummer.
  • Die weiteren Zeilen sind Standardcode, um eine ALV-Liste zu starten und die interne Tabelle in dieser Liste anzuzeigen.

Man erreicht damit diese Ausgabe:

Hier der Programmcode:

REPORT z_icons_in_alv.

TYPE-POOLS: icon.


TYPES: BEGIN OF ts_sample,
         icon TYPE icon_d,
         kunnr TYPE kunnr,
       END OF ts_sample,
       tt_sample TYPE TABLE OF ts_sample.

DATA: lt_sample TYPE tt_sample,
      ls_sample TYPE ts_sample,

      lc_alv            TYPE REF TO cl_salv_table,
      lr_functions      TYPE REF TO cl_salv_functions_list,
      lr_columns        TYPE REF TO cl_salv_columns_table,
      lr_display        TYPE REF TO cl_salv_display_settings,
      lf_listname       TYPE lvc_title,
      lr_layout TYPE REF TO cl_salv_layout,
      ls_key    TYPE salv_s_layout_key.


ls_sample-icon = icon_okay.
ls_sample-kunnr = 47110815.
APPEND ls_sample TO lt_sample.

ls_sample-icon = icon_cancel.
ls_sample-kunnr = 47110816.
APPEND ls_sample TO lt_sample.

* prepare cl_salv_table
cl_salv_table=>factory(
  IMPORTING r_salv_table = lc_alv
  CHANGING t_table = lt_sample ).

* functions: sort, filter, export etc
lr_functions = lc_alv->get_functions( ).
lr_functions->set_all( abap_true ).

* optimal column size
lr_columns = lc_alv->get_columns( ).
lr_columns->set_optimize( abap_true ).


lf_listname = 'sample list'.
lr_display = lc_alv->get_display_settings( ).
lr_display->set_list_header( value = lf_listname ).
lr_display->set_striped_pattern( abap_true ).

lr_layout = lc_alv->get_layout( ).

* set the Layout Key
ls_key-report = sy-cprog.
lr_layout->set_key( ls_key ).

* set usage of default Layouts
lr_layout->set_default( abap_true ).

* set Layout save restriction
lr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).

* Liste anzeigen
lc_alv->display( ).

heiko

Dipl.-Ing. Heiko Evermann

Vorheriger Artikel