Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
EnnoWulff
Active Contributor
1,565
To bring some colour into SAP transactions I like to use Icons. I also think that Icons help to recognize faster what kind of data is displayed. Using different icons for different status help to get a better overview.

There is no witchcraft about the dynamic usage of Icons. But dynamic Icons in a search help exit comes quite close... 🙂

In a project I wanted to customize the icons for certain status information. Therefore I provided a field ICON_NAME to the status. In a search help I wanted not to have the name of the icon displayed but the icon itself.

With The Help Of My Friends


It was clear that I had to use a search help exit for this. But as providing an icon name to an object is quite obvious I would like to have a search help exit that I could reuse for that requirement.

I remembered that you could define parameters in a search help that could be retrieved by the search help exit. I tried to use this feature...

Status Table


I created the following status table to illustrate the point:



When displaying a list I can get the name of the assigned icon and display this icon in the grid.

Search help


Creating a search help for the table was done in two minutes:



The search help looks quite sad without icons:


Parameters


I defined the following parameters to use in the search help exit:

  • ICON_TEXT (column for displaying the icon)

  • COLUMN_WITH_ICON_NAME

  • COLUMN_WITH_ICON_INFO

  • COLUMN_FOR_ICON_DISPLAY


The purpose should be clear...


Search Help Exit


I copied the example function module F4IF_SHLP_EXIT_EXAMPLE to Z_F4IF_SHLP_EXIT_ICON.

Approach


The idea is simple:

  • find out which field contains the name of the icon

  • find out which field contains the text to display with the icon

  • find out the column name to display the icon itself

  • get the field values of ICON_NAME

  • get the field values of ICON_TEXT

  • loop at the icon names

  • read the apropriate entry of the icon text

  • create the icon

  • add the created icons list to the search help


There are some function modules that helped me realize this:

F4UT_PARAMETER_VALUE_GET


Returns the value of a defined parameter. The module returns a result list if the parameter is a field of the search help and a single value if it's a user defined parameter.

F4UT_PARAMETER_RESULTS_PUT


This function module puts back values for a field of the search help.

ICON_CREATE


The one and only way to create an icon to be displayed somewhere.

Result


the result of the below code is a little bit more meaningful:


Code


FUNCTION z_f4if_shlp_exit_icon.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------

DEFINE get_param.
CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'
EXPORTING
parameter = &1
fieldname = '*'
IMPORTING
value = lv_parameter_value
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
parameter_unknown = 1.
IF sy-subrc = 0.
&2 = lv_parameter_value.
ENDIF.
END-OF-DEFINITION.

DEFINE icon_create.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = &1
info = &2
add_stdinf = ''
IMPORTING
result = &3
EXCEPTIONS
OTHERS = 3.

END-OF-DEFINITION.

*== Info:
* Dieser Baustein kann in Suchhilfen als Suchhilfe-Exit verwendet werden
*== Zweck:
* Anzeige des Icons zu einem Icon-Namen, der in der Tabelle vorhanden ist
*== Voraussetzung:
* Spalte mit dem Namen eines Icons
*

"Tabelle für den Iconnamen, der aus der RESULTTAB ermittelt wird
DATA lt_col_iconname TYPE STANDARD TABLE OF icon_name.
"Tabelle für den Inhalt der Info zum Icon
DATA lt_col_iconinfo TYPE STANDARD TABLE OF icon_text.
"Tabelle für das Aufbereitete Icon, das an die RESULTTAB übergeben wird
DATA lt_col_icontext TYPE STANDARD TABLE OF icon_text.
DATA lv_icontext TYPE icon_text.

"Generischer Parameter
DATA lv_parameter_value TYPE ddshvalue.
"Name der Spalte, die den Iconnamen enthält
DATA lv_column_with_icon_name TYPE shlpfield.
"Name der Spalte, die den Icontext enthält
DATA lv_column_with_icon_info TYPE shlpfield.
"Name der Spalte, in der das aufbereitete Icon dargestellt werden soll
DATA lv_column_for_display TYPE shlpfield.


* EXIT immediately, if you do not want to handle this step
IF callcontrol-step <> 'SELONE' AND
callcontrol-step <> 'SELECT' AND
callcontrol-step <> 'SELONE' AND
callcontrol-step <> 'PRESEL' AND
callcontrol-step <> 'SELECT' AND
callcontrol-step <> 'DISP'.
EXIT.
ENDIF.

*"----------------------------------------------------------------------
* STEP DISP (Display values)
*"----------------------------------------------------------------------
IF callcontrol-step = 'DISP'.

get_param 'COLUMN_WITH_ICON_NAME' lv_column_with_icon_name.
get_param 'COLUMN_WITH_ICON_INFO' lv_column_with_icon_info.
get_param 'COLUMN_FOR_ICON_DISPLAY' lv_column_for_display.


"Ermitteln aller ICON_NAMEN der einzelnen Einträge
CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'
EXPORTING
parameter = lv_column_with_icon_name
fieldname = '*'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
results_tab = lt_col_iconname
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
parameter_unknown = 1
OTHERS = 2.
IF sy-subrc = 0.
"Wenn alles geklappt hat, dann sind in Tabelle LT_COL_ICONNAME die Namen
"der Icons aus dem Parameter COLUMN_WITH_ICON_NAME

"Nun noch die die Texte für die Quickinfo ermitteln
CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'
EXPORTING
parameter = lv_column_with_icon_info
fieldname = '*'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
results_tab = lt_col_iconinfo
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
parameter_unknown = 1
OTHERS = 2.
if sy-subrc > 0.
"Macht nichts: Es ist kein Feld definiert/ vorhanden, das zum Icon angezeigt werden soll
"Die Tabelle LT_COL_ICONINFO ist dann halt leer
endif.


LOOP AT lt_col_iconname INTO DATA(lv_iconname).
"Info zum Icon lesen:
READ TABLE lt_col_iconinfo INTO DATA(lv_iconinfo) INDEX sy-tabix.
"Aufbereitung des Icons zur Darstellung
icon_create lv_iconname lv_iconinfo lv_icontext.
APPEND lv_icontext TO lt_col_icontext.
ENDLOOP.
ENDIF.

"Alle aufbereiteten Icons an RESULTTAB übergeben
CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'
EXPORTING
parameter = lv_column_for_display
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_col_icontext
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
parameter_unknown = 1
OTHERS = 2.
IF sy-subrc <> 0.
EXIT.
ENDIF.
EXIT.
ENDIF.

ENDFUNCTION.

 
Labels in this area