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:
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).
Činnosť so skutočným a formálnym parametrom pri volaní a návrate z procedúry:
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)).