- Vytvoril/a D2000 Dev Team, naposledy zmenené máj 26, 2026
Akcia PROCEDURE
PROCEDURE ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName
[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
PUBLIC PROCEDURE ProcName [([IN] type1 paramName1[,paramName2, ...] [IN] type2 paramName3]...)] ; akcie END ProcName
| 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. |
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)).
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
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ú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.
Dokumentácia
Komentáre priamo nad deklaráciou procedúry (nesmú byť oddelené ani prázdnym riadkom) vytvárajú dokumentáciu procedúry. Dokumentácia sa môže skladať z viacerých riadkov komentárov, pričom popis funkcie tvorí všetko od začiatku bloku komentárov po prvý znak @, alebo po koniec bloku komentárov, ak sa znak @ v komentároch nenachádza. Popis parametrov sa značí @Param _názovParametra - , pričom popis parametra tvorí všetko za znakom - až po ďalší znak @, alebo po koniec bloku komentárov. Príklad:
; Test je procedúra s dokumentáciou ; na viac riadkov ; ; @Param _a - popis parametra a ; @Param _b - popis parametra b ; na viac riadkov PROCEDURE Test(IN BOOL _a, INT _b) END Test
Popis procedúry bude:
"Test je procedúra s dokumentáciou
na viac riadkov"
Popis parametra _a bude:
"popis parametra a"
Popis parametra _b bude:
"popis parametra b
na viac riadkov"
Dokumentáciu je možné v ESL editore vygenerovať kliknutím ľavého tlačidla myši na meno procedúry a vybratím možnosti "Vytvoriť dokumentáciu pre ..." z ponúknutého menu pod ikonkou žiarovky. Dokumentácia danej procedúry sa zobrazí pri prechode kurzorom nad názvom procedúry pri jej volaní "CALL názovProc(...)". Pre RPC procedúry je možné vygenerovať OpenAPI špecifikáciu do YAML súboru pomocou tell príkazu GENERATEYAML.

![]()
![]()
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:
Pridať komentár