Język skryptowy reguł

Ostatnia modyfikacja Maj 13, 2019

W celu opisania logiki procesu tworzy się skrypty. 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

Przykład 1

[Kwota] = 123;

Skrypt ten powoduje podstawienie wartość 123 do pola o nazwie Kwota. Pole [Kwota] powinno być typu numerycznego lub kwotowego.

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.

Przykład 2

[Miasto] = "Warszawa";

Skrypt ten powoduje podstawienie wartość typu tekstowego Warszawa do pola o nazwie Miasto. Pole [Miasto] musi być typu tekstowego, aby można było przypisać do niego wartość tekstową.

Wartość tekstową podajemy w cudzysłowach „tekst” lub apostrofach ‚tekst’.

Przykład 3

Można również przypisać wartość z jednego pola do drugiego.

[Miasto] = [Miejscowość wyjazdu];

Skrypt ten spowoduje skopiowanie wartość z pola o nazwie „Miejscowość wyjazdu” do pola o nazwie „Miasto”. Oczywiście oba pola powinny być tego samego typu.

Przykład 4

W regułach możemy również używać funkcji dostępnych na Platformie AMODIT.

W tym przykładzie użyto funkcji ShowMessage(), która wyświetli użytkownikowi komunikat o treści „Komunikat”.

ShowMessage(1,"Komunikat"); 

 

 

Wiedząc już jak podstawić lub pobrać wartość z pola formularza, zobaczmy jak można sterować przepływem zdarzeń, korzystając z warunku logicznego „jeżeli”.

Warunki logiczne

Zacznijmy od najczęściej stosowanej konstrukcji, czyli warunku logicznego. Zmieniają one przepływ wykonania reguły / kodu zgodnie z pewnymi kryteriami: wyrażenie „if” i wyrażenia „if-else”.

if ( warunek)
{    
   ... wykonaj gdy warunek jest spełniony ...
} 
else 
{    
      ... wykonaj gdy warunek nie jest spełniony ... 
}

Przykład praktyczny 1

Załóżmy że:

  • na formularzu istnieje pole o nazwie „Kwota netto”,
  • w procesie istnieją co najmniej takie etapy „Opis merytoryczny”, „Akceptacja finansowa”, „Księgowanie”
  • zamierzamy sterować przepływem w ten sposób, że jeżeli kwota netto jest większa lub równa kwocie 10000, to sprawa kierowana jest na etap „Akceptacja finansowa”, a gdy kwota netto jest mniejsza od 10000 to sprawa kierowana jest bezpośrednio na etap „Księgowanie”
if ( [Kwota netto] >= 10000 )
{
    ForwardCase([Akceptujący],"Akceptacja finansowa");
}
else
{
    ForwardCase("Księgowość","Księgowanie");
}

Proszę zwrócić uwagę na operatory porównania. W skryptach Amodit używamy następujących operatorów porównania.

    • ==  ( równe )   /podwójny znak równości/
    • !=   ( nierówne )
    • >    ( większe )
    • >=  ( większe lub równe )
    • <    ( mniejsze )
    • <= ( mniejsze lub równe )

 

Warunki mogą być łączone. Do tego celu zsłużą operatory logiczne. W Amodit stosujemy następujące operatory logiczne:

    • &&  ( operator „i”, czyli i to i to )
    • ||     (operator „lub”, czyli to lub to )
    • !       ( operator zaprzeczenia, czyli nie to )

Przykład praktyczny 2

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 opertora lub ||

if ( [Kwota netto] >= 10000  ||  [Kontrahent] == "ABC sp. z o.o.") 
{     
     ForwardCase([Akceptujący],"Akceptacja finansowa"); 
}
 else 
{    
    ForwardCase("Księgowość","Księgowanie"); 
}

Obliczenia

Silnik reguł biznesowych pozwala na wykonywanie obliczeń matematycznych. Stosujemy tradycyjnie używane symbole do wykonania tych działań jak

    • +   ( dodawanie ) służy również do łączenie tekstów – zobacz Przykład praktyczny 2 poniżej
    • –    ( odejmowanie )
    • *   ( mnożenie )
    • /   ( dzielenie )
    • %  ( modulo )

Przykład praktyczny 1

Załóżmy, że na formularzu istnieją pola „Kwota netto”, „Stawka VAT”, „VAT”, „Kwota brutto”. Do wartości pól odwołujemy się poprzez podanie nazwy w nawiasach kwadratowych []

[VAT] = [Kwota netto] * [Stawka VAT];
[Kwota brutto] = [Kwota netto] + [VAT];

Przykład praktyczny 2

Możemy użyć znaku + 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”

Zmienne pomocnicze

Czasami jest potrzeba zapamiętania wartości i użycia jej w dalszej części skryptu/reguly. Zmienna to po prostu nazwa typu „temporary”,”wartosc”, itp. Nazwa zmiennej musi zaczynać się od litery lub podkreślenia. Zaleca się, dla przejrzystości kodu nazywania zmiennych z początkowym znakiem podkreślenia np „_cena”. Zmiennych używa się bezposrednio bez znaków [] lub „”

Przykład praktyczny

