Promotic

onItemBeforeWrite - událost objektu PmaData

Popis:
Událost je vyvolána před zápisem do (změnou) hodnoty jedné proměnné definované v kartě "Data".
Parametry:
pMe(Object) Reference na PmaData objekt, ve kterém daná událost vzniká.
pEvent(Object) Reference na objekt, který popisuje informace o dané události.
pEvent.Item - (Object) [pro čtení] Objekt PmVar obsahující informace o proměnné, ve které dojde k zápisu (ke změně)
pEvent.NewVal - (Variant) [pro čtení i zápis] Nová hodnota proměnné. Proměnná bude mít tuto hodnotu po ukončení této události.
pEvent.NewQuality - (Long) [pro čtení i zápis] Nová kvalita proměnné. Proměnná bude mít tuto kvalitu po ukončení této události.
Poznámka:
Aby došlo k volání této události pro určitou proměnnou, je nutno:
- V proměnné vytvořit datové rozšíření ExtWriteAction.
- V tomto datovém rozšíření povolit volání této události (viz konfigurátor "ExtWriteAction > Datové rozšíření ExtWriteAction > Událost "onItemBeforeWrite"").
Zde se také určuje, zda událost je vyvolána před každým zápisem nebo před každou změnou hodnoty.
 
Pokud se toto vyvolání povolí pro každou proměnnou a dojde k zápisu do (změně) všech proměnných najednou, pak událost je vyvolána pro každou proměnnou zvlášť!
Použití této události je vhodné například pro filtrování zapisovaných hodnot.
Vlastnost onItemBeforeWrite je určena pro čtení i zápis. Pokud se do tohoto parametru zapíše nová hodnota, pak do proměnné objektu se ve skutečnosti zapíše (po ukončení této události) hodnota, která je v tomto parametru.

Upozornění 1:
Doporučuje se využívat tuto událost pouze pro speciální nezbytně nutné případy. Při povolení této události se pak totiž zápis hodnoty provádí interně komplikovaněji.
Pokud je zápis vyvolán v hlavním vlákně, pak událost je vyvolána synchronně a zápis se dokončí také synchronně.
Pokud je ale zápis vyvolán z jiného vlákna (web, komunikace, objekt PmaSequencer), pak událost je vyvolána asynchronně, tzn. vyvolání této události a skutečný zápis do proměnné se neprovede ihned, ale později až po ukončení aktivního skriptu. U zpožděného asynchronního zápisu ale pak dojde k tomu, že po zápisu do proměnné ještě hodnota v proměnné není, takže následné vyčtení hodnoty (skript, trendy) pak pracují s původní hodnotou.

Upozornění 2:
Událost je vyvolána pouze pokud se provede skutečný zápis (např. objekt.Item(0).Value=3) do proměnné - označme ji A.
Pokud ale v proměnné A je datová vazba (při čtení) na jinou proměnnou B (v jiném objektu) a provede se zápis do proměnné B, pak proměnná A se o této změně nedozví a proto událost není vyvolána (proměnná A se o změně dozví teprve, až ji bude někdo číst - tehdy se "provede" datová vazba - ale opět událost není vyvolána !).
Viz také:
Příklad:
Následující skript v události onItemBeforeWrite vypíše informace o zapisované hodnotě do položky Debug INFO systému - vypíše název proměnné do které se bude zapisovat, index proměnné a starou a novou hodnotu proměnné.
JavaScriptVBScriptVyber a zkopíruj do schránky

Pm.Debug("Name:" + pEvent.Item.Name);
Pm.Debug("Index:" + pEvent.Item.Index);
Pm.Debug("OldValue:" + pEvent.Item.Value);
Pm.Debug("NewValue:" + pEvent.NewVal);

Historie:
Pm9.00.18: Nový parametr pEvent.NewQuality obsahuje kvalitu proměnné po ukončení této události.
Pm9.00.10: Pokud zápis je nyní vyvolán v hlavním vlákně pak je skript volán synchronně, aby po zápisu do PmVar ze skriptu tam už hodnota byla a šla vyčíst.
© MICROSYS, spol. s r. o.