Akcia GETARCHVAL


Funkcia
Čítanie hodnoty archívneho objektu v danom čase.


Deklarácia
GETARCHVAL valueIdent_Real, archIdent, timeExpression_TmA  [STATUS [isDataIdent_Bool], [archFlagsIdent_Int], [archivInstance_Int]] [VALID | INVALID]
Parametre
valueIdent_RealoutOdkaz na jednu archívnu hodnotu, odkaz na objekt alebo odkaz na položku objektu typu Štruktúrovaná premenná (poznámka: hodnoty objektu alebo položky sa musia archivovať).

Upozornenie: Ak sa parameter odkazuje na objekt, ktorý je viacnásobne archivovaný, nie je určené, hodnoty ktorého archívneho objektu sa použijú pre akciu.
archIdentinOdkaz na jednu archívnu hodnotu, odkaz na objekt alebo odkaz na položku objektu typu Štruktúrovaná premenná.
timeExpression_TmAinVýraz typu Absolútny čas.
isDataIdent_BooloutIdentifikátor typu Bool - príznak úspešnosti čítania z archívu, nepovinný parameter.
archFlagsIdent_IntoutIdentifikátor typu Int - archívne príznaky, nepovinný parameter.
archivInstance_IntinNepovinný identifikátor typu Int - identifikácia inštancie archívu. Ak nie je uvedený, nahradí sa hodnotou 0.
Popis

Akcia prečíta hodnotu z archívu pre daný čas. Výsledok čítania (hodnotu) zapíše do premennej valueIdent_Real. Prečítaná hodnota zodpovedá čítaniu časového intervalu, ktorý má čas začiatku a konca rovnaký a časový krok je 0.

Ak parameter archIdent obsahuje odkaz na objekt typu Archivovaná hodnota, činnosť akcie je popísaná vyššie. Ak obsahuje odkaz na objekt, ktorý nie je archívny alebo položku štruktúrovanej premennej, ktorá nie je typu Objekt, systém sa snaží nájsť archívny objekt (objekt typu Archivovaná hodnota), ktorý danú hodnotu archivuje.
Ak je parameter archIdent odkaz na položku štruktúrovanej premennej typu Objekt, táto ukazuje na určitý objekt v systéme. Ak je tento objekt archívny, dáta budú načítané z neho. Ak nie je, systém sa snaží nájsť archívny objekt, ktorý danú hodnotu archivuje.

Výsledok čítania (value) sa priradí do premennej valueIdent_Real.

Ak je uvedený identifikátor isDataIdent_Bool, zapíše do neho hodnotu:

  • True - ak sú dáta prečítané,
  • False - ak dáta nie sú (alebo dáta v požadovanom čase majú príznak DELETED - sú užívateľsky vymazané).

Ak identifikátor isDataIdent_Bool nie je použitý a ak nie sú dáta, akcia nemodifikuje hodnotu identifikátora valueIdent_Real.

Ak sa čítajú periodické/štatistické archívy a timeExpression_TmA nie je zarovnaný na periódu a offset výpočtu, je vrátená najbližšia staršia hodnota.
Ak sa čítajú periodické/štatistické archívy a timeExpression_TmA je novší ako čas poslednej vypočítanej hodnoty, tak sa nevrátia žiadne dáta.

Ak je uvedený identifikátor archFlagsIdent_Int, sú do neho zapísané archívne príznaky pre prečítanú hodnotu (archívny príznak vzniká súčtom nasledujúcich konštánt):

  • 1 (ArcStart) - hodnota zapísaná do archívnej databázy v okamihu štartu procesu D2000 Archiv.
  • 2 (ArcStop) - hodnota zapísaná do archívnej databázy v okamihu zastavenia procesu D2000 Archiv
  • 4 (ArcBlock) - hodnota zapísaná do archívnej databázy v okamihu blokovania archivácie (prostredníctvom podmienky prerušenia archivácie)
  • 8 (ArcUnBlock) - hodnota zapísaná do archívnej databázy v okamihu odblokovania archivácie (prostredníctvom podmienky štartu archivácie)
  • 16 (ArcDeleted) - užívateľom zrušená hodnota z archívnej databázy. Zmazanú hodnotu akcia štandardne ignoruje (ako keby v archíve nebola), chovanie je možné zmeniť parametrom archívu RTM.ARCHIV.GETARCHVAL.DELETED - po jeho aktivácii budú vyčítavané aj užívateľom zmazané hodnoty.
  • 32 (ArcUsermodify) - užívateľom modifikovaná hodnota v archívnej databáze
  • 64 (ArcOldVal) - stará hodnota vyčítaná z komunikačnej stanice
  • 128 (ArcProcessModify) - hodnota modifikovaná procesom (nie užívateľom: skript ESL, D2000 VBApi, ...)
  • 256 (ArcLoadData) - zastarané: hodnota bola získaná z OS/2 databázy SQL Gupta "On-line importom archívnej databázy"
  • 512 (ArcMonoTime) - hodnota je uložená s monotónnym časom
  • 1024 (ArcK) - hodnota periodického archívu vygenerovaná pri čítaní ako kópia predchádzajúcej
  • 2048 (ArcL) - hodnota pochádza zo zapisovacej cache archívu (ešte nebola commitovaná do databázy)
  • 4096 (ArcM) -hodnota pochádza z izochrónnej cache archívu (nebola čítaná z databázy) 
  • 32768 (ArcV1) - hodnota je uložená v archívnej databáze vo formáte V1 (iba veľmi staré archívy nemajú tento príznak)
Na testovanie archívnych príznakov slúži logický súčin (&), ktorý je možné aplikovať i na celočíselné operandy. Ak napríklad platí podmienka archFlagsIdent_Int & 4 = 4, potom hodnota prečítaná z archívnej databázy prostredníctvom akcie GETARCHVAL má príznak ArcBlock (blokovanie archivácie).

Hodnota parametra archivInstance_Int udáva inštanciu archívu, ktorá realizuje požiadavku. Ak nie je uvedený (alebo má hodnotu 0) požiadavku realizuje aktívna inštancia archívu.

Pre verzie novšie ako 21.0.70 je možné špecifikovať klauzulu VALID alebo INVALID. Pomocou tejto klauzuly je možné vyčítať poslednú platnú (VALID) alebo neplatnú (INVALID) hodnotu pre daný čas (ignorujúc všetky nasledujúce hodnoty, ktoré nie sú VALID alebo INVALID).

Poznámka
  • Ak nie je spustený príslušný proces archivácie, akcia generuje chybu _ERR_ARCHIV_NOT_RUNNING.
  • Ak je Archívny objekt archivovaný:
    • periodicky, čítanie hodnoty mimo periódy dopadne vždy neúspešne
    • na filter, hodnota pre žiadaný čas bude odvodená z poslednej zapísanej hodnoty v archíve.
Príklad

Čítanie archivovanej hodnoty:

 


 REAL _value
 TIME _bt
 BOOL _bIsArchData
 
 ; vypočítanie začiatku aktuálnej minúty 
 _bt := SysTime
 _bt := _bt - %ModTime(_bt, 60) 
  ; prečítanie hodnoty a aktívnej inštancie archívu 
  GETARCHVAL _value, H.Sec, _bt STATUS _bIsArchData,,0
 ; bola hodnota prečítaná? 
 IF _bIsArchData THEN 
 ; spracovanie prečítanej hodnoty
  ENDIF  

Súvisiace stránky:

Napíšte komentár