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.
Проверьте это руководство для справки.