Promotic
WikipediaLinkedInYoutubeTwitterFacebook

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) Objekt PmVar obsahující informace o proměnné, ve které dojde k zápisu (ke změně)
pEvent.NewVal - (Variant) Nová hodnota proměnné. Tuto hodnotu proměnná bude mít 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 povolit explicitně toto volání v této proměnné (viz konfigurátor "ExtWriteAction > Konfigurace datového rozšíření: ExtWriteAction > Událost "onItemBeforeWrite""). Tam se také definuje, zda událost je vyvolána před každým zápisem nebo před každou změnou hodnoty.

Pokud se toto volá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 je událost vyvolána synchronně a zápis se dokončí také synchronně. Pokud je ale zápis vyvolán z jiného vlákna (web, sekvencér, komunikace), pak je událost 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 tedy 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.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.Tavičská 845/21 703 00 Ostrava-Vítkovice