cancel
Showing results for 
Search instead for 
Did you mean: 

How to dynamically create ui elements using grid layout?

former_member201541
Participant
0 Kudos

Hello all,

Can some one please tell me the code of how to dynamically create ui elements using grid/matrix/flow layout? Please reply fast.

Thanks

Accepted Solutions (0)

Answers (2)

Answers (2)

mmgc_riel
Participant
0 Kudos

Hi,

I have a class which creates those kind of things.
Here you can find the statements.

Hope it gives you enough help.

*----------------------------------------------------------------------*

* CLASS ZCL_UTIL_WD DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS Zcl_util_wd DEFINITION

PUBLIC

FINAL

CREATE PUBLIC .

PUBLIC SECTION.

TYPES:

ty_type TYPE c LENGTH 1 .

TYPES:

BEGIN OF ty_shuttle_operation,

operation TYPE ty_type,

END OF ty_shuttle_operation .

TYPES:

BEGIN OF ty_dyn_button,

text TYPE string,

action TYPE string, "obligatory when button or menu_action_item

icon TYPE string,

tooltip TYPE string,

bind_enabled TYPE string,

bind_visible TYPE string,

END OF ty_dyn_button .

TYPES:

ty_dyn_button_tb TYPE STANDARD TABLE OF ty_dyn_button .

TYPES:

BEGIN OF ty_dyn_btn_choice,

text TYPE string,

icon TYPE string,

bind_enabled TYPE string,

bind_visible TYPE string,

repeat_selected TYPE wdy_boolean,

END OF ty_dyn_btn_choice .

TYPES:

BEGIN OF ty_dyn_mai, "menu action item

text TYPE string,

action TYPE string, "obligatory

icon TYPE string,

bind_enabled TYPE string,

bind_visible TYPE string, "the field must point to a boolean

END OF ty_dyn_mai .

TYPES:

ty_dyn_mai_tb TYPE STANDARD TABLE OF ty_dyn_mai .

TYPES:

BEGIN OF ty_column,

type TYPE ty_type,

fldnam TYPE string,

width TYPE string,

text TYPE string, "Header label

bind_name TYPE string, "Node data bind

bind_read_only TYPE string,

bind_enable TYPE string,

bind_filter_value TYPE string, "Path to the filter node attribute

read_only TYPE Zboolean,

tooltip TYPE string,

not_sortable TYPE Zboolean,

action TYPE string,

group TYPE string, "Name of the group if column is included

group_header TYPE string, "Header of group column

END OF ty_column .

TYPES:

ty_column_tb TYPE STANDARD TABLE OF ty_column .

TYPES:

BEGIN OF ty_field,

type TYPE ty_type,

fldnam TYPE string,

label TYPE string, "Label

" If no label, take next field in considerations

same_line TYPE Zboolean,

text TYPE string,

tooltip TYPE string,

bind_value TYPE string, "Node data bind

bind_read_only TYPE string,

bind_enable TYPE string,

bind_visible TYPE string,

read_only TYPE Zboolean,

width TYPE string, "Width in percent or pixels

height TYPE string, "Width in percent or pixels

required TYPE Zboolean, "TRUE if field is required

" For InputField only

symbol_count TYPE i, "Possible symbol count

" For TextEdit only

rows TYPE i, "rows

cols TYPE i, "cols

" For CheckBox, DropDownByKey (Index) or Button

action TYPE string,

" For Button only

image TYPE string,

label_width TYPE string, "Width in percent or pixels

enabled TYPE Zboolean,

map_enabled TYPE Zboolean, " Indicates if it is necessary to map enable prop

" For TransparentContainer

tc_label_middle_alignment TYPE Zboolean,

END OF ty_field .

TYPES:

ty_field_tb TYPE STANDARD TABLE OF ty_field .

TYPES:

BEGIN OF ty_field_ref,

type TYPE ty_type,

fldnam TYPE string,

elemnam TYPE string,

elem_ref TYPE REF TO cl_wd_uielement,

END OF ty_field_ref .

TYPES:

ty_field_ref_tb TYPE STANDARD TABLE OF ty_field_ref .

CONSTANTS:

BEGIN OF e_type,

checkbox TYPE ty_type VALUE '1',

dropdown_by_index TYPE ty_type VALUE '2',

text_view TYPE ty_type VALUE '3',

dropdown_by_key TYPE ty_type VALUE '4',

input_field TYPE ty_type VALUE '5',

image TYPE ty_type VALUE '6',

END OF e_type .

CONSTANTS:

BEGIN OF e_fieldtype,

checkbox TYPE ty_type VALUE '1',

dropdown_by_index TYPE ty_type VALUE '2',

text_edit TYPE ty_type VALUE '3',

dropdown_by_key TYPE ty_type VALUE '4',

input_field TYPE ty_type VALUE '5',

transparent_container TYPE ty_type VALUE '6',

button TYPE ty_type VALUE '7',

group TYPE ty_type VALUE '8',

shuttle TYPE ty_type VALUE '9',

tray TYPE ty_type VALUE 'T',

END OF e_fieldtype .

CONSTANTS:

BEGIN OF e_operation,

add TYPE ty_type VALUE 'A',

remove TYPE ty_type VALUE 'R',

END OF e_operation .

CLASS-METHODS create_dynamic_buttons

IMPORTING

!io_toolbar TYPE REF TO cl_wd_toolbar

!it_dyn_button TYPE ty_dyn_button_tb

!iv_index TYPE i OPTIONAL

!is_dyn_btn_choice TYPE ty_dyn_btn_choice OPTIONAL .

CLASS-METHODS create_dynamic_columns

IMPORTING

!it_column TYPE ty_column_tb

!io_table TYPE REF TO cl_wd_table

!iv_table_source TYPE string OPTIONAL .

CLASS-METHODS create_dynamic_table

IMPORTING

!io_view TYPE REF TO if_wd_view

!it_column TYPE ty_column_tb

!ib_sort TYPE Zboolean OPTIONAL

!io_group TYPE REF TO cl_wd_group OPTIONAL

!iv_id TYPE string OPTIONAL

!iv_data_source TYPE string OPTIONAL

!ib_clear_container TYPE wdy_boolean DEFAULT 'X'

RETURNING

value(result) TYPE REF TO cl_wd_table .

CLASS-METHODS add_dynamic_fields

IMPORTING

!it_field TYPE ty_field_tb

!io_uielement TYPE REF TO cl_wd_uielement

!ib_clear_container TYPE wdy_boolean DEFAULT 'X'

RETURNING

value(et_field_ref) TYPE Zfield_ref_tb .

TYPE-POOLS abap .

PROTECTED SECTION.

PRIVATE SECTION.

TYPES:

BEGIN OF ty_fieldname,

id TYPE string,

END OF ty_fieldname .

TYPES:

ty_fieldname_tb TYPE STANDARD TABLE OF ty_fieldname .

CONSTANTS _cc_dynamic_node_name TYPE string VALUE `CT_XXX_DTA`. "#EC NOTEXT

CONSTANTS _cc_table_id TYPE string VALUE `TBL_DYNAMIC`. "#EC NOTEXT

CONSTANTS _cc_group_id TYPE string VALUE `GRP_GROUP`. "#EC NOTEXT

CLASS-DATA _gi_nr_dyn_buttons TYPE i .

CONSTANTS _cc_filter_node TYPE string VALUE `FILTER`. "#EC NOTEXT

CLASS-DATA _gi_nr_field TYPE i .

CLASS-DATA _gt_dyn_field TYPE ty_fieldname_tb .

CLASS-DATA _cc_oob_prmstr_node_prefix TYPE string VALUE `DYN_PRMSTR_NODE`. "#EC NOTEXT .

CLASS-METHODS _adf_create_label

IMPORTING

!iv_label_for TYPE string

!is_field TYPE ty_field

!iv_v_align TYPE wdui_cell_valign

RETURNING

value(result) TYPE REF TO cl_wd_label .

CLASS-METHODS _cdb_menu_action_item

IMPORTING

!is_dyn_mai TYPE ty_dyn_mai

RETURNING

value(result) TYPE REF TO cl_wd_menu_action_item .

CLASS-METHODS _cdb_toolbar_btn_choice

IMPORTING

!is_dyn_btn_choice TYPE ty_dyn_btn_choice

!it_dyn_mai TYPE ty_dyn_mai_tb

RETURNING

value(result) TYPE REF TO if_wd_toolbar_item .

CLASS-METHODS _cdb_toolbar_button

IMPORTING

!is_dyn_button TYPE ty_dyn_button

RETURNING

value(result) TYPE REF TO if_wd_toolbar_item .

CLASS-METHODS _cdt_create_column

IMPORTING

!is_column TYPE ty_column

!iv_table_source TYPE string OPTIONAL

RETURNING

value(result) TYPE REF TO cl_wd_table_column .

CLASS-METHODS _adf_create_field

IMPORTING

!is_field TYPE ty_field

!io_container TYPE REF TO cl_wd_uielement_container

RETURNING

value(et_field_ref) TYPE Zfield_ref_tb .

CLASS-METHODS _cdn_prmstr_create_nodes

