Как получить все элементы пользовательского интерфейса представления? (Веб 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, чтобы получить более ранний вывод вашей программы во внутреннюю таблицу.

Ура!

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