Диалоговое программирование Ч.1. Элементы экрана и логика


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

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

Мы обсудим обработку экрана и создание различных элементов экрана с помощью Screen Painter. Screen Painter — это инструмент ABAP Workbench, используемый для разработки диалогов в системе SAP. Мы также обсудим, как создавать различные экранные объекты (состояния GUI), такие как меню, кнопки на панели инструментов приложения и т. д. с помощью Menu Painter. Статусы графического интерфейса расширяют функциональность приложения.

Экранные события

Прежде чем разрабатывать диалоговые программы, необходимо сначала понять, как диалоги обрабатываются в SAP. Cуществует три типа экранов, формирующих SAP GUI. Экраны выбора и экраны списка автоматически создаются с помощью определенных ключевых слов в программах ABAP. Например, экран выбора создается с помощью ключевого слова PARAMETERS или SELECT-OPTIONS, а экран списка создается с помощью ключевого слова WRITE.

Третий тип экрана, называемый общим экраном (или просто экраном), создается вручную с помощью Screen Painter.

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

Программы ABAP обрабатываются рабочим процессом на сервере приложений. Рабочий процесс состоит из экранного процессора, ABAP-процесса и интерфейса базы данных, как показано ниже.


Экранный процесс отвечает за связь между рабочим процессом и SAP GUI. Он обрабатывает логику потока экрана, из которой состоит экран, и вызывает различные диалоговые модули. Диалоговые модули поддерживаются в программе ABAP между операторами MODULE…ENDMODULE и вызываются из логики потока экрана с помощью оператора MODULE. Процесс экрана вызывает диалоговые модули из логики потока экрана и обеспечивает передачу данных с экрана в логику потока.

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

Как только процесс экрана вызовет модуль диалога из логики потока экрана, управление будет передано процессу ABAP, который позаботится о выполнении операторов ABAP в модуле диалога. Если ABAP-процесс встречает какие-либо операторы, требующие взаимодействия с базой данных, управление передается интерфейсу базы данных в рабочем процессе, который заботится о взаимодействии с базовой базой данных.

Логика потока экрана в которой поддерживаются события экрана. Когда событие экрана инициируется средой выполнения ABAP, выполняются диалоговые модули, которые вызываются в блоке событий. Ниже приведены четыре события экрана, которые запускаются при обработке экрана:




Process before output (PBO) - Процесс перед выводом
Событие PBO запускается перед показом экрана пользователю. Мы используем это событие для подготовки экрана, например, присваивая значения по умолчанию или динамически отображая/скрывая определенные поля на экране.
Process after input (PAI) - Процесс после ввода 
Событие PAI запускается после показа экрана пользователю, когда пользователь выполняет какое-либо действие на экране. Это событие позволяет вам реагировать на действия пользователя на экране.

Process on help request(POH) - Процесс запроса помощи
Событие POH запускается, когда пользователь выбирает (F1) (или поле) справку для поля экрана. Мы используем это событие, чтобы предоставить справку по полю экрана.

Process on value request (POV) - Процесс по запросу значения
Событие POV запускается, когда пользователь выбирает (F4) (или ввод) помощь для поля экрана. Мы используем это событие, чтобы предоставить справку по вводу для поля экрана.

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

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

Точно так же вы можете фиксировать вводимые пользователем данные и обрабатывать приложение в событии PAI. События POH и POV позволяют нам расширить функциональность приложения, предоставляя дополнительную справку для полей экрана. Это помогает пользователю понять, какой ввод ожидается в каждом поле экрана, или найти допустимый ввод. Полевая справочная документация вместе со справками по вводу обеспечивает согласованный пользовательский интерфейс для пользователя во всей системе SAP.

Некоторые действия пользователя могут запускать PAI, но не передавать код функции (например, если пользователь нажимает клавишу (Ввод) на клавиатуре). В таких случаях поле sy-ucomm или поле ok_code сохраняет код функции предыдущего действия. Чтобы предыдущие действия пользователя не выполнялись, когда код функции не отправляется, рекомендуется очищать поле ok_code после выполнения соответствующей задачи для действия пользователя.

Элементы экрана и логика потока

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

Диалоговые транзакции создаются с помощью программ пула модулей. В отличие от исполняемых программ, программы пула модулей не могут выполняться напрямую, используя имя программы. Программы пула модулей всегда выполняются путем присвоения программе кода транзакции.