IMPORTING

!is_amdprm TYPE Zamdprm

!io_context TYPE REF TO if_wd_context_node .

CLASS-METHODS _fdn_prmstr_fill_nodes

IMPORTING

!is_amdprm TYPE Zamdprm

!io_context TYPE REF TO if_wd_context_node

!iv_readonly TYPE wdy_boolean OPTIONAL .

CLASS-METHODS _cui_prmstr_construct_ui

IMPORTING

!is_amdprm TYPE Zamdprm

!io_uielement_container TYPE REF TO cl_wd_uielement_container

!io_view TYPE REF TO if_wd_view

!iv_readonly TYPE wdy_boolean

!iv_algemen_enable TYPE wdy_boolean DEFAULT abap_true

!iv_algemen_visible TYPE wdy_boolean DEFAULT abap_true .

CLASS-METHODS _rdn_remove_dynamic_nodes

IMPORTING

!io_context TYPE REF TO if_wd_context_node .

CLASS-METHODS _adf_create_item_selector

IMPORTING

!is_amdprm TYPE Zamdprm

!io_view TYPE REF TO if_wd_view .

CLASS-METHODS _adf_create_cond_mnl_ui

IMPORTING

!is_amdprm TYPE Zamdprm

!io_view TYPE REF TO if_wd_view

!iv_readonly TYPE wdy_boolean

!iv_algemen_enable TYPE wdy_boolean DEFAULT abap_true

!iv_algemen_visible TYPE wdy_boolean DEFAULT abap_true .

ENDCLASS. "ZCL_UTIL_WD DEFINITION

*----------------------------------------------------------------------*

* CLASS ZCL_UTIL_WD IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS Zcl_util_wd IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_UTIL_WD=>ADD_DYNAMIC_FIELDS

* +-------------------------------------------------------------------------------------------------+

* | [--->] IT_FIELD TYPE TY_FIELD_TB

* | [--->] IO_UIELEMENT TYPE REF TO CL_WD_UIELEMENT

* | [--->] IB_CLEAR_CONTAINER TYPE WDY_BOOLEAN (default ='X')

* | [<-()] ET_FIELD_REF TYPE ZFIELD_REF_TB

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD add_dynamic_fields.

* This method creates fields in a transparant container

* The TC must be of the type matrix_layout (standards and in _adf_create_label)

* The method keeps count of the new field and use this number for its naming

* This keeps the fieldnames unique

DATA:

ls_field TYPE ty_field.

DATA:

lt_children TYPE cl_wd_uielement=>tt_uielement,

lt_field_ref TYPE Zfield_ref_tb.

DATA:

lo_uielement_container TYPE REF TO cl_wd_uielement_container,

lo_uielement TYPE REF TO cl_wd_uielement.

TRY.

lo_uielement_container ?= io_uielement.

CATCH cx_sy_move_cast_error.

" Not a container (transparent container/group/...) raise exception

RAISE EXCEPTION TYPE Zcx_sy_illegal_argument

EXPORTING

iv_method = 'ADD_DYNAMIC_FIELDS'.

ENDTRY.

"Clear container

IF ib_clear_container = abap_true.

lt_children = lo_uielement_container->get_children( ).

LOOP AT lt_children INTO lo_uielement.

READ TABLE _gt_dyn_field

TRANSPORTING NO FIELDS

WITH KEY id = lo_uielement->id.

IF sy-subrc = 0.

DELETE _gt_dyn_field INDEX sy-tabix.

lo_uielement_container->remove_child( id = lo_uielement->id ).

ENDIF.

IF lo_uielement->id = 'TC_NO_TRAY'.

lo_uielement_container->remove_child( id = lo_uielement->id ).

ENDIF.

ENDLOOP.

"Initiliase

IF _gt_dyn_field[] IS INITIAL.

CLEAR _gi_nr_field.

ENDIF.

ENDIF.

" For all fields

LOOP AT it_field INTO ls_field.

REFRESH lt_field_ref.

lt_field_ref = Zcl_util_wd=>_adf_create_field( is_field = ls_field

io_container = lo_uielement_container ).

APPEND LINES OF lt_field_ref TO et_field_ref.

ENDLOOP.

ENDMETHOD. "add_dynamic_fields

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_UTIL_WD=>CREATE_DYNAMIC_BUTTONS

* +-------------------------------------------------------------------------------------------------+

* | [--->] IO_TOOLBAR TYPE REF TO CL_WD_TOOLBAR

* | [--->] IT_DYN_BUTTON TYPE TY_DYN_BUTTON_TB

* | [--->] IV_INDEX TYPE I(optional)

* | [--->] IS_DYN_BTN_CHOICE TYPE TY_DYN_BTN_CHOICE(optional)

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD create_dynamic_buttons.

DATA:

lv_index TYPE i,

lv_max_btn TYPE i VALUE 3. " maximum number of buttons

DATA:

ls_dyn_button TYPE ty_dyn_button,

ls_dyn_mai TYPE ty_dyn_mai.

DATA:

lt_dyn_mai TYPE ty_dyn_mai_tb.

DATA:

lo_wd_toolbar_item TYPE REF TO if_wd_toolbar_item.

lv_index = iv_index.

IF lines( it_dyn_button[] ) > lv_max_btn

AND is_dyn_btn_choice IS SUPPLIED.

CLEAR lt_dyn_mai[].

LOOP AT it_dyn_button INTO ls_dyn_button.

CLEAR ls_dyn_mai.

MOVE-CORRESPONDING ls_dyn_button TO ls_dyn_mai.

CLEAR ls_dyn_mai-bind_visible.

APPEND ls_dyn_mai TO lt_dyn_mai.

ENDLOOP.

lo_wd_toolbar_item = Zcl_util_wd=>_cdb_toolbar_btn_choice(

is_dyn_btn_choice = is_dyn_btn_choice

it_dyn_mai = lt_dyn_mai ).

io_toolbar->add_toolbar_item( the_toolbar_item = lo_wd_toolbar_item

index = lv_index ).

ELSE.

LOOP AT it_dyn_button INTO ls_dyn_button.

" always create a toolbar button

lo_wd_toolbar_item = Zcl_util_wd=>_cdb_toolbar_button( is_dyn_button = ls_dyn_button ).

io_toolbar->add_toolbar_item( the_toolbar_item = lo_wd_toolbar_item

index = lv_index ).

IF iv_index <> 0.

" Next position to insert

lv_index = iv_index + 1.

ENDIF.

ENDLOOP.

ENDIF.

ENDMETHOD. "create_dynamic_buttons

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_UTIL_WD=>CREATE_DYNAMIC_COLUMNS

* +-------------------------------------------------------------------------------------------------+

* | [--->] IT_COLUMN TYPE TY_COLUMN_TB

* | [--->] IO_TABLE TYPE REF TO CL_WD_TABLE

* | [--->] IV_TABLE_SOURCE TYPE STRING(optional)

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD create_dynamic_columns.

DATA:

lv_id TYPE string,

lv_group TYPE string,

lv_text TYPE string.

DATA:

ls_column TYPE ty_column.

DATA:

lo_wd_table_column TYPE REF TO cl_wd_table_column,

lo_wd_table_grouped_column TYPE REF TO cl_wd_table_column_group,

lo_wd_caption TYPE REF TO cl_wd_caption.

LOOP AT it_column INTO ls_column.

" new group or no longer group

IF ls_column-group <> lv_group.

IF lv_group IS NOT INITIAL.

" There is already a group created.

io_table->add_grouped_column( lo_wd_table_grouped_column ).

ENDIF.

IF ls_column-group IS NOT INITIAL.

" Construct group ID and create new column

CONCATENATE 'DYN_' ls_column-group

INTO lv_id.

lo_wd_table_grouped_column = cl_wd_table_column_group=>new_table_column_group(

id = lv_id ).

" Set group column header

lv_text = ls_column-group_header.

lo_wd_caption = cl_wd_caption=>new_caption(

text = lv_text ).

lo_wd_table_grouped_column->set_header( lo_wd_caption ).

ENDIF.

ENDIF.

lv_group = ls_column-group.

lo_wd_table_column = _cdt_create_column(

is_column = ls_column

iv_table_source = iv_table_source ).

IF ls_column-group IS NOT INITIAL.

" Add column

lo_wd_table_grouped_column->add_column( lo_wd_table_column ).

ELSE.

" Add column

io_table->add_column( lo_wd_table_column ).

ENDIF.

ENDLOOP.

IF lv_group IS NOT INITIAL.

" There is a group created and not added to the table.

io_table->add_grouped_column( lo_wd_table_grouped_column ).

ENDIF.

ENDMETHOD. "CREATE_DYNAMIC_COLUMNS

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_UTIL_WD=>CREATE_DYNAMIC_TABLE

* +-------------------------------------------------------------------------------------------------+

* | [--->] IO_VIEW TYPE REF TO IF_WD_VIEW

* | [--->] IT_COLUMN TYPE TY_COLUMN_TB

* | [--->] IB_SORT TYPE ZBOOLEAN(optional)

