Żeby doszło do wywołania tego zdarzenia dla określonej zmiennej jest konieczne:
Jeżeli wywołanie zostanie dozwolone dla każdej zmiennej i dojdzie do zapisu do (zmiany) wszystkich zmiennych jednocześnie, wtedy zdarzenie zostanie wywołane
dla każdej zmiennej osobno!
Zastosowanie tego zdarzenia jest stosowne na przykład do filtrowania zapisywanych wartości.
Właściwość
pEvent.NewVal jest przeznaczona do odczytu i zapisu. Jeżeli do tego parametru zostanie zapisana nowa wartość, wtedy do zmiennej obiektu w rzeczywistości zostanie zapisana (po zakończeniu tego zdarzenia) wartość, która jest w tym parametrze.
Uwaga 1:
Jest zalecane stosowanie tego zdarzenia tylko dla
specjalnych nieodzownie koniecznych przypadkach. Bowiem po zezwoleniu tego zdarzenia zapis wartości jest wewnętrznie wykonywany w bardziej skomplikowany sposób.
Jeżeli zapis został wywołany w wątku głównym, wtedy zdarzenie zostanie wywołane synchronicznie a zapis zostanie zakończony również
synchronicznie.
Natomiast jeżeli zapis został wywołany z innego wątku (web, komunikacja, obiekt
PmaSequencer), wtedy zdarzenie zostanie wywołane
asynchronicznie, tzn. wywołanie tego zdarzenia oraz rzeczywisty zapis do zmiennej nie jest wykonywany bezpośrednio lecz dopiero po zakończeniu bieżącego skryptu. Opóźniony asynchroniczny zapisu spowoduje, że po zapisie do zmiennej wartość jeszcze nie znajduje się w zmiennej, czyli następny odczyt wartości (skrypt, trendy) zawiera poprzednią wartość.
Uwaga 2:
Zdarzenie zostanie wywołane tylko jeżeli zostanie
wykonany rzeczywisty zapis (np.
obiekt.Item(0).Value=3) do zmiennej - oznaczmy ją
A.
Lecz jeżeli w zmiennej
A jest zdefiniowane
powiązanie danych (przy odczycie) do innej zmiennej
B (w innym obiekcie) i zostanie wykonany zapis do zmiennej
B, wtedy zmienna
A nie dowie się o zmianie i dlatego
zdarzenie nie zostanie wywołane (zmienna
A dowie się o zmianie dopiero wtedy, aż ktoś będzie ją odczytywać - wtedy zostanie "wykonane" powiązanie danych - lecz ponownie zdarzenie nie zostanie wywołane !).