BC400_RU_ECC_2005
.pdfBC400 |
Урок: Экран |
Экранные кнопки
Рисунок 169: Уровень выполнения 3: внедрение экранных кнопок
В третьем шаге данного примера внедряются различные кнопки, и программа конфигурируется для выполнения соответствующей обработки операций пользователя:
•Путем нажатия кнопки Назад пользователь может вернуться к основному списку без сохранения изменений в таблице базы данных. В строке статусов основного списка появится следующее сообщение: “Выход из экрана без сохранения”.
•Путем нажатия кнопки Сохранить пользователь может сохранить изменения в базе данных и вернуться к основному списку с выводом соответствующего сообщения в строке статусов. (Обновление базы данных в программе пока не внедрено. Однако для этого уже имеется соответствующая кнопка.)
•Для повторного отображения экрана пользователь нажимает кнопку
Enter.
В настоящем разделе рассматривается следующее:
•логика выполнения экрана в блоках обработки PBO и PAI;
•модули PBO и PAI как блоки обработки соответствующих событий;
•внедрение экранных кнопок и анализ операций пользователя.
|
© 2006 г. SAP AG All rights reserved. Авторские |
291 |
06-04-2006 |
права защищены. |
Глава 9: Диалоги пользователя |
BC400 |
Рисунок 170: Схема выбора экранной кнопки
При нажатии кнопки пользователем исполняющая система копирует присвоенный код функции в специальное поле экрана (типа "OK"). Это поле экрана, как правило, имеет имя ok_code.
Содержимое этого специального поля экрана автоматически переносится при наличии в пределах программы объекта данных с таким же именем. После этого инициируется обработка PAI, в течение которой при помощи перенесенного в программу кода функции собирается информация об операции пользователя и выполняется соответствующая обработка.
В следующих разделах описываются способы определения экранных кнопок, использующих специальное поле экрана типа "OK", описания объекта данных с таким же именем в программе и внедрения реакции на соответствующую операцию пользователя.
292 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Экран |
Рисунок 171: Определение экранных кнопок и присвоение кодов функций
На приведенном выше рисунке показан процесс определения кнопок в графическом редакторе экранов. Каждой кнопке необходимо присвоить имя и код функции. Для этого выполняется ведение атрибутов поля.
Рисунок 172: Внедрение переноса кода функции
|
© 2006 г. SAP AG All rights reserved. Авторские |
293 |
06-04-2006 |
права защищены. |
Глава 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.
|
© 2006 г. SAP AG All rights reserved. Авторские |
295 |
06-04-2006 |
права защищены. |
Глава 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: Следующий экран: “тот же экран” (результат)
|
© 2006 г. SAP AG All rights reserved. Авторские |
297 |
06-04-2006 |
права защищены. |
Глава 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 ) программа реагирует так же, как и при выборе Назад, но с выводом другого сообщения в основном списке. На одном из следующих уроков программа будет расширена путем добавления возможности изменения записей данных в базе данных.
|
© 2006 г. SAP AG All rights reserved. Авторские |
299 |
06-04-2006 |
права защищены. |
Глава 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 |