Język skryptowy reguł
Logika biznesowa procesu zapisana jest w regułach. Reguły mogą, ale nie muszą, zawierać sekwencje działań, które zostaną wykonane po uruchomieniu reguły. Do zapisu tych sekwencji działań stosuje się prosty język skryptowy. Tak jak w Ecelu są makra i funkcje, tak w AMODIT stosuje się język skryptowy i funkcje. W skryptach stosuje się tylko kilka prostych konstrukcji, które w połączeniu z funkcjami stanowią niezwykłe silne narzędzie do opisu i sterowania procesami.
Podstawy języka skryptowego w AMODIT
Dostęp do danych z pól formularza
Wszystkie pola z formularza dostępne są w regułach.
[Kwota] = 123;
- Skrypt ten powoduje podstawienie wartości 123 do pola o nazwie Kwota. Podstawienie następuje zawsze „w lewą stronę”, czyli to co jest z prawej strony znaku = jest wstawiane do tego co jest po lewej stronie znaku =.
- Nazwę pola ujmujemy w nawias kwadratowy []. Jeżeli nazwa składa się z kilku wyrazów lub zawiera inne znaki, to całość ujmujemy w nawias kwadratowy np. [Nazwa kontrahenta]. Zostawiamy spacje oraz inne znaki, które tworzą nazwę pola.
- Znak = oznacza tu i w innych przykładach podstawienie, przypisanie wartości znajdującej się po prawej stronie znaku do pola, którego nazwę podajemy z lewej strony.
- Znak ; oznacza koniec wyrażenia. Powinien być stosowany, jednak jego brak nie powoduje błędu składniowego.
[Miasto] = "Warszawa";
- Skrypt ten powoduje podstawienie wartość typu tekstowego „Warszawa” do pola o nazwie Miasto.
- Wartość tekstową podajemy w cudzysłowie „tekst” lub apostrofach 'tekst’.
[Miasto] = [Miejscowość wyjazdu];
- Skrypt ten spowoduje pobranie wartości z pola o nazwie [Miejscowość wyjazdu] i wstawienie tej wartości do pola o nazwie [Miasto]. Pamiętaj: zawsze z prawej do lewej.
- Jeżeli obecnie na formularzu w polu [Miejscowość wyjazdu] przykładowo jest wartość „Poznań”, to na skutek wykonania tego skryptu, w polu [Miasto] również będzie wartość „Poznań”, bez względu na to co wcześniej było w polu [Miasto].
Działania matematyczne
Silnik reguł biznesowych pozwala na wykonywanie działań matematycznych. Stosujemy tradycyjnie używane symbole do wykonania tych działań jak
- + (plus) – dodawanie
- – (minus) – odejmowanie
- * ( gwiazdka) – mnożenie
- / ( ukośnik) – dzielenie
- % ( procent) – modulo
[VAT] = [Kwota netto] * [Stawka VAT];
- Skrypt powoduje pobranie wartości z pól [Kwota netto] i [Stawka VAT], przemnożenie ich i wstawienie wyniku do pola [VAT]
[Kwota brutto] = [Kwota netto] + [VAT];
- Skrypt powoduje pobranie wartości z pola [Kwota netto] i wartości z pola [VAT], dodanie ich do siebie i umieszczenie wyniku w polu [Kwota brutto]
Uwaga: Zachowane są wszystkie zasady dotyczące kolejności wykonywania działań oraz używania nawiasów () dla grupowania działań np
[Kwota brutto] = [Kwota netto] + [Kwota netto] * [Stawka VAT]albo
[Kwota brutto] = [Kwota netto] * (1 + [Stawka VAT])
Łączenie ciągów znaków
Możemy użyć znaku + (plus) dla łączenia tekstów.
[Nazwa użytkownika] = "Imię: " + [Imię] + ", Nazwisko: " + [Nazwisko];
- Załóżmy, że pole [Imię] zawiera wartość „Jan”, a pole [Nazwisko] zawiera wartość „Kowalski”.
- Wykonanie powyższego skryptu spowoduje, że do pola [Nazwa użytkownika] zostanie podstawiona wartość „Imię: Jan, Nazwisko: Kowalski”
Używanie funkcji w skryptach
W regułach możemy również używać funkcji dostępnych na Platformie AMODIT. Dostępnych jest ponad dwieście różnych funkcji. W tym przykładzie użyto funkcji ShowMessage(), która wyświetli użytkownikowi komunikat o treści „Komunikat”.
ShowMessage(1,"Komunikat");
Sterowanie przepływem zdarzeń
Wiedząc już jak podstawić lub pobrać wartość z pola formularza, zobaczmy jak można sterować przepływem zdarzeń, korzystając z instrukcji warunkowej „jeżeli”.
if ( warunek logiczny ) { ... wykonaj gdy warunek jest spełniony ... } else { ... wykonaj gdy warunek nie jest spełniony ... }
Prawidłowy zapis instrukcji warunkowej składa się z kilku stałych elementów
- słowo kluczowe if
- warunek logiczny umieszczony w nawiasach okrągłych ( )
- skrypt do wykonania, gdy warunek logiczny jest spełniony. Skrypt ten objęty jest nawiasami klamrowymi { }
W tym miejscu można zakończyć instrukcję warunkową, chyba że chcemy obsłużyć również sytuację, gdy warunek logiczny nie jest spełniony, wtedy dopisujemy
- słowo kluczowe else
- i skrypt do wykonania, gdy warunek nie jest spełniony. Skrypt ten objęty jest nawiasami klamrowymi { }
Przykład praktyczny
if ( [Kwota netto] >= 10000 ) { ForwardCase([Akceptujący],"Akceptacja finansowa"); } else { ForwardCase("Księgowość","Księgowanie"); }
Przeanalizujmy powyższy przykład instrukcji warunkowej
- występuje w nim słowo kluczowe if
- w nawiasach okrągłych ( ) umieszczono warunek logiczny, który sprawdza czy [Kwota netto] jest większa lub równa 10000.
- w nawiasach klamrowych { } umieszczono skrypt, który zostanie wykonany gdy warunek logiczny będzie spełniony. Jest to funkcja ForwardCase() z odpowiednimi parametrami
- zastosowano słowo kluczowe else, aby obsłużyć sytuację gdy warunek logiczny nie będzie spełniony
- w nawiasach klamrowych { } umieszczono skrypt, który zostanie wykonany gdy warunek logiczny nie będzie spełniony. Jest to również funkcja ForwardCase() z odpowiednimi parametrami
Warunek logiczny
Warunek logiczny, poprzez działania wykonane na swoich argumentach, przyjmuje w wyniku wartość logiczną true (prawda) lub false (fałsz). Przykładowo
1 == 2
- Wynikiem jest false, ponieważ jeden nie równa się dwa.
10 > 5
- Wynikiem jest true, ponieważ dziesięć jest większe od pięć
Operatory porównania w warunkach logicznych
Proszę zwrócić uwagę na operatory porównania. W skryptach AMODIT używamy następujących operatorów porównania.
-
- == ( podwójny znak równości ) – równe
- != ( wykrzyknik i znak równości ) – nierówne
- > ( znak większości) – większe od
- >= ( znak większości i znak równości ) – większe lub równe
- < ( znak mniejszości ) – mniejsze od
- <= ( znak mniejszości i znak równości ) – mniejsze lub równe
Przykłady praktyczne
[Miasto] == "Warszawa"
- warunek logiczny będzie spełniony gdy pole o nazwie [Miasto] będzie zawierało tekst „Warszawa”
[Osoba akceptująca] != ""
- często stosowana konstrukcja dla sprawdzenia czy pole nie jest puste, tzn czy zawiera jakąkolwiek wartość. Ten przykład sprawdza czy pole [Osoba akceptująca] nie jest puste.
W AMODIT ten sposób sprawdzenia !=””, czyli nie jest puste, jako ciąg znaków stosuje się do większości typów pól, nie tylko do pól tekstowych. Można tak sprawdzić np czy pole typu data nie jest puste [Data sprzedaży] != „”
Spójniki logiczne
Warunki logiczne mogą być łączone. Do tego celu służą spójniki logiczne. W Amodit stosujemy następujące spójniki logiczne:
- && ( podwójny znak ampersand, et) – spójnik logiczny i
- || ( podwójny znak pipe, kreska pionowa) spójnik logiczny lub
używamy również negacji
- ! ( wykrzyknik) – operator logiczny negacja
Przykład praktyczny
if ( [Kwota netto] >= 10000 || [Kontrahent] == "ABC sp. z o.o." ) { ForwardCase([Akceptujący],"Akceptacja finansowa"); } else { ForwardCase("Księgowość","Księgowanie"); }
- W tym przykładzie sprawa zostanie skierowana do akceptacji finansowej dla każdej faktury powyżej 10000 oraz zawsze gdy kontrahentem będzie spółka ABC (bez względu na kwotę) – użyto operatora lub ||
if ( ![Czy faktura korygująca?] ) { .... }
- w przykładzie użyto znaku ! jako negacji oraz pola na formularzu o nazwie [Czy faktura korygująca?], które jest typu „tak/nie”. Ten zapis należy czytać w następujący sposób „jeżeli nie jest to faktura korygująca”
Słowa kluczowe true, false
W AMODIT używane są słowa kluczowe oznaczające wartość logiczną
- true prawda
- false fałsz
Prześledźmy to na przykładzie
if ( [Czy faktura korygująca?] == true ) { ..... } |
if ( [Czy faktura korygująca?]) { ..... } |
Oba przykłady są tożsame. Warunek logiczny można zapisać jako [Czy faktura korygująca?] == true albo po prostu jako [Czy faktura korygująca?], ponieważ pole [Czy faktura korygująca?] jest polem typu „tak/nie” czyli już samo zwraca wartość logiczną true albo false.
Zmienne pomocnicze
Czasami jest potrzeba zapamiętania jakiejś wartości i użycia jej w dalszej części skryptu/reguły. Do tego celu służą zmienne. Zmienna jest synonimem pewnego obszaru pamięci, służącego do przechowywania danych. Zmienna ma nazwę oraz wartość. Nazwa pozwala na jednoznaczną identyfikację zmiennej. W AMODIT:
- nazwa zmiennej musi zaczynać się literą lub znakiem podkreślenia;
- długość nazwy, to przynajmniej jedna litera;
- nazwy zmiennej nie umieszczamy w cudzysłowie, apostrofach ani w nawiasach kwadratowych;
- nazwę zmiennej zapisujemy w skrypcie jako jeden, nieprzerwany ciąg znaków;
- pierwsze użycie zmiennej w regule musi być związane z podstawieniem wartości;
- zmienna przyjmuje typ zgodny z pierwszym podstawieniem wartości, a później typ może być zmieniony poprzez podstawienie wartości innego typu.
Przykład praktyczny
_temp_stage = "Opis merytoryczny" ForwardCase([Osoba opisująca], _temp_stage)
- w tym przykładzie powołano zmienną o nazwie _temp_stage. Proszę zwrócić uwagę, że:
- stanowi ona jeden ciąg znaków bez spacji
- zaczyna się od znaku podkreślenia
- jest zapisana i używana dalej w funkcji Forwadcase() jako słowo bez cudzysłowów ani nawiasów kwadratowych.
- zmiennej przypisano wartość tekstową, zatem jest ona teraz typu tekstowego
Typ zmiennej, konwersja
ratio = 1.25;
- Zmienna ratio przyjęła typ liczbowy na skutek przypisania do niej wartości liczbowej.
multipliedRatio = ratio * 25;
- Zmienna multipledRatio przyjęła typ liczbowy gdyż wcześniej przypisana została wartość 1.25 do zmiennej ratio, a działanie arytmetyczne zwraca w wyniku liczbę
ratio = "Ponownie przypisana wartość zmieniająca typ";
- Jeżeli ponownie, w tej samej regule, przypiszemy wartość do wcześniej użytej zmiennej, to od tego momentu zmieni ona typ. W tym przypadku od tego momentu zmienna ratio jest typu tekstowego.
wartoscLogiczna1 = true;
- Można użyć słowa kluczowego true lub false, przypisując wartość logiczną dla zmiennej
isRatioZero = ratio == 0;
- Zmienna isRatioZero będzie typu logicznego, gdyż wynikiem warunku logicznego ratio == 0 jest wartość logiczna prawda lub fałsz.
error = 3 * previouslyUnknownVariable;
- Nie można użyć zmiennej po raz pierwszy w powyższy sposób. Zawsze najpierw musi być jej przypisana wartość. W powyższym przykładzie działanie reguły zgłosi błąd.
Zmienne obiektowe
W niektórych przypadkach jako argument funkcji mogą być użyte zmienne obiektowe. Deklaracja zmiennej obiektowej następuje poprzez jej użycie. Przykładowo:
x1.firstName = "Jan" x1.LastName = "Kowalski"
zmienna x1 jest zmienną obiektową i mogłaby być użyta jako parametr funkcji. Przykładem funkcji, w której używa się zmiennych obiektowych jest: TrustCenterSendToSign