В ходе исполнения интерактивных процессов в предопределенных точках могут вызываться программные события, цель которых - выполнить работу, которую система не может выполнить автоматически. Некоторые события подменяют собой часть работы системы, например, позиционирование в мастере окна в событии OnConformToWindow. Другие дополняют работу системы, например выполняют контроль данных, вытекающий из прикладной логики - такое, например, часто делается в событии OnSuccessfulChange. События могут загружать окна, менять их свойства (см. FORM_WINDOW) и т.п.
Для большинства событий: транзакция программы совпадает с транзакцией активного процесса в RTI.CurZone, а если этот процесс не порождает и не наследует транзакцию модификации данных, то событие выполняется на транзакции видеосистемы.
Если исполняемый программный модуль и/или процедура не найдены, выдается соответствующее сообщение и считается, что событие завершилась с ошибкой, что обычно сопровождается сбросом очереди команд.
Можно определить группы программных событий:
События, обрабатываемые ASL-модулями:
Если иное не оговорено особо, каждое программное событие вызывается, если имя соответствующей программы-обработчика имеет непустое значение и включен флаг необходимости вызова события. Имена этих программ и соответствующие флаги задаются редактором WED и хранятся в WDO-окне, а также могут быть изменены программно. RTI.StartMode специфично для каждого программного события данной группы.
Программы уровня окна FORM_WINDOW.WLevProg:
- OnInitializeWindow. RTI.CurZone имеет пустое значение.
- OnConformToWindow. Флага включения события не существует, оно вызывается для принудительно зависимого или принудительно независимого окна, а если имя программы FORM_WINDOW.WLevProg не определено - ошибка. RTI.CurZone и RTI.CurWindow - соответственно зона и окно, откуда видеоконформ идет в мастер окна RTI.TrgWindow. RTI.TrgZone - корневая зона окна RTI.TrgWindow, в которой имеется видеопроцесс.
- OnOpenWindow. RTI.CurProcess - стартующий видеопроцесс, RTI.CurZone - зона этого процесса. Выполняется на транзакции стартующего процесса.
- OnCloseWindow.
Программы уровня зоны FORM_ZONE.ZLevProg:
- OnChangeIndex.
- OnOpenZone.
- OnSetSubwindow. RTI.CurWindow и RTI.CurZone - соответственно окно и зона, откуда стартует новый процесс, а стартует он всегда из порождающей рулонный зоны, а не из панели подчиненного окна. RTI.CurProcess - стартующий процесс, он уже начат, но зона, на котором он будет выполняться еще не определена, поэтому RTI.CurProcess.Zone имеет пустое значение. Если стартует один из процессов модификации, то данное событие выполняется на его транзакции.
- OnRedraw.
Программы уровня записи FORM_ZONE.RLevProg:
- OnBeforeDelete
- OnBeforeEdit
- OnBeforeInsert
- OnAfterDelete
- OnAfterEdit
- OnAfterInsert
- OnReposition. Может выполняться в зоне без интерактивных процессов, в этом случае RTI.CurProcess имеет пустое значение.
Программы уровня поля FORM_ZONE.FLevProg:
- OnGotFocus
- OnSuccessfulСhange
- События процесса Ask. RTI.CurZone и RTI.CurWindow содержат соответственно зону и окно, откуда вызван процесс Ask. В Event.Env находятся переменные окружения процесса Ask.
- OnBeforeAsk.
- События начало и окончание Ask. RTI.TrgWindow и RTI.TrgZone - соответственно справочное окно и его зона.
- OnAskPhase1.
- OnAskPhase2. На старте программный курсор мастера текущей зоны справочного окна содержит выбранную запись, а если зона главного процесса Ask имеет другой мастер, то соответствующий программный курсор имеет текущую запись этой зоны. Позиции заблокированы по обычным правилам ASL-языка.
События, обрабатываемые ASL-процедурами или функциями:
Имя процедуры-обработчика хранится в одноименном свойстве класса APP. Формат имени - "Module.Procedure", где Procedure - это процедура или функция модуля Module. Программное событие вызывается, если имя соответствующей процедуры-обработчика имеет непустое значение, значение по умолчанию у них - пустое. RTI.StartMode для всех программных событий данной группы имеет значение 999.
События, обрабатываемые ASL-процедурами без параметров:
- OnAfterInteractiveModification
- OnInitializeZoneFilters. RTI.CurZone не содержит процессов.
События, обрабатываемые ASL-функциями:
- OnOpenCalendar. Выполняется всегда на жесткой независимой транзакции.