1. Czym są triggery? #
Triggery to mechanizm automatyzacji dostępny w programie bs4 core. Mogą być definiowane przez administratora posiadającego odpowiednie uprawnienia.
Trigger jest uruchamiany w określonym momencie pracy programu lub użytkownika i wykonuje zaprogramowaną sekwencję operacji. Może składać się z kilku prostych poleceń albo stanowić rozbudowany mechanizm zawierający kilkadziesiąt komend.
Każdy trigger składa się z uporządkowanego ciągu komend wykonywanych zgodnie z przygotowanym programem.
2. Edytor triggerów #
Do tworzenia i modyfikowania triggerów służy graficzny edytor triggerów.
Sposób jego działania przypomina projekt edukacyjny Scratch. Program triggera buduje się z graficznych klocków reprezentujących poszczególne komendy. Klocki można przeciągać, łączyć i układać w odpowiedniej kolejności.
Takie rozwiązanie pozwala tworzyć automatyzacje bez ręcznego pisania tradycyjnego kodu programu.
3. Do czego służą triggery? #
Triggery mogą być wykorzystywane w wielu obszarach działania programu.
3.1. Dynamiczne formularze #
Za pomocą triggerów można zmieniać wygląd i sposób działania formularza w zależności od danych wprowadzanych przez użytkownika.
Trigger może między innymi:
- ukrywać i wyświetlać pola formularza,
- dynamicznie dodawać pola,
- ustawiać wartości w polach,
- odczytywać wartości wprowadzone przez użytkownika,
- wyświetlać komunikaty informacyjne,
- wyświetlać komunikaty o błędach,
- odświeżać formularz lub zestawienie,
- zamykać otwarte okno.
Dzięki temu formularz może reagować na działania użytkownika i wyświetlać wyłącznie te informacje, które są potrzebne w danej sytuacji.
3.2. Walidacja i porządkowanie danych #
Triggery mogą sprawdzać poprawność danych przed ich zapisaniem.
Przykładowo trigger może:
- sprawdzić, czy wymagane pola zostały wypełnione,
- zweryfikować poprawność wprowadzonych wartości,
- uporządkować lub przekształcić dane przed zapisem,
- zablokować zapis rekordu, jeżeli dane są niepoprawne,
- wyświetlić użytkownikowi informację o konieczności poprawienia formularza.
3.3. Automatyczne operacje na bazie danych #
Triggery mogą odczytywać i zapisywać dane w bazie programu.
Mogą między innymi:
- pobierać pojedynczy obiekt z bazy danych,
- pobierać zestaw obiektów spełniających określone warunki,
- zmieniać wartości pól obiektu,
- zapisywać zmodyfikowane obiekty,
- dodawać nowe, powiązane rekordy,
- wykonywać zbiorcze operacje na wielu rekordach.
Przykładowo do przycisku na formularzu można przypisać trigger, który automatycznie doda do tematu sprzedażowego zestaw pozycji dobranych na podstawie cech kontrahenta.
3.4. Integracje i operacje specjalne #
Triggery mogą również wykonywać bardziej zaawansowane działania, takie jak:
- uruchomienie innego triggera,
- wykonanie importu danych,
- uruchomienie usługi serwerowej,
- wykonanie operacji integracyjnej,
- wywołanie zdalnej strony internetowej,
- wylosowanie wartości,
- sprawdzenie lokalizacji GPS.
4. Kiedy może zostać uruchomiony trigger? #
W programie bs4 core dostępnych jest wiele miejsc, w których można wskazać trigger do wykonania. Liczba dostępnych punktów konfiguracyjnych wynosi około czterdziestu.
Do najczęściej wykorzystywanych momentów uruchamiania triggerów należą:
4.1. Operacje na obiektach #
Trigger może zostać wykonany:
- przed dodaniem nowego obiektu do bazy danych,
- po dodaniu nowego obiektu do bazy danych,
- przed usunięciem obiektu,
- po usunięciu obiektu,
- przed aktualizacją wybranych pól obiektu,
- po aktualizacji wybranych pól obiektu.
4.2. Operacje wykonywane przez użytkownika #
Trigger może zostać uruchomiony:
- po kliknięciu przycisku w formularzu,
- podczas otwierania strony,
- po kliknięciu opcji w lokalnym menu strony,
- podczas wyświetlania określonej kolumny w zestawieniu.
4.3. Kontrola dostępu do stron #
Trigger może uczestniczyć w ustalaniu, czy dana strona powinna być dostępna dla użytkownika.
Na podstawie wyniku działania triggera program może zezwolić na otwarcie strony albo odmówić do niej dostępu.
4.4. Obsługa poczty elektronicznej #
Trigger może zostać wykorzystany:
- w regule poczty e-mail,
- podczas sprawdzania otrzymanej wiadomości,
- do wykonywania operacji zależnych od treści lub parametrów wiadomości.
4.5. Monitoring #
Trigger może być wykonywany podczas sprawdzania mechanizmu monitoringu, w szczególności wtedy, gdy warunek zdefiniowany w monitoringu zostanie spełniony.
5. Wartość zwracana przez trigger #
W zależności od miejsca uruchomienia triggera jego wynik może mieć różne znaczenie.
5.1. Wynik logiczny #
W niektórych sytuacjach trigger zwraca wartość logiczną:
true– warunek został spełniony,false– warunek nie został spełniony.
Przykładowo trigger wykonywany przed dodaniem obiektu może decydować, czy obiekt zostanie zapisany w bazie danych.
Jeżeli trigger zwróci true, obiekt może zostać dodany. Jeżeli zwróci false, zapis może zostać zablokowany.
5.2. Konkretna wartość #
Trigger może również zwrócić konkretną wartość, która zostanie wykorzystana przez program.
Może to być na przykład:
- treść znacznika w szablonie,
- wartość wyświetlana w kolumnie zestawienia,
- tekst wyświetlany użytkownikowi,
- wynik obliczenia.
5.3. Brak znaczenia wartości zwracanej #
W wielu miejscach wynik triggera nie ma znaczenia. Dotyczy to na przykład triggerów wykonywanych po dodaniu obiektu do bazy danych.
W takiej sytuacji istotne jest samo wykonanie zaprogramowanych operacji, a nie wartość zwrócona na końcu działania triggera.
6. Czas wykonania triggera #
Trigger może zostać wykonany natychmiast albo z opóźnieniem.
6.1. Wykonanie natychmiastowe #
Trigger jest uruchamiany bezpośrednio w momencie wystąpienia zdarzenia, na przykład natychmiast po dodaniu obiektu.
6.2. Wykonanie kolejkowane #
Program może umieścić trigger w kolejce i wykonać go później:
- w ciągu kilku minut,
- o określonej godzinie,
- w określonym dniu i o określonej godzinie.
Opóźnione wykonanie może być stosowane między innymi w przypadku operacji obciążających bazę danych. Trigger może wtedy zostać uruchomiony w czasie, gdy obciążenie systemu jest mniejsze.
Sposób wykonania ustawia się w kartotece triggera.
7. Powiązanie triggera z klasą #
Trigger może być:
- niezależny od konkretnej klasy,
- powiązany z obiektami określonej klasy.
Jeżeli trigger ma być wykonywany w związku z dodaniem, zmianą lub usunięciem obiektu konkretnej klasy, należy wskazać tę klasę w definicji triggera.
Przykładowo trigger wykonywany po dodaniu kontrahenta powinien być powiązany z klasą reprezentującą kontrahentów.
Powiązanie z klasą pozwala również korzystać w programie triggera z informacji dotyczących aktualnie przetwarzanego obiektu.
8. Powiązanie triggera ze stroną #
Trigger może być powiązany z konkretną stroną programu.
Powiązanie ze stroną umożliwia korzystanie z komend odnoszących się do jej formularza. Trigger może wtedy między innymi:
- odczytywać wartości z pól formularza,
- ustawiać wartości pól,
- ukrywać lub wyświetlać elementy formularza,
- dynamicznie zmieniać sposób działania strony.
Stronę powiązaną z triggerem wskazuje się w kartotece triggera.
9. Rodzaje komend triggera #
Podczas konfigurowania triggera administrator ma do dyspozycji kilkadziesiąt typów komend. Można je podzielić na kilka podstawowych grup.
9.1. Komendy sterujące i warunkowe #
Do tej grupy należą między innymi:
if,if else,while,for each,continue,break.
Ich działanie jest analogiczne do instrukcji stosowanych w językach programowania.
Pozwalają one między innymi:
- wykonywać operacje wyłącznie po spełnieniu warunku,
- definiować alternatywne ścieżki działania,
- przetwarzać kolejne elementy zbioru,
- powtarzać operacje,
- przerwać wykonywanie pętli,
- przejść do kolejnego elementu.
9.2. Operacje na bazie danych #
Komendy tej grupy pozwalają:
- wczytać konkretny obiekt,
- pobrać zestaw obiektów spełniających określone warunki,
- ustawić wartości pól obiektu,
- zapisać obiekt w bazie danych,
- dodawać lub aktualizować powiązane informacje.
9.3. Obliczenia i operacje na tekstach #
Komendy obliczeniowe mogą:
- wyliczać wartości na podstawie wzorów matematycznych,
- łączyć teksty,
- modyfikować teksty,
- wykonywać operacje na datach,
- przekształcać dane do postaci wymaganej w dalszej części triggera.
9.4. Operacje na formularzach i interfejsie użytkownika #
Komendy interfejsu użytkownika mogą:
- odczytać wartość pola formularza,
- ustawić wartość pola formularza,
- wyświetlić komunikat błędu,
- wyświetlić komunikat informacyjny,
- odświeżyć okno,
- zamknąć okno,
- odświeżyć zestawienie,
- ukryć pole,
- wyświetlić pole,
- dynamicznie dodać pole do formularza.
Najczęściej są one wykorzystywane podczas budowania dynamicznych formularzy.
9.5. Komendy specjalne #
Do komend specjalnych należą między innymi:
- wykonanie innego triggera,
- wykonanie importu,
- wykonanie usługi serwerowej,
- wywołanie zdalnej strony WWW,
- losowanie wartości,
- sprawdzenie lokalizacji GPS.
Są one używane rzadziej, ale pozwalają budować zaawansowane automatyzacje i integracje.
10. Zmienne triggerowe #
Podczas tworzenia programu triggera można korzystać ze zmiennych.
Zmienne pozwalają tymczasowo przechowywać dane potrzebne w czasie wykonywania triggera. Można:
- deklarować zmienne,
- przypisywać do nich wartości,
- odczytywać zapisane wartości,
- wykonywać na nich obliczenia i inne operacje.
10.1. Zakres obowiązywania zmiennych #
Zmienna istnieje wyłącznie:
- w obrębie danego triggera,
- podczas konkretnego uruchomienia triggera.
Po zakończeniu działania triggera wartości zmiennych nie są zapamiętywane.
10.2. Typy zmiennych #
Zmienne mogą mieć różne typy, na przykład:
- tekst,
- obiekt,
- tablica,
- data.
Zakres operacji dostępnych dla zmiennej zależy od jej typu.
11. Tworzenie nowego triggera #
Najwygodniejszym sposobem dodania triggera powiązanego z klasą jest rozpoczęcie pracy z poziomu kartoteki tej klasy.
Krok 1. Otwórz kartotekę klasy #
Przejdź do kartoteki klasy, której ma dotyczyć automatyzacja.
Krok 2. Otwórz zakładkę z triggerami #
Przejdź do zakładki Triggery powiązane z klasą.
Krok 3. Dodaj nowy trigger #
Kliknij przycisk Dodaj nowe.
Program utworzy nową kartę triggera.
Krok 4. Uzupełnij informacje podstawowe #
W kartotece triggera można między innymi:
- nadać mu nazwę,
- wprowadzić opis,
- wskazać klasę,
- wskazać powiązaną stronę,
- określić sposób i czas wykonywania,
- ustawić pozostałe atrybuty triggera.
Nazwa i opis powinny jasno informować, do czego służy trigger i w jakiej sytuacji jest wykonywany.
12. Budowanie programu triggera #
Program triggera tworzy się w zakładce Program triggera.
Po lewej stronie ekranu znajduje się lista dostępnych komend. Po prawej stronie znajduje się obszar, w którym budowany jest program triggera.
12.1. Dodawanie komend #
Aby dodać komendę:
- Odszukaj odpowiedni typ komendy w lewej części ekranu.
- Przeciągnij komendę do obszaru programu triggera.
- Umieść ją w odpowiednim miejscu.
- Otwórz edycję komendy.
- Uzupełnij jej parametry.
12.2. Modyfikowanie programu #
Gotowy program można modyfikować metodą „przeciągnij i upuść”.
Możliwe jest:
- przesuwanie istniejących komend,
- zmienianie kolejności ich wykonania,
- umieszczanie komend wewnątrz warunków i pętli,
- edytowanie parametrów komend,
- usuwanie niepotrzebnych elementów.
Kolejność komend ma znaczenie, ponieważ są one wykonywane zgodnie z układem przygotowanym w edytorze.
13. Przypisanie triggera do zdarzenia #
Samo utworzenie programu triggera nie powoduje jeszcze jego automatycznego wykonywania.
Po zdefiniowaniu triggera należy wskazać w odpowiednim miejscu programu, w jakich okolicznościach ma zostać uruchomiony.
Przykład: trigger uruchamiany po dodaniu kontrahenta #
Jeżeli trigger ma być wykonywany po dodaniu każdego obiektu klasy kontrahent:
- Otwórz ustawienia klasy kontrahent.
- Przejdź do zakładki Automatyzacje.
- Odszukaj pole Triggery po dodaniu.
- Wskaż przygotowany trigger.
- Zapisz ustawienia.
Od tej chwili każde dodanie nowego kontrahenta będzie skutkowało uruchomieniem wskazanego triggera.
Analogicznie można przypisywać triggery do innych zdarzeń, na przykład przed zapisem, po aktualizacji, przed usunięciem lub po usunięciu obiektu.
14. Wykonywanie kilku triggerów #
W niektórych miejscach programu można przypisać więcej niż jeden trigger.
Triggery są wtedy wykonywane kolejno. Z tego powodu istotna jest ich kolejność.
Jeżeli kolejny trigger korzysta z danych utworzonych lub zmodyfikowanych przez poprzedni trigger, musi zostać umieszczony za nim na liście wykonywania.
Podczas konfiguracji należy więc sprawdzić:
- które triggery zmieniają dane,
- które triggery korzystają z wyników innych automatyzacji,
- w jakiej kolejności powinny zostać uruchomione.
15. Wywoływanie jednego triggera przez drugi #
Jedna z komend specjalnych pozwala uruchomić inny trigger.
Dzięki temu rozbudowane mechanizmy można dzielić na mniejsze, niezależne części. Poszczególne triggery mogą wtedy pełnić funkcję podobną do funkcji lub procedur w tradycyjnym programowaniu.
Takie podejście pozwala:
- uporządkować rozbudowane automatyzacje,
- wykorzystywać ten sam fragment logiki w wielu miejscach,
- łatwiej testować poszczególne części mechanizmu,
- ograniczyć powtarzanie tych samych komend,
- uprościć późniejszą modyfikację triggerów.
16. Debugowanie triggerów #
Debugowanie służy do analizowania przebiegu wykonania triggera i wykrywania błędów.
16.1. Szczegółowe logowanie #
W każdym triggerze można włączyć szczegółowe logowanie do wskazanego dnia i godziny.
Po włączeniu logowania program zapisuje szczegółowe informacje dotyczące wykonania triggera. Pozwala to ustalić między innymi:
- czy trigger został uruchomiony,
- jakie komendy zostały wykonane,
- w jakiej kolejności wykonano polecenia,
- jakie dane były przetwarzane,
- w którym miejscu wystąpił błąd.
Logowanie powinno być włączane na czas potrzebny do analizy problemu.
16.2. Informacje dostępne w trybie konstruktora #
Jeżeli włączony jest tryb konstruktora, program rejestruje:
- datę ostatniego uruchomienia triggera,
- miejsce, z którego trigger został wywołany.
Informacje te pomagają ustalić, który trigger odpowiadał za określone działanie w programie.
17. Zabezpieczenie przed zapętleniem #
Nieprawidłowo skonfigurowane triggery mogą wzajemnie się uruchamiać i doprowadzić do zapętlenia.
Przykładowo:
- pierwszy trigger aktualizuje obiekt,
- aktualizacja uruchamia drugi trigger,
- drugi trigger ponownie aktualizuje ten sam obiekt,
- aktualizacja ponownie uruchamia pierwszy trigger.
W takiej sytuacji te same komendy mogłyby zostać wykonane bardzo wiele razy w ramach jednej operacji.
Program bs4 core posiada zabezpieczenie przed nadmiernym zapętleniem. Jeżeli podczas jednej akcji liczba wywołań komend stanie się zbyt duża, wykonywanie zostanie zablokowane, a program zgłosi informację o nadmiernym zapętleniu triggera.
Mechanizm ten chroni system przed przeciążeniem.
18. Dobre praktyki tworzenia triggerów #
Podczas projektowania triggerów warto stosować następujące zasady:
- Nadawaj triggerom jednoznaczne nazwy opisujące ich przeznaczenie.
- Uzupełniaj opis triggera, szczególnie w przypadku bardziej rozbudowanych automatyzacji.
- Dziel duże mechanizmy na kilka mniejszych triggerów.
- Zwracaj uwagę na kolejność wykonywania komend.
- Zwracaj uwagę na kolejność kilku triggerów przypisanych do tego samego zdarzenia.
- Sprawdzaj, czy trigger nie uruchamia pośrednio samego siebie.
- Używaj zmiennych o typach odpowiednich do przechowywanych danych.
- Włączaj szczegółowe logowanie podczas testowania i rozwiązywania problemów.
- Testuj automatyzację na ograniczonym zestawie danych przed uruchomieniem jej w pełnym zakresie.
- W przypadku czasochłonnych operacji rozważ kolejkowanie i wykonanie triggera z opóźnieniem.
- Triggery wpływające na zapis danych powinny dokładnie obsługiwać wartości
trueifalse. - Przed zmianą istniejącego triggera sprawdź, w jakich miejscach programu jest on wykorzystywany.