Wyzwalacze użytkownika - Instrukcja obsługi programu R2faktury, R2fakturyPRO RESET2 Oprogramowanie
Strona używa plików cookies (tzw. ciasteczka) do przechowywania i uzyskiwania dostępu do tej informacji w celach funkcjonalnych, statystycznych i reklamowych.
Użytkownik wyraża zgodę oraz określa warunki przechowywania lub uzyskiwania dostępu do informacji zawartej w plikach cookies za pomocą ustawień przeglądarki.
Dowiedz się więcej odwiedzając strony:

Polityka Prywatności    Regulamin sklepu      Jak wyłączyć cookies?

Przejdź do serwisu

Instrukcja obsługi R2faktury



Wyzwalacze użytkownika

Wyzwalacze użytkownika

,    - INSTRUKCJA ADMINISTRATORA - PARAMETRYZACJA SYSTEMU - Konfiguracja bazy danych

Wyzwalacze służą do wykonywania określonej 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 konkretnej procedury składowanej lub tylko pokazanie dowolnego komunikatu. W poniższym przykładzie zdefiniowany zostanie wyzwalacz, który będzie wstawiał w utworzone pole użytkownika (widoczne w oknie KONTRAHENCI na zakładce Inne) datę ostatniej wystawionej kontrahentowi faktury.

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

Dla nowego wyzwalacza określamy:

  • Tabela - nazwa tabeli w aplikacji, na której będzie działać wyzwalacz użytkownika

  • Wyzwalacz - moment uruchomienia wyzwalacza:

    • BeforeInsert - przed utworzeniem nowego rekordu

    • AfterInsert - po utworzeniu nowego rekordu

    • BeforeEdit - przed edycją istniejącego rekordu

    • AfterEdit - po edycji istniejącego rekordu

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

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

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

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

    • BeforeDelete - przed kasowaniem rekordu

    • AfterDelete - po kasowaniu rekordu

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

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

  • Typ - typ wyzwalacza:

    • Akcja - zostanie wykonanie polecenie SQL podane w Definicji

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

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

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

    • Błą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 - warunek, który musi być spełniony, żeby wykonała się akcja określona w polu Definicja, np. <INS> AND {X_IWaluta}=3, czyli tylko w trakcie wprowadzania nowego kontrahenta i tylko dla waluty EUR, która ma identyfikator X_I=3

  • 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 kontrah set [OstatniaSprzedaz]={DataW} where [X_I]={X_INabywca} wykonane na zdarzeniu AfterPost tabeli FAKTURY uaktualni pole OstatniaSprzedaz w tabeli KONTRAHENCI tak by pole to było równe polu DataW (Data wystawienia). 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. {KONTRAHENCI.X_I}.
    Dwuklik myszy na tym polu powoduje otwarcie okna wygodnego edytora zapytań SQL.

  • Komunikat - treść komunikatu

  • Aktywny - czy wyzwalacz ma działać.

UWAGI:

  1. Używając nazwy tabeli w polu Definicja należy używać nazwy tabeli w aplikacji. Lista tabel jest dostępna tutaj Lista modułów danych i tabel.

  2. 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
    Po ostatnim go musi być wpisana pusta linia.

  3. 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.

  4. Wyzwalacze OnChangeField działają tylko na tabelach związanych z widocznym oknem, czyli OnChangeField na tabeli Faktury będzie działał tylko wtedy gdy jest otwarte okno FAKTURY. Wyjątkiem są tabele POZYCJE FAKTUR, POZYCJE PZ i POZYCJE MM, które nie mają własnych okien. W związku z tym wyzwalacze określone dla tych okien będą działały przy otwartych oknach (odpowiednio) FAKTURY, PZ lub MM.

  5. 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

  6. 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> .

  7. Jak widać w okienku na górze warunek może być wpisany bezpośrednio w polu Definicja z pominięciem pola Warunek. Takie rozwiązanie jest dopuszczalne, ale niezalecane. Lepszym rozwiązaniem jest wpisanie warunku w polu Warunek, a zapytania SQL modyfikującego bazę danych w polu Definicja, zwłaszcza, że wtedy w polu Definicja można wpisać kilka zapytań porozdzielanych klauzulą go.

  8. Używając w polach Warunek lub Definicja wartości pól aktualnego rekordu, np. {X_I}, można w szczególnych wypadkach uściślić jak to pole będzie traktowane dodając odpowiednie prefiksy:

    • % - jako Integer. Domyślnie {X_I} jest zamieniane na wartość stringową pola X_I. Oznacza to, że dla wartości NULL wyrażenie {X_I} będzie pustym stringiem, co może spowodować błędy przy przetwarzaniu definicji wyzwalacza. W takiej sytuacji lepszym rozwiązaniem będzie użycie wyrażenia {%X_I}, które dla wartości NULL zwróci 0, a dla pozostałych wartosci to samo co {X_I}

    • # - jako DisplayText. Zamiast domyślnej wartości stringowej danego pola zostanie zwrócona wartość sformatowana, czyli np. dla dat będzie to data w formacie DD-MM-RRRR, dla pól typu currency będzie to wartość w formacie NNN.NNN.NNN,DD, a dla pól logicznych Tak/Nie

Przykład 1.

W poniższym przykładzie zdefiniowany zostanie wyzwalacz, który będzie wstawiał w utworzone pole użytkownika (widoczne w oknie KONTRAHENCI na zakładce Inne) datę ostatniej sprzedaży danemu kontrahentowi.