Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
Скачать 28.36 Mb.
|
Глава 19: Определение пользовательского интерфейса Глава 20: Сообщения, стандартизованные диалоговые окна и исключения Глава 21: Использование транзакций для изменения объектов в базе данных Глава 22: Средства развитого GUI (фафического пользовательского интерфейса) Глава 19 Определение пользовательского интерфейса • Создание диалоговой программы • Размещение элементов на экране • Задание логики работы • Построение статусов GUI и заголовков 216 Глава 19 Экран, манипулятор мыши и клавиатура являются основными элементами интерфейса, позволяющими создавать и изменять данные в системе. В частности, в основе многих операций коммерческих приложений лежит ручной ввод данных (см. ниже). Следовательно, интерфейс должен быть максимально удобным и дружественным по отношению к пользователю, т.е. необходимо не только обеспечить ввод данных, но и предусмотреть реакцию системы на ввод неправильной или бессодержательной информации. И, наконец, система должна позволять связывать данные и адекватные процедуры их обработки. Например, если группа клиентов туристического агентства заказывает билеты на авиарейс, то под- разумевается, что все операции будут выполнены правильно: в день вылета действительно существует указанный авиарейс, и заказчики найдут свободными забронированные ими места. Если все места уже заняты, то клиентам может потребоваться информация о первом рейсе со свободными местами. Для удовлетворения этим требованиям диалоговая программа по обслуживанию туристического агент- ства должна иметь графический пользовательский интерфейс (Graphical User Interface, GUI) и содержать правила проверки корректности вводимых данных, а также контроля их непротиворечивости. Кроме того, данные о заказах билетов должны сохраняться в базе и быть доступными в будущем. Наконец, любой слу- жащий агентства должен иметь возможность легко исправить неправильно введенные данные. Язык АВАР/4 дает в руки разработчику широкий набор инструментов и языковых конструкций, позволяющих создавать приложения подобного класса. В состав интерфейса пользователя АВАР/4 вхо- дят экраны, меню и инструментальные линейки. Экраны появляются в окнах и содержат такие графи- ческие элементы, как переключатели, текстовые поля и экранные кнопки. При проектировании экрана обычно учитывается как размещение элементов, так и логика выполнения. Каждый экран связан с управляющей программой АВАР/4. Как правило, диалоговое приложение состо- ит из нескольких экранов, принадлежащих одной программе. Размещение экранов моделируется по принципу WYSIWYG (сокращение от английского предложения "What You See Is What You Get" — "Что видишь, то и получаешь"). Размещаемыми элементами могут быть поля ввода, метки поля (надписи), экранные кнопки, фреймы, переключатели, управляющие эле- менты таблиц и т.д. Их можно выбирать из Dictionary или помечать на инструментальной линейке и размещать на экране с помощью мыши. Логика выполнения структурирована по событиям, соответствующим действиям пользователя. При воз- никновении каждого события производится обработка данных, описываемая в модулях управляющей программы. Последовательность экранов зависит от вводимых пользователем данных и управляется мо- дулями обработки соответствующих событий. Контроль вводимых данных осуществляется либо автома- тически с помощью контрольных таблиц (например, допустимых идентификаторов клиентов), либо производиться самой программой АВАР/4. При неправильном вводе система сообщений оповещает пользователя об ошибке. Сообщения рассматриваются в главе 20. Под статусом GUI принято понимать те элементы, которые появляются в меню и на инструменталь- ных линейках. Их можно строить динамически в управляющих программах АВАР/4 с помощью коман- ды set pf-status. Заголовок GUI описывает заголовок экрана и может быть задан в программе с помощью команды set titlebar. Текст статуса GUI и заголовки могут выводиться на экран на естественном языке страны пользователя без изменения исходного текста программы. Если для статуса GUI используется статус, предлагаемый в Workbench по умолчанию, то программа будет иметь стандартно организован- ный пользовательский интерфейс. В этой главе рассматривается, как строить статусы GUI для диалоговых программ изменения данных. Статусы GUI для отчетных списков описаны в главе 17. Построение пользовательского интерфейса поясняется на примере программы ввода информации для гипотетического туристического агентства. Будет показано, как размещать элементы на экране, за- давать логику выполнения и строить статус GUI для данного интерфейса. Описание учебной задачи Перед началом построения интерфейса познакомимся с тем, как должен выглядеть конечный про- дукт и как он будет работать. Затем рассмотрим процесс создания экранов. Разрабатываемая программа предназначается для бронирования мест на авиарейсы в туристическом агентстве. Пользовательский интерфейс должен обеспечивать два основных шага: • Запрос данных по авиарейсу • Диалог для ввода необходимых данных клиента О п р е д е л е н и е пользовательского интерфейса 217 217 На первом шаге запрашивается информация об исходном и конечном пунктах авиарейса, о дате и авиалинии. Таким образом, расположение элементов формы для ввода данных должно быть таким, как показано на рис. 19.1. Рис. 19.1 Интерфейс запроса данных об авиарейсе На экране присутствуют четыре пары элементов, каждая из которых состоит из экранной метки (надписи) и поля ввода. Поле описывается набором атрибутов, например, атрибутом поля, которое тре- бует ввода данных (маркируется знаком вопроса). При вводе данных система проверяет правильность данных (например, допустимость введенной даты). При вводе недопустимой величины система выводит на экран сообщение об ошибке. Если щелкнуть мышью на экранной кнопке "стрелка", расположенной справа от поля ввода, то появится диалоговое окно с возможными значениями для данного поля (см. рис. 19.2). Любое из этих значений можно вы- брать щелчком мыши, после чего диалоговое окно автоматически закроется. Рис. 19.2 Диалоговое окно для ввода информации о конечном пункте авиарейса 218 Глава 19 После задания значений всех полей можно перейти к следующему экрану, щелкнув на экранной кнопке Request (запрос). На этом экране, разделенном на два фрейма, можно вводить данные о клиенте. Верхний фрейм содержит данные предыдущего экрана и подробную информацию о рейсе. Все поля верхней части экрана закрыты для ввода. В нижнем фрейме можно вводить имя клиента и число бро- нируемых мест (см. рис. 19.3). Рис. 19.3 Экран ввода данных клиента для заказа билетов на авиарейс Щелкнув мышью на экранной клавише Book (регистрация), можно забронировать места для клиента на авиарейс. Если операция проходит успешно, на экран выводится сообщение о том, что место забро- нировано. После выхода из окна сообщения снова появляется первый экран, позволяющий вводить новый запрос на другой авиарейс. Создание диалоговой программы Теперь известно, как будет выглядеть программа, и можно приступить к се разработке. Для этого следует использовать Object Browser (см. главу 3). Сначала нужно задать имя программы (например, SAPMSABB) и выбрать для нее тип М (т.е. создается Module Pool — диалоговая программа, изменяющая данные в базе). В отличие от отчета, Module Pool нельзя инициировать командой submit или выбором экранной кнопки Test/Execute на экране Objecl Browser, так как в Object Browser не предусмотрен стартовый экран по умолчанию. Module Pool разрешается инициировать либо с помощью функции меню, связывающей его с транзакцией, либо используя специальную языковую конструкцию. Транзакцией в R/3 называется диалоговая программа, изменяющая объекты базы данных непротиворечивым образом (см. главу 21). В приведенном ранее примере транзакция создавалась с помощью начального (см. рис.19.1) и пос- ледующих экранов (см. рис. 19.2, 19.3). Кроме того, транзакцию разрешается определять на экране Object Browser. Для этого следует выбрать в переключателе опцию Other Objects (другие объекты) и щелкнуть мышью на кнопке Edit в нижней части экрана. На следующем экране нужно задать имя тран- закции (например, SAAB) и щелкнуть на кнопке Create (создать). В открывшемся диалоговом окне не- обходимо определить тип транзакции как Dialog Transaction (диалоговая транзакция), а в следующем диалоговом окне ввести краткий поясняющий текст, задать имя программы и начальный экран диалога (в примере использованы имя программы SAPMSAAB и экран 100). Выполнение транзакции начинается с отображения начального экрана, а при ее завершении управ- ление передается в вызывающую программу. Протестировать выполнение транзакции можно с помощью кнопки Test/Execute (проверка/ выполнение) экрана Object Browser. Определение пользовательского интерфейса 219 Создание экрана Диалоговый экран присоединяется к программе, написанной на языке АВАР/4. Его можно опреде- лить на экране Object Browser при нажатии кнопки Create. В появившемся диалоговом окне, отобража- ющем различные типы объектов, укажите тип Screen (экран) и задайте номер (см. рис. 19.4), который должен содержать не более четырех цифр. Номер экрана используется для его идентификации (см. рис. 19.1). Например, первый экран имеет номер 100 (см. рис. 19.1), а второй — 200 (см. рис. 19.$). Затем нажмите на кнопку Create, введите на открывшемся экране краткое описание (см. рис. 19.5) и сохраните атрибуты экрана, нажав на кнопку Save. Можно задать дополнительные элементы экрана, однако в примере используются все значения по умолчанию. В качестве атрибута задается также имя следующего диалогового экрана (например, 200). По умолчанию текущий номер экрана предлагается системой, так как последовательность номеров ус- Рис. 19.4 Задание номера первого экрана для примера транзакции Рис. 19.5 Задание атрибутов для экрана 100 220 Глава 19 танавливается динамически на уровне логики выполнения (Flow Logic) (подробнее о Flow Logic расска- зывается в разделе "Определение логики выполнения программы"). Размещение элементов на экране После определения атрибутов можно перейти к компоновке экрана. Далее рассмотрим, как задать тюля ввода, метки (ярлыки) поля и заголовки фреймов с помощью средств FullScreen Editor (полноэ- кранный редактор). Запуск Fullscreen Editor Нa экране задания атрибутов нажмите на кнопку Fullscreen. В результате появится экран редактора для создания графических экранных элементов (см. рис. 19.6). Существует также альтернативный текс- товый режим работы редактора, и можно переключаться между этими режимами, используя функцию меню Settings Graph Fullscreen. В данной книге пезде используется графический режим Fullscreen Editor. Этот редактор предоставляет "рабочий лист" (область экрана), где можно размешать различные графические элементы. Выбранный из инструментальной линейки элемент перемещается мышью на рабочий лист с помощью обычной буксировки экранных объектов. Рис. 19.6 Экран Fullscreen Editor, позволяющий задать компоновку диалогового экрана программы Задание меток и полей ввода ДЛЯ определения меток (ярлыков) и полей ввода диалогового экрана используется кнопка Text. По- явившееся текстовое окошко метки следует переместить в нужное место экрана и щелкнуть левой кла- вишей мыши, чтобы "закрепить" его. При размещении ярлыка система запрашивает его имя и текст. Эту информацию нужно ввести в поля Field Name (имя поля) и Text, расположенные в верхней части экрана (см. рис. 19.7). Таким же образом, но используя элемент Entry (ввод данных) инструментальной линейки меню, на рабочем листе можно разместить поле ввода (см. рис. 19.8). Разрешается увеличивать длину графичес- кого элемента, растягивая его мышью за правый или левый угол. Можно также перемещать элемент методом буксировки. Следует задать имя поля ввода (поле Field Name в верхней части экрана). Заметим, что заданный в поле Text текст будет выводиться только в пределах длины поля. Для реализации учебного примера разместим данные о рейсах на первом экране. Информация о связях (город отправления и прибытия рейса, а также название авиакомпании) хранится в таблице но фактические даты рейсов записаны в таблице (см. описание модели данных в главе 6). Поскольку текст метки и форматы полей уже определены в Dictionary, то данную информацию можно использовать и при формировании экрана в редакторе Fullscreen. Нажмите кнопку для получения доступа к диалоговому окну и для задания имени таблицы, например PLANFLI (см. рис. 19.9, верхняя строка ввода). После нажатия на Enter (ввод) все поля указанной таблицы появляются в ниж- ней части диалогового окна. Если во фрейме Template (шаблон) выбрать в переключателе опцию Yes, Определение пользовательского интерфейса 221 Рис. 19.7 Размещение на экране меток и задание их имени и текста Рис. 19.8 Размещение поля ввода на экране а во фрейме Key Word (ключевое слово) нажать на кнопку Average (средний), то для каждого поля будут дополнительно выведены его длина и метка. После выбора поля в Dictionary (двойным щелчком мыши) система запрашивает, перемещать ли его на рабочий лист. Заметим, что на экран передаются как метка выбранного ключевого слова таблицы, так и шаблон поля ввода. Для отказа от размещения на экране метки выберите в Key опцию None. Рассмотрим пример. Из таблицы нужно выбрать поля и указывая их последовательно в списке Dictionary, как было описано выше. Можно также переместить их на рабочий лист все сразу. Для этого нужно указать мышью на поля списка диалогового окна с нажатием на клавишу клавиатуры (см. рис. 19.10). Можно изменять порядок и расположение полученных из Dictionary полей и шаблонов, используя "переместить и отпустить" того чтобы сгруппировать несколько полей, 222 Глава 19 Рис. 19.9 Выбор экранных полей из Dictionary Рис. 19.10 Выбор нескольких экранных полей из Dictionary дует указателем мыши очертить вокруг них прямоугольник. Тогда для перемещения всей группы доста- точно поместить указатель мыши внутрь этого прямоугольника и отбуксировать его. Заметим, что при размещении на экране полей Dictionary необходимо включить в диалоговую про- грамму соответствующее определение таблицы. С другой стороны, если нужно использовать поля, не входящие в Dictionary, то можно выбрать их из тех, что были или будут заданы в связанных с диалогом программах. Задание фрейма с заголовком Выделение группы полей, отображаемых на рабочем листе, выполняется с помощью фрейма с заго- ловком (см. рис. 19.3). Для создания фрейма нужно щелкнуть мышью на кнопке Frame (фрейм или кадр) и переместить указатель на то место, где будет находиться верхний левый угол, затем нажать Определение пользовательского интерфейса 223 левую кнопку мыши, и не отпуская ее, переместить указатель в правый нижний угол фрейма. ная линия выделит контур и размер фрейма. Затем следует задать заголовок фрейма (см. рис. 19.11). Для управления положением фрейма на экране служит управляющий элемент в виде квадратика на верхней линии рамки фрейма. Размер фрейма изменяется при перемещении ромбов, расположенных в середине линий рамки. Рис. 19.11 Задание фрейма с заголовком Атрибуты элементов экрана Каждый объект экрана имеет набор специальных характеристик, например обязательный или услов- ный ввод и т.д. Нажав на кнопку Field List экрана Fullscreen Editor, можно получить доступ к диалого- вому окну для изменения атрибутов поля. В языке АВАР/4 поддерживается множество атрибутов, которые могут быть связаны с полями экрана (см. рис. 19.12). Рис. 19.12 Список полей примера, в котором можно изменять атрибуты полей 224 Глава 19 Рассмотрим атрибуты поля Заметим, что существуют две строки с именем но они имеют разные типы поля (атрибут Строка типа относится к метке поля, а строка типа I/O — к фактическому полю ввода/вывода. Установите курсор на строке типа I / O и на- жмите на кнопку Field (атрибуты первого поля). На рис. 19.13 показано диалоговое окно с фактическими атрибутами поля Второй способ раскрыть это диалоговое окно — дваж- ды щелкнуть на имени поля на экране Fullscreen Editor. 19.13 Задание атрибутов поля Согласно информации данного окна, поле взято из Dictionary и может использоваться для ввода и вы- вода значений. В нашем примере необходимо задать атрибут Obligatory Input (обязательный ввод). В про- цессе выполнения программы система будет запрашивать ввод значения в это поле до тех пор, пока пользователь не задаст Только тогда выполнение продолжится. Для установки данного свойства поля нужно включить переключатель (ввод по Поле ввода по запросу помечается вопроси- тельным знаком (?). Для получения допустимых значений включите переключатель Foreign Key (внешний ключ). Тогда в процессе выполнения справа от поля ввода появляется кнопка со "стрелкой вниз", нажав на которую пользователь получает доступ к диалоговому окну со списком допустимых названий го- родов. При вводе не принадлежащего списку, система выводит на экран сообщение об ошибке. Установить проверку по внешнему ключу можно только в том случае, если контрольная таблица или набор фиксированных значений связан с соответствующим табличным полем Dictionary (см. главу Наконец, следует установить характеристики вывода поля на экран (в правой части окна задания атрибутов). Например, при установке Bright (ярко) текстовое поле отображается цветом с большей ин- тенсивностью. Допускается не только последовательное изменение атрибутов для каждого поля, но и модификация атрибутов сразу всех полей списка с помощью установки переключателя или задания значений в полях ввода. Советуем всегда использовать крайнюю правую кнопку инструмен- тальной линейки List (список текстов и шаблонов) (см. рис. 19.12), которая ставляет доступ к дополнительным атрибутам, не приведенным в списке атрибутов поля. Последнее поле списка играет особую роль. Это поле типа ОК, называемое Code Field (поле с кодом ОК). Оно используется для ввода действий пользователя и передачи соответствующих инструк- ций в программу. Имя этого поля может быть любым (например, fcode для кода функции). Разрешается определять в программе поле с тем же именем. Длина этого поля не должна превышать 4 символов: data: f c o d a ( 4 ) с. Если при выполнении пользователь выбирает функцию меню, нажимая экранную кнопку или кнопку на инструментальной линейке, то соответствующий ей функциональный код передается в паче Code Field. Определение пользовательского интерфейса 225 Более подробно об определении и сопровождении кодов функций рассказывается в раз- деле "Построение статусов GUI и заголовков". Реакция программы на поступивший код функции рассматривается в следующем разделе, описыва- ющем логику выполнения экрана. Определение логики работы Логика работы с экраном служит для управления последовательностью обработки данного экрана. В частности, логика работы описывает, как определяются значения по умолчанию для полей экрана и как программа "реагирует" на действия пользователя. Для этого используется несколько событий: • Process before output обработка до вывода) — событие, которое обрабатывается до отобра- жения экрана и обычно используегся для инициализации экранных полей. • Process after input обработка после ввода) — событие, которое обрабатывается при выборе функции меню, при нажатии экранной кнопки или функциональной клавиши. • Process on value request (POV, обработка запросу значений) — событие, которое обрабатыва- ется при запросе набора возможных значений (клавиша F4). • Process on help request обработка по запросу оперативной справки) - событие, которое обрабатывается при запросе оперативной справки (клавиша F1). Программный код каждого события определяет, как устанавливается или считывается программой содержимое экранных полей. Для каждого поля может быть вызвана специальная подпрограмма, в ко- торой значения полей устанавливаются по событию process before output, а считываются по одному из других (PAI, POV, Такие подпрограммы, обеспечивающие логику, называются лями (modules). На рис. 19.14 схематично показана логика работы для рассматриваемого примера, воз- можные действия пользователя обозначены стрелками. Программа редактирования логики работы вызывается на экране Field List (список полей) с помо- щью элементов меню Goto Flow Logic. Кроме того, редактор логической схемы можно вызвать не- посредственно из списка объектных кодов программ. Рис. 19.14 Схема управления логикой работы для учебного примера 226 Глава 19 Событие process before output Сначала рассмотрим, как описывается событие process before output для экрана 100. Модуль вызывается без ссылки на какое-либо поле, поэтому он относится ко всем полям экрана. Задать нужный модуль можно также, дважды щелкнув мышью на его имени, а в следующем диалоговом окне указав, что его необходимо включить (include). В программу нужно вставить следую- щие строки, ограниченные "скобками" module; Дополнение output в определении модуля указывает, что модуль вызывается по событию process before output. Дополнение input используется, если модуль вызывается по другим событиям (это допол- нение можно опускать, так как оно считается заданным по умолчанию). Команды set titlebar и set определяют строку заголовка и набор доступных функций меню (см. раздел "Построение ста- тусов GUI и заголовков"). В самом общем случае содержимое полей может быть задано в модуле, вы- зываемом по событию РВО. Точно также задаются поля для второго экрана примера. Событие process after input Событие process after input экрана 100 содержит программный блок, ограниченный цепочкой В нем сгруппированы поля ввода и модули для проверки содержимого полей: Модуль action_request связан с экранными полями, указанными после оператора field. При возник- новении ошибки во время выполнения модуля action_request управление передается на экран, и поля, указанные в цепочке, опять становятся доступными для ввода, что позволяет разработчику внести не- обходимые исправления. В цепочку можно включить несколько модулей. Они будут выполняться в указанном порядке. Исход- ный текст модуля В данном примере поле fcode является полем типа OK Code Field экрана 100 и, следовательно, содержит команду пользователя. Все команды пользователя нужно проверять до передачи в модуль с помощью конструкции case/endcase. В примере для проверки введенных значений используется под- программа которая вызывается в том случае, если значение fcode равно c_fcode_request. Если условия проверки не выполняются (фактическое значение параметра flag_found равно false), то с помощью оператора message передается сообщение об ошибке, а все поля цепочки становятся опять готовыми для ввода. Двойной щелчок мышью на номере сообщения позволяет задать его текст, кото- рый определяется языком страны пользователя и транслируется независимо от исходного текста про- Определение пользовательского интерфейса 227 граммы. Префикс V в номере сообщения указывает на его тип — error (ошибка). Другие типы сооб- щений — информационное и предупреждающее — рассматриваются в главе 20. Если подпрограмма проверки завершается успешно (фактическое значение параметра flagjound равно то команда set устанавливает следующий экран а текущий "убирается" с помощью команды leave screen. После этого начинается обработка события process before output для следующего экрана, который статически определяется в атрибутах основного экрана и может быть ди- намически переопределен с помощью оператора set screen. В примере по умолчанию используется ста- тический подчиненный экран, т.е. такой же, как основной. В частности, если пользователь нажмет на клавиатуре клавишу Enter (ввод), то будет обрабатываться событие process before output для фактичес- кого экрана, и он отобразится вновь. Если необходимо вывести другой экран, то следует использовать команду call screen с номером эк- рана. Вызванный экран отображается поверх текущего, т. е. как диалоговое окно (так называемый всплы- вающий жран). По завершении работы в вызванном экране система обрабатывает оператор, следующий за командой screen, согласно логике работы вызывающих экранов. Подробно данная технология описывается в главе 22. Завершение примера приложения ДЛЯ второго экрана используется следующая логика работы: Модуль init_booking задает заголовок и статус экрана и инициализирует экранные поля seats_free, и customers-name. Последнее поле, вместе со всеми полями рабочей области таблицы customers, очищается оператором customers. В этом примере все модули типа РВО также выполняются после того, как пользователь нажмет на клавишу Enter. Поэтому данные, введенные в поля и customer-name, не следует изменять, если реальный экран вводится повторно. Глобальный флаг fiag_keep_input используется для пометки того, что введенная информация должна быть сохранена. Модуль action_booking типа PAI выполняет операции заказа билета на рейс и возвращает пользователя к первому экрану. 228 Глава 19 leave Подпрограмма производит основные операции заказу билета: Проверяет наличие свободных мест 2. Проверяет, разрешена ли работа с данным клиентом 3. Изменяет таблицу booking 4. Изменяет число занятых мест на рейс в таблице 5. Выводит на экран информационное сообщение Исходный текст подпрограммы flight_booking: Определение пользовательского интерфейса 229 Для вычисления регистрационного номера заказа используется отдельная подпрограмма Если фамилия клиента не определяет его однозначно, то необходимо предусмотреть другое диало- говое окно. Для уточнения идентификатора клиента можно использовать вторую часть формы flight_booking (предусмотренную в программе), Технология программирования дополнительного диалога описывается в главе 22. Модули, включенные в логику работы, имеют такую же структуру, что и подпрограммы, определяемые с помощью конструкции Они могут вызываться из разных экранов и использоваться для проверки одинаковых данных, вводимых пользователем на разных экранах. Обмен данными между экраном и модулями программы АВАР/4 осуществляется через общие области данных, т.е. через глобальные переменные (объявленные как данные), и рабочие области таблиц (объявленные как таблицы). Таким образом, обсуждаемая программа удовлетворяет большинству требований. В следующих раз- делах показывается, как определять кнопки и функции меню, а также описываются способы прерывания отображения последовательности экранов (например, в случае, если при выходе из экрана регистрации без ввода каких-либо данных должен появиться первый экран). Кроме того, обсуждаются различные методы вызова всплывающих окон. Построение статусов GUI и заголовков Статус GUI описывает элементы линейки меню и кнопки инструментальной линейки, расположен- ной ниже основной линейки меню. Заголовок GUI определяет заголовок экрана. Текст для элементов статуса GUI и для заголовков появляется на экране на том языке, который пользователь задает при регистрации в системе. Этот текст автоматически переводится на разные языки, и разработчику не нужно вносить изменения в исходный текст программы. Статус GUI можно определить на экране Object Browser с помощью экранной кнопки Create. После щелчка мышью на Create появляется диалоговое окно, в котором нужно выбрать объект типа GUI Status, ввести имя статуса и его атрибуты, как показано на рис 19.15. В учебном примере для статуса REQUEST первого экрана выбирается тип Screen, так как в данном случае используется полный экран. Статус типа List используется для списков отчетов (см. главу 17). Другие типы статусов обсуждаются в главе 22. Задание меню Функции меню и экранные кнопки можно задать на экране, приведенном на рис 19.16, используя атрибуты статуса. В верхней строке следует ввести краткий поясняющий текст, относящийся ко всей линейке меню. Пользователь может выбрать стандартные меню системы, щелкнув мышью на символе слева от Display Standard (см. рис. 19.17). Для того чтобы добавить или убрать элементы меню, нужно двойным щелчком мыши вывести на экран необходимые меню или "свернуть" их. 230 Глава 19 Рис. 19.15 Построение статуса GUI для первого экрана учебной программы туристического агентства Рис. 19.16 Задание атрибутов статуса GUI для экрана учебного примере Как правило, первое меню используется для таких операций с текущими объектами, как Create (со- здание), Change (изменение), Save (сохранение) и Delete (удаление). В данном примере первое меню носит название Flight Connection. Можно использовать и другие меню: Edit (редактирование). Goto (переход). Details (детали) и Environment (окружение). В примере нам необходимо только меню Goto в дополнение к Flight Connection. Для удаления меню нужно щелкнуть мышью на экранной кнопке Cut. В программе регистрации рейсов предусмотрены следующие функции: Назначение Код функции REQU BOOK CLEA BACK EXIT Запрос информации о маршруте авиарейса Заказ билетов на рейсы Удаление текущей введенной информации Возврат к предыдущему экрану Выход из программы Определение пользовательского интерфейса 231 Рис. 19.17 Элементы стандартного меню, предлагаемые системой для рассматриваемого статуса Для определения функции меню нужно задать код функции в левой колонке и краткий текст в пра- вой колонке меню на экране сопровождения статуса GUI (см. рис. 19.18). Так как операция регистрации заказов выполняется на втором экране, первый экран необходимо сделать неактивным. Для чтобы сделать неактивной функцию меню в статусе, нужно щелкнуть мышью на кнопке Active <-> Inactive на экране статуса GUI. Неактивные функции отличаются от актив- ных цветом. Меню с несколькими функциями будет более наглядным, если в него добавить одну или несколько разделяющих строк с помощью последовательности элементов меню Edit Insert (вста- вить) Separator (разделяющая строка). В разделе " Атрибуты элементов представлено, как коды функций применяются для описания действий пользователя в прикладной программе. Если во время выполнения пользователь выбирает функ- цию меню, то соответствующий функциональный код помещается в поле Code Field (например, fcode). Содержимое этого поля анализируется модулями типа PAI для определения реакции программы на действия пользователя. На практике функциональные коды определяются в программе как константы. Рис. 19.18 Определение функций для меню Flight Connection (информация о маршруте авиарейса) 232 Глава 19 eque t fcode с v a l u e ' , t y p e u n o t i o n _ c o d e v a l u e ' BOOK' , t y p e v a l u e ' , t y p e f u n c t i o n _ c o d e v a l u e 'BACK' , t y p e f u n c t i o n _ c o d e v a l u e ' E X I T ' . Прежде чем в процессе выполнения программы статус GUI активным, его необходимо от- дельно сгенерировать, щелкнув мышью на экранной клавише Generate (на экране сопровождения ста- тусов GUI или на экране Object Browser). Следовательно, статус можно редактировать, и это не будет сказываться на программе. Статус экрана обычно задается в модуле РВО с помощью команды set за которой следует имя статуса. Система всегда использует последний установленный статус. Таким образом, если не переопределять статус события РВО на втором экране, то статус первого эк- рана можно использовать повторно. Функциональные клавиши и кнопки ДЛЯ быстрого доступа к функциям меню можно использовать связанные с элементами меню функ- циональные клавиши, клавиши клавиатуры и экранные кнопки инструментальной линейки. Если поль- зователь предпочитает мышь функциональным клавишам, то нужно связать экранную кнопку меню с функциональной клавишей. Например, в статусе REQUEST использованы экранные кнопки Request и Delete Input. Последняя кнопка входит в инструментальную линейку. Для того чтобы связать функциональный код REQU с функ- циональной клавишей F5, нужно ввести REQU в нужной строке фрейма Freely Assigned Function Keys и нажать Enter. Краткий текст Request будет вставлен автоматически, так как он уже был определен в меню информации о маршрутах авиарейса Flight Connection. Теперь, если во время выполнения про- граммы пользователь нажмет на правую кнопку мыши, текст описания появится на экране, независимо от положения курсора. Функциональные коды REQU и CLEA можно ввести в инструментальную линейку приложения, чтобы связать их с кнопками клавиатуры. Тогда система будет выводить на экран соответствующий краткий текст: Request и Delete Input (см. рис. 19.19). Можно также связать кнопку инструментальной линейки с функциональным кодом. Стандартные кла- виши инструментальной линейки для соответствующих кнопок клавиатуры задаются с помощью после- довательности More Utilities Propose Icons (допустимые пиктограммы). Добавить к кнопке текст можно с помощью переключателя Text. Если для экранной кнопки не находится подходящего обозна- чения среди предлагаемых по умолчанию, то с ней можно связать другую кнопку инструментальной линейки. Процесс связывания состоит из выбора соответствующей кнопки в инструментальной линейке Рис. 19.19 Определение функциональных клавиш и экранных кнопок для функциональных кодов и CLEA Определение пользовательского интерфейса 233 приложения и щелчка мышью на экранной кнопке Change Text Type (изменить тип текста). В следую- щем диалоговом окне задается тип текста. Экранная кнопка Choose Icon (выбор пиктограммы) позво- ляет получить диалоговое окно, на котором приводятся кнопки инструментальной линейки и сопровождающий текст (см. рис. 19.20). Рис. 19.20 Задание кнопки инструментальной линейки для функции CLEA Стандартная инструментальная линейка содержит стандартные кнопки. Например, при разработке статуса GUI отчета для некоторых кнопок инструментальной линейки уже были заданы функциональ- ные коды, используемые во время выполнения программы для навигации и прокрутки экрана (см. главу 17). Для некоторых типов статусов привязка функциональных кодов автоматически не выполня- ется. Если необходимо активизировать кнопку стандартной инструментальной линейки, нужно задать функциональный код и описать соответствующие операции в модуле типа PAI. Например, переход назад (к предыдущему экрану) осуществляется с помощью команд set screen (установить экран) и leave screen (убрать экран) при условии, что статус GUI не относится к типу List. Управление переходами между экранами описано в разделе "События process after input". Этот раздел описывает построение отдельных функций меню и кнопок и работу с ними. Обзор функциональных кодов для всех статусов GUI разрабатываемой программы содержится в функциональ- ном списке, доступ к котором)' можно получить на экране сопровождения статусов GUI, используя пос- ледовательность элементов экрана Goto Function List (список функций). Двойной щелчок мыши позволяет изменять любую функцию этого списка. Один функциональный код может использоваться в различных статусах. один статус GUI может применяться для операций изменения данных, второй — только для вывода (когда все функции изменения видны на экране, но неактивны). Разрешить или запретить доступ к функциям текущего статуса можно с помощью элементов меню Function Activation (активизация функции) In Current Status (в текущем GUI). Определение заголовка GUI Заголовок GUI определяет заголовок экрана. Задать его можно щелкнув мышью на кнопке Create на экране Object Browser. Затем нужно выбрать объект типа GUI Title (заголовок GUI), ввести имя заго- ловка и его текст, как показано на рис. 19.21. В данном примере вводится текст Flight booking: Inquiry for flight connection (заказ билетов рейс: запрос информации о маршруте авиарейса). Заголовок экрана обычно устанавливается в модуле с помощью команды set за которой следует имя заголовка. Система всегда использует последний заданный заголовок так же, как и послед- ний установленный статус GUI. Модуль РВО для первого экрана учебного примера: module I n i t i a l i z e t i t l e b a r and s t a t u s s e t t i t l e b a r с t i t l e r e q u e s t . 234 Глава 19 Рис. 19.21 Построение заголовка GUI для первого экрана программы туристического агентства В этом соблюдается соглашение о том, что для статусов и заголовков GUI в программе используются объявленные константы. Тем не менее, можно использовать и литералы: module I n i t i a l i z e t i t l e b a r s t a t u s s e t t i t l e b a r 'REQUEST' . Резюме • Каждый экран размещением экранных элементов и логикой работы и связан с управляющей программой АВАР/4. • Экранные элементы размещаются и перемещаются с помощью мыши. Они выбираются из линейки или словаря Dictionary. • Логика работы задается событиями process before output process after input process on help request и process on value request. • При обработке каждого события вызываются модули управляющей программы. Модули могут быть связаны с полями или с группой полей (ключевые слова fields и chain/endchain). • Переходы между экранами обеспечиваются командами screen и call screen. Завершить работу в текущем экране можно с помощью команды leave screen. • Статус GUI включает меню, функции меню, кнопки инструментальной линейки, экранные кнопки и функциональные клавиши. В программе статус задается с помощью команды • При выполнении программы любое действие пользователя автоматически преобразуется в функ- циональный код статуса GUI. Код передается в моле OK Code Field текущего экрана. Управляю- щая программа обрабатывает этот функциональный код по событию process after input (PAI). • Заголовок GUI соответствует заголовку экрана и задается в программе с помощью команды set titlebar. • Тексты экранов, статусов GUI и заголовков могут выводиться на экран на разных языках. Перевод осуществляется автоматически без изменения исходного текста программы. В следующей главе рассматриваются способы вывода диалоговых окон с сообщениями при вводе пользователем недопустимой информации. |