Hi Experts,
I have a requirement in which we need to disable a field(cell) based on a action in the ALV.
ALV is already populated with data, and I have created event handler ON_CELL_ACTION, which has been triggered through WDDOMODIFYVIEW method of View.
Below is the ALV
When we select the check box - Update Frequency HMS (Which is highlighted in red box in below fig) then the check box Update Frequency-Date & Time (Which is highlighted in Blue box) should be disabled. Only that particular cell need to be disabled neither the entire row nor the entire column.
Below is the code which I have written in ON_CELL_ACTION event handler
DATA: lv_column TYPE string.
DATA lv_value TYPE char1.
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table.
DATA lo_value TYPE REF TO cl_salv_wd_config_table.
DATA lo_field TYPE REF TO cl_salv_wd_field.
DATA lo_check TYPE REF TO cl_salv_wd_uie_checkbox.
DATA lo_field_settings TYPE REF TO if_salv_wd_field_settings.
DATA lo_column TYPE REF TO cl_salv_wd_column.
DATA: lo_column_settings TYPE REF TO if_salv_wd_column_settings.
DATA: lo_table_settings TYPE REF TO if_salv_wd_table_settings.
FIELD-SYMBOLS <fs> TYPE data.
" Get the value from the Parameter
lv_column = r_param->column.
ASSIGN r_param->value->* TO <fs>.
lo_value = <fs>.
" Initialize the Used componenent
lo_cmp_usage = wd_this->wd_cpuse_alv_mat_display( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
lo_interfacecontroller = wd_this->wd_cpifc_alv_mat_display( ).
lo_value = lo_interfacecontroller->get_model( ).
" Check if the selected check box is ZZHMS_CHK_BOX
IF lv_column EQ 'ZZHMS_CHK_BOX'.
" If the selected check box is not initial
IF lv_value IS NOT INITIAL.
lo_column_settings ?= lo_value.
" Get the column reference.
lo_column = lo_column_settings->get_column( 'ZZDATETIME_CHK_BOX' ).
lo_field = lo_value->if_salv_wd_field_settings~get_field( 'ZZDATETIME_CHK_BOX' ).
lo_field->set_reference_field('ZZDATETIME_CHK_BOX' ).
" Create new object for the checkbox
CREATE OBJECT lo_check
EXPORTING
checked_fieldname = 'ZZDATETIME_CHK_BOX'.
" Set the readonly fieldname and the read only parameter
lo_check->set_read_only_fieldname( 'ZZDATETIME_CHK_BOX' ).
lo_check->set_read_only( abap_true ).
lo_column->set_cell_editor( lo_check ).
lo_table_settings ?= lo_value.
lo_table_settings->set_read_only( abap_false ).
ENDIF.
ENDIF.
And I am triggering this event in WDDOMODIFYVIEW method.
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table.
DATA lo_value TYPE REF TO cl_salv_wd_config_table.
lo_cmp_usage = wd_this->wd_cpuse_alv_mat_display( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
lo_interfacecontroller = wd_this->wd_cpifc_alv_mat_display( ).
lo_value = lo_interfacecontroller->get_model( ).
CALL METHOD lo_value->if_salv_wd_table_settings~set_cell_action_event_enabled( value = abap_true ).
Currently the entire table is getting disabled. Kindly help me to resolve the issue.
Your valuable comments are appreciable.
Regards,
Pradeep.

