Операторы, используемые для прекращения событий.
Что такое событие. Основные события.
Событие(event) — тэг, который идентифицирует раздел кода. Раздел кода, связанный с событием, начинается с имени события и заканчивается тогда, когда встречается имя следующего события. Основные события:
Initialization
Start-of-selection
End-of-selection
Имена событий — зарезервированные слова. Нельзя создать новые события — можно использовать только существующие.
3. Программа драйвера.
Программа драйвера(driver program) — это программа, которая управляет другой (управляемой, driven) программой. SAP поставляет программы драйвера вместе с системой R/3. Вы поставляете управляемую(driven) программу.
Когда Вы запускаете свою программу, программа драйвера всегда стартует первой, а затем она вызывает события в Вашей программе, т.е. когда Вы запускаете свою программу, программа драйвера управляет Вашей программой, вызывая события в ее пределах.
Код, связанный с событием, вызывается оператором в программе драйвера. События вызываются программой драйвера в предопределенной и предсказуемой последовательности:
Затем программа драйвера выполняет следующую последовательность шагов:
§ Она вызывает событиеinitialization, вызывая к выполнению код, принадлежащийinitialization. Если Вы не закодировали событиеinitializationв своей программе, программа драйвера пропускает этот шаг
§ Она отображает экран выбора (selection screen) для Вашей программы (экран выбора — экран, который содержит входные поля для Ваших операторовparameter). Если у Вашей программы нет экрана выбора, она пропускает этот шаг
§ Она вызывает событиеstart-of-selection, вызывая к выполнению код, принадлежащий этому событию. Если Вы не закодировали событиеstart-of-selectionв своей программе, она пропускает этот шаг
§ Она вызывает событиеend-of-selectionв Вашей программе, выполняя весь код, принадлежащий ему. Если Вы не закодировалиend-of-selection, она пропускает этот шаг
§ Она отображает пользователю список вывода (list)
Порядок выполнения событий, определенный программой драйвера.
Порядок выполнения событий определен программой драйвера, а не Вашей программой. Поэтому, можно записывать события в любом порядке, однако порядок выполнения событий будет одним и тем же. Порядок событий в программе не имеет значения; они всегда будут вызываться программой драйвера в этой же последовательности:
Report ztx1702.
Data f1 type i value 1.
End-of-selection.
5 write: / '3. f1 =', f1.
Start-of-selection.
8 write: / '2. f1 =', f1.
9 f1 = 99.
Initialization.
12 write: / '1. f1 =', f1.
Add 1 to f1.
1. f1 = 1
2. f1 = 2
3. f1 = 99
§ При запускеztx1702программа драйвера стартует первой
§ Она вызывает событиеinitialization
§ Выполняется код, связанный с initialization (строки 12 и 13). Выводится значениеf1, и к нему добавляется1. Затем управление возвращается к программе драйвера
§ Программа драйвера ищет экран выбора. Его нет в этой программе, поэтому она ищет событиеstart-of-selection. Она находит его в строке 7 и выполняет переход к строке 8 программыztx1702. Выполняются строки 8 и 9, и затем управление возвращается к драйверу
§ Затем программа драйвера ищет событиеend-of-selection. Найдя его в строке 4, она передает управление строке 5 программыztx1702. Событиюend-of-selectionпринадлежит только строка 5, поэтому она выполняется, и затем управление возвращается к драйверу
§ Затем драйвер выводит пользователю список вывода
5. События ABAP/4, распределенные по категориям.
В ABAP/4 есть одиннадцать различных событий, они категоризированы согласно тому, как они вызываются.
События ABAP/4:
Категория | Events |
Driver | initialization at selection-screen start-of-selection get end-of-selection |
User | at line-selection at pfn at user-command |
Program | top-of-page end-of-page |
Операторы, используемые для прекращения событий.
Из события можно выйти в любое время с использованием следующих операторов:
Exit
Check
Stop
Далее описывается эффектcheckиexit, если они закодированы вне цикла. Эффектstopне зависит от того, записан он в цикле или нет.
Во всех событиях:
§ check немедленно прекращает текущее событие и вызывает переход к следующему событию (или действию, такому как отображение экрана выбора или списка вывода)
§ stop немедленно останавливает текущее событие и осуществляет переход к событиюend-of-selection. Выполнение оператораstopв пределахend-of-selectionпрекращает событие. Он не вызывает бесконечный цикл
В событиях, которые происходят передstart-of-selection:
§ exit иcheckведут себя одинаково — они оба немедленно прекращают события и вызывают переход к следующему событию (или действию, такому как отображение экрана выбора)
Вstart-of-selectionи событиях, которые происходят после него:
§ exit заканчивает отчет и отображает список вывода. Существует единственное исключение — в пределахtop-of-pageоператорexitведет себя какcheck
§ check прекращает событие и вызывает переход к следующему событию (или действию, такому как отображение списка вывода)
check,exitиstop не устанавливают значениеsy-subrc. Если нужно установить это значение, можно присвоить числовое значение этой переменной перед остановкой.
Типы подпрограмм.
Подпрограмма(subroutine) — раздел многократного использования кода. Она похожа на минипрограмму, которую можно вызвать из другого пункта программы. В ее пределах можно определять переменные, выполнять операторы, вычислять результаты и производить вывод. Для определения подпрограммы используются операторform— для указания начала подпрограммы, иendform— для указания конца подпрограммы. Имя подпрограммы не может превысить 30 символов.
Для вызова подпрограммы используется операторperform.
Есть два типа подпрограмм:
§ внутренние подпрограммы (Internal subroutines)
§ внешние подпрограммы (External subroutines)
8. Определение и вызов внутренних подпрограмм.
Определения подпрограмм обычно размещают в конце программы после всех событий. Операторformопределяет конец предыдущего события и начало подпрограммы. Подпрограммы не могут быть вложены в события.
Синтаксис оператора form:
form s [tables t1 t2 ...]
[using u1 value(u2) ...]
[changing c1 value(c2) ...].
---
Endform.
где:
s — имя подпрограммы
t1,t2,u1,u2,c1 иc2— параметры
tablesопределяет внутренние таблицы, которые должны быть переданы как параметры
дополнениеvalueне может использоваться послеtables
дополнениеvalueможет быть применено к любым переменным, которые передаются с использованиемusingилиchanging
--- — любое число строк программы
Особенности использования оператора form:
§ все дополнения являются опциями
§ если дополнения присутствуют, то они должны следовать строго в приведенном выше порядке, т.е.:tables,using,changing
§ каждое дополнение может быть определено только один раз
§ нельзя использовать запятые для отделения параметров
§ tablesиспользуется для передачи только внутренних таблиц — не таблиц базы данных
§ подпрограмма может вызывать другую подпрограмму
§ поддерживается рекурсия — подпрограмма может вызвать сама себя или другую подпрограмму, которая, в свою очередь, вызывает первую
§ определения подпрограмм не могут быть вложены (нельзя определить подпрограмму внутри другой подпрограммы)
Синтаксис оператора perform:
perform a) s
b) n of s1 s2 s3 ...
[tables t1 t2 ...]
[using u1 u2 ...]
[changing c1 c2 ...].
где:
s,s1,s2,s3— имена подпрограмм
n — числовая переменная
a) иb)являются взаимоисключающими
tables,usingиchangingмогут появиться или сa)или сb)
дополнениеvalue()не может использоваться сperform
Используя синтаксисb), можно определить, какая из списка подпрограмм должна быть выполнена. Выполняется n-ая подпрограмма из списка имен подпрограмм. Например, еслиn = 2, то будет выполнена вторая подпрограмма из списка.