Что такое событие. Основные события.
Событие (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, то будет выполнена вторая подпрограмма из списка.