Dropdown by key or Dropdown by index, that is the question of a WDA developer


During my experience as a Web Dynpro for ABAP developer, I often had  the doubt if it was better to use the UI element DropDownByKey or its brother DropDownByIndex.

In these last days, I realized that I always prefer and use the DropDownByKey, it doesn’t matter if the list is inside a table, an ALV table or a simple element in a view.

Clearly the index approach is also working well but I feel it as a more complex task that requires spending more time, and I’m wondering to know about your experience.

As a reference, I’m sharing below the step-by-step guide to build a DDL even without necessarily entering the fixed values ​​associated to a domain of the field.


of all, I created a WDA with its Assistance Class used to encapsulate the reading of a couple of well-known tables like MARA  and T134T (Material Type Descriptions).

The idea is to display all MARA records changing the field MTART in a DropDownByKey.


I added the component usage SALV_WD_TABLE to create an ALV table and in assistance class I have implemented two methods:



(output parameter –> ET_MARA      Returning        Type    MARA_TAB):

METHOD fill_table.

SELECT * FROM mara INTO TABLE et_mara.



(output parameter –> LT_VALUE_SET        Type WDY_KEY_VALUE_TABLE):

METHOD get_type_material.

DATA: lt_t134t            TYPE TABLE OF t134t.

*  field-symbols: <fs_t134t> type t134.

FIELD-SYMBOLS: <fs_t134>  TYPE t134t.

DATA ls_value             TYPE wdy_key_value.

SELECT * FROM t134t INTO TABLE lt_t134t WHERE spras = ‘E’.

SORT lt_t134t BY mtart.

LOOP AT lt_t134t ASSIGNING <fs_t134>.

MOVE <fs_t134>-mtart TO ls_value-key.

MOVE <fs_t134>-mtbez TO ls_value-value.

APPEND ls_value TO lt_value_set.



I have created a context in Component controller called ALV_TABLE with structure of MARA table.

Now in the HANDLEDEFAULT method of my WINDOWS I’m calling a component controller method where we will call the two assistance class methods:

DATA lo_nd_alv_table TYPE REF TO if_wd_context_node.

DATA lt_alv_table TYPE wd_this->elements_alv_table.

*   navigate from <CONTEXT> to <ALV_TABLE> via lead selection

lo_nd_alv_table = wd_context->get_child_node( name = wd_this->wdctx_alv_table ).

lo_nd_alv_table->get_static_attributes_table( IMPORTING table = lt_alv_table ).

lt_alv_table = wd_assist->fill_table( ).

lo_nd_alv_table->bind_table( new_items = lt_alv_table set_initial_elements = abap_true ).

DATA lr_node_info TYPE REF TO if_wd_context_node_info.

DATA lt_value_set TYPE wdy_key_value_table.

lr_node_info = lo_nd_alv_table->get_node_info( ).


* set sales district ddl


lt_value_set = wd_assist->get_type_material( ).

*— set attribute info

lr_node_info->set_attribute_value_set( name = `MTART` value_set = lt_value_set ).

How you can see, we are binding the context ALV_TABLE calling method wd_assist->fill_table( ). The last three rows are used to set values
in my drop down by key.

And this is the result:



The first time that I had to use the UI element DropDownByIndex is been in a ALV table where  the DropDowns had a different value in each table row. In this case it’s impossible to use a DropDownByKey because the relative object class doesn’t have the method SET_VALUESET_FIELDNAME, to set dynamically values for each DropDown

Do you find any other cases that the DropDownByIndex is useful?


On SDN: http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26634

Leave a Reply