Conditionally editing cells of a ALV table in Web Dynpro for ABAP
Conditionally editing cells of a ALV table in Web Dynpro for ABAP
Conditionally editing cells of a ALV table in Web Dynpro for ABAP: So far we have lots of example to make webdynpro row editable, columns editable conditionally.
The below shown example is for editing particular “Cell” value conditionally in a columns of ALV.
Assumed Scenario: Make Material number (MATNR) non-editable if row number is 2, 4 and7 for rest of the rows It should be editable.
Solution:
Step 1.Create webdynpro ALV with normal way.
Step2.Create attribute ‘READ_ONLY’ of char 01 in a output node.
Go to the method WDDOINIT and write following.
METHOD wddoinit .
*Data declaration
DATA lo_nd_mara TYPE REF TO if_wd_context_node.
DATA lt_mara TYPE wd_this->elements_mara.
DATA ls_mara TYPE wd_this->element_mara.
DATA lo_componentcontroller TYPE REF TO ig_componentcontroller .
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
DATA lv_value TYPE REF TO cl_salv_wd_config_table.
DATA lr_column TYPE REF TO cl_salv_wd_column.
DATA lr_input TYPE REF TO cl_salv_wd_uie_input_field.* navigate from to via lead selection
lo_nd_mara = wd_context->get_child_node( name = wd_this->wdctx_mara ).
*Fetching records from data base table
SELECT matnr ersda FROM mara INTO CORRESPONDING FIELDS OF TABLE lt_mara
UP TO 10 ROWS.
*Processing Records to set table non editable for 2,4 and 7th row and setting rest of the rows as editable.
LOOP AT lt_mara INTO ls_mara.
CASE sy-tabix.
WHEN 2 OR 4 OR 7.
ls_mara-read_only = ABAP_TRUE.
WHEN OTHERS.
ls_mara-read_only = ABAP_FALSE.
ENDCASE.
MODIFY lt_mara FROM ls_mara.
ENDLOOP.
*Bind the value of table
lo_nd_mara->bind_table( new_items = lt_mara set_initial_elements = abap_true ).
*Instantiate the used component to ensure that the component usage of the ALV is active.
lo_componentcontroller = wd_this->get_componentcontroller_ctr( ).
lo_cmp_usage = wd_this->wd_cpuse_alv_test( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
lo_interfacecontroller = wd_this->wd_cpifc_alv_test( ).
*Using the interface object reference, calling the method get model will give the object reference for the class CL_SALV_WD_CONFIG_TABLE.
lv_value = lo_interfacecontroller->get_model(
).
*Retrieving column to be in edit mode
CALL METHOD lv_value->if_salv_wd_column_settings~get_column
EXPORTING
id = ‘MATNR’
RECEIVING
value = lr_column.
*Creating UI Elmenent ‘INPUT FIELD’ to make the column editable
CREATE OBJECT lr_input
EXPORTING
value_fieldname = ‘MATNR’.
*Assigning input field to the column
CALL METHOD lr_column->set_cell_editor
EXPORTING
value = lr_input.*To make the required row is editable
lr_input->set_read_only_fieldname( value = ‘READ_ONLY’ ).*Enabling editing mode in ALV table
lv_value->if_salv_wd_table_settings~set_read_only( abap_false ).
CALL METHOD lv_value->if_salv_wd_column_settings~delete_column
EXPORTING
id = ‘READ_ONLY’.
ENDMETHOD.
Create Application and execute ALV:
Output display.
Note: We can use above example to make whole column editable just by deleting below statement among the above source code,
*To make the required row is editable
lr_input->set_read_only_fieldname( value = ‘READ_ONLY’ ).
Output display.
Regards,
Manjunath M
SAP-Consultant
New NetWeaver Information at SAP.com
Very Helpfull