Как получить все элементы пользовательского интерфейса представления? (Веб Dynpro ABAP)
Я хочу сделать метки поля ввода невидимыми, когда поле ввода невидимо. Я не могу связать его с тем же контекстом, потому что они создаются динамически.
Есть ли способ получить все элементы представления, чтобы я мог зациклить их и сделать ярлык динамически невидимым?
3 ответа
Каждый контроллер представления содержит метод WDDOMODIFYVIEW с изначально пустой реализацией. Внутри этого метода вы имеете доступ ко всей иерархии элементов пользовательского интерфейса и должны иметь возможность извлекать ссылки как на метку, так и на поле ввода, а также скрывать метку в случае, если поле ввода скрыто.
Вот пример кода обработчика действия, который находит метку MYLABEL
внутри контейнера и скрывает его. Это не полностью покрывает ваш случай использования, но я думаю, что это поможет вам начать.
data view type ref to cl_wdr_view.
view ?= wd_this->wd_get_api( ).
data container type ref to cl_wd_uielement_container.
container ?= view->root_element.
data children type cl_wd_uielement=>tt_uielement.
children = container->get_children( ).
data element type ref to cl_wd_uielement.
loop at children into element.
data id type string.
id = element->get_id( ).
if id = `MYLABEL`.
element->set_visible( `01` ).
endif.
endloop.
Сначала напишите вторую программу, которая будет отвечать за вызов вашей программы, используя инструкцию SUBMIT ABAP с добавлением EXPORTING LIST TO MEMORY.
Когда вы запускаете эту вызывающую программу, она будет вызывать вашу программу, используя SUBIT, но вместо того, чтобы генерировать вывод на экране, система отправит вывод в системную память.
Позже, в webdynpro или в любой другой программе, вы можете вызвать ABAP-функцию LIST_FROM_MEMORY, чтобы получить более ранний вывод вашей программы во внутреннюю таблицу.
Ура!