Читайте также:
|
|
ELSE.
WRITE: ’No ’, pa_car, ’flights found!’. ENDIF.
WHEN OTHERS. " User is not authorized
WRITE: / ’Authority-Check Error’(001). ENDCASE.
*&--------------------------------------------------------------*
*& Form WRITE_LIST
*&--------------------------------------------------------------*
* --> P_IT_FLIGHT
*---------------------------------------------------------------*
FORM write_list USING p_it_flight TYPE sbc400_t_sbc400focc.
DATA wa LIKE LINE OF p_it_flight. LOOP AT p_it_flight INTO wa.
Продолжение на следующей странице
WRITE: / wa-carrid COLOR COL_KEY, wa-connid COLOR COL_KEY, wa-fldate COLOR COL_KEY, wa-seatsocc,
wa-seatsmax,
Wa-percentage, ’%’.
ENDLOOP.
ENDFORM. " WRITE_LIST
Резюмепоуроку
Теперь вы сможете:
• определять подпрограммы
• вызывать подпрограммы
• анализировать процесс выполнения подпрограмм в режиме отладки
Резюмепоглаве
Теперь вы сможете:
• определять подпрограммы
• вызывать подпрограммы
• анализировать процесс выполнения подпрограмм в режиме отладки
Дополнительная информация
... См. онлайн-документацию к соответствующим ABAP-операторам.
Глава 8
Введение в события ABAP
Обзор главы
См. резюме по урокам в рамках этого раздела.
Прослушав эту главу, вы сможете
• описывать управляемую событием обработку исполняемой
ABAP-программы
• перечислять наиболее важные базовые события и пояснять цель их использования
• использовать наиболее важные базовые события
Содержание главы
Урок: ABAP-события..........................................................222
Урок: ABAP-события
Обзор урока
На этом уроке описывается обработка исполняемой ABAP-программы на основе событий. Также рассматриваются наиболее важные базовые события, цели их использования и возможность применения в программах.
Целиурока
Прослушав этот урок, вы сможете
• описывать управляемую событием обработку исполняемой
ABAP-программы
• перечислять наиболее важные базовые события и пояснять цель их использования
• использовать наиболее важные базовые события
Практический пример
Экран выбора должен динамически (т. е. в зависимости от ситуации)
заполняться значениями по умолчанию.
Цели и способы использования ABAP-событий
Рисунок 125: Структуры и процедуры исполняемой ABAP-программы
При запуске ABAP-программы все глобальные объекты данных программ сначала создаются в рабочей памяти (присвоение памяти). После этого исполняющая система последовательно инициирует различные события. Если для инициированного события в программе существует блок обработки, то последовательно выполняются операторы этого блока.
На рисунке выше показаны базовые события, последовательность, в которой они инициируются, а также внедрение соответствующих блоков обработки в программу. Исполняемая ABAP-программа является
совокупностью блоков обработки, которые выполняются при возникновении
соответствующих событий.
Результаты, полученные операторами WRITE, сначала сохраняются в буферах списков и отображаются на экране в виде списка только после завершения обработки блока START-OF-SELECTION.
Если в блоке INITIALIZATION переменным PARAMETERS присваиваются значения, то при отображении экрана выбора они выводятся в полях ввода как (изменяемые) значения по умолчанию. При помощи дополнения DEFAULT можно задать значение по умолчанию для соответствующего поля ввода в определении PARAMETERS. Однако вышеописанное присвоение значений
в блоке INITIALIZATIONможет использоваться для присвоения другого
значения по умолчанию (динамическое предварительное заполнение
экрана выбора) динамическим способом (т. е. в зависимости от ситуации).
На следующем рисунке показан пример программы с таким присвоением.
Если пользователь с помощью кнопки F8 подтверждает данные на экране выбора, то введенные им значения переносятся в соответствующие внутренние программные переменные PARAMETERS, и инициируется событие AT SELECTION-SCREEN. Таким образом, соответствующий блок обработки может использоваться для проверки ввода или полномочий. Вывод сообщения типа "E" в этом блоке события (например, в случае отсутствия у пользователя необходимых полномочий) приведет к повторному выводу экрана выбора с сообщением об ошибке (что позволит повторить ввод данных). Эта процедура описывается более подробно на уроке, посвященном “ экрану выбора ”.
Если сообщение об ошибке в блоке AT SELECTION-SCREEN не выводится, то событие START-OF-SELECTION инициируется в качестве последующего события. В этом случае основная обработка программы должна происходить в соответствующем блоке обработки.
Рисунок 127: Пример программы
В этом примере показан экран выбора с полем ввода даты. При обычных обстоятельствах в качестве значения по умолчанию подставляется текущая дата (DEFAULT sy-datum). Однако при определенных условиях (IF) в качестве значения по умолчанию должна выводиться дата, соответствующая тому же дню следующей недели (pa_date = pa_date + 7.).
На рисунке выше также показана реакция исполняющей системы в случае отсутствия блока обработки. Событие не приводит к выполнению
каких-либо операторов, и сразу же инициируется следующее событие.
Блоки обработки не могут быть вложенными, поскольку это противоречит концепции ABAP-событий.
Как было указано ранее, при отсутствии блока обработки какие-либо операторы не выполняются, и сразу же инициируется следующее событие.
Управление инициированием событий и выполнением блоков обработки осуществляется исполняющей системой ABAP. Поэтому последовательность размещения блоков событий в программе не имеет значения.
Если блоки в программу не внедрены, то все операторы неявно присваиваются стандартному блоку события START-OF-SELECTION. Это также является причиной выполнимости программ, представленных в предыдущих разделах настоящего курса.
Кроме уже описанных базовых событий для исполняемых программ, существуют и другие события, используемые для решения различных задач. Например, существует событие AT LINE-SELECTION, которое
инициируется двойным щелчком пользователя по списку. Это событие может
использоваться, например, для вывода подробной информации по выбранной строке списка. Эта процедура описывается более подробно на уроке, посвященном “ спискам ”. Для получения дополнительной информации по “событиям” см. документацию ABAP.
На рисунке ниже представлена общая структура исполняемой
ABAP-программы.
В дополнение к уже описанным блокам событий, в программу можно внедрить другие блоки обработки. Например, подпрограмма (FORM... ENDFORM.) представляет собой блок, выполняемый при возникновении “события”, инициируемого выражением PERFORM.
При необходимости вывода экрана для пользователя, эта операция должна быть определена в программе заранее. Помимо формата, также требуется внедрить т.н. логику выполнения экрана. В ней определяются те внутренние программные блоки обработки (модули), которые должны быть выполнены на стадии подготовки к выводу экрана (например, считывание данных, которые должны отображаться на экране) или являться результатом операций, производимых пользователем на экране. Эти блоки называются обработкой экрана перед выводом (PBO) или обработкой после ввода (PAI). Эти процессы формируют логику выполнения экрана. Логика выполнения не содержит непосредственно ABAP-операторов, но в ней имеются ссылки на модули, включенные в программу в форме блоков обработки (MODULE... ENDMODULE.). Программирование экрана рассматривается более подробно на другом уроке.
Резюмепоуроку
Теперь вы сможете:
• описывать управляемую событием обработку исполняемой
ABAP-программы
• перечислять наиболее важные базовые события и пояснять цель их использования
• использовать наиболее важные базовые события
Резюмепоглаве
Теперь вы сможете:
• описывать управляемую событием обработку исполняемой
ABAP-программы
• перечислять наиболее важные базовые события и пояснять цель их использования
• использовать наиболее важные базовые события
Дополнительная информация
... См. статью “Блоки событий” в онлайн-документации и документацию по ключевым словам для соответствующего ABAP-оператора.
Глава 9
Диалоги пользователя
Обзор главы
См. цели отдельных уроков в рамках этого раздела.
Прослушав эту главу, вы сможете
• описывать атрибуты и преимущества ABAP-списков
• внедрять заголовки списков и столбцов
• внедрять многоуровневые списки
• внедрять интерактивные списки
• описывать свойства и преимущества экранов выбора
• внедрять опции ограничения выбора данных на экране выбора
• внедрять проверку ввода и полномочий с выводом диалога при обнаружении ошибок на экране выбора
• перечислять атрибуты экранов и пояснять преимущества их использования
• внедрять простые экраны с полями ввода и вывода и экранными кнопками, а также вызывать их из соответствующей программы
• пояснять и внедрять внутреннюю программную обработку для вызовов экранов
• внедрять GUI-заголовок
• внедрять GUI-статус (строка меню, символьная строка инструментов и строка кнопок) для списка и экрана
• выполнять ведение присвоения функциональных клавиш для экрана
Содержание главы
Урок: Списки....................................................................233
Упражнение 12: Списки..................................................247
Урок: Экран выбора...........................................................255
Упражнение 13: Экран выбора.........................................269
Урок: Экран.....................................................................275
Упражнение 14: Создание и вызов экрана...........................303
Упражнение 15: Экраны: перенос данных...........................309
Упражнение 16: Экраны: динамическое определение следующего экрана.......................................................................315
Урок: Интерфейс пользователя.............................................322
Упражнение 17: Создание интерфейса...............................335
Урок: Списки
Обзор урока
На этом уроке рассматриваются преимущества и различные функции ABAP-списка. Описывается внедрение процедуры, в рамках которой при двойном щелчке пользователя в основном списке на экран выводится вторичный список, содержащий информацию о той строке основного списка, которая была выбрана посредством щелчка (интерактивный список).
Целиурока
Прослушав этот урок, вы сможете
• описывать атрибуты и преимущества ABAP-списков
• внедрять заголовки списков и столбцов
• внедрять многоуровневые списки
• внедрять интерактивные списки
Практический пример
Необходимо написать программу, которая будет выводить специфичную для строки информацию во вторичном списке после выбора пользователем строки в основном списке.
Список
Рисунок 130: Возможности списков
Основной целью использования списка является вывод данных с минимальным программированием. В списках также учитываются особые требования к бизнес-данным:
• Списки могут быть созданы на нескольких языках: если доступен соответствующий перевод, тексты и заголовки отображаются на языке входа в систему.
• В списках могут содержаться денежные значения в требуемой валюте.
При программировании списка доступны следующие возможности:
• Экран: возможно добавление цветов и пиктограмм.
• Принтеры
• Интернет/интранет: возможно автоматическое преобразование в формат HTML.
• Сохранение: списки можно сохранить как в пределах SAP-системы, так и вне ее (например, для дальнейшей обработки с использованием программы электронных таблиц).
Стандартный GUI списка выполняет несколько функций:
Можно настроить интерфейс списка по умолчанию в соответствии с имеющимися требованиями при помощи редактора меню. Более подробная информация представлена на уроке, в котором описывается “ интерфейс пользователя ”.
В каждом списке содержится отдельная строка с заголовком списка и не более четырех строк с заголовками столбцов. Если заголовок списка не определен, то в качестве заголовка используется заголовок программы (краткое описание).
Перед начальным ведением заголовков сначала необходимо активировать программу. Затем следует создать список путем выполнения этой программы. После этого можно непосредственно выполнить ведение заголовков над списком путем выбора в меню Система → Список → Заголовок списка. При последующем запуске программы установленные заголовки будут появляться в списке автоматически.
При необходимости изменения установленного заголовка (последующее ведение) снова выполнять программу и генерировать список не требуется. Вместо этого в редакторе, в который была загружена программа, следует перейти к среде ведения, используемой для изменения заголовков, путем выбора Перейти к → Текстовые элементы → Заголовки списка.
Текстовые элементы программы, включая заголовки, могут быть переведены на различные языки. При выполнении программы пользователем соответствующие текстовые элементы автоматически отображаются на языке входа в систему, выбранном этим пользователем (автоматический выбор языка).
Для перевода текстовых элементов программы в ABAP-редакторе
выберите Перейти к → Перевод.
Символы текстовых переменных используются для форматирования текстов в теле списка на различных языках и автоматического выбора языка. Символ текстовой переменной состоит из трехзначного
буквенно-цифрового идентификатора xxx и переводимого текста. Как и заголовки, эти символы относятся к текстовым элементам программы. Существует два способа определения символов текстовых переменных для программы.
• в ABAP-редакторе выберите путь по меню Перейти к → Текстовые элементы → Символы текстовых переменных, либо
• определите символ текстовой переменной в исходном тексте с использованием синтаксиса, описанного ниже, и дважды щелкните по его идентификатору (навигация вперед).
В программе символ текстовой переменной вводится с использованием TEXT-xxx. При наличии соответствующего перевода (см. выше “перевод текстовых элементов”) в процессе выполнения текст вставляется на языке входа в систему пользователя.
Для более понятного определения символа текстовой переменной вместо
TEXT-xxx можно также использовать следующий синтаксис: ’...’(xxx)
. В этом примере ’...’должен являться текстом, соответствующим
символу текстовой переменной на исходном языке программы.
Рекомендация: Необходимо учесть, что текстовые элементы также должны быть активированы.
Рисунок 134: Создание основного списка
На рисунке выше показан процесс генерации основного списка, на основе которого затем будет создаваться вторичный список. Помимо оператора WRITE, для структурирования списка можно также использовать SKIP иULINE. Описание этих двух операторов см. в документации по ключевым словам ABAP.
При выборе основного списка путем двойного щелчка или нажатия функциональной клавиши F2 инициируется ABAP-событие AT
LINE-SELECTION. Если необходимо, чтобы список с требуемой подробной
информацией (интерактивный список) появлялся на экране сразу после того,
как он будет запрошен пользователем, его следует внедрить в программу в форме соответствующего блока обработки. В рамках этого блока может производиться считывание запрошенных пользователем данных и их вывод с использованием оператораWRITE. Вторичный список с выходными данными, которые “перезаписывают” данные из основного списка, генерируется автоматически. Путем нажатия кнопки с “зеленой стрелкой” или функциональной клавиши F3 можно вернуться к основному списку и выбрать другую строку.
Рекомендация: Если в программу внедрен блок AT LINE-SELECTION, то над списком появляется кнопка с изображением лупы. Выделение строки списка и последующее нажатие этой кнопки приведет к тому же результату, что и двойной щелчок по строке списка.
Событие AT LINE-SELECTION также может быть инициировано выбором строки во вторичном списке. Это означает, что в этом случае также выполняется соответствующий блок обработки в программе. Следовательно, для правильного выполнения в рамках блока должна существовать возможность определения того, в каком списке был произведен выбор текущей строки. Для этого можно использовать системное поле sy-lsind. В данном поле отображается текущий уровень списка: “0” для основного списка, “1” для первого вторичного списка и т. д. На рисунке выше показана функция поля sy-lsind и то, каким образом этому полю присваивается значение: каждый раз при выборе строки значение в поле sy-lsind автоматически увеличивается на одну единицу; при каждом возврате на предыдущий уровень списка sy-lsind уменьшается на одну единицу. Можно создать до 20 уровней списка.
Поле sy-lsind используется для управления обработкой в блоке AT LINE-SELECTION (например, с помощью оператора CASE).
Оператор WRITE всегда выполняется на текущем уровне списка.
Если при выборе строки в блоке AT LINE-SELECTION вторичный список не генерируется, то значение sy-lsind автоматически уменьшается на одну единицу. Затем на экране отображается тот уровень, на котором была выбрана строка.
Показанная выше программа-образец имеет следующую функцию:
• В основном списке выводится текст “ Основной список ” вместе с текущим значениемsy-lsind, равным нулю.
• При выборе строки основного списка во вторичном списке появляется текст “ 1-ый вторичный список ” с текущим значением sy-lsind, равным единице.
• При выборе строки из вторичного списка появляется второй вторичный список, в котором выводится текст “ 2-ой вторичный список ” с текущим значением sy-lsind, равным двум.
• При выборе строки во втором вторичном списке значение sy-lsind увеличивается до 3, но следующий вторичный список не создается. Поэтому значениеsy-lsind автоматически уменьшается на одну единицу, и на экране снова отображается второй вторичный список.
На рисунке выше показан пример программы, в которой используется основной и вторичный список:
• Направления авиаперелетов с подробными данными должны отображаться в основном списке. Они считываются из таблицы базы данных SPFLI.
• Во вторичном списке должно отображаться расписание рейсов для выбранного направления с соответствующими подробными данными. Они считываются из таблицы базы данных SFLIGHT.
Для выбора соответствующей информации для вторичного списка (после выбора строки в основном списке) выбранная строка или, по крайней мере, ключевые значения этой строки должны быть доступны для события AT LINE-SELECTION. Данная процедура показана на следующем рисунке.
Для получения доступа к ключевым значениям выбранной строки после выбора строки основного списка следует внедрить описанную ниже процедуру:
• Для каждой строки основного списка соответствующие ключевые значения хранятся в скрытой области в пределах программы.
• При выборе строки данные, скрытые для этой определенной строки,
снова становятся доступными.
Для сохранения специфичных для строки ключевых значений в скрытой области используется оператор HIDE (здесь: HIDE: wa_spfli-carrid, wa_spfli-connid.), который должен выполняться сразу после генерации каждой строки основного списка. После выбора строки соответствующие ключевые значения переносятся обратно в исходные
поля (здесь: wa_spfli-carrid и wa_spfli-connid), и инициируется событие AT LINE-SELECTION. Эта процедура показана на рисунке ниже.
Рекомендация: Предварительный вывод полей HIDE с помощью оператора WRITE не требуется. Это означает, что с помощью оператора HIDE для каждой строки основного списка можно также сохранить информацию, которая не появляется в основном списке,
в скрытой области. Поле HIDE может также являться “плоской”
структурой.
Рекомендация: В отличие от основных списков, вторичные списки не имеют фиксированных стандартных заголовков, поскольку эти заголовки могут присваиваться динамически. Следовательно, может возникнуть необходимость внедрения собственных заголовков с использованием операторов WRITE.
На следующем рисунке показан весь блок AT LINE-SELECTION программы-образца. В этом блоке данные (здесь: расписание рейсов) в основном считываются и выводятся с помощью скрытых значений, которые были перенесены обратно в исходные поля.
Рекомендация: Программа-образец имеет имя SAPBC400UDD_DETAIL_LIST и является компонентом пакета BC400.
Упражнение 12: Списки
Цели упражнения
Выполнив это упражнение, вы сможете
• внедрять в программу вторичные списки
Практический пример
При выборе пользователем строки основного списка на экране должен появляться вторичный список с подробной информацией.
Задание 1:
Подготовка к генерации вторичного списка
1. Скопируйте программу ZBC400_##_SELECT_SFLIGHT или соответствующий шаблон SAPBC400DDS_AUTHORITY_CHECK в новую программу ZBC400_##_DETAIL_LIST.
2. Убедитесь в том, что соответствующие ключевые значения для создания вторичного списка будут доступны в программе после выбора строки основного списка (даты рейса).
3. Для создания основного и вторичного списка в программу необходимо внедрить два функциональных блока.
Задание 2:
Создание вторичного списка
1. В первой строке вторичного списка выведите ключевую информацию из выбранного расписания рейсов. Ниже поместите горизонтальную линию и одну пустую строку.
2. Из таблицы базы данных SBOOK должны выбираться все записи о бронировании для выбранного расписания рейсов с последующим выводом во вторичном списке. Для вывода каждой записи о бронировании должны считываться только следующие поля:
BOOKID, CUSTOMID, CUSTTYPE, CLASS, ORDER_DATE, SMOKER, CANCELLED.
Продолжение на следующей странице
3. Дополнительно: Во вторичном списке выведите поля LOCCURAM и LOCCURKEY: для этого необходимо использовать дополнение CURRENCY к оператору WRITE, которое позволит проверить, что сумма LOCCURAM отформатирована согласно валюте LOCCURKEY.
Рекомендация:
WRITE: wa_sbook-loccuram
CURRENCY wa_sbook-loccurkey, wa_sbook-loccurkey.
4. Дополнительно: Выведите поле BOOKID с использованием цвета
COL_KEY.
Решение 12: Списки
Задание 1:
Подготовка к генерации вторичного списка
1. Скопируйте программу ZBC400_##_SELECT_SFLIGHT или соответствующий шаблон SAPBC400DDS_AUTHORITY_CHECK в новую программу ZBC400_##_DETAIL_LIST.
a) Этот шаг выполняется в соответствии с обычной процедурой.
2. Убедитесь в том, что соответствующие ключевые значения для создания вторичного списка будут доступны в программе после выбора строки основного списка (даты рейса).
a) См. выдержку из исходного текста в примере решения.
3. Для создания основного и вторичного списка в программу необходимо внедрить два функциональных блока.
a) См. выдержку из исходного текста в примере решения.
Задание 2:
Создание вторичного списка
1. В первой строке вторичного списка выведите ключевую информацию из выбранного расписания рейсов. Ниже поместите горизонтальную линию и одну пустую строку.
a) См. выдержку из исходного текста в примере решения.
2. Из таблицы базы данных SBOOK должны выбираться все записи о бронировании для выбранного расписания рейсов с последующим выводом во вторичном списке. Для вывода каждой записи о бронировании должны считываться только следующие поля:
BOOKID, CUSTOMID, CUSTTYPE, CLASS, ORDER_DATE, SMOKER, CANCELLED.
a) См. выдержку из исходного текста в примере решения.
Продолжение на следующей странице
3. Дополнительно: Во вторичном списке выведите поля LOCCURAM и LOCCURKEY: для этого необходимо использовать дополнение CURRENCY к оператору WRITE, которое позволит проверить, что сумма LOCCURAM отформатирована согласно валюте LOCCURKEY.
Рекомендация:
WRITE: wa_sbook-loccuram
CURRENCY wa_sbook-loccurkey, wa_sbook-loccurkey.
a) См. выдержку из исходного текста в примере решения.
4. Дополнительно: Выведите поле BOOKID с использованием цвета
COL_KEY.
a) См. выдержку из исходного текста в примере решения.
Результат
Выдержка из исходного текста (без необязательных компонентов):
SAPBC400UDS_DETAIL_LIST
REPORT sapbc400uds_detail_list.
CONSTANTS actvt_display TYPE activ_auth VALUE ’03’. DATA: wa_flight TYPE sbc400focc,
wa_sbook TYPE sbook. PARAMETERS pa_car TYPE s_carr_id.
START-OF-SELECTION.
AUTHORITY-CHECK OBJECT ’S_CARRID’ ID ’CARRID’ FIELD pa_car
ID ’ACTVT’ FIELD actvt_display.
CASE sy-subrc.
WHEN 0.
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
Продолжение на следующей странице
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax. WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate, wa_flight-seatsocc, wa_flight-seatsmax, wa_flight-percentage,’%’.
* Hide key values of the current line
Дата добавления: 2015-11-16; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
WRITE: / ’Authority-Check Error’(001). ENDCASE. | | | Wa_sbook-loccurkey. |