* | [--->] IO_GROUP TYPE REF TO CL_WD_GROUP(optional)

* | [--->] IV_ID TYPE STRING(optional)

* | [--->] IV_DATA_SOURCE TYPE STRING(optional)

* | [--->] IB_CLEAR_CONTAINER TYPE WDY_BOOLEAN (default ='X')

* | [<-()] RESULT TYPE REF TO CL_WD_TABLE

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD create_dynamic_table.

DATA:

lv_id TYPE string,

lv_data_source_name TYPE string.

DATA:

lo_wd_group TYPE REF TO cl_wd_group.

" Clear dynamic columns in grid

IF ib_clear_container = abap_true.

io_view->reset_view( ).

ENDIF.

"Set ID

lv_id = iv_id.

IF lv_id IS INITIAL.

lv_id = _cc_table_id.

ENDIF.

lv_data_source_name = iv_data_source.

IF lv_data_source_name IS INITIAL.

lv_data_source_name = _cc_dynamic_node_name.

ENDIF.

" Create dynamic table

IF ib_sort = abap_true.

"sort is not possible on dynamic context

result = cl_wd_table=>new_table(

id = lv_id

bind_data_source = lv_data_source_name

bind_visible_row_count = 'UI_ELEM_PROP.VISIBLE_ROW_COUNT'

bind_empty_table_text = 'UI_ELEM_PROP.MSG_EMPTY_GRID'

bind_read_only = 'UI_ELEM_PROP.GRID_READ_ONLY'

width = '100%'

on_sort = 'SORT'

on_lead_select = 'LEAD_SELECT' ).

ELSE.

result = cl_wd_table=>new_table(

id = lv_id

bind_data_source = lv_data_source_name

bind_visible_row_count = 'UI_ELEM_PROP.VISIBLE_ROW_COUNT'

bind_empty_table_text = 'UI_ELEM_PROP.MSG_EMPTY_GRID'

bind_read_only = 'UI_ELEM_PROP.GRID_READ_ONLY'

width = '100%'

on_lead_select = 'LEAD_SELECT' ).

ENDIF.

" Set layout data to matrix layout

cl_wd_matrix_head_data=>new_matrix_head_data(

element = result ).

Zcl_util_wd=>create_dynamic_columns(

it_column = it_column

io_table = result

iv_table_source = lv_data_source_name ).

" Add dynamic table to existing group

lo_wd_group = io_group.

IF lo_wd_group IS NOT BOUND.

lo_wd_group ?= io_view->get_element( _cc_group_id ).

ENDIF.

lo_wd_group->add_child(

the_child = result ).

ENDMETHOD. "create_dynamic_table

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_ADF_CREATE_COND_MNL_UI

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_AMDPRM TYPE ZAMDPRM

* | [--->] IO_VIEW TYPE REF TO IF_WD_VIEW

* | [--->] IV_READONLY TYPE WDY_BOOLEAN

* | [--->] IV_ALGEMEN_ENABLE TYPE WDY_BOOLEAN (default =ABAP_TRUE)

* | [--->] IV_ALGEMEN_VISIBLE TYPE WDY_BOOLEAN (default =ABAP_TRUE)

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _adf_create_cond_mnl_ui.

DATA:

lv_node_name TYPE string,

lv_parent_container_name TYPE string,

lv_element_name TYPE string.

DATA:

ls_field TYPE Zcl_util_wd=>ty_field.

DATA:

lt_field TYPE Zcl_util_wd=>ty_field_tb.

DATA:

lo_transparant_container TYPE REF TO cl_wd_transparent_container.

lv_element_name = is_amdprm-amdprmnam.

TRANSLATE lv_element_name TO UPPER CASE.

" Construct dynamic node name

CLEAR lv_node_name.

CONCATENATE _cc_oob_prmstr_node_prefix

lv_element_name

INTO lv_node_name

SEPARATED BY '_'.

REFRESH lt_field.

" Add InputField

CLEAR ls_field.

ls_field-type = Zcl_util_wd=>e_fieldtype-input_field.

ls_field-tooltip = is_amdprm-amdprmtlt.

ls_field-required = is_amdprm-amdprmvrp.

ls_field-fldnam = lv_element_name.

ls_field-symbol_count = 57.

CONCATENATE lv_node_name 'VAL' INTO ls_field-bind_value SEPARATED BY '.'.

CONCATENATE lv_node_name 'READ_ONLY' INTO ls_field-bind_read_only SEPARATED BY '.'.

CONCATENATE lv_node_name 'VISIBLE' INTO ls_field-bind_visible SEPARATED BY '.'.

APPEND ls_field TO lt_field.

" Add Button

IF iv_readonly = abap_false AND iv_algemen_visible = abap_true.

CLEAR ls_field.

ls_field-type = Zcl_util_wd=>e_fieldtype-button.

CONCATENATE lv_element_name '_BTN' INTO ls_field-fldnam.

ls_field-text = 'Maak algemene regel'. "#EC NOTEXT

ls_field-enabled = iv_algemen_enable.

ls_field-map_enabled = abap_true.

IF iv_algemen_enable = abap_true.

ls_field-tooltip = 'Als de conditie vaker wordt gebruikt kan hiervan een afleidingsregel worden gemaakt'. "#EC NOTEXT

ELSE.

ls_field-tooltip = 'Omzetten van conditie naar een afleidingsregel alleen mogelijk indien gegevensset gekoppeld aan proces'. "#EC NOTEXT

ENDIF.

ls_field-action = 'CREATE_ALD'.

ls_field-same_line = abap_true.

APPEND ls_field TO lt_field.

ENDIF.

CONCATENATE 'TC_' lv_element_name INTO lv_parent_container_name.

lo_transparant_container ?= io_view->get_element( lv_parent_container_name ).

Zcl_util_wd=>add_dynamic_fields(

it_field = lt_field

io_uielement = lo_transparant_container ).

ENDMETHOD. "_adf_create_cond_mnl_ui

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_ADF_CREATE_FIELD

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_FIELD TYPE TY_FIELD

* | [--->] IO_CONTAINER TYPE REF TO CL_WD_UIELEMENT_CONTAINER

* | [<-()] ET_FIELD_REF TYPE ZFIELD_REF_TB

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _adf_create_field.

DATA:

ln_nr TYPE n LENGTH 4,

lv_id TYPE string,

lv_label_v_alignment TYPE wdui_cell_valign,

lv_element_v_alignment TYPE wdui_cell_valign,

lv_colspan TYPE i.

DATA:

ls_dyn_field TYPE ty_fieldname,

ls_field_ref TYPE Zfield_ref.

DATA:

lo_child TYPE REF TO cl_wd_uielement,

lo_input_field TYPE REF TO cl_wd_input_field,

lo_checkbox TYPE REF TO cl_wd_checkbox,

lo_textedit TYPE REF TO cl_wd_text_edit,

lo_dropdown_by_key TYPE REF TO cl_wd_dropdown_by_key,

lo_dropdown_by_idx TYPE REF TO cl_wd_dropdown_by_idx,

lo_transparent_container TYPE REF TO cl_wd_transparent_container,

lo_button TYPE REF TO cl_wd_button,

lo_matrix_data TYPE REF TO cl_wd_matrix_data,

lo_matrix_head_data TYPE REF TO cl_wd_matrix_head_data,

lo_label TYPE REF TO cl_wd_label,

lo_group TYPE REF TO cl_wd_group,

lo_tray TYPE REF TO cl_wd_tray,

lo_caption TYPE REF TO cl_wd_caption,

lo_shuttle TYPE REF TO cl_wd_shuttle.

REFRESH et_field_ref.

* Default alignment = BASELINE

lv_label_v_alignment = cl_wd_matrix_head_data=>e_v_align-baseline.

lv_element_v_alignment = cl_wd_matrix_head_data=>e_v_align-baseline.

CLEAR lv_colspan.

ADD 1 TO _gi_nr_field.

ln_nr = _gi_nr_field.

CASE is_field-type.

WHEN e_fieldtype-input_field.

" supported parameters

" Input Field

" - bind_value

" - read_only + bind_read_only

" - label + Tooltip

" - bind_visible

" - width

CONCATENATE 'IF_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_input_field = cl_wd_input_field=>new_input_field(

id = lv_id

bind_value = is_field-bind_value

length = 0 ).

IF is_field-read_only IS NOT INITIAL.

lo_input_field->set_read_only( is_field-read_only ).

ELSEIF is_field-bind_read_only IS NOT INITIAL.

lo_input_field->bind_read_only( is_field-bind_read_only ).

ENDIF.

IF is_field-width IS NOT INITIAL.

lo_input_field->set_width( is_field-width ).

ENDIF.

IF is_field-symbol_count IS NOT INITIAL.

lo_input_field->set_length( is_field-symbol_count ).

ENDIF.

" Set state of UI element if required

IF is_field-required = abap_true.

lo_input_field->set_state( cl_wd_input_field=>e_state-required ).

ENDIF.

" Set pointer to child

lo_child = lo_input_field.

WHEN e_fieldtype-checkbox.

" supported parameters

" Checkbox

" - bind_value

