- Vytvoril D2000 Dev Team na okt 12, 2017
Akcia SET AS [DIRECT]
- lokálnou premennou typu ALIAS,
- položkou štruktúry typu Objekt (odkaz na objekt):
- pre lokálne premenné typu Record alebo typový ALIAS,
- pre objekty typu Štruktúrovaná premenná.
SET dstIdent AS srcIdent [DIRECT]
dstIdent | in | Identifikátor hodnoty typu ALIAS (alebo typu Objekt v prípade položky štruktúry), identifikátor riadku alebo celej štruktúry - cieľ hodnôt a asociácií. |
srcIdent | in | Identifikátor hodnoty typu ALIAS (alebo typu Objekt v prípade položky štruktúry), identifikátor riadku alebo celej štruktúry - zdroj hodnôt a asociácií. |
- Record
- ALIAS
- objekt typu Štruktúrovaná premenná
Akcia má podobné pravidlá ako akcia SET WITH.
- Pre položky štruktúr iného typu ako Objekt (odkaz na objekt) má aj rovnakú funkciu.
- Pre položku typu Objekt však nemá význam priradenia hodnoty, ale zmenu asociovaného (pripojeného) objektu.
Akcia umožňuje použiť index riadku 0 v nasledovnom prípade:
SET dstIdent[0]^Col1 AS srcIdent[0]^Col2 pričom1. dstIdent je lokálna štruktúrovaná premenná a Col1 je typu Objekt
2. srcIdent je:
- lokálna štruktúrovaná premenná a Col2 je typu Objekt,
- typový ALIAS (ALIAS (structDef) _rA) a Col2 je typu Objekt,
- objekt typu štruktúrovaná premenná; je možné použiť kľúčové
slovo DIRECT,
(ak Col2 nie je typu odkaz na objekt, DIRECT je povinný).
Akcia interne vykoná predpísané priradenie (SET AS) pre všetky riadky daného stĺpca.
Preto je potrebné, aby rozmery oboch štruktúr (dstIdent aj srcIdent) boli rovnaké.
ALIAS _a INT _i SET _a AS U.INT ; prvý test IF U.Int = _a THEN ENDIF ; druhý test _i := U.Int IF U.Int = _i THEN ENDIF
Výsledok druhého testu závisí od toho, či objekt U.Int nezmenil svoju hodnotu od momentu jej priradenia do _i a vykonania testu.
Zmena hodnoty:
ALIAS _a SET _a AS U.INT _a := 1
Vlastnosti lokálnej premennej typu ALIAS sú zhodné pre položky typu Objekt:
- objektov typu Štruktúrovaná premenná,
- lokálnych premenných typu Record (bez modifikátora NOALIAS).
ALIAS _a SET _a AS U.Int _a := 1 ; prvé priradenie RECORD (SD.RecordDef) _lArr1 SET _lArr1[1]^Object AS U.Int _lArr1[1]^Object := 1 ; druhé priradenie
Zmena smerovania položky typu Objekt objektu typu Štruktúrovaná premenná:
SET SV.Struktura[1]^Object AS U.Int
Priradenie:
SV.Struktura[1]^Object := 1
RECORD (SD.RecordDef) _lArr1 REDIM _lArr1[2] SET _lArr1[1]^Object AS U.Int ; priradenie 1 SET _lArr1[2]^Object AS U.Int2 ; priradenie 2 SET _lArr1[1]^Object AS _lArr1[2]^Object ; priradenie 3
Alebo:
SET SV.Struktura[1]^Object AS U.Int ; priradenie 1 WAIT SET SV.Struktura[2]^Object AS U.Int2 ; priradenie 2 WAIT SET SV.Struktura[1]^Object AS SV.Struktura[2]^Object ; priradenie 3 WAIT
Takáto konštrukcia neumožňuje nasmerovať (vytvoriť odkaz) políčko štruktúry na iné políčko štruktúry. Preto bol zavedený modifikátor DIRECT, ktorý toto umožňuje. Akcia SET AS DIRECT obmedzuje možné typy parametrov na:
- dstIdent - políčko typu Objekt lokálnej premennej typu Record, lokálnej premennej typový ALIAS alebo objektu typu Štruktúrovaná premenná.
- srcIdent - políčko objektu typu Štruktúrovaná premenná.
RECORD (SD.RecordDef) _lArr1 REDIM _lArr1[2] SET _lArr1[1]^Object AS U.Int DIRECT ; priradenie 1 SET _lArr1[2]^Object AS U.Int2 DIRECT ; priradenie 2 SET _lArr1[1]^Object AS _lArr1[2]^Object DIRECT ; priradenie 3 SET _lArr1[1]^Object AS SV.Struktura[2]^Int DIRECT ; priradenie 4
Ak je známe len HOBJ štruktúrovanej premennej, nastavenie odkazu na jej políčko sa môže vykonať nasledovným spôsobom:
SET _locRec[2]^Object AS (HOBJ, ROW, COL) DIRECT
Napríklad:
; použité objekty ; SD.Active: Definícia štruktúry s jedným stĺpcom typu Objekt. Meno stĺpca je "Object". ; SV.Active: dvojriadková štruktúrovaná premenná typu SD.Active RECORD (SD.Active) _b BOOL _bOpenOk ; vytvorenie odkazu z políčka SV.Active[1]^Object na políčko v riadku 1, stĺpec 1 objektu s jednoznačným identifikátorom 2131 (HOBJ) ; ak objekt 2131 nie je typu štruktúrovaná premenná alebo index riadku alebo stĺpca je mimo rozsah, akcia neprebehne úspešne SET SV.Active[1]^Object AS (2131, 10, 10) DIRECT ; neúspešný priebeh predchádzajúcej akcie generuje Run-Time error WAIT ; vytvorenie odkazu z políčka _b[1]^Object na políčko v riadku 2, stĺpec 1 objektu s jednoznačným identifikátorom 24623 (HOBJ) ; na rozdiel od predchádzajúceho príkladu, musí byť objekt 24623 otvorený _bOpenOk := %OpenRefToObject(24623, @TRUE) IF _bOpenOk THEN SET _b[1]^Object AS (24623, 2, 1) DIRECT ENDIF
!!! Akcia SET SV.Struktura[1]^Object AS U.Int (podobne ako priradenie hodnoty objektu) je spracovaná na strane
procesu D2000 Server. Jej efekt sa prejaví po čase, v závislosti od zaťaženia systému. Na jej
skutočnú realizáciu je možné v skripte počkať akciou WAIT !!!
Akcia umožňuje zmenu hodnoty typového ALIASu.
ALIAS (SD._System_Redundancy) _aT ALIAS (SD._System_Redundancy) _aT1 SET _aT AS SV._System_Redundancy SET _aT1 AS _aT
Zmena hodnoty typového ALIASu bez kontroly typu počas ukladania je možná napríklad nasledovne:
BOOL _bOk ALIAS (SD._System_Redundancy) _aT INT _hbj ; príklad 1 _hbj := SV._System_Redundancy\HBJ SET _aT AS (_hbj) ; príklad 2 _hbj := %StrToHBJ("SV._System_Redundancy") _bOk := %OpenRefToObject(_hbj, @TRUE) SET _aT AS (_hbj) ; alebo príklad 3 ALIAS _a _hbj := %StrToHBJ("SV._System_Redundancy") _bOk := %OpenRefToObject(_hbj, @TRUE) SET _a AS (_hbj) SET _aT AS _a
Súvisiace stránky:
0 komentárov