Instrukcja administratora > Parametryzacja systemu > Obiekty użytkownika > Wyzwalacze użytkownika

Drukuj

Wyzwalacze użytkownika

Wyzwalacze służą do wykonywania jakiejś akcji podczas tworzenia, modyfikowania lub usuwania rekordów dowolnej tabeli. Może to być np. polecenie SQL typu UPDATE, INSERT bądź DELETE, wywołanie procedury składowanej lub tylko pokazanie dowolnego komunikatu.

W celu utworzenia własnego wyzwalacza wybieramy z menu Ustawienia pozycję Wyzwalacze użytkownika.

181551

Dla nowego wyzwalacza b10_ins określamy:

Tabela - nazwa tabeli w aplikacji, na której będzie działać wyzwalacz użytkownika (patrz Lista modułów danych i tabel)

Wyzwalacz - moment uruchomienia wyzwalacza:

oBeforeInsert - przed utworzeniem nowego rekordu

oAfterInsert - po utworzeniu nowego rekordu

oBeforeEdit - przed edycją istniejącego rekordu

oAfterEdit - po edycji istniejącego rekordu

oBeforePost - przed zatwierdzeniem zmian nowego lub istniejącego rekordu, uruchamiany tylko gdy jest widoczny interfejs użytkownika

oAlwaysBeforePost - przed zatwierdzeniem zmian nowego lub istniejącego rekordu, uruchamiany zawsze

oAfterPost - po zatwierdzeniu zmian nowego lub istniejącego rekordu, uruchamiany tylko gdy jest widoczny interfejs użytkownika

oAlwaysAfterPost - po zatwierdzeniu zmian nowego lub istniejącego rekordu, uruchamiany zawsze

oBeforeDelete - przed kasowaniem rekordu

oAfterDelete - po kasowaniu rekordu

oOnChangeField - gdy wartość jakiegoś pola w rekordzie (kontrolki) została zmieniona

Wszystkie rodzaje wyzwalaczy za wyjątkiem Always... są uruchamiane tylko wtedy, gdy jest widoczny interfejs użytkownika (tzn. jest widoczne okno - i tam wprowadzamy dane)

 

Typ - typ wyzwalacza:

oAkcja - zostanie wykonanie polecenie SQL podane w Definicji

oAkcja warunkowa - po zatwierdzeniu komunikatu na 'Tak', zostanie wykonanie polecenie SQL podane w Definicji

oKomunikat (Info) - zostanie wywołany komunikat typu 'Info', jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord

oKomunikat (Ostrzeżenie) - zostanie wywołany komunikat typu 'Ostrzeżenie', jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord

oBłąd - zostanie wywołany komunikat błędu, jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord, a dalsza akcja zostanie przerwana

Warunek -

Definicja - definicja zapytania lub polecenia SQL. Wartości pól aktualnego rekordu można pobrać używając nawiasów klamrowych, np. {X_I} oznacza wartość pola X_I bieżącego rekordu; np. UPDATE PRACOWNK SET [PESEL]={PESEL} WHERE [X_I]={X_IPracownik} wykonane na zdarzeniu AfterPost tabeli DANE PERSONALNE uaktualni pole PESEL w tabeli PRACOWNICY. Można odwoływać się także do pól z innych tabel w następujący sposób {NAZWA_TABELI_W_APLIKACJI.Pole}; np. {PRACOWNICY.X_I} (UWAGA! nie mylić nazwy tabeli w bazie z nazwą tabeli w aplikacji; lista tabel jest dostępna tutaj Lista modułów danych i tabel). Dwuklik myszy na tym polu powoduje otwarcie okna wygodnego edytora zapytań SQL.

Komunikat - treść komunikatu

Aktywny - czy wyzwalacz ma działać

 

UWAGA 1

Aby wykonać wyzwalaczem wiele poleceń SQL za jednym razem, należy w definicji użyć klauzuli go, która rozdziela zapytania SQL; np:

update tabela_1 set [pole_1]=1

go

update tabela_2 set [pole_1]=1

go

 

UWAGA 2

Ponieważ wyzwalacz OnChangeField jest wyzwalany zawsze, gdy wartość dowolnego pola w rekordzie (kontrolki) została zmieniona, przy dużej ilości pól w tabeli będzie on wykonywany wielokrotnie, co może spowolnić działanie programu. Aby tego uniknąć można w definicji wyzwalacza zastosować klauzulę onchange={nazwa_pola_1},{nazwa_pola_1},...,{nazwa_pola_n}, wtedy będzie on wyzwalany tylko przy zmianie wartości pól wymienionych w klauzuli.

 

UWAGA 3

Jeśli chcemy wykryć, czy tabela jest w danej chwili w trybie Insert (nowy rekord został dostawiony); np. w AfterPost chcemy aby wyzwalacz inaczej zachowywał się przy wstawieniu rekordu niż przy edycji, można użyć zmiennej specjalnej <INS>, która zwraca wtedy True; np:

if <INS> begin

 zrób coś, bo wstawiono nowy rekord

end

else begin

 zrób coś, bo istniejący rekord został zmieniony

end

 

UWAGA 4

Jeśli po usunięciu rekordu w AfterDelete chcemy zmodyfikować jakieś powiązania skasowanego rekordu z innymi tabelami (np.usunąć z nich jego Ide), to można wykorzystać zmienną specjalną <DEL_IDE>, która zwraca identyfikator usuniętego rekordu; np:

update TABELA set [X_IRec]=0 where [X_IRec]=<DEL_IDE>

Przykład wykorzystania wyzwalacza jest dostępny tutaj.