Załóżmy, że sprawa powinna mieć wypełnione pole „Nazwisko” i mieć załączony przynajmniej jeden dokument. Oczywiście można od razu skonfigurować formularz tak, że pole „Nazwisko” jest wymagane, wtedy pierwszy warunek z poniższego skryptu byłby zbedny, ale tu dla zobrazowania jak można sprawdzać np zawartość pól, załóżmy że pole „Nazwisko” nie jest skonfigurowane na farmularzu jako wymagane, a wymagalność sprawdzamy z poziomu reguły.

Gdy warunki przejdą bez błędów i zmienna _Error nadal będzie miała wartość false, to sprawa zostabnie przekazana do osoby o loginie „jkowalski” na etap „Akceptowanie”

_Error = false;
if ( [Nazwisko] == "" )
{
     ShowMessage(1,"Nie uzupełniłeś pola Nazwisko")
    _Error = true;
}
if ( CountDocuments() == 0 )
{
     ShowMessage(1,"Nie załączyłeś żadnego dokumentu")
    _Error = true;
}
if ( _Error == false )
{
     ForwardCase("jkowalski","Akceptowanie")
}

 

 

 

 

 

 

Przykład 7

Istotą reguł biznesowych na Platformie AMODIT jest sterowanie przebiegiem zdarzeń. Do tego celu stosujemy prostą konstrukcję dla zapisania warunku. Prześledźmy poniższy skrypt.

if ([Wartość] > 5000) 
{ 
    ForwardCase("g_iksinski","Akceptacja finansowa"); 
} 
else 
{ 
    ForwardCase("Księgowość","Księgowanie"); 
}

W pierwszym wierszu znajduje się „warunek”, od którego zależy wykonanie dalszej części skryptu.

Warunek odwołuje się do pola na formularzu o nazwie „Wartość”. Zapis w nawiasach kwadratowych [ ] oznacza właśnie odwołanie się do pola na formularzu.

Warunek sprawdza czy zawartość pola o nazwie „Wartość” jest większa od liczby 5000.

Jeżeli warunek będzie spełniony, to wykonany zostanie skrypt w linii nr 3.

Jeżeli warunek nie będzie spełniony, to wykonany zostanie skrypt w linii nr 7.

Część skryptu do wykonania zamyka się w nawiasach klamrowych { }.

W obu przypadkach wykorzystana została funkcja ForwardCase, która przekazuje sprawę do określonej osoby, na określony etap.

W warunku możemy stosować poniższe operatory porównania:

==    (równość)  obie strony warunku muszą być równe. Zwróć uwagę, że w warunku stosujemy podwójny znak równości.
!=    (nierówne) strony warunku muszą być różne
>    (większe niż) lewa strona warunku musi być większa niż prawa
>=    (większe lub równe) lewa strona warunku musi być większa lub równa prawej
<    (mniejsze niż) lewa strona warunku musi być mniejsza niż prawa
<=    (mniejsze lub równe) lewa strona warunku musi być mniejsza lub równa prawej

Przykład 8

Automatyczna konwersja typów.

Bardzo często zachodzi potrzeba prezentowania komunikatów, które informują
użytkownika o różnych zdarzeniach lub wartościach. Komunikaty są to
ciągi znaków, jednak do ich budowy możemy użyć każdego typu zmiennej a
silnik reguł automatycznie dokona ich konwersji na typ tekstowy.

[Upust]= 0.9;
ShowMessage(2, "Współczynniki upustu wynosi: " + [Upust]);

Pomimo, że pole [Upust] jest polem liczbowym, to w drugiej linii kodu zostaje automatycznie skonwertowane na ciąg znaków i system prawidłowo wyświetli komunikat o treści „Współczynnik upustu wynosi: 0.9”

Przykład 9

Użycie zmiennych lokalnych.

Zmienna lokalna przechowuje wartość, którą można wykorzystać w dowolnym miejscu reguły w której została użyta. Nie można odwołać się do zmiennej  z innych reguł.

Nazwa zmiennej może składać się wyłącznie z liter. Nazwa jest czuła na wielkość liter, zatem ToJestNazwa i tojestnazwa, to dwie różne zmienne.

Pierwsze użycie zmiennej w regule musi być związane z podstawieniem wartości.
Dzięki temu zmienna przyjmuje typ zgodny z tym pierwszym podstawieniem.

ratio = 1.25;

Zmienna ratio przyjęła typ liczbowy na skutek przypisania do niej wartości liczbowej.

nazwa = „To jest ciąg znaków.”;

Zmienna nazwa przyjęła typ ciągu znaków.

multipliedRatio = ratio * 25;

Zmienna multipledRatio przyjęła typ liczbowy gdyż wcześniej przypisana została wartość 1.25 do zmiennej ratio.

ratio = „Ponownie przypisana wartość zmieniająca typ”;

Jeżeli ponownie przypiszemy wartość do wcześniej użytej zmiennej, to od tego momentu zmieni ona typ.

wartoscLogiczna1 = true;

Przypisanie wartości logicznej. Można użyć słowa true pisanego zarówno małą jak i dużą literą. Podobnie używamy słowa false.

isRatioZero = ratio == 0;

Zmienna isRatioZero będzie typu logicznego, gdyż wynikiem działania operatora porównania == jest 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.