Friday 16 November 2018

General Usage Of Search Help Exits (Icons Display)

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:

ABAP Development, SAP ABAP Tutorial and Material, SAP ABAP Certification

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:

ABAP Development, SAP ABAP Tutorial and Material, SAP ABAP Certification

The search help looks quite sad without icons:

ABAP Development, SAP ABAP Tutorial and Material, SAP ABAP Certification

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…

ABAP Development, SAP ABAP Tutorial and Material, SAP ABAP Certification

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:

ABAP Development, SAP ABAP Tutorial and Material, SAP ABAP Certification

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.

No comments:

Post a Comment