Funkcia %GetCallChain


Funkcia Funkcia vráti úplnú postupnosť volaní (akcie CALL), ktoré viedli k jej vykonaniu.
Deklarácia
TEXT %GetCallChain()
Parametre Žiadne.
Príklad Príklad ukazuje návratovú hodnotu funkcie (v procedúre Procx skriptu E.C3) pri volaní RPC procedúr medzi skriptami E.C1, E.C2 a E.C3, pričom ich vykonávanie sa začalo v skripte E.C1 jeho inicializačnou časťou.

;******************* E.C1 *******************
PROCEDURE Proc1x
   CALL [E.C2] Proc2 ON SELF.EVH ; riadok 3.
END Proc1x

PROCEDURE ProcB
   CALL Proc1x ; riadok 7.
END ProcB

BEGIN
   CALL ProcB ; riadok 11.
END

;********************************************
 


;*********** Server event: E.C2 *************
RPC PROCEDURE Proc2
CALL [E.C3] Proc3 ON SELF.EVH ; riadok 3.
END Proc2

BEGIN
END

;********************************************


;*********** Server event: E.C3 *************
PROCEDURE Procx
TEXT _callChain
_callChain
:= %GetCallChain() ; riadok 4.
END Procx

RPC PROCEDURE Proc3
CALL Procx ; riadok 8.
END Proc3

BEGIN
END

;********************************************


Hodnota lokálnej premennej _callChain procedúry Procx v skripte E.C3

Procx: 4
SELF.EVH;E.C3( 24791) 1438;Proc3: 8
SELF.EVH;E.C2( 24792) 1439;Proc2: 3
Proc1x: 3
ProcB: 7
SELF.EVH;E.C1( 1325457) 2207;: 11

Každý riadok v hodnote premennej _callChain (okrem prvého) identifikuje riadok v ESL skripte, na ktorom je akcia CALL.

Napríklad výpis:
SELF.EVH;E.C3( 24791) 1438;Proc3: 8

označuje riadok číslo 8 v skripte objektu s menom E.C3. Riadok číslo 8 je v kontexte procedúry Proc3. Skript sa vykonával na procese SELF.EVH. HOBJ objektu E.C3 je 24791 a jednoznačný identifikátor bežiaceho skriptu je 1438 (táto hodnota sa generuje pri každom štarte ľubovoľného skriptu a je jednoznačná v rámci procesu, ktorý interpretuje skripty).
Uvedený riadok obsahuje akciu CALL Procx, ktorá volá procedúru Procx v rámci skriptu.
Keďže nedošlo k zmene skriptu, predchádzajúci riadok (v hodnote premennej _callChain) už obsahuje len meno procedúry a číslo riadku.

Takýmto spôsobom je možné zistiť z hodnoty premennej _callChain (interpretujem zdola nahor):
Vykonávanie akcií sa začalo v skripte E.C1 (na procese SELF.EVH), na riadku 11 je volanie procedúry ProcB, na riadku 7 volanie procedúry Proc1x a na riadku 3 je RPC volanie procedúry Proc2 v skripte E.C2 v rámci rovnakého procesu SELF.EVH. V procedúre (Proc2) na riadku 3 je RPC volanie procedúry Proc3 v skripte E.C3 v rámci rovnakého procesu SELF.EVH.
Na riadku 8 v skripte E.C3 je volanie procedúry Procx a volanie funkcie GetCallChain nastalo na riadku 4.


Napíšte komentár