" - read_only + bind_read_only

" - label + Tooltip

" - bind_visible

" - action

CONCATENATE 'CB_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_checkbox = cl_wd_checkbox=>new_checkbox(

id = lv_id

bind_checked = is_field-bind_value ).

" Input Field specific

IF is_field-read_only IS NOT INITIAL.

lo_checkbox->set_read_only( is_field-read_only ).

ELSEIF is_field-bind_read_only IS NOT INITIAL.

lo_checkbox->bind_read_only( is_field-bind_read_only ).

ENDIF.

IF is_field-action IS NOT INITIAL.

lo_checkbox->set_on_toggle( is_field-action ).

ENDIF.

" Set state of UI element if required

IF is_field-required = abap_true.

lo_checkbox->set_state( cl_wd_checkbox=>e_state-required ).

ENDIF.

" Set pointer to child

lo_child = lo_checkbox.

WHEN e_fieldtype-text_edit.

" supported parameters

" textEdit

" - bind_value

" - read_only + bind_read_only

" - label + Tooltip (both optional)

" - bind_visible

" - Rows + Cols

CONCATENATE 'TE_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_textedit = cl_wd_text_edit=>new_text_edit(

id = lv_id

bind_value = is_field-bind_value ).

" TextEdit specific

IF is_field-read_only IS NOT INITIAL.

lo_textedit->set_read_only( is_field-read_only ).

ELSEIF is_field-bind_read_only IS NOT INITIAL.

lo_textedit->bind_read_only( is_field-bind_read_only ).

ENDIF.

IF is_field-width IS NOT INITIAL.

lo_textedit->set_width( is_field-width ).

ENDIF.

IF is_field-rows IS NOT INITIAL.

lo_textedit->set_rows( is_field-rows ).

ENDIF.

IF is_field-cols IS NOT INITIAL.

lo_textedit->set_cols( is_field-cols ).

ENDIF.

lv_label_v_alignment = cl_wd_matrix_head_data=>e_v_align-top.

" Set state of UI element if required

IF is_field-required = abap_true.

lo_textedit->set_state( cl_wd_text_edit=>e_state-required ).

ENDIF.

" Set pointer to child

lo_child = lo_textedit.

WHEN e_fieldtype-dropdown_by_key.

" supported parameters

" DropDownByKey

" - bind_value

" - read_only + bind_read_only

" - label + Tooltip

" - width

" - bind_visible

" - Action

CONCATENATE 'DDBK_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_dropdown_by_key = cl_wd_dropdown_by_key=>new_dropdown_by_key(

bind_selected_key = is_field-bind_value

id = lv_id

on_select = is_field-action ) .

" dropdown_by_key specific

IF is_field-read_only IS NOT INITIAL.

lo_dropdown_by_key->set_read_only( is_field-read_only ).

ELSEIF is_field-bind_read_only IS NOT INITIAL.

lo_dropdown_by_key->bind_read_only( is_field-bind_read_only ).

ENDIF.

IF is_field-width IS NOT INITIAL.

lo_dropdown_by_key->set_width( is_field-width ).

ENDIF.

" Set state of UI element if required

IF is_field-required = abap_true.

lo_dropdown_by_key->set_state( cl_wd_dropdown_by_key=>e_state-required ).

ENDIF.

IF is_field-width IS NOT INITIAL.

lo_dropdown_by_key->set_width( is_field-width ).

ENDIF.

" Set pointer to child

lo_child = lo_dropdown_by_key.

WHEN e_fieldtype-dropdown_by_index.

CONCATENATE 'DDBI_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_dropdown_by_idx = cl_wd_dropdown_by_idx=>new_dropdown_by_idx(

bind_texts = is_field-bind_value

deselectable = abap_true

id = lv_id

on_select = is_field-action ) .

" Input Field specific

IF is_field-read_only IS NOT INITIAL.

lo_dropdown_by_idx->set_read_only( is_field-read_only ).

ELSEIF is_field-bind_read_only IS NOT INITIAL.

lo_dropdown_by_idx->bind_read_only( is_field-bind_read_only ).

ENDIF.

" Set state of UI element if required

IF is_field-required = abap_true.

lo_dropdown_by_idx->set_state( cl_wd_dropdown_by_idx=>e_state-required ).

ENDIF.

IF is_field-width IS NOT INITIAL.

lo_dropdown_by_idx->set_width( is_field-width ).

ENDIF.

" Set pointer to child

lo_child = lo_dropdown_by_idx.

WHEN e_fieldtype-button.

" supported parameters

" Button

" - image

" - Tooltip

" - bind_visible

" - action

CONCATENATE 'BTN_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

lo_button = cl_wd_button=>new_button(

id = lv_id

bind_visible = is_field-bind_visible

image_source = is_field-image

tooltip = is_field-tooltip

text = is_field-text

on_action = is_field-action ).

" Bind enabled

IF is_field-map_enabled = abap_true.

lo_button->set_enabled( is_field-enabled ).

ENDIF.

" Set pointer to child

lo_child = lo_button.

WHEN e_fieldtype-transparent_container.

" supported parameters

" Transparent Container

" - ID

CONCATENATE 'TC_'

is_field-fldnam

INTO lv_id. " Shouldn't contains ln_nr at ID

lo_transparent_container = cl_wd_transparent_container=>new_transparent_container(

id = lv_id ).

" Set layout for container

cl_wd_matrix_layout=>new_matrix_layout(

container = lo_transparent_container

stretched_horizontally = abap_false ).

lv_label_v_alignment = cl_wd_matrix_head_data=>e_v_align-top.

IF is_field-tc_label_middle_alignment = abap_true.

lv_label_v_alignment = cl_wd_matrix_head_data=>e_v_align-middle.

ENDIF.

" Set pointer to child

lo_child = lo_transparent_container.

WHEN e_fieldtype-group.

" supported parameters

" Transparent Container

" - ID

CONCATENATE 'GRP_'

is_field-fldnam

INTO lv_id. " Shouldn't contains ln_nr at ID

lo_group = cl_wd_group=>new_group(

id = lv_id

width = is_field-width

height = is_field-height ).

CONCATENATE lv_id '_CAPTION' INTO lv_id.

lo_caption = cl_wd_caption=>new_caption(

id = lv_id

text = is_field-text ).

lo_group->set_header( lo_caption ).

" Set layout for container

cl_wd_matrix_layout=>new_matrix_layout(

container = lo_group

stretched_horizontally = abap_false ).

" Set allignment

lv_element_v_alignment = cl_wd_matrix_data=>e_v_align-top.

" Set pointer to child

lo_child = lo_group.

WHEN e_fieldtype-shuttle.

" supported parameters

" Transparent Container

" - ID

CONCATENATE 'SHT_'

is_field-fldnam

INTO lv_id. " Shouldn't contains ln_nr at ID

lo_shuttle = cl_wd_shuttle=>new_shuttle(

id = lv_id

enable_add_buttons = abap_true

enable_remove_buttons = abap_true

on_add = 'SHUTTLE_ADD'

on_remove = 'SHUTTLE_REMOVE'

show_all_buttons = abap_true

vertical = abap_true ).

" Shuttle specific

IF is_field-bind_enable IS NOT INITIAL.

lo_shuttle->bind_enabled( is_field-bind_enable ).

ENDIF.

" Set allignment

lv_element_v_alignment = cl_wd_matrix_head_data=>e_v_align-middle.

" Set pointer to child

lo_child = lo_shuttle.

WHEN e_fieldtype-tray.

CONCATENATE 'TRY_'

is_field-fldnam

INTO lv_id. " Shouldn't contains ln_nr at ID

lo_tray = cl_wd_tray=>new_tray(

id = lv_id

width = is_field-width

height = is_field-height ).

CONCATENATE lv_id '_CAPTION' INTO lv_id.

lo_caption = cl_wd_caption=>new_caption(

id = lv_id

text = is_field-text ).

lo_tray->set_header( lo_caption ).

" Set layout for container

cl_wd_matrix_layout=>new_matrix_layout(

container = lo_tray

stretched_horizontally = abap_false ).

IF is_field-width IS NOT INITIAL.

lo_tray->set_width( is_field-width ).

ENDIF.

" Set allignment

lv_element_v_alignment = cl_wd_matrix_data=>e_v_align-top.

" Set colpan

lv_colspan = is_field-cols.

" Set pointer to child

lo_child = lo_tray.

WHEN OTHERS.

RAISE EXCEPTION TYPE Zcx_sy_illegal_argument

EXPORTING

textid = Zcx_sy_illegal_argument=>wrong_arguments

iv_method = 'ADD_DYNAMIC_FIELDS'.

ENDCASE.

" For all childs same handling

IF is_field-tooltip IS NOT INITIAL.

lo_child->set_tooltip( is_field-tooltip ).

ENDIF.

IF is_field-bind_visible IS NOT INITIAL.

lo_child->bind_visible( is_field-bind_visible ).

ENDIF.

" add label and child to view

IF is_field-label IS NOT INITIAL.

" Create a label for child

lo_label = _adf_create_label(

iv_label_for = lv_id

is_field = is_field

iv_v_align = lv_label_v_alignment ).

