- Vytvoril D2000 Dev Team na okt 12, 2017
Akcia PROCEDURE
Deklarácia
PROCEDURE ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName
Deklarácia pre vzdialené volanie
[IMPLEMENTATION] RPC PROCEDURE [ESLInterface^]ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName [IMPLEMENTATION] RPCX PROCEDURE [ESLInterface^]ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName
Deklarácia pre volanie do UNITu
PUBLIC PROCEDURE ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName
Parametre
procname | in | Meno procedúry (musí vyhovovať pravidlám pre meno objektu). |
type1, type2, ..., type10 | in | Typ prvého (druhého, tretieho, ..., desiateho) formálneho parametra. |
paramName1, paramName2, ..., paramName10 | in | Meno prvého (druhého, tretieho, ..., desiateho) formálneho parametra. |
Popis
Akcia uvádza procedúru (hlavička procedúry) s menom ProcName. Meno procedúry musí byť v rámci skriptu
jednoznačné. Hlavička procedúry sa môže nachádzať pred inicializačnou časťou skriptu mimo
inej procedúry (vnorené procedúry nie sú podporené).
Procedúra môže obsahovať neobmedzený počet parametrov. Každý parameter v tele procedúry predstavuje lokálnu premennú (v deklarácii má uvedené meno aj typ). Ak je pred typom v deklarácii parametra uvedené kľúčové slovo IN, lokálna premenná je chápaná ako vstupná hodnota (prípadné zmeny jej hodnoty neovplyvnia hodnotu parametra po ukončení procedúry). Parametre bez kľúčového slova IN sú vstupno-výstupné.
Procedúra musí byť ukončená akciou END ProcName.
Možné typy formálnych parametrov procedúry:
Príklady - jednotlivé typy formálnych parametrov:
Pri volaní procedúry akciou CALL sa na miesto formálneho parametra dosadí skutočný parameter. Pri formálnom parametri typu NT, prebehne typová konverzia medzi skutočným->formálnym->skutočným parametrom. Pre jednotlivé typy formálnych parametrov sú prípustné nasledovné kombinácie skutočných parametrov:
* len v prípade IN OUT parametra
Procedúru deklarovanú s kľúčovým slovom RPC je možné volať z iných ESL skriptov prostredníctvom vzdialeného volania. Pre RPC procedúry sú prípustné typy formálnych parametrov NT a RN.
Vykonávanie server eventu (alebo skriptu) prebieha na jednej inštancii. Preto súčasné volanie RPC procedúry viacerými inými udalosťami alebo skriptami je serializované a požiadavky sa spracovávajú postupne prostredníctvom fronty požiadaviek.
Ak je vzdialená procedúra deklarovaná kľúčovým slovom RPCX, všetky požiadavky na vykonanie tejto procedúry sú vyradené z fronty pri príchode novej požiadavky. Výsledné správanie je potom také, že vo fronte neexistujú súčasne dve požiadavky na vykonanie procedúry deklarovanej ako RPCX. Z pohľadu volajúceho, vyradenie požiadavky z fronty znamená ukončenie vzdialeného volania (CALL) s chybou.
HBJ definície štruktúry netypového recordu je možné zistiť pomocou ESL funkcie %GetRecordStructHBJ (IN recordVal) (_hbj := % GetRecordStructHBJ(_rec\HBJ)).
Procedúra môže obsahovať neobmedzený počet parametrov. Každý parameter v tele procedúry predstavuje lokálnu premennú (v deklarácii má uvedené meno aj typ). Ak je pred typom v deklarácii parametra uvedené kľúčové slovo IN, lokálna premenná je chápaná ako vstupná hodnota (prípadné zmeny jej hodnoty neovplyvnia hodnotu parametra po ukončení procedúry). Parametre bez kľúčového slova IN sú vstupno-výstupné.
Procedúra musí byť ukončená akciou END ProcName.
Možné typy formálnych parametrov procedúry:
Príklady - jednotlivé typy formálnych parametrov:
Typ formálneho parametra | Popis parametra | Príklad |
NTC | Konštanta typu Int, Bool, ..., ako parameter nie je prípustná. | |
NT | Premenná typu Int, Bool, Real, Time, Text. | INT _paramInt |
AN | Netypový ALIAS. | ALIAS _an |
AT | Typový ALIAS. | ALIAS (SD.RecordDef) _at |
RN | Štruktúra bez odkazov na objekty. | RECORD NOALIAS (SD.RecordDef) _rn |
R | Štruktúra. | RECORD (SD.RecordDef) _rn |
Pri volaní procedúry akciou CALL sa na miesto formálneho parametra dosadí skutočný parameter. Pri formálnom parametri typu NT, prebehne typová konverzia medzi skutočným->formálnym->skutočným parametrom. Pre jednotlivé typy formálnych parametrov sú prípustné nasledovné kombinácie skutočných parametrov:
Kategória parametra | Formálny parameter |
||||
NT | AN | AT | RN | R | |
IC_C | IN | - | - | - | - |
IC_HBJ_EXPR | IN | IN | - | - | - |
IC_L | - | - | - | - | |
IC_L_CONST | IN | - | - | - | - |
IC_L_AN | - | - | - | ||
IC_L_AT_RIA | - | - | - | ||
IC_L_AT_RIN | - | - | - | - | |
IC_L_AT_R | - | - | - | ||
IC_L_AT | - | IN | - | - | |
IC_L_R_RIA | - | - | - | ||
IC_L_R_RIN | - | - | - | - | |
IC_L_R_R | - | - | - | ||
IC_L_R | - | - | - | ||
IC_L_RNA_RIA | - | - | - | - | |
IC_L_RNA_RIN | - | - | - | - | |
IC_L_RNA_R | - | - | - | - | |
IC_L_RNA | - | - | - | - | |
IC_O | IN | - | - | - | |
IC_O_R_RIA | - | - | - | ||
IC_O_R_RIN | - | - | - | - | |
IC_O_R_R | - | - | - | ||
IC_O_R | - | - | - | ||
IC_L_NR_R | - | - | - | ||
IC_L_NR | - | - | - | ||
IC_L_NRNA_R | - | - | - | - | |
IC_L_NRNA | - | - | - | - |
- Zelené políčko označuje prípustnú kombináciu formálneho a skutočného parametra.
- Políčko s textom IN označuje nutnosť deklarovať formálny parameter ako vstupný (kľúčové slovo IN).
Typ formálneho parametra | Skutočný parameter | Formálny parameter | |
Volanie | Návrat* | Volanie | |
NT | Čítanie hodnoty. | Nastavenie hodnoty. | Nastavenie hodnoty podľa parametra. |
AN | Prečítanie odkazu na objekt (nie hodnoty objektu). | Nastavenie odkazu na objekt (nie hodnoty). | Nastavenie odkazu na objekt podľa parametra, ktorý je tiež odkaz. |
AT | Prečítanie odkazu na objekt (nie hodnoty objektu). | Nastavenie odkazu na objekt (nie hodnoty). | Nastavenie odkazu na objekt podľa parametra, ktorý je tiež odkaz. |
RN | Čítanie hodnoty (riadok alebo celá štruktúra). | REDIM parametra podľa potreby (ak je index = 0 a skutočný parameter je lokálna premenná) a nastavenie hodnoty. | REDIM parametra podľa potreby a nastavenie hodnoty. |
R | Čítanie hodnoty (riadok alebo celá štruktúra). | REDIM parametra podľa potreby (ak je index = 0 a skutočný parameter je lokálna premenná) a nastavenie hodnoty. | REDIM parametra podľa potreby a nastavenie hodnoty. |
* len v prípade IN OUT parametra
Procedúru deklarovanú s kľúčovým slovom RPC je možné volať z iných ESL skriptov prostredníctvom vzdialeného volania. Pre RPC procedúry sú prípustné typy formálnych parametrov NT a RN.
Vykonávanie server eventu (alebo skriptu) prebieha na jednej inštancii. Preto súčasné volanie RPC procedúry viacerými inými udalosťami alebo skriptami je serializované a požiadavky sa spracovávajú postupne prostredníctvom fronty požiadaviek.
Ak je vzdialená procedúra deklarovaná kľúčovým slovom RPCX, všetky požiadavky na vykonanie tejto procedúry sú vyradené z fronty pri príchode novej požiadavky. Výsledné správanie je potom také, že vo fronte neexistujú súčasne dve požiadavky na vykonanie procedúry deklarovanej ako RPCX. Z pohľadu volajúceho, vyradenie požiadavky z fronty znamená ukončenie vzdialeného volania (CALL) s chybou.
Kľúčové slovo IMPLEMENTATION je použité
vtedy, ak procedúra implementuje určitú procedúru z objektu ESL Interface.
Meno príslušného objektu je uvedené ako prefix mena procedúry, ktorý je oddelený znakom ^.
Kľúčové slovo PUBLIC je použité vtedy, ak je procedúra súčasťou eventu typu UNIT. Takýto typ procedúry je dovolené volať iba zo skriptu, v ktorom je daný UNIT definovaný (deklarovaný)
(volanie Public procedúr).
Pomocou RPC procedúr je možný prenos dátových kontajnerov a handle na databázové spojenia.
Formálny parameter procedúry NETYPOVÝ RECORD
Ak pri deklarácii formálneho parametra procedúry typu RECORD neurčíme typ štruktúry (RECORD NOALIAS () _rec), vznikne netypový record. Netypovému recordu určí typ skutočný parameter vstupujúci do procedúry pomocou akcie CALL pri volaní procedúry.HBJ definície štruktúry netypového recordu je možné zistiť pomocou ESL funkcie %GetRecordStructHBJ (IN recordVal) (_hbj := % GetRecordStructHBJ(_rec\HBJ)).
Príklad
PROCEDURE Proc1(RECORD NOALIAS () _arr) INT _iHbj _iHbj := %GetRecordStructHBJ(_arr\HBJ) ; .... ; .... ; .... REDIM _arr[ _arr\DIM + 1 ] END BEGIN RECORD NOALIAS (SD.RecordDef) _arr1 ; .... ; Nastavenie hodnoty lokálnej premennej _arr1 podľa hodnoty objektu ; SV.Struktura REDIM _arr1[SV.Struktura\DIM] SET _arr1 WITH SV.Struktura CALL Proc1(_arr1) END
Deklarácia procedúry a jej volanie s dvoma vstupnými a jedným výstupným parametrom:
PROCEDURE Scitaj(IN INT _p1, IN INT _p2, INT _v) _v := _p1 + _p2 _p2:= _p2 + _p2 END Scitaj BEGIN INT _a = 3 INT _b = 2 INT _c CALL Scitaj(_a, _b, _c) END
Procedúra sčíta dva vstupné parametre _p1 a _p2 typu INT. Výsledok uloží do vstupno-výstupného
parametra _v typu INT. Po návrate z procedúry bude parameter _c nastavený na súčet hodnôt parametrov _a a
_b. Hodnota parametra _b nebude zmenená akciou (_p2 := _p2 + _p2), lebo _p2 je vstupný parameter a jeho zmeny
sa nebudú zverejňovať.
Procedúry je možné volať rekurzívne (procedúru z procedúry).
Deklarácia procedúry s parametrom typu štruktúra:
Procedúry je možné volať rekurzívne (procedúru z procedúry).
Deklarácia procedúry s parametrom typu štruktúra:
PROCEDURE Proc1(RECORD NOALIAS (SD.RecordDef) _arr) ; .... ; .... ; .... REDIM _arr[_arr+1] END Proc1 BEGIN RECORD NOALIAS (SD.RecordDef) _arr1 ; .... ; Nastavenie hodnoty lokálnej premennej _arr1 podľa hodnoty objektu ; SV.Struktura REDIM _arr1[SV.Struktura\DIM] SET _arr1 WITH SV.Struktura CALL Proc1(_arr1) END
Volanie CALL v príklade prebieha v nasledovných krokoch:
- Vyhodnotenie indexu riadku skutočného parametra (v tomto prípade 0 => celá hodnota objektu).
- Prečítanie hodnoty skutočného parametra _arr1.
- Zmena rozmeru formálneho parametra podľa potreby: REDIM _arr[_arr1\DIM].
- Naplnenie formálneho parametra: SET _arr WITH _arr1.
- Prečítanie hodnoty formálneho parametra _arr.
- Vyhodnotenie indexu riadku skutočného parametra (v tomto prípade 0 => celá hodnota objektu).
- Zmena rozmeru formálneho parametra podľa potreby: REDIM _arr1[_arr\DIM].
- Naplnenie formálneho parametra: SET _arr1 WITH _arr.
Výnimkou je skutočný parameter typu IC_L_AT. Tento je bez indexu a prístupu na položku chápaný ako odkaz na objekt typu Štruktúrovaná premenná, nie ako jeho hodnota.
Poznámka
Normálne ukončenie procedúry prebehne vykonaním akcie RETURN, END MenoProcedury alebo predčasne akciou
END alebo vznikom chyby ak nie je v aktuálnej procedúre definovaná obsluha chyby (ON ERROR).
Pri normálnom ukončení procedúry sú aktualizované vstupno-výstupné parametre v príslušnej akcii CALL.
Ak je procedúra volaná ako vzdialená a neprebehne u nej normálne ukončenie, nie je možné aktualizovať prípadné vstupno-výstupné parametre. Preto, ak je volaná synchrónne s priradením, výsledkom priradenia je chyba ERR_MISSING_RETURN.
Ak je procedúra volaná ako vzdialená a neprebehne u nej normálne ukončenie, nie je možné aktualizovať prípadné vstupno-výstupné parametre. Preto, ak je volaná synchrónne s priradením, výsledkom priradenia je chyba ERR_MISSING_RETURN.
Súvisiace stránky:
0 komentárov