Диалоговое программирование Ч.5. Control Framework


Когда мы разрабатываем транзакции с помощью Screen Painter, список доступных элементов экрана ограничивается полями ввода-вывода, метками, флажками и так далее. Это накладывает ограничение на возможные элементы пользовательского интерфейса, которые можно использовать на экране. Многие настольные приложения, к которым привыкли пользователи, могут обеспечивать лучший пользовательский интерфейс, чем это было традиционно возможно с экранами SAP. Понимая этот пробел, SAP представила Control Framework в SAP ERP 4.5.

Control Framework позволяет создавать сложные экраны, интуитивно понятные и плавные. Это позволяет вам создавать настраиваемые элементы управления на клиенте пользователя из ваших программ ABAP. Эта структура включает два типа компонентов: компоненты на стороне сервера и компоненты на стороне клиента.

На стороне сервера платформа реализует ряд объектов ABAP, которые вместе называются инфраструктурой управления объектами ABAP. На стороне клиента инфраструктура управляется компонентом, называемым контроллером автоматизации (или клиентом автоматизации). Клиент автоматизации управляет всеми экземплярами настраиваемых элементов управления и обеспечивает связь между пользовательскими элементами управления на уровне представления и инфраструктурой управления объектами ABAP на сервере приложений.

Использование контейнеров

Пользовательские элементы управления интегрированы в клиент SAP GUI, который реализует либо элементы управления Active X, либо компоненты JavaBeans в зависимости от версии клиента GUI. Пользовательские элементы управления позволяют создавать множество сложных элементов управления, таких как ALV, календарь SAP, элементы управления изображениями SAP и т. д. Каждый настраиваемый элемент управления отображается как объект ABAP соответствующего типа элемента управления.

Пользовательский элемент управления запускается внутри контейнера. Каждый элемент контейнер представлен как объект ABAP, который действует как родитель для пользовательского элемента управления. Различные элементы управления контейнерами описаны в таблице.
Компоненты структуры экрана
Контейнер Класс Описание
Пользовательский контейнер CL_GUI_CUSTOM_CONTAINER Пользовательский контейнер определяется на экране с помощью Screen Painter. Пользовательский элемент управления отображается внутри контейнера. Один экран может иметь несколько контейнеров.
Контейнер диалогового окна CL_GUI_DIALOGBOX_CONTAINER Контейнер диалогового окна позволяет отображать элементы управления в модальном диалоговом окне или в полноэкранном режиме.
Стыковочный контейнер CL_GUI_DOCKING_CONTAINER Стыковочный контейнер позволяет прикрепить элемент управления к любому из четырех краев экрана в качестве области экрана с изменяемым размером. Вы также можете отсоединить его, чтобы он стал независимым модальным диалоговым окном.
Разделительный контейнер CL_GUI_SPLITTER_CONTAINER Контейнер разделителя позволяет отображать более одного элемента управления, разделяя область экрана на ячейки.

Реализация пользовательских элементов управления

Реализация пользовательского элемента управления проста. Мы будем использовать пример элемента управления изображением SAP, чтобы объяснить, как элемент управления реализован в программе ABAP. Шаги должны быть аналогичны для других элементов управления, за исключением использования определенного контейнера и класса контроллера для выбранного элемента управления.

Чтобы реализовать контроллер, мы сначала создаем контейнер на экране. Затем создайте экземпляр родительского контейнера и передадим ссылку на родительский контейнер пользовательскому элементу управления. Оттуда мы можем использовать различные методы класса пользовательского элемента управления для работы с пользовательским элементом управления.

Выполните следующие действия, чтобы создать элемент управления изображением SAP:

1. Создайте пользовательский контейнер в рабочей области графического редактора компоновки, выбрав кнопку Спец. упр. элемент на палитре элементов и перетащив ее в рабочую область, как показано ниже. Укажите имя для этого контейнера. В нашем примере имя контейнера CUSTOM.

2. В основной программе определите два объекта для контейнера и элемент управления. В нашем пример объект для контейнера должен иметь статический тип CL_GUI_CUSTOM_CONTAINER, поскольку мы используем пользовательский контейнер. Ссылочный объект для элемента управления должен иметь статический тип CL_GUI_PICTURE, поскольку мы используем контроллер изображений SAP.

3. В модуле PBO экрана создайте экземпляр контейнера, передав имя контейнера конструктору. После создания экземпляра контейнера создайте экземпляр контроллера, передав объект контейнера конструктору.

4. После создания экземпляра контроллера вы можете вызвать метод load_picture_from_url, чтобы передать URL-адрес изображения, которое должно отображаться в контейнере экрана. Код основной программы:
*Объявить ссылочные объекты для контейнера и контроллера
DATA :go_container  TYPE REF TO cl_gui_custom_container,
      go_controller TYPE REF TO cl_gui_picture.

MODULE load_container OUTPUT.
*Создать экземпляр контейнера
  CREATE OBJECT go_container
    EXPORTING
      container_name = 'CUSTOM'.
*Создать экземпляр контроллера
  CREATE OBJECT go_controller
    EXPORTING
      parent = go_container.
*Загрузить изображение
  go_controller->load_picture_from_url(
  url = 'http://www.domain.com/image.jpg'
  ).
ENDMODULE.
Можно реагировать на события, вызванные пользовательским контроллером, реализуя подходящие методы обработчика событий.

Комментарии