Руководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594
Скачать 38.91 Mb.
|
Глава 9: Диалоги пользователя BC400 Специальное экранное поле, в котором в программу переносится соответствующий код функции, называется полем команды и отображается на экране по умолчанию. Для получения возможности использования этого поля необходимо присвоить ему определенное имя. В большинстве случаев этому полю присваивается имя OK_CODE. Внутренний программный объект данных описывается с использованием этого же имени путем присвоения соответствующего типа системному полю sy-ucomm (см. рисунок выше). Рисунок 173: Архитектура выполнения для управления последовательностью экранов Оператор CALL SCREEN используется для инициирования обработки экрана. Эта обработка включает в себя следующие шаги (выполняются автоматически): Обработка PBO На стадии подготовки к выводу экрана осуществляется последовательная обработка PBO-модулей, перечисленные в блоке PBO. Перенос поля из программы в экран После обработки PBO содержимое полей структуры TABLES переносится в экранные поля с такими же именами. Вывод экрана Экран с присвоенными значениями отправляется на сервер презентации (SAPGUI) и выводится для просмотра пользователем. 294 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Перенос поля из экрана в программу Каждая операция пользователя на экране инициирует перенос содержимого полей в поля с теми же именами в структуре TABLES. Обработка PAI В качестве реакции на выполнение операции пользователя осуществляется последовательная обработка модулей, перечисленных в PAI. Модули являются блоками исходного текста без интерфейса. Они вводятся при помощи операторов ABAP MODULE и ENDMODULE. Для каждой субфункции в PBO или PAI должен быть внедрен соответствующий модуль. Внимание: Логика выполнения экрана (PBO/PAI) содержит только ссылки на модули, внедренные в программе и состоящие из операторов ABAP. Исходный текст ABAP невозможно сохранить непосредственно в логике выполнения. Рисунок 174: Анализ кода функции в событии PAI На рисунке выше показана реакция программы на операцию пользователя. Соответствующий код функции, перенесенный в поле OK_CODE, анализируется непосредственно перед обработкой PAI. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 295 Глава 9: Диалоги пользователя BC400 Как правило, модуль с основной обработкой в PAI имеет имя USER_COMMAND_nnnn, где nnnn обозначает номер экрана. Рекомендация: В модуле может осуществляться доступ ко всем глобальным объектам данных программы. Переменные, определяемые в пределах модуля, всегда являются глобальными. Рисунок 175: Создание модулей с использованием навигации вперед Имеется два способа создания модуля: С использованием навигации вперед из логики выполнения Для создания соответствующего модуля из логики выполнения экрана дважды щелкните по ссылке на модуль (см. рисунок выше). С использованием области навигации навигатора по объектам Можно также создать модуль из списка объектов программы. Для этого используется контекстного меню программы. В этом случае необходимо помнить о том, что в логику выполнения экрана должна быть включена соответствующая ссылка на новый модуль. Модуль может вызываться из логики выполнения нескольких экранов (возможность многократного использования). 296 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Учтите, что модули с MODULE ... OUTPUT являются PBO-модулями и могут быть вызваны только при помощи PBO экрана. Соответственно, PAI-модули, начинающиеся с текста MODULE ... INPUT , могут вызываться только в рамках PAI. Рисунок 176: Следующий экран 0 (результат) При вводе атрибута экрана “следующий экран =0 ” сначала завершается обработка этого экрана, а затем выполняется возврат к обработке c точки вызова экрана. Рисунок 177: Следующий экран: “тот же экран” (результат) 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 297 Глава 9: Диалоги пользователя BC400 Если в качестве следующего экрана введен номер текущего экрана, то после закрытия его обработка выполняется повторно. Рисунок 178: Динамическая перезапись следующего экрана по умолчанию ABAP-оператор SET SCREEN из модуля (как правило, PAI-модуля) используется для динамической перезаписи следующего экрана по умолчанию, указанного в атрибутах экрана (см. рисунок выше). Это позволяет внедрить следующий стандарт SAP: при нажатии Enter выполняется возврат к тому же экрану; для перехода к другим экранам используются только другие кнопки. Для этого следует ввести в качестве следующего экрана номер текущего экрана (следующий экран по умолчанию) и разрешить переход к другим экранам (с использованием команды SET SCREEN) только из PAI при выборе определенных кнопок. (По умолчанию при нажатии Enter код функции не вставляется в поле команды на экране). Следовательно, в программу в качестве кода функции переносится начальное значение поля (пробел). Примечание: При повторной обработке того же экрана все PBO-модули выполняются повторно. При необходимости заполнения структуры TABLES в PBO-модуле следует убедиться в том, что изменения данных, внесенные пользователем, не перезаписываются на экране при повторном вызове модуля. 298 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Рисунок 179: Пример синтаксиса: анализ кодов функций В этом примере используются две экранные кнопки: • При выборе Назад (код функции BACK) для следующего экрана автоматически устанавливается значение "0", и происходит возврат к точке вызова экрана. В данном случае это означает возврат к основному списку, поскольку экран передается в блоке AT LINE-SELECTION без генерации вторичного списка. На следующем экране в строке статусов появится сообщение 057, поскольку экран был передан с типом "S". • При выборе Сохранить (код функции SAVE ) программа реагирует так же, как и при выборе Назад, но с выводом другого сообщения в основном списке. На одном из следующих уроков программа будет расширена путем добавления возможности изменения записей данных в базе данных. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 299 Глава 9: Диалоги пользователя BC400 Рисунок 180: Случайный перенос кода функции В разделе ниже приведено описание отдельного сценария с целью пояснения необходимости выполнения еще одного шага программы. При выборе пользователем строки основного списка появляется экран изменения соответствующих данных. После изменения данных на экране и выбора Сохранить пользователь возвращается к основному списку, а изменения передаются в базу данных. Если после этого пользователь выбирает новую запись, то при нажатии Enter повторная обработка экрана не выполняется, а вместо этого в базе данных выполняется операция сохранения с последующим возвратом пользователя к основному списку. Почему? При сохранении данных пользователем код функции "SAVE" переносится в переменную ok_code программы. При вызове экрана во второй раз (после повторного выбора строки) в экран переносится содержимое поля PBO. Поскольку переменная ok_code все еще содержит значение "SAVE", выполняется перенос в поле команды экрана. При нажатии Enter (что по умолчанию не приводит к вставке кода функции в поле команды, а только инициирует перенос поля из экрана в программу, в том числе обработку PAI) некорректный код функции "SAVE", который все еще находится в поле команды, переносится во внутреннюю переменную ok_code и анализируется в PAI: 300 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Рисунок 181: Предотвращение случайных кодов функций Для устранения описанной выше нежелательной реакции программы необходимо обеспечить отсутствие случайно перенесенных кодов функций в экранном поле команды. Для этого имеется две возможности: • инициализация внутренней переменной ok_code в PBO-модуле перед переносом поля на экран; • добавление вспомогательного поля в обработку PAI, копирование в это поле значение переменной ok_code и немедленная инициализация ok_code. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 301 Глава 9: Диалоги пользователя BC400 302 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Упражнение 14: Создание и вызов экрана Цели упражнения Выполнив это упражнение, вы сможете • создавать экраны • вызывать существующие экраны из программы Практический пример Программа SAPBC400UDT_DYNPRO позволяет просмотреть все бронирования одним турагентством в виде списка. Эту программу необходимо расширить следующим образом: При двойном щелчке по строке появляется экран, содержащий поля просмотра и ввода для соответствующей записи бронирования. После каждой операции пользователя на экране программа осуществляется возврат к основному списку. Задание 1: Создание и вызов экрана 1. Скопируйте шаблон SAPBC400UDT_DYNPRO в новую программу ZBC400_##_DYNPRO_1. 2. Ознакомьтесь с программой. Протестируйте программу с использованием номера турагентства 1##, где ## является номером группы. 3. Измените программу так, чтобы при выборе пользователем строки из основного списка (двойным щелчком или при помощи F2) вызывался экран. Создайте этот экран (номер экрана 100) с использованием навигации вперед. 4. При указании атрибутов присвойте номер экрана 0 в качестве номера следующего экрана для обеспечения возврата пользователя к основному списку после выполнения любой операции на экране 100. Задание 2: Размещение и ведение элементов экрана 1. Создайте на экране поля ввода/вывода для данных бронирования. Для присвоения типов полей используйте структуру SDYN_BOOK ABAP-словаря. Необходимо включить следующие поля: Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 303 Глава 9: Диалоги пользователя BC400 Ключевые поля таблицы бронирования CARRID, CONNID, FLDATE и BOOKID необходимо скопировать вместе с названиями полей. Это относится и к полям CUSTOMID (номер клиента) и LOCCURAM (сумма). Поле LOCCURKEY (код валюты) необходимо скопировать без названия поля. Оно появляется справа от поля суммы. 2. Выполните ведение атрибутов элементов экрана: Поля CARRID, CONNID, FLDATE, BOOKID и CUSTOMID должны отображаться как поля вывода (атрибут Поле вывода). В поле LOCCURAM соответствующее значение из программы должно отображаться как изменяемое (атрибуты Поле ввода + Поле вывода). Поле кода валюты LOCCURKEY должно отображаться как неизменяемое поле только для просмотра без “рамки поля” (атрибут Только вывод). 304 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Решение 14: Создание и вызов экрана Задание 1: Создание и вызов экрана 1. Скопируйте шаблон SAPBC400UDT_DYNPRO в новую программу ZBC400_##_DYNPRO_1. a) Этот шаг выполняется в соответствии с обычной процедурой. 2. Ознакомьтесь с программой. Протестируйте программу с использованием номера турагентства 1##, где ## является номером группы. a) Этот шаг выполняется в соответствии с обычной процедурой. 3. Измените программу так, чтобы при выборе пользователем строки из основного списка (двойным щелчком или при помощи F2) вызывался экран. Создайте этот экран (номер экрана 100) с использованием навигации вперед. a) См. выдержку из исходного текста в примере решения. b) Создайте экран с использованием навигации вперед: дважды щелкните по значению 100 в операторе CALL SCREEN 100.. 4. При указании атрибутов присвойте номер экрана 0 в качестве номера следующего экрана для обеспечения возврата пользователя к основному списку после выполнения любой операции на экране 100. a) Выполните ведение атрибутов экрана в соответствии с требованиями. Задание 2: Размещение и ведение элементов экрана 1. Создайте на экране поля ввода/вывода для данных бронирования. Для присвоения типов полей используйте структуру SDYN_BOOK ABAP-словаря. Необходимо включить следующие поля: Ключевые поля таблицы бронирования CARRID, CONNID, FLDATE и BOOKID необходимо скопировать вместе с названиями полей. Это относится и к полям CUSTOMID (номер клиента) и LOCCURAM (сумма). Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 305 Глава 9: Диалоги пользователя BC400 Поле LOCCURKEY (код валюты) необходимо скопировать без названия поля. Оно появляется справа от поля суммы. a) Перейдите к графическому редактору форматов. b) Используйте ключ Словарь/Программа. c) Введите SDYN_BOOK. d) Нажмите кнопку Вызов из словаря. e) Выберите требуемые поля. f) Для поля “LOCCURKEY” выберите опцию без текста. g) Для подтверждения нажмите Enter и перетащите эти поля на экран. 2. Выполните ведение атрибутов элементов экрана: Поля CARRID, CONNID, FLDATE, BOOKID и CUSTOMID должны отображаться как поля вывода (атрибут Поле вывода). В поле LOCCURAM соответствующее значение из программы должно отображаться как изменяемое (атрибуты Поле ввода + Поле вывода). Продолжение на следующей странице 306 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Поле кода валюты LOCCURKEY должно отображаться как неизменяемое поле только для просмотра без “рамки поля” (атрибут Только вывод). a) Для перехода к атрибутам поля дважды щелкните по элементу экрана или используйте кнопку Список элементов. Результат Выдержка из исходного текста: SAPBC400UDS_DYNPRO_1 REPORT sapbc400uds_dynpro_1. CONSTANTS actvt_display TYPE activ_auth VALUE ’03’. PARAMETERS pa_anum TYPE sbook-agencynum. * workarea for SELECT DATA wa_sbook TYPE sbook. START-OF-SELECTION. SELECT carrid connid fldate bookid FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook WHERE agencynum = pa_anum. AUTHORITY-CHECK OBJECT ’S_CARRID’ ID ’CARRID’ FIELD wa_sbook-carrid ID ’ACTVT’ FIELD actvt_display. IF sy-subrc = 0. WRITE: / wa_sbook-carrid COLOR col_key, wa_sbook-connid COLOR col_key, wa_sbook-fldate COLOR col_key, wa_sbook-bookid COLOR col_key, ENDIF. ENDSELECT. AT LINE-SELECTION. CALL SCREEN 100. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 307 Глава 9: Диалоги пользователя BC400 308 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Упражнение 15: Экраны: перенос данных Цели упражнения Выполнив это упражнение, вы сможете • заполнять поля экрана данными из программы Практический пример Экран программы ZBC400_##_DYNPRO должен отображать подробные данные выбранной записи бронирования. Необходимо обеспечить возможность изменения данных пользователем в программе после выхода из экрана. Задание 1: Подготовка 1. Расширьте программу ZBC400_##_DYNPRO_1 или скопируйте шаблон SAPBC400UDS_DYNPRO_1 с присвоением ему нового имени ZBC400_##_DYNPRO_2 для дальнейшей обработки. 2. Для создания рабочей области в программе используйте оператор TABLES. Эта рабочая область будет использоваться в качестве интерфейса экрана. Она должна иметь то же имя, что и структура, используемая на экране. 3. Проверьте доступность ключевых полей выбранной записи бронирования при выборе пользователем строки основного списка (HIDE). Задание 2: Проверка полномочий и сбор данных перед вызовом экрана 1. Требуется изменить программу для обеспечения возможности изменения данных в базе данных. Проверьте, что обработка экрана возможна только при наличии у пользователя полномочий на изменение данных выбранной авиакомпании. Если пользователь не имеет полномочий, выполняется возврат к основному списку с выводом сообщения 047 класса BC400. Используется вид сообщения "S". При наличии у пользователя необходимых полномочий выполняется считывание выбранных записей (всех полей) из таблицы базы данных SBOOK в рабочей области wa_sbook. При этом единичном доступе Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 309 Глава 9: Диалоги пользователя BC400 также осуществляется сбор информации об отсутствующих данных бронирования и проверка актуальности данных, доступных для вывода на экран. 2. Непосредственно перед вызовом экрана соответствующие данные копируются из wa_sbook в рабочую область TABLES для их автоматического переноса в экран. 310 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран Решение 15: Экраны: перенос данных Задание 1: Подготовка 1. Расширьте программу ZBC400_##_DYNPRO_1 или скопируйте шаблон SAPBC400UDS_DYNPRO_1 с присвоением ему нового имени ZBC400_##_DYNPRO_2 для дальнейшей обработки. a) Этот шаг выполняется в соответствии с обычной процедурой. 2. Для создания рабочей области в программе используйте оператор TABLES. Эта рабочая область будет использоваться в качестве интерфейса экрана. Она должна иметь то же имя, что и структура, используемая на экране. a) Этот шаг выполняется в соответствии с обычной процедурой. 3. Проверьте доступность ключевых полей выбранной записи бронирования при выборе пользователем строки основного списка (HIDE). a) См. выдержку из исходного текста в примере решения. Задание 2: Проверка полномочий и сбор данных перед вызовом экрана 1. Требуется изменить программу для обеспечения возможности изменения данных в базе данных. Проверьте, что обработка экрана возможна только при наличии у пользователя полномочий на изменение данных выбранной авиакомпании. Если пользователь не имеет полномочий, выполняется возврат к основному списку с выводом сообщения 047 класса BC400. Используется вид сообщения "S". При наличии у пользователя необходимых полномочий выполняется считывание выбранных записей (всех полей) из таблицы базы данных SBOOK в рабочей области wa_sbook. При этом единичном доступе также осуществляется сбор информации об отсутствующих данных бронирования и проверка актуальности данных, доступных для вывода на экран. a) См. выдержку из исходного текста в примере решения. 2. Непосредственно перед вызовом экрана соответствующие данные копируются из wa_sbook в рабочую область TABLES для их автоматического переноса в экран. a) См. выдержку из исходного текста в примере решения. Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 311 |