web dynpro alv Некоторые ячейки столбца флажка будут редактируемыми, некоторые недоступными для редактирования в зависимости от некоторых условий

Эксперты. Я новичок в Web Dynpro.

У меня есть ALV-таблица. Проблема в том, что я хочу, чтобы какая-то ячейка столбца флажка была редактируемой, а какая-то ячейка недоступной для редактирования в зависимости от какого-либо свойства.

Я делаю следующие шаги для достижения необходимого результата:

1) Добавьте атрибут READONLY (тип WDY-BOOLEAN) к соответствующему узлу (атрибут CHECK типа WDY-BOOLEAN уже добавлен).

2) Затем в моем коде я проверяю некоторые условия в строке моей таблицы и присваиваю атрибут READONLY значение abap_true или abap_false.

3) Затем я связываю свой узел с таблицей (таблица заполнена абсолютно правильно (я контролирую это в отладчике))

4) Настройте мой alv:

" create an instance of ALV component

  " get reference to the ALV model


  DATA:

  lo_table_settings TYPE REF TO if_salv_wd_table_settings,
  lo_column_settings TYPE REF TO if_salv_wd_column_settings,
  lo_column TYPE REF TO cl_salv_wd_column.

  lo_column_settings ?= lv_value.
  lo_table_settings ?= lv_value.

  lo_column = lv_value->if_salv_wd_column_settings~get_column( 'CHECK' ).



  DATA lr_checkbox TYPE REF TO cl_salv_wd_uie_checkbox.

" create checkbox

  CREATE OBJECT lr_checkbox
  EXPORTING
  checked_fieldname = 'CHECK'.


  " make our table is editable

  lo_table_settings->set_read_only( abap_false ).



lo_column = lo_column_settings->get_column( 'CHECK' ).

**Creating UI Elmenent 'INPUT FIELD' to make the column editable

DATA: lr_input_field TYPE REF TO cl_salv_wd_uie_input_field.
 CREATE OBJECT lr_input_field EXPORTING value_fieldname = 'CHECK'.


  lr_checkbox->set_read_only_fieldname( value = 'READONLY' ).
  lv_value->if_salv_wd_column_settings~delete_column( ID = 'READONLY' ).

Но это не работает. Все ячейки столбца checbox доступны для редактирования, и я не получаю недоступные для редактирования ячейки столбца checbox (хотя в соответствии с моим полем "READONLY" я должен видеть, что некоторые ячейки редактируемые, некоторые - не редактируемые).

1 ответ

Чтобы сделать поле A редактируемым или доступным только для чтения, достаточно лишь "использовать значение поля B для свойства A только для чтения".

Итак, насколько я понимаю, у вас есть столбец с флажком, и вы хотите, чтобы некоторые строки были редактируемыми, а другие - только для чтения.

Для этого вам не нужно создавать поле ввода, единственное, что вам нужно сделать, это получить ссылку на столбец флажка и установить привязку его свойства только для чтения к полю в вашей структуре данных.

если это все еще не работает, проверьте ваши данные, является ли значение поля readonly каждой записи '', если да, то, конечно, каждая ячейка проверки будет редактируемой.

Ваш первый шаг правильный. Вы добавили атрибутREADONLY типа WDY-BOOLEAN к вашему узлу и назначил его abap_true значение перед вызовом сетки.

Следующим шагом является создание ссылки на поле ввода для каждого поля / строки, которое вы хотите сделать редактируемым, и присвоение этой ссылки атрибуту поля ТОЛЬКО ДЛЯ ЧТЕНИЯ и изменение этого атрибута только для строк, которые соответствуют условию.

Вот пример кода:

Первоначальное назначение

 loop at lt_table assigning field-symbol(<fs_table>).
  <fs_table>-read_only = abap_true.    " non editable
 endloop.

Настройка редактируемости столбца

* input type reference
 data lr_input type ref to cl_salv_wd_uie_input_field.

* Retrieving all column id and reference
call method lv_value->if_salv_wd_column_settings~get_columns
   receiving
    value = data(lt_columns).

loop at lt_columns into ls_columns.
* Assigning column reference
data(lr_column) = ls_columns-r_column.

* Creating input field UI Element
create object lr_input
  exporting
   value_fieldname = ls_columns-id.

*Assigning input field to column to make it as editable
call method lr_column->set_cell_editor
  exporting
   value = lr_input.

* binding input field ref to READONLY field  
lr_input->set_read_only_fieldname( value = "READONLY" ).  
endloop.

Возможность редактирования отдельных строк в зависимости от условий

loop at lt_table assigning field-symbol(<fs_table>).
  if smth = abap_true
    <fs_table>-read_only = abap_false.    " non editable
  endif.
endloop.

Проверьте это руководство для справки.

Другие вопросы по тегам