abap2UI5
Version 1.146.0

Value Help ​

Value help (the classic ABAP F4 input help) lets users pick a value from a list instead of typing it. abap2UI5 covers the basics with two built-in popups and lets you build anything custom on top.

Suggestions on the Input ​

The lightest variant — type-ahead from a bound list, no popup, no roundtrip after the initial render. Bind the suggestionItems aggregation to an internal table and pick the columns in its item template:

abap
TYPES: BEGIN OF ty_country,
         code TYPE c LENGTH 3,
         name TYPE string,
       END OF ty_country.
DATA mt_countries TYPE STANDARD TABLE OF ty_country.
DATA mv_country   TYPE string.

mt_countries = VALUE #( ( code = `DE` name = `Germany` )
                        ( code = `FR` name = `France`  )
                        ( code = `IT` name = `Italy`   ) ).

DATA(view) = z2ui5_cl_ui5_view_builder=>factory(
    )->ele( n = `View` ns = `mvc`
        )->a( n = `xmlns`      v = `sap.m`
        )->a( n = `xmlns:mvc`  v = `sap.ui.core.mvc`
        )->a( n = `xmlns:core` v = `sap.ui.core`

        )->ele( `Page`
            )->ele( `Input`
                )->a( n = `value`           v = client->_bind( mv_country )
                )->a( n = `suggestionItems` v = client->_bind( mt_countries )
                )->a( n = `showSuggestion`  b = abap_true

                )->ele( `suggestionItems`
                    )->tag( n = `ListItem` ns = `core`
                        )->a( n = `text`           v = `{CODE}`
                        )->a( n = `additionalText` v = `{NAME}` ).

client->view_display( view->stringify( ) ).

Selection Popup ​

For a "pick from this list" dialog, open a popup with the candidates in it and let the press event write the chosen value back. No sub-app and no navigation are involved — the popup is a second view of the same class, so the selected row is simply an attribute.

abap
CLASS z2ui5_cl_sample_f4 DEFINITION PUBLIC.

  PUBLIC SECTION.
    INTERFACES z2ui5_if_app.

    TYPES:
      BEGIN OF ty_s_carrier,
        carrid   TYPE c LENGTH 3,
        carrname TYPE c LENGTH 20,
      END OF ty_s_carrier.

    DATA mv_carrid   TYPE string.
    DATA mt_carriers TYPE STANDARD TABLE OF ty_s_carrier WITH EMPTY KEY.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS z2ui5_cl_sample_f4 IMPLEMENTATION.
  METHOD z2ui5_if_app~main.

    CASE abap_true.

      WHEN client->check_on_navigated( ).
        DATA(view) = z2ui5_cl_ui5_view_builder=>factory(
            )->ele( n = `View` ns = `mvc`
                )->a( n = `xmlns`     v = `sap.m`
                )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc`

                )->ele( `Page`
                    )->a( n = `title` v = `Value help`

                    )->tag( `Input`
                        )->a( n = `value`            v = client->_bind( mv_carrid )
                        )->a( n = `placeholder`      v = `press the value-help icon`
                        )->a( n = `valueHelpRequest` v = client->_event( `F4` )
                        )->a( n = `showValueHelp`    b = abap_true ).

        client->view_display( view->stringify( ) ).

      WHEN client->check_on_event( `F4` ).
        " On a system this is your SELECT:
        "   SELECT carrid, carrname FROM scarr INTO TABLE @mt_carriers.
        mt_carriers = VALUE #( ( carrid = `LH` carrname = `Lufthansa` )
                               ( carrid = `UA` carrname = `United Airlines` )
                               ( carrid = `AA` carrname = `American Airlines` )
                               ( carrid = `SQ` carrname = `Singapore Airlines` ) ).

        DATA(popup) = z2ui5_cl_ui5_view_builder=>factory(
            )->ele( n = `FragmentDefinition` ns = `core`
                )->a( n = `xmlns`      v = `sap.m`
                )->a( n = `xmlns:core` v = `sap.ui.core`

                )->ele( `Dialog`
                    )->a( n = `title` v = `Choose airline`

                    )->ele( `List`
                        )->a( n = `items` v = client->_bind( mt_carriers )

                        )->ele( `items`
                            )->tag( `StandardListItem`
                                )->a( n = `title`       v = `{CARRNAME}`
                                )->a( n = `description` v = `{CARRID}`
                                )->a( n = `type`        v = `Active`
                                )->a( n = `press`       v = client->_event( val = `PICK` arg = `${CARRID}` ) ).

        client->popup_display( popup->stringify( ) ).

      WHEN client->check_on_event( `PICK` ).
        mv_carrid = client->get_event_arg( ).
        client->popup_destroy( ).

    ENDCASE.

  ENDMETHOD.
ENDCLASS.

The chosen key travels in the event argument, so nothing has to be looked up again on the way back. type="Active" is what makes a StandardListItem pressable — without it the press event never fires.

For a ready-made picker with sorting, multi-select and a search field, the popups add-on carries one.

DDIC Search Help ​

For value helps that exist as DDIC search help objects (SE11 → search help), the generic search help builder wraps the F4 framework so you can fire any standard search help by name and get the picked row back. Install it like any other add-on.

Custom Dialog ​

When neither popup fits — e.g. a filter bar with multiple columns, ranges, fuzzy search — build the F4 as a separate app with its own view and call it via nav_app_call. See Popup → Separated App for the pattern.

Working Samples ​

Complete apps from the sample catalog that use what this page describes. Each is a single class in abap2UI5/samples unless its row names another of the three sample repositories — pull that repository with abapGit and start the class with ?app_start=<class>.

Sample Class
Value Help: Suggestions and F4 Dialog Z2UI5_CL_SMP_APP_009
MultiInput with Tokens (C) Z2UI5_CL_SMP_APP_078
Edit this page on GitHub ↗ Last updated:
On this page