io_container->add_child( lo_label ).

CLEAR ls_field_ref.

ls_field_ref-fieldname = is_field-fldnam.

ls_field_ref-is_label = abap_true.

ls_field_ref-elementname = lo_label->id.

ls_field_ref-elem_ref ?= lo_label.

APPEND ls_field_ref TO et_field_ref.

" store id for later use

ls_dyn_field-id = lo_label->id.

APPEND ls_dyn_field TO _gt_dyn_field.

" Create Layout for the child

lo_matrix_data = cl_wd_matrix_data=>new_matrix_data( element = lo_child ).

IF lv_colspan IS NOT INITIAL.

lo_matrix_data->set_col_span( lv_colspan ).

ENDIF.

lo_child->set_layout_data( lo_matrix_data ).

ELSEIF is_field-same_line = abap_true.

" Create Layout for the child

lo_matrix_data = cl_wd_matrix_data=>new_matrix_data( element = lo_child ).

lo_matrix_data->set_v_align( lv_element_v_alignment ).

IF lv_colspan IS NOT INITIAL.

lo_matrix_data->set_col_span( lv_colspan ).

ENDIF.

lo_child->set_layout_data( lo_matrix_data ).

ELSE.

" No label

" Create Layout for the child

lo_matrix_head_data = cl_wd_matrix_head_data=>new_matrix_head_data(

element = lo_child ).

lo_matrix_head_data->set_v_align( lv_element_v_alignment ).

IF lv_colspan IS NOT INITIAL.

lo_matrix_head_data->set_col_span( lv_colspan ).

ENDIF.

lo_child->set_layout_data( lo_matrix_head_data ).

ENDIF.

io_container->add_child( lo_child ).

CLEAR ls_field_ref.

ls_field_ref-fieldname = is_field-fldnam.

ls_field_ref-is_label = abap_false.

ls_field_ref-elementname = lo_child->id.

ls_field_ref-elem_ref ?= lo_child.

APPEND ls_field_ref TO et_field_ref.

" store id for later use

ls_dyn_field-id = lo_child->id.

APPEND ls_dyn_field TO _gt_dyn_field.

ENDMETHOD. "_adf_create_field

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_ADF_CREATE_ITEM_SELECTOR

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_AMDPRM TYPE ZAMDPRM

* | [--->] IO_VIEW TYPE REF TO IF_WD_VIEW

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _adf_create_item_selector.

DATA:

lv_node_name TYPE string,

lv_parent_container_name TYPE string,

lv_group_name TYPE string,

lv_table_id TYPE string,

lv_table_source TYPE string,

lv_element_name TYPE string.

DATA:

ls_field TYPE Zcl_util_wd=>ty_field,

ls_column TYPE Zcl_util_wd=>ty_column.

DATA:

lt_field TYPE Zcl_util_wd=>ty_field_tb,

lt_column TYPE Zcl_util_wd=>ty_column_tb.

DATA:

lo_group TYPE REF TO cl_wd_group,

lo_transparant_container TYPE REF TO cl_wd_transparent_container,

lo_table TYPE REF TO cl_wd_table.

lv_element_name = is_amdprm-amdprmnam.

TRANSLATE lv_element_name TO UPPER CASE.

" Construct dynamic node name

CLEAR lv_node_name.

CONCATENATE _cc_oob_prmstr_node_prefix

lv_element_name

INTO lv_node_name

SEPARATED BY '_'.

REFRESH lt_field.

" Add Group1 - left

CLEAR ls_field.

ls_field-type = Zcl_util_wd=>e_fieldtype-group.

ls_field-height = '150'.

ls_field-width = '200'.

ls_field-text = is_amdprm-opttblttl.

CONCATENATE lv_element_name '_1' INTO ls_field-fldnam.

APPEND ls_field TO lt_field.

" Add Shuttle

CLEAR ls_field.

ls_field-type = Zcl_util_wd=>e_fieldtype-shuttle.

ls_field-same_line = abap_true.

CONCATENATE lv_element_name '_SHT' INTO ls_field-fldnam.

CONCATENATE lv_node_name 'ENABLE' INTO ls_field-bind_enable SEPARATED BY '.'.

APPEND ls_field TO lt_field.

" Add Group2 - right

CLEAR ls_field.

ls_field-type = Zcl_util_wd=>e_fieldtype-group.

ls_field-height = '150'.

ls_field-width = '200'.

ls_field-text = is_amdprm-valtblttl.

ls_field-same_line = abap_true.

CONCATENATE lv_element_name '_2' INTO ls_field-fldnam.

APPEND ls_field TO lt_field.

CONCATENATE 'TC_' lv_element_name INTO lv_parent_container_name.

lo_transparant_container ?= io_view->get_element( lv_parent_container_name ).

Zcl_util_wd=>add_dynamic_fields(

it_field = lt_field

io_uielement = lo_transparant_container

ib_clear_container = abap_false ).

" --------------- Add tables -------------

CLEAR: lt_column, ls_column.

CONCATENATE lv_element_name '_COL_G1' INTO ls_column-fldnam.

ls_column-type = Zcl_util_wd=>e_type-text_view.

ls_column-bind_name = 'AMDPRMTXT'.

ls_column-text = ' '.

ls_column-width = '200'.

APPEND ls_column TO lt_column.

* " Add Table 1 - left

CONCATENATE 'GRP_' lv_element_name '_1' INTO lv_group_name.

CONCATENATE lv_group_name '_TBL' INTO lv_table_id.

CONCATENATE lv_node_name '_G1' INTO lv_table_source.

lo_group ?= io_view->get_element( lv_group_name ).

lo_table = Zcl_util_wd=>create_dynamic_table(

io_view = io_view

it_column = lt_column

io_group = lo_group

iv_id = lv_table_id

iv_data_source = lv_table_source

ib_clear_container = abap_false ).

lo_table->bind_visible_row_count( '' ).

lo_table->bind_empty_table_text( '' ).

lo_table->set_visible_row_count( 7 ).

lo_table->set_width( '200' ).

lo_table->set_read_only( abap_true ).

CLEAR: lt_column, ls_column.

CONCATENATE lv_element_name '_COL_G2' INTO ls_column-fldnam.

ls_column-type = Zcl_util_wd=>e_type-text_view.

ls_column-bind_name = 'AMDPRMTXT'.

ls_column-text = ' '.

ls_column-width = '200'.

APPEND ls_column TO lt_column.

" Add Table 2 - right

CONCATENATE 'GRP_' lv_element_name '_2' INTO lv_group_name.

CONCATENATE lv_group_name '_TBL' INTO lv_table_id.

CONCATENATE lv_node_name '_G2' INTO lv_table_source.

lo_group ?= io_view->get_element( lv_group_name ).

lo_table = Zcl_util_wd=>create_dynamic_table(

io_view = io_view

it_column = lt_column

io_group = lo_group

iv_id = lv_table_id

iv_data_source = lv_table_source

ib_clear_container = abap_false ).

lo_table->bind_visible_row_count( '' ).

lo_table->bind_empty_table_text( '' ).

lo_table->set_visible_row_count( 7 ).

lo_table->set_width( '200' ).

lo_table->set_read_only( abap_true ).

ENDMETHOD. "_adf_create_item_selector

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_ADF_CREATE_LABEL

* +-------------------------------------------------------------------------------------------------+

* | [--->] IV_LABEL_FOR TYPE STRING

* | [--->] IS_FIELD TYPE TY_FIELD

* | [--->] IV_V_ALIGN TYPE WDUI_CELL_VALIGN

* | [<-()] RESULT TYPE REF TO CL_WD_LABEL

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _adf_create_label.

DATA:

ln_nr TYPE n LENGTH 4,

lv_id TYPE string.

DATA:

lo_matrix_head_data TYPE REF TO cl_wd_matrix_head_data,

lo_matrix_data TYPE REF TO cl_wd_matrix_data.

ln_nr = _gi_nr_field.

CONCATENATE 'LBL_'

is_field-fldnam

'_'

ln_nr

INTO lv_id.

" Create a new label

result = cl_wd_label=>new_label(

id = lv_id

label_for = iv_label_for

text = is_field-label ).

" If there is a bind visible, add this to the label

IF is_field-bind_visible IS NOT INITIAL.

result->bind_visible( is_field-bind_visible ).

ENDIF.

IF is_field-tooltip IS NOT INITIAL.

result->set_tooltip( is_field-tooltip ).

ENDIF.

IF is_field-label_width IS NOT INITIAL.

result->set_width( is_field-label_width ).

ENDIF.

IF is_field-same_line = abap_false.

" Put the label as the first field on the matix view

lo_matrix_head_data = cl_wd_matrix_head_data=>new_matrix_head_data(

element = result ).

lo_matrix_head_data->set_v_align( iv_v_align ).

result->set_layout_data( lo_matrix_head_data ).

lo_matrix_head_data->set_col_span( 1 ).

ELSE.

" Create Layout for the child

lo_matrix_data = cl_wd_matrix_data=>new_matrix_data( element = result ).

lo_matrix_data->set_v_align( iv_v_align ).

result->set_layout_data( lo_matrix_data ).

lo_matrix_data->set_col_span( 1 ).

ENDIF.

ENDMETHOD. "_adf_create_label

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CDB_MENU_ACTION_ITEM

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_DYN_MAI TYPE TY_DYN_MAI

* | [<-()] RESULT TYPE REF TO CL_WD_MENU_ACTION_ITEM

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cdb_menu_action_item.

DATA:

ln_nr TYPE n LENGTH 2,

lv_name TYPE string.

DATA:

lo_wd_menu_action_item TYPE REF TO cl_wd_menu_action_item.

ADD 1 TO _gi_nr_dyn_buttons.

ln_nr = _gi_nr_dyn_buttons.

CONCATENATE 'MAI_DYN_' ln_nr INTO lv_name.

lo_wd_menu_action_item = cl_wd_menu_action_item=>new_menu_action_item(

id = lv_name

on_action = is_dyn_mai-action

visible = abap_true ).

IF is_dyn_mai-text IS NOT INITIAL.

lo_wd_menu_action_item->set_text( is_dyn_mai-text ).

ENDIF.

IF is_dyn_mai-icon IS NOT INITIAL.

lo_wd_menu_action_item->set_image_source( is_dyn_mai-icon ).

ENDIF.

IF is_dyn_mai-bind_visible IS NOT INITIAL.

lo_wd_menu_action_item->bind_visible( is_dyn_mai-bind_visible ).

ENDIF.

IF is_dyn_mai-bind_enabled IS NOT INITIAL.

lo_wd_menu_action_item->bind_enabled( is_dyn_mai-bind_enabled ).

ENDIF.

result = lo_wd_menu_action_item.

ENDMETHOD. "_cdb_menu_action_item

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CDB_TOOLBAR_BTN_CHOICE

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_DYN_BTN_CHOICE TYPE TY_DYN_BTN_CHOICE

* | [--->] IT_DYN_MAI TYPE TY_DYN_MAI_TB

* | [<-()] RESULT TYPE REF TO IF_WD_TOOLBAR_ITEM

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cdb_toolbar_btn_choice.

DATA:

ln_nr TYPE n LENGTH 2,

lv_name TYPE string.

DATA:

ls_dyn_mai TYPE ty_dyn_mai.

DATA:

lo_wd_toolbar_btn_choice TYPE REF TO cl_wd_toolbar_btn_choice,

lo_wd_menu_action_item TYPE REF TO cl_wd_menu_action_item.

ADD 1 TO _gi_nr_dyn_buttons.

ln_nr = _gi_nr_dyn_buttons.

CONCATENATE 'BTNC_DYN_' ln_nr INTO lv_name.

lo_wd_toolbar_btn_choice = cl_wd_toolbar_btn_choice=>new_toolbar_btn_choice(

id = lv_name

visible = cl_wd_uielement=>e_visible-visible

repeat_selected_action = is_dyn_btn_choice-repeat_selected ).

IF is_dyn_btn_choice-text IS NOT INITIAL.

lo_wd_toolbar_btn_choice->set_text( is_dyn_btn_choice-text ).

ENDIF.

IF is_dyn_btn_choice-icon IS NOT INITIAL.

lo_wd_toolbar_btn_choice->set_image_source( is_dyn_btn_choice-icon ).

ENDIF.

IF is_dyn_btn_choice-bind_enabled IS NOT INITIAL.

lo_wd_toolbar_btn_choice->bind_enabled( is_dyn_btn_choice-bind_enabled ).

ENDIF.

IF is_dyn_btn_choice-bind_visible IS NOT INITIAL.

lo_wd_toolbar_btn_choice->bind_visible( is_dyn_btn_choice-bind_visible ).

ENDIF.

LOOP AT it_dyn_mai INTO ls_dyn_mai.

lo_wd_menu_action_item = Zcl_util_wd=>_cdb_menu_action_item(

is_dyn_mai = ls_dyn_mai ).

lo_wd_toolbar_btn_choice->add_choice( lo_wd_menu_action_item ).

ENDLOOP.

result = lo_wd_toolbar_btn_choice.

ENDMETHOD. "_cdb_toolbar_btn_choice

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CDB_TOOLBAR_BUTTON

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_DYN_BUTTON TYPE TY_DYN_BUTTON

* | [<-()] RESULT TYPE REF TO IF_WD_TOOLBAR_ITEM

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cdb_toolbar_button.

DATA:

ln_nr TYPE n LENGTH 2,

lv_name TYPE string.

DATA:

lo_wd_button TYPE REF TO cl_wd_toolbar_button.

ADD 1 TO _gi_nr_dyn_buttons.

ln_nr = _gi_nr_dyn_buttons.

CONCATENATE 'BTN_DYN_' ln_nr INTO lv_name.

lo_wd_button = cl_wd_toolbar_button=>new_toolbar_button(

id = lv_name

on_action = is_dyn_button-action

visible = cl_wd_uielement=>e_visible-visible ).

IF is_dyn_button-text IS NOT INITIAL.

lo_wd_button->set_text( is_dyn_button-text ).

ENDIF.

IF is_dyn_button-icon IS NOT INITIAL.

lo_wd_button->set_image_source( is_dyn_button-icon ).

ENDIF.

IF is_dyn_button-tooltip IS NOT INITIAL.

lo_wd_button->set_tooltip( is_dyn_button-tooltip ).

ENDIF.

IF is_dyn_button-bind_visible IS NOT INITIAL.

lo_wd_button->bind_visible( is_dyn_button-bind_visible ).

ENDIF.

IF is_dyn_button-bind_enabled IS NOT INITIAL.

lo_wd_button->bind_enabled( is_dyn_button-bind_enabled ).

ENDIF.

result = lo_wd_button.

ENDMETHOD. "_CDB_TOOLBAR_BUTTON

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CDN_PRMSTR_CREATE_NODES

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_AMDPRM TYPE ZAMDPRM

* | [--->] IO_CONTEXT TYPE REF TO IF_WD_CONTEXT_NODE

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cdn_prmstr_create_nodes.

DATA:

lv_node_name TYPE string,

lv_node_name_dd TYPE string,

lv_node_name_gsg TYPE string,

lv_node_type TYPE string,

lv_element_name TYPE string.

DATA:

ls_attribute_info TYPE wdr_context_attribute_info.

DATA:

lt_attribute_info TYPE wdr_context_attr_info_map.

DATA:

lo_node_info TYPE REF TO if_wd_context_node_info.

lo_node_info = io_context->get_node_info( ).

REFRESH lt_attribute_info.

" Get element name

lv_element_name = is_amdprm-amdprmnam.

TRANSLATE lv_element_name TO UPPER CASE.

" Construct dynamic node name

CLEAR lv_node_name.

CONCATENATE _cc_oob_prmstr_node_prefix

lv_element_name

INTO lv_node_name

SEPARATED BY '_'.

" Create node with attributes

CLEAR ls_attribute_info.

ls_attribute_info-name = 'VAL'.

CASE is_amdprm-amdprmdtt.

WHEN 'N'.

ls_attribute_info-type_name = 'ZAMDPRMNUM'.

WHEN 'C'.

ls_attribute_info-type_name = 'ZAMDPRMCHR'.

WHEN OTHERS.

ls_attribute_info-type_name = 'STRING'.

ENDCASE.

INSERT ls_attribute_info INTO TABLE lt_attribute_info.

CLEAR ls_attribute_info.

ls_attribute_info-name = 'READ_ONLY'.

ls_attribute_info-type_name = 'WDY_BOOLEAN'.

INSERT ls_attribute_info INTO TABLE lt_attribute_info.

CLEAR ls_attribute_info.

ls_attribute_info-name = 'ENABLE'.

ls_attribute_info-type_name = 'WDY_BOOLEAN'.

INSERT ls_attribute_info INTO TABLE lt_attribute_info.

CLEAR ls_attribute_info.

ls_attribute_info-name = 'VISIBLE'.

ls_attribute_info-type_name = 'WDUI_VISIBILITY'.

INSERT ls_attribute_info INTO TABLE lt_attribute_info.

lo_node_info->add_new_child_node(

name = lv_node_name

is_static = abap_false

is_mandatory = abap_true

is_multiple = abap_false

attributes = lt_attribute_info ).

IF is_amdprm-amdprmdtt = 'T' OR

is_amdprm-amdprmdtt = 'M'.

lv_node_type = 'ZAMDPRMOPT'.

" Create additional nodes

IF is_amdprm-amdprmdtt = 'T'. " DropDownByIndex element

CONCATENATE lv_node_name '_DD' INTO lv_node_name_dd.

lo_node_info->add_new_child_node(

name = lv_node_name_dd

is_static = abap_false

is_multiple = abap_true

static_element_type = lv_node_type ).

ELSEIF is_amdprm-amdprmdtt = 'M'. " Complex element with two grids and Shuttle

" First node for AMDPRMVAL_TB table at left side

CONCATENATE lv_node_name '_G1' INTO lv_node_name_gsg .

lo_node_info->add_new_child_node(

name = lv_node_name_gsg

is_static = abap_false

is_multiple = abap_true

static_element_type = lv_node_type ).

" First node for AMDPRMOPT_TB table at right side

CONCATENATE lv_node_name '_G2' INTO lv_node_name_gsg .

lo_node_info->add_new_child_node(

name = lv_node_name_gsg

is_static = abap_false

is_multiple = abap_true

static_element_type = lv_node_type ).

ENDIF.

ENDIF.

ENDMETHOD. "_cdn_prmstr_create_nodes

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CDT_CREATE_COLUMN

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_COLUMN TYPE TY_COLUMN

* | [--->] IV_TABLE_SOURCE TYPE STRING(optional)

* | [<-()] RESULT TYPE REF TO CL_WD_TABLE_COLUMN

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cdt_create_column.

DATA:

lv_filter_value TYPE string,

lv_id TYPE string,

lv_value_attribute TYPE string,

lv_read_only_attribute TYPE string,

lv_enable_attribute TYPE string,

lv_text TYPE string,

lv_table_source TYPE string.

DATA:

lo_wd_table_column TYPE REF TO cl_wd_table_column,

lo_wd_caption TYPE REF TO cl_wd_caption,

lo_wd_text_view TYPE REF TO cl_wd_text_view,

lo_wd_checkbox TYPE REF TO cl_wd_checkbox,

lo_wd_dropdown_by_idx TYPE REF TO cl_wd_dropdown_by_idx,

lo_wd_dropdown_by_key TYPE REF TO cl_wd_dropdown_by_key,

lo_wd_input_field TYPE REF TO cl_wd_input_field,

lo_wd_image TYPE REF TO cl_wd_image,

lo_wd_cell_editor TYPE REF TO if_wd_table_cell_editor.

" Create column

CONCATENATE 'DYN_'

is_column-fldnam

INTO lv_id.

lo_wd_table_column = cl_wd_table_column=>new_table_column(

id = lv_id ).

" Can the column be sorted.

" Remember sorting on dynamic attribute in nodes is not possible

IF is_column-not_sortable = abap_true.

lo_wd_table_column->set_sort_state( cl_wd_table_column=>e_sort_state-not_sortable ).

ENDIF.

" set the filter value

IF is_column-bind_filter_value IS NOT INITIAL.

CLEAR lv_filter_value.

CONCATENATE _cc_filter_node

is_column-bind_filter_value

INTO lv_filter_value

SEPARATED BY `.`.

lo_wd_table_column->bind_filter_value( lv_filter_value ).

ENDIF.

" Create caption and set header

" With empty text, WD4A will use the DD texts

lv_text = is_column-text.

lo_wd_caption = cl_wd_caption=>new_caption(

text = lv_text ).

IF is_column-tooltip IS NOT INITIAL.

lo_wd_caption->set_tooltip( is_column-tooltip ).

ENDIF.

lo_wd_table_column->set_header( lo_wd_caption ).

" set some attribute values with the node_name

lv_table_source = iv_table_source.

IF lv_table_source IS INITIAL.

lv_table_source = _cc_dynamic_node_name.

ENDIF.

CONCATENATE lv_table_source "_cc_dynamic_node_name

is_column-bind_name

INTO lv_value_attribute

SEPARATED BY `.`.

CONCATENATE lv_table_source "_cc_dynamic_node_name

is_column-bind_read_only

INTO lv_read_only_attribute

SEPARATED BY `.`.

CONCATENATE lv_table_source "_cc_dynamic_node_name

is_column-bind_enable

INTO lv_enable_attribute

SEPARATED BY `.`.

" Create cell editor

CASE is_column-type.

WHEN e_type-checkbox.

CONCATENATE 'CB_'

is_column-fldnam

INTO lv_id.

lo_wd_checkbox = cl_wd_checkbox=>new_checkbox(

id = lv_id

bind_checked = lv_value_attribute ).

IF is_column-tooltip IS NOT INITIAL.

lo_wd_checkbox->set_tooltip( is_column-tooltip ).

ENDIF.

IF is_column-bind_read_only IS NOT INITIAL.

lo_wd_checkbox->bind_read_only( lv_read_only_attribute ).

ELSEIF is_column-read_only = abap_true.

lo_wd_checkbox->set_read_only( abap_true ).

ENDIF.

IF is_column-bind_enable IS NOT INITIAL.

lo_wd_checkbox->bind_enabled( lv_enable_attribute ).

ENDIF.

IF is_column-action IS NOT INITIAL.

lo_wd_checkbox->set_on_toggle( is_column-action ).

ENDIF.

lo_wd_cell_editor = lo_wd_checkbox.

lo_wd_table_column->set_h_align( cl_wd_table_column=>e_h_align-center ).

WHEN e_type-text_view.

lo_wd_text_view = cl_wd_text_view=>new_text_view(

bind_text = lv_value_attribute ).

IF is_column-width IS NOT INITIAL.

lo_wd_text_view->set_width( is_column-width ).

ENDIF.

IF is_column-tooltip IS NOT INITIAL.

lo_wd_text_view->set_tooltip( is_column-tooltip ).

ENDIF.

lo_wd_cell_editor = lo_wd_text_view.

WHEN e_type-dropdown_by_index.

CONCATENATE 'DDBI_'

is_column-fldnam

INTO lv_id.

lo_wd_dropdown_by_idx = cl_wd_dropdown_by_idx=>new_dropdown_by_idx(

id = lv_id

deselectable = abap_true

bind_texts = lv_value_attribute ).

IF is_column-width IS NOT INITIAL.

lo_wd_dropdown_by_idx->set_width( is_column-width ).

ENDIF.

IF is_column-tooltip IS NOT INITIAL.

lo_wd_dropdown_by_idx->set_tooltip( is_column-tooltip ).

ENDIF.

IF is_column-bind_read_only IS NOT INITIAL.

lo_wd_dropdown_by_idx->bind_read_only( lv_read_only_attribute ).

ELSEIF is_column-read_only = abap_true.

lo_wd_dropdown_by_idx->set_read_only( abap_true ).

ENDIF.

IF is_column-action IS NOT INITIAL.

lo_wd_dropdown_by_idx->set_on_select( is_column-action ).

ENDIF.

lo_wd_cell_editor = lo_wd_dropdown_by_idx.

WHEN e_type-dropdown_by_key.

CONCATENATE 'DDBK_'

is_column-fldnam

INTO lv_id.

lo_wd_dropdown_by_key = cl_wd_dropdown_by_key=>new_dropdown_by_key(

id = lv_id

bind_selected_key = lv_value_attribute ).

IF is_column-width IS NOT INITIAL.

lo_wd_dropdown_by_key->set_width( is_column-width ).

ENDIF.

IF is_column-tooltip IS NOT INITIAL.

lo_wd_dropdown_by_key->set_tooltip( is_column-tooltip ).

ENDIF.

IF is_column-bind_read_only IS NOT INITIAL.

lo_wd_dropdown_by_key->bind_read_only( lv_read_only_attribute ).

ELSEIF is_column-read_only = abap_true.

lo_wd_dropdown_by_key->set_read_only( abap_true ).

ENDIF.

IF is_column-action IS NOT INITIAL.

lo_wd_dropdown_by_key->set_on_select( is_column-action ).

ENDIF.

lo_wd_cell_editor = lo_wd_dropdown_by_key.

WHEN e_type-input_field.

CONCATENATE 'IF_'

is_column-fldnam

INTO lv_id.

lo_wd_input_field = cl_wd_input_field=>new_input_field(

id = lv_id

bind_value = lv_value_attribute ).

IF is_column-tooltip IS NOT INITIAL.

lo_wd_input_field->set_tooltip( is_column-tooltip ).

ENDIF.

IF is_column-bind_read_only IS NOT INITIAL.

lo_wd_input_field->bind_read_only( lv_read_only_attribute ).

ELSEIF is_column-read_only = abap_true.

lo_wd_input_field->set_read_only( abap_true ).

ENDIF.

IF is_column-bind_enable IS NOT INITIAL.

lo_wd_input_field->bind_enabled( lv_enable_attribute ).

ENDIF.

lo_wd_cell_editor = lo_wd_input_field.

WHEN e_type-image.

CONCATENATE 'IM_'

is_column-fldnam

INTO lv_id.

lo_wd_image = cl_wd_image=>new_image(

id = lv_id

bind_source = lv_value_attribute ).

IF is_column-tooltip IS NOT INITIAL.

lo_wd_image->set_tooltip( is_column-tooltip ).

ENDIF.

lo_wd_cell_editor = lo_wd_image.

ENDCASE.

lo_wd_table_column->set_table_cell_editor( lo_wd_cell_editor ).

result = lo_wd_table_column.

ENDMETHOD. "_cdt_create_column

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_CUI_PRMSTR_CONSTRUCT_UI

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_AMDPRM TYPE ZAMDPRM

* | [--->] IO_UIELEMENT_CONTAINER TYPE REF TO CL_WD_UIELEMENT_CONTAINER

* | [--->] IO_VIEW TYPE REF TO IF_WD_VIEW

* | [--->] IV_READONLY TYPE WDY_BOOLEAN

* | [--->] IV_ALGEMEN_ENABLE TYPE WDY_BOOLEAN (default =ABAP_TRUE)

* | [--->] IV_ALGEMEN_VISIBLE TYPE WDY_BOOLEAN (default =ABAP_TRUE)

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _cui_prmstr_construct_ui.

INCLUDE Zconstants.

DATA:

lv_node_name TYPE string,

lv_element_name TYPE string.

DATA:

ls_field TYPE Zcl_util_wd=>ty_field.

DATA:

lt_field TYPE Zcl_util_wd=>ty_field_tb.

REFRESH lt_field.

lv_element_name = is_amdprm-amdprmnam.

TRANSLATE lv_element_name TO UPPER CASE.

" Construct dynamic node name

CLEAR lv_node_name.

CONCATENATE _cc_oob_prmstr_node_prefix

lv_element_name

INTO lv_node_name

SEPARATED BY '_'.

CLEAR ls_field.

CASE is_amdprm-amdprmdtt.

WHEN 'N' OR 'C'.

ls_field-type = Zcl_util_wd=>e_fieldtype-input_field.

CONCATENATE lv_node_name 'VAL' INTO ls_field-bind_value SEPARATED BY '.'.

" If is_amdprm-amdprmnam = cc_amdprmnam_cond_mnl -> at first add container instead of Inputfield

IF is_amdprm-amdprmnam = cc_amdprmnam_cond_mnl.

ls_field-type = Zcl_util_wd=>e_fieldtype-transparent_container.

ELSE.

IF is_amdprm-amdprmlen > 0.

ls_field-width = 5 * is_amdprm-amdprmlen.

ENDIF.

ENDIF.

WHEN 'T'.

ls_field-type = Zcl_util_wd=>e_fieldtype-dropdown_by_index.

CONCATENATE lv_node_name '_DD.AMDPRMTXT' INTO ls_field-bind_value.

"ls_field-action = 'DD_SELECTED'.

ls_field-width = 294.

WHEN 'M'. " Container for ItemSelector with shutter and two grigs

ls_field-type = Zcl_util_wd=>e_fieldtype-transparent_container.

WHEN OTHERS.

RETURN.

ENDCASE.

ls_field-fldnam = lv_element_name.

ls_field-label = is_amdprm-amdprmlbl.

ls_field-tooltip = is_amdprm-amdprmtlt.

ls_field-required = is_amdprm-amdprmvrp.

IF is_amdprm-amdactidc = abap_true.

ls_field-action = 'DESCRIBE'.

ENDIF.

CONCATENATE lv_node_name 'READ_ONLY' INTO ls_field-bind_read_only SEPARATED BY '.'.

CONCATENATE lv_node_name 'VISIBLE' INTO ls_field-bind_visible SEPARATED BY '.'.

APPEND ls_field TO lt_field.

Zcl_util_wd=>add_dynamic_fields(

it_field = lt_field

io_uielement = io_uielement_container

ib_clear_container = abap_false ).

" If current element is ItemSelector with shutter and two grids

IF is_amdprm-amdprmdtt = 'M'.

Zcl_util_wd=>_adf_create_item_selector(

is_amdprm = is_amdprm

io_view = io_view ).

ENDIF.

" IF is_amdprm-amdprmnam = cc_amdprmnam_cond_mnl -> add InputField and Button

IF is_amdprm-amdprmnam = cc_amdprmnam_cond_mnl.

Zcl_util_wd=>_adf_create_cond_mnl_ui(

is_amdprm = is_amdprm

io_view = io_view

iv_readonly = iv_readonly

iv_algemen_enable = iv_algemen_enable

iv_algemen_visible = iv_algemen_visible ).

ENDIF.

ENDMETHOD. "_cui_prmstr_construct_ui

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_FDN_PRMSTR_FILL_NODES

* +-------------------------------------------------------------------------------------------------+

* | [--->] IS_AMDPRM TYPE ZAMDPRM

* | [--->] IO_CONTEXT TYPE REF TO IF_WD_CONTEXT_NODE

* | [--->] IV_READONLY TYPE WDY_BOOLEAN(optional)

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _fdn_prmstr_fill_nodes.

DATA:

lv_node_name TYPE string,

lv_node_name_g1 TYPE string,

lv_node_name_g2 TYPE string,

lv_element_name TYPE string,

lv_enable TYPE wdy_boolean.

DATA:

lo_nd_node TYPE REF TO if_wd_context_node,

lo_el_element TYPE REF TO if_wd_context_element.

DATA:

lo_nd_dyn_xxx TYPE REF TO if_wd_context_node.

FIELD-SYMBOLS:

<value> TYPE any.

" Get element name

lv_element_name = is_amdprm-amdprmnam.

TRANSLATE lv_element_name TO UPPER CASE.

" Construct dynamic node name

CLEAR lv_node_name.

CONCATENATE _cc_oob_prmstr_node_prefix

lv_element_name

INTO lv_node_name

SEPARATED BY '_'.

" Fill node values for simple elements

lo_nd_node = io_context->get_child_node( name = lv_node_name ).

lo_el_element = lo_nd_node->get_element( ).

CASE is_amdprm-amdprmdtt.

WHEN 'N'.

ASSIGN COMPONENT 'AMDPRMNUM' OF STRUCTURE is_amdprm TO <value>.

WHEN 'C'.

ASSIGN COMPONENT 'AMDPRMCHR' OF STRUCTURE is_amdprm TO <value>.

WHEN OTHERS.

ASSIGN COMPONENT 'TABIX' OF STRUCTURE sy TO <value>.

ENDCASE.

lv_enable = abap_true.

IF iv_readonly = abap_true.

lv_enable = abap_false.

ENDIF.

" Set attributes

lo_el_element->set_attribute( name = `VAL` value = <value> ).

lo_el_element->set_attribute( name = `READ_ONLY` value = iv_readonly ).

lo_el_element->set_attribute( name = `ENABLE` value = lv_enable ).

lo_el_element->set_attribute( name = `VISIBLE` value = cl_wd_uielement=>e_visible-visible ).

IF is_amdprm-amdprmdtt = 'T'. " DropDownByIndex

CONCATENATE lv_node_name '_DD' INTO lv_node_name.

lo_nd_dyn_xxx = io_context->get_child_node( name = lv_node_name ).

lo_nd_dyn_xxx->bind_table( new_items = is_amdprm-amdprmopt_tb set_initial_elements = abap_true ).

" Set lead_selection

READ TABLE is_amdprm-amdprmopt_tb

TRANSPORTING NO FIELDS

WITH KEY amdprmval = is_amdprm-amdprmval

amdprmald = is_amdprm-amdprmald.

IF sy-subrc = 0.

lo_nd_dyn_xxx->set_lead_selection_index( sy-tabix ).

ELSE.

lo_nd_dyn_xxx->set_lead_selection_index( if_wd_context_node=>no_selection ).

ENDIF.

ELSEIF is_amdprm-amdprmdtt = 'M'.

" First grid at left side - source table

CONCATENATE lv_node_name '_G1' INTO lv_node_name_g1.

lo_nd_dyn_xxx = io_context->get_child_node( name = lv_node_name_g1 ).

lo_nd_dyn_xxx->bind_table( new_items = is_amdprm-amdprmopt_tb set_initial_elements = abap_true ).

" Second grid at right side - result table

CONCATENATE lv_node_name '_G2' INTO lv_node_name_g2.

lo_nd_dyn_xxx = io_context->get_child_node( name = lv_node_name_g2 ).

lo_nd_dyn_xxx->bind_table( new_items = is_amdprm-amdprmval_tb set_initial_elements = abap_true ).

ENDIF.

ENDMETHOD. "_FDN_PRMSTR_FILL_NODES

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_UTIL_WD=>_RDN_REMOVE_DYNAMIC_NODES

* +-------------------------------------------------------------------------------------------------+

* | [--->] IO_CONTEXT TYPE REF TO IF_WD_CONTEXT_NODE

* +--------------------------------------------------------------------------------------</SIGNATURE>

METHOD _rdn_remove_dynamic_nodes.

DATA:

ls_node_name TYPE string.

DATA:

lt_child_node_map TYPE wdr_context_child_info_map.

DATA:

lo_node_info TYPE REF TO if_wd_context_node_info.

FIELD-SYMBOLS:

<fs> TYPE wdr_context_child_info.

lo_node_info = io_context->get_node_info( ).

lt_child_node_map = lo_node_info->get_child_nodes( ).

"remove the dynamic nodes from wdcontext node.

LOOP AT lt_child_node_map ASSIGNING <fs>.

ls_node_name = <fs>-name.

IF <fs>-is_static <> abap_true AND

<fs>-name CS _cc_oob_prmstr_node_prefix.

lo_node_info->remove_child_node( ls_node_name ).

ENDIF.

ENDLOOP.

ENDMETHOD. "_rdn_remove_dynamic_nodes

ENDCLASS. "ZCL_UTIL_WD IMPLEMENTATION

ramakrishnappa
Active Contributor
0 Kudos