on 09-10-2014 8:12 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Ajinkya,
Please refer the below links
Dynamically creating the UI element | Team ABAP
Creating UI Elements Dynamically in Abap Webdynpro Application - Web Dynpro ABAP - SCN Wiki
Hope this helps you.
Regards,
Rama
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.