Чтобы присвоить программе код транзакции, мы используем транзакцию SE93. Вместо того, чтобы открывать все эти различные инструменты ABAP Workbench в разных окнах, мы можем использовать Object Navigator (Transaction SE80) для работы с различными инструментами ABAP Workbench в одном месте. Object Navigator предоставляет интегрированную среду разработки (IDE).

Компоненты диалоговой программы.

Диалоговые программы состоят из различных объектов. Эти объекты не выполняются сами по себе; вместо этого они связаны с основной программой (диалоговой программой), из которой эти объекты вызываются на основе логики потока экрана.

Различные объекты диалоговой программы включают следующее:

Экраны
Экраны занимают центральное место в программировании диалогов. Диалоговая программа может состоять из множества экранов. Эти экраны создаются с помощью Screen Painter, и каждый экран принадлежит программе. Другими словами, каждая программа определяет свои собственные экраны, и один экран не может использоваться совместно с несколькими программами. Каждый экран программы идентифицируется числом от 1 до 9999. Мы рассмотрим пошаговый процесс создания экранов с помощью Screen Painter в следующем разделе.

Экран состоит из элементов экрана и логики потока. Логика потока управляет потоком экрана, вызывая различные модули в основной программе, которой принадлежит экран. Различные элементы пользовательского интерфейса, такие как поля ввода/вывода, флажки, переключатели, раскрывающиеся списки, табличные элементы управления и т. д., называются элементами экрана.

GUI cтатус
Каждый экран может загружать свой собственный статус GUI. Статус GUI управляет строкой меню, стандартной панелью инструментов и панелью инструментов приложения на экране и передает действия пользователя над этими элементами в виде кодов функций в программу.

Статус GUI определяется независимо от экрана, и каждый статус GUI принадлежит программе. Каждый экран программы может загружать другой статус графического интерфейса пользователя, определенный для основной программы, которой принадлежит экран, или он может загружать внешний статус графического интерфейса пользователя, определенный для другой программы.

Статус GUI определяется с помощью Menu Painter. Это независимый компонент программы. Мы обсудим создание и использование статусов GUI в Разделе GUI cтатус.

ABAP-программа
Вся логика обработки поддерживается в программе ABAP в диалоговых модулях, блоках обработки, которые поддерживаются между MODULE и ENDMODULE. Эти диалоговые модули вызываются из логики потока экрана для экранного события с помощью оператора MODULE.


Диалоговые модули не могут хранить какие-либо локальные данные, поэтому любые объявления данных в диалоговом модуле добавляются в область глобальных объявлений программы. Диалоговые модули нельзя вызывать извне из внешних экранов программы, и они не поддерживают какой-либо интерфейс параметров. Модули, вызываемые из PAI, заканчиваются на INPUT, а модули, вызываемые из PBO, заканчиваются на OUTPUT (например, MODULE USER_COMMAND_0100 INPUT или MODULE STATUS_0100 OUTPUT).

Данные передаются с экрана в программу во время события PAI и из программы на экран во время события PBO. Когда мы определяем объект данных программы с тем же именем, что и поле экрана, данные автоматически передаются с экрана в программу в событии PAI и сохраняются в объекте данных программы с таким же именем. Точно так же данные в объекте данных программы переносятся в одноименное поле экрана в событии PBO.

Например, если у нас есть поле ввода на экране с именем GV_CARRID, в которое пользователь может краткое название авиакомпании, то нам нужно определить объект данных в программе с тем же именем, GV_CARRID, для хранения значения, введенного Пользователь.

Любое значение, которое пользователь вводит в поле экрана GV_CARRID, будет передано программе в объект данных GV_CARRID в событии PAI. Точно так же любые данные, содержащиеся в объекте данных GV_CARRID программы, будут переданы в поле экрана GV_CARRID в PBO.

Каждый экран принадлежит программе ABAP и может вызывать модули той же программы. Цель основной программы состоит в том, чтобы поддерживать различные диалоговые модули, которые вызываются из логики потока экрана. Для этого используется программа пула модулей. Роль программы ограничивается поддержкой пула модулей, отсюда и название пула модулей. Программы пула модулей всегда выполняются через код транзакции, с которым связан начальный экран программы. Когда транзакция вызывается, она запускает логику потока экрана начального экрана, из которого могут быть вызваны другие экраны программы.

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

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

Ниже показан пример кода исполняемой программы. В этом примере при выполнении программы среда выполнения ABAP инициирует событие START-OF-SELECTION и выполняет оператор CALL SCREEN 100. Когда выполняется оператор CALL SCREEN, обработка экрана начинается с вызова события PBO экрана 100 и последующего отображения экрана. На этом этапе программа ведет себя как программа пула модулей.
*&---------------------------------------------------------------------*
*& Report ZTEST_EXAMPLE_001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_example_001.

DATA gv_carrid TYPE spfli-carrid.

START-OF-SELECTION.
  CALL SCREEN 0100.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'GUI_100'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'EXIT'.

    WHEN 'CANCEL'.

    WHEN 'BACK '.

  ENDCASE.

ENDMODULE.

Код транзакции
Диалоговая транзакция связывает программу с ее начальным экраном. Когда вызывается код транзакции, он запускает последовательность экранов, вызывая логику потока начального экрана. Из логики исходного экрана можно вызвать другие экраны. Ниже показана транзакция ZTEST_01, которая связывает основную программу и начальный экран приложения. Как упоминалось ранее, коды транзакций создаются с помощью транзакции SE93.


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

Dynpro
Экран вместе с его логикой потока называется dynpro (динамическая программа). Каждый dynpro представляет диалоговый шаг программы.

Шаг диалога
Шаг диалога начинается с PAI одного экрана и заканчивается PBO следующего экрана. Каждый шаг диалога включает логику программирования между двумя последовательными экранами. Отдельные диалоговые шаги программы могут выполняться разными рабочими процессами на сервере приложений, а программа состоит из нескольких диалоговых шагов.

Во время шага диалога экран остается неактивным для ввода. Например, экран показывается пользователю на уровне представления. Когда пользователь вводит данные на экране и нажимает (Enter), это действие инициирует шаг диалога, вызывая событие PAI экрана. Действие пользователя обрабатывается рабочим процессом на сервере приложений.

Пока рабочий процесс обрабатывает запрос, экран виден на уровне представления, но не может принимать какие-либо данные (т. е. экран неактивен). После того, как рабочий процесс завершит обработку запроса, тот же экран или другой экран отсылается обратно рабочим процессом, завершая шаг диалога. Как только экран отправляется обратно на уровень представления, он становится активным для пользовательского ввода. На этом этапе рабочий процесс может принять другой запрос от того же или другого пользователя. Ниже показан этот цикл запрос-ответ.

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



Экраны

Экран — это объект репозитория, принадлежащий программе. Экраны — это динамические программы (dynpros), которые содержат свои собственные объекты данных. Объекты данных на экране называются полями экрана и связаны с полями ввода/вывода на экране. Система передает данные между полями экрана и одноименными информационными объектами программы. Это позволяет нам передавать данные из программы на экран или с экрана в программу.

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

Экран состоит из трех вкладок: Атрибуты, Список элементов и Логика потока.

На вкладке Атрибуты можно поддерживать различные атрибуты экрана:


Тип экрана
Тип экрана который хотите создать. Экран выбора - выделен серым цветом, поскольку экраны выбора не определяются в Screen Painter, а генерируются с помощью операторов PARAMETERS или SELECT-OPTIONS в программе ABAP. Этот параметр автоматически выбирается для созданного экрана выбора. Вы можете выбрать один из следующих вариантов:
Стандарт: определяет обычный экран. Это опция по умолчанию и тип главного экрана. Обычный экран действует как главный экран, который может иметь статус GUI и может вызываться независимо в программе или через код транзакции.
Подэкран: этот параметр определяет экран как подэкран. Подэкран нельзя вызвать отдельно; он всегда загружается на главный экран.
Модальное диалоговое окно: этот тип экрана используется для отображения всплывающего экрана.

Параметры настройки
В этом разделе можно сохранить различные настройки экрана:
Хранить данные: если выбран этот параметр, в полях экрана будут храниться данные, если пользователь включил их в разделе «Хранения данных системного профиля пользователя». Он содержит любые записи, сделанные на экране, и будет отображать данные повторно при обработке экрана.
– Выключить ДинамичСжатие: если этот параметр включен, экран не сжимается во время выполнения. То есть, если сжатие включено, система автоматически удалит все строки или поля экрана, в которые были сделаны невидимыми динамически. Если сжатие отключено, то в таких сценариях будут отображаться пустые строки.
– Образец - не выполнимо: этот параметр используется SAP для внутренних целей. Это выбирается, если экран должен использоваться в качестве шаблона для других экранов и никогда не выполняться.
– Хранение позиции прокрутки: Включение этого параметра заставит экран удерживать позицию прокрутки. Это особенно полезно для больших экранов. Когда вы вернетесь к экрану после обработки другого экрана, система будет удерживать последнюю позицию прокрутки.
– Без панели инструментов приложения: при включении этого параметра панель инструментов приложения будет скрыта на экране.

Другие атрибуты
В разделе «Другие атрибуты» можно установить следующие параметры:

– Следующий экран: Вы можете ввести следующий экран, который должен вызываться после PAI текущего экрана. Этот параметр можно переопределить с помощью оператора SET SCREEN в одном из модулей PAI текущего экрана. Если в качестве следующего экрана введен тот же номер экрана, то система вызовет то же событие экрана PBO после события PAI и отобразит тот же экран.
– Позиция курсора: введите поле экрана, в котором должен быть первоначально размещен курсор при вызове экрана.
– Группа экранов: несколько экранов могут быть назначены группе экранов для последовательного выполнения любых изменений на всех экранах группы. Доступ к имени группы экранов можно получить с помощью системного поля SY-DNGR.
– Строки/столбцы: этот параметр показывает размер экрана, занимаемый элементами экрана. Эта информация полезна при вызове экрана в качестве модального диалогового окна.
– Меню контекста FORM ON CTMENU: В этом поле можно назначить контекстное меню для экрана.

Элементы экрана

Различные элементы экрана диалоговой программы составляют пользовательский интерфейс (UI) экрана. Элементы экрана создаются в графическом или буквенно-цифровом режиме в программе Screen Painter.

Редактор графического макета в Screen Painter позволяет создавать элементы экрана с помощью функции перетаскивания. Вы можете получить доступ к графическому редактору компоновки, нажав кнопку Формат на панели инструментов приложения.
Чтобы открыть редактор в буквенно-цифровом режиме, в Screen Painter следуйте по пути меню Утилиты - Параметры настройки и выберите вкладку Screen Painter. На вкладке «РедактЭкранов» снимите флажок «Редактор графического макета», как показано ниже, и нажмите кнопку «ОК» (зеленая галочка). После того, как параметр «Редактор графического макета» не выбран, нажмите кнопку «Формат», показано выше, чтобы открыть редактор в буквенно-цифровом режиме.
Редактор графического макета в Screen Painter доступен только для SAP GUI для Windows и может быть запущен в SAP NetWeaver Application Server 6.10 с SAP GUI версии 6.10 или более поздней. В SAP NetWeaver 7.0 редактор графического макета можно запустить, если у вас есть SAP GUI версии 6.20 или новее, исправление 56 или выпуск 6.40, исправление 8. Во всех остальных случаях система автоматически запускает буквенно-цифровой полноэкранный редактор.

Основные элементы экрана:

Текстовые поля 
Используется для предоставления меток для других полей и не редактируется. 

Выпадающие списки
Специальный тип поля ввода/вывода, отображающий список возможных записей, из которых пользователь может выбирать. Пользователь не сможет ввести в это поле свободное значение; он должен выбрать из доступных вариантов.

Флажки
Используется, чтобы позволить пользователю выбрать несколько вариантов в группе. Если для флажка назначен код функции, система немедленно вызовет событие PAI; в противном случае пользователь может продолжить вводить другие данные и вызвать PAI, нажав (Enter) или щелкнув кнопку.

Радио-кнопки
Используется, чтобы позволить пользователю выбрать любой из вариантов в группе. Радиокнопки всегда принадлежат группе. Если для переключателя/группы назначен функциональный код, система немедленно вызовет событие PAI; в противном случае пользователь может продолжить вводить другие данные и вызвать PAI, нажав (Enter) или щелкнув кнопку

Кнопки
Связан с кодом функции. Когда пользователь нажимает кнопку, система инициирует событие PAI, и код функции передается в программу. (Изменено)Восстановить исходный вариант

Рамки
Используется для группировки различных элементов экрана. Это позволяет размещать элементы экрана в различные группы и обеспечивает большую визуальную привлекательность для пользователя. Они используются исключительно для целей отображения и могут содержать заголовок для отображения названия группы.





Другие, более специализированные элементы экрана включают следующее:

Поля ввода/вывода (I/O)
Используется для ввода или отображения данных.

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

Закладка
Позволяет создавать несколько вкладок на одном экране для удобной навигации. Каждая вкладка элемента управления tabstrip загружает подэкран.

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

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

Комментарии