During a script run, it is often desired to have the possibility to execute a portion of BDL code in order to react to one or more particular situations (also known as events). Such a portion of BDL code is called event handler function. A typical task of an event handler function is to e.g. perform clean-up statements after a transaction exit error, or generally catch an error or warning before it gets reported.
BDL event constant | Description |
---|---|
EVENT_RAISE_INFORMATION | Informational message |
EVENT_RAISE_WARNING | Warning message |
EVENT_RAISE_ERROR | Error message |
EVENT_RAISE_TRANS_EXIT | Transaction exit error |
EVENT_RAISE_PROC_EXIT | Process exit error |
EVENT_TRANS_BEGIN | Transaction begin (within transaction context) |
EVENT_TRANS_END | Transaction end (within transaction context) |
EVENT_TRANS_FINISHED | Transaction finished (not within transaction context) |
EVENT_SUSPEND | Suspending |
EVENT_RESUME | Resuming |
EVENT_STOP | Stop |
EVENT_CITRIXINTERRUPT | Custom Citrix event (see CitrixAddInterrupt) |
EVENT_USER_FINISHED | End of test script |
A handler function must be defined in an event handler section. Each event handler section begins with the keyword dclevent. There may be more than one dclevent sections in a BDL translation unit.
From the semantic point of view an event handler can be considered as a function without parameters, which is automatically called by the runtime system, if its associated event occurs.
EventSection = "DCLEVENT" { Handler }. Handler = "HANDLER" ident "<"EventConstant">" [ "CONST" ConstDecl ] [ "VAR" VarDecl ] "BEGIN" StatSeq "END" ident ";"
Section | Description |
---|---|
ident | The name of the function. |
EventConstant | One of the above BDL event constants |
ConstDecl | The declarations of the function constants. |
VarDecl | The declarations of the function variables. |
StatSeq | The statements of the function. |
dclevent handler Handler1 <EVENT_RAISE_ERROR> begin if GetErrorCode(GetLastError()) = 1060 then print("caught HTTP: 1060 - HTML Hyperlink not found"); elseif GetErrorCode(GetLastError()) = 404 then print("caught HTTP: 404 - object not found"); else throw; end; end Handler1; dcltrans transaction TestTrans begin ... end TestTrans;