Camunda Forms

Czyli jak zbudować aplikację obsługującą proces biznesowy w godzinę

Narzędzia: Camunda Modeler i Camunda BPM Platform

Uznana platforma BPM ofertuje teraz w darmowej wersji budowę formularzy które są w stanie obsłużyć inicjacje procesu, dostarczenie danych i ich uzupełnianie oraz zatwierdzanie zadań w procesie. Pokażemy jak za pomocą dwóch narzędzi zbudować aplikację która obsłuży zatwierdzanie zgłoszeń o odszkodowanie. Oprogramowanie które będzie Ci potrzebne:

Camunda Modeler [pobierz]

Camunda BPM Platform [pobierz]

Nasz testowy proces będzie prosty: zgłaszający wypełnia wniosek. Definiuje w nim niezbędne do rozpatrzenia wniosku jak np. czego dotyczy sprawa. W zależności od zgłoszonej sprawy, zgłoszenie trafia do różnych grup rozpatrujących zgłoszenia. W procesie występują dwa zadania, każde z nich posiada swój formularz.

Elementy procesu w Camunda Modeler

Otworz Camunda Modeler i wybierz opcję "Create new BPMN Diagram (Camunda Platform)". Proces rozpoczyna się zdarzeniem Start. Po nim mamy Business rule task, Manual task, Gateway i zdarzenia końca.

Kiedy rozpoczniesz tworzenie nowego diagramu BPMN, domyślnie w oknie aplikacji pojawia się wydarzenie "Start". Elementy naszego diagramu procesu będą zawarte w "pool" (polskie nazewnictwo BPM to "basen). Wybierz ten element i przeciągnij nad obiekt "start". Następnie kliknij na "basen" procesu (prostokątna ramka wokół elementów procesu) i nazwij proces oraz nadaj mu unikalny ID. Pole "Participant Id" pozostaw z domyślną wartością - nie będzie nam do niczego potrzebne w tym ćwiczeniu. Dodaj pozostałe elementy procesu - patrz następne punkty.

Tworzymy Decision Model and Notation (DMN)

Drugim po zdarzeniu początkowym (po "Start") obiektem jest task DMN. O DMN przeczytasz więcej na stronie Camundy. Po co nam ten task? Dzięki niemu będziemy wiedzieć kto powinien zaakceptować zgłoszenie. Wypełniający wybiera w formularzu czego dotyczy sprawa i od tej wartości zależy do kogo trafi zgłoszenie. W tasku DMN tworzymy reguły kierujące wniosek do właściwej grupy akceptantów. Po dodaniu zadania w procesie klikamy na ikone klucza i wybieramy "Business Rule Task" - w ten sposób nasz taks będzie odwoływać się do reguł które zdefiniujemy w pliku DMN.

Tworzymy teraz plik DMN. W menu Modelera wybierz "Create new DMN Diagram (Camunda Platform)". Nadajemy ID i nazwę dla definicji DMN.

Plik definicji jest kontenerem który zawiera tabele decyzyjne w których z kolei znajdują się proste lub złożone warunki. Tabele mogą być łączone kaskadowo w pliku DMN.

Klikamy na element diagramu [tabelę decyzyjną], otwiera się nam okno gdzie wprowadzamy ID i nazwę tabeli z warunkami. Jak wyżej, nasz plik DMN może zawierać więcej niż jedną tabelę z regułami/warunkami i mogą się one łączyć kaskadowo.

Klikamy na niebieski element diagramu (ikona tabeli) - otwiera się okno tworzenia reguły biznesowej.

Co zawiera ta tabela? Jak widzisz jest to szereg warunków "When... Then...". Mamy tutaj zatem po stronie "When" zmienną "claim-category" która jeśli będzie mieć odpowiednią wartość, po stronie "Then" reguła zwróci zmienną "approverGroup". W tej tabeli widzisz tylko etykiete nazwaną "Approver Group" - to task "assign approver" który odwołuje się do tej definicji DMN zwraca zmienną określoną w polu "Result Variable".

Na obrazku powyżej nie jest to widoczne ale zauważ że w polu "When" nazwa "Claim category" to tylko etykieta. Jeśli klikniesz na to pole dwukrotnie, rozwiniesz szczegóły. Wtedy zobaczysz że mamy tam miejsce na wpisanie nazwy zmiennej ("Expression") i jej typu. W naszym przypadku będzie to string 'claimcategory'. Task spodziewa się tej zmiennej i przypisanej do niej wartości by w rezultacie zwrócić zmienną która jest zdefiniowana w następnym polu, "Then". Jak w zmiennej wejsciowej, także tutaj widzisz tylko etykete - kliknij dwukrotnie na pole "Then" i wpisz w pole Otput Name nazwę zwracanej zmiennej (w naszym przypadku 'result') oraz typ zmiennej.

Tworzymy User Task odpowiedzialny za zatwierdzanie wniosku

W naszym procesie po Business Rule Task występuje Manual Task który będzie odpowiedzialny za zatwierdzanie zgłoszeń otwieranych przez użytkowników. Wejdź w jego we właściwości  i w zakładce "General", polu "Candidate Groups" wpisz nazwę grupy która będzie uprawniona do akceptacji zgłoszonych wniosków - u nas będzie to grupa która została zdefiniowana w tasku "assign approver" wcześniej - "${approverGroup}". Gdybyś chciał(a) wpisać użytkowników zamiast grupy/grup, możesz wpisać ich w polu "Candidate Users".

Przypisywanie formularza do tasku zatwierdzania zgłoszenia

Następną czynnością jest przypisanie formularza który zostanie użyty przez grupę zatwierdzającą zgłoszenia. Wchodzimy do zakładki "Forms" naszego tasku "approve case" i wpisujemy adres formularza w polu "Form Key" - "camunda-forms:deployment:claimform.form". Formularz utworzymy w następnym kroku. Dla następnego zadania przypisujemy inny formularz: "camunda-forms:deployment:claimapproval.form". Pole "Form Fields" pozostawiamy puste w obu taskach.

Tworzymy gateway sterujący przepływem po decyzji akceptacji wniosku

Po naszym zadaniu "approve case" mamy bramę która steruje przepływem informacji w zależności od tego czy decyzja była pozytywna czy negatywna. Możesz pozostawić domyślne ID tej bramy lub je zmienić - nie ma to znaczenia w naszym przypadku. Przepływ "no" który odchodzi od naszej bramy ma "Condition Type" typu "Expression" i w "Ekspression":  ${!approved}. Przepływ "yes" ma tę wartość ustawioną jako ${approved}

Każdy z przepływów kończy się wydarzeniem końca procesu. Zapisujemy nasz diagram procesu jako "claimprocess.bpmn".

Tworzymy formularze w Camunda Modeler

Zrobiliśmy diagram procesu. Nastepnym krokiem jest stworzenie formularzy dla zgłaszających wnioski i obsługujących zgłoszenia. Rozpoczniemy od formularza dla zgłaszających. W menu Camunda Modeler wybieramy "File => New File => Form (Camunda Platform or Cloud)". W formularzu wstawiamy dwa pola tekstowe - tytul zgłoszenia i opis zgłoszenia. Umieszczamy też pole typu "Select" - zgłaszający wybierze rodzaj sprawy. Na tej podstawie będziemy wiedzieć która grupa akceptująca wnioski powinna zająć się zgłoszeniem.

Zapisujemy plik pod nazwą "claimform.form" i tworzymy następny formularz, formularz akceptacji zgłoszenia:

Zapisujemy plik pod nazwą "claimapproval.form".

Przypisujemy formularz otwarcia zgłoszenia do procesu

Chcemy by przy uruchomieniu procesu przez zgłaszającego automatycznie pojawiał mu się na ekranie formularz w którym wpisze niezbędne szczegóły by przeprocesować wniosek. Formularz który utworzyliśmy wcześniej, "claimform.form", przypisujemy do wydarzenia Start (kółko na początku procesu).

Nasz proces ma jeszcze jedno zadanie które występuje po akceptacji zgłoszenia - "prepare documents". Nie będziemy opisywać tutaj jak ma wyglądać formularz obsługi tego zgłoszenia ani jaka grupa ma się tym zająć - zrób to według własnego uznania.

Deployment procesu i formularzy

OK, mamy gotowe pliki; Decision Model, diagram procesu, formularze. Pora przesłać je wszystkie na platformę BPM. Zakładamy że jest to test a nasza BPM platforma jest uruchomiona testowo na tym samym komputerze na którym tworzysz pliki - przed wysyłką plików na platformę BPM upewnij się że serwer jest uruchomiony. Otworz plik definicji procesu, "claimprocess.bmpn", i wybierz ikonę "Deploy current diagram":

Pamiętaj by do deployment'u dodać pliki formularzy (wybierając je przyciskiem "Select files"). Po dołączeniiu plików, kliknij "Deploy". Jeśli wszystko poszło OK, zobaczysz komunikat "Deployment succeeded". Sprawdź teraz czy deployment jest widoczny na platformie BPM. Zaloguj się do platformy jako administrator i wybierz menu "Cockpit" a następnie menu "Process Definitions". Zobaczysz wśród innych procesów nasz proces: "claim-process".

Tworzenie użytkowników

Nasz proces będzie uruchamiany przez otwarcie zgłoszenia przez użytkownika "john" a zatwierdzany przez użytkownika "mira". John ma już konto na platformie (tworzone wraz z instalacją Camundy) natomiast konto Miry musi być utworzone. Po zalogowaniu się do platformy jako "admin" w górnym, prawym menu wybierz "admin". W menu "Users" wybierz "Create New User". Wprowadź szczegóły użytkownika i zapisz.

Nadawanie uprawnień

Rozpocznij od stworzenia kont użytkowników których użyjesz do testowania procesu (menu "Users"). Domyślnie nowy użytkownik nie ma żadnych uprawnień w Camunda. Zarządzanie uprawnieniami w Camunda jest bardzo rozbudowane. Jeśli chcesz np nadać użytkownikowi Mira dostęp do platofrmy (interfejs web), zaloguj sie jako "admin" i wybierz z menu "admin" (jeśli jeszcze tam nie jesteś). Następnie wybierz z menu "Authorizations" opcję "Manage authorizations". Domyślnie bedziesz mieć wybraną opcję "Applications" (lista po lewj stronie ekranu). W tej opcji, "Application Authorizations", kliknij "Create new authorization". Możesz nadać te uprawnienia użytkownikowi lub, lepiej, grupie. W naszym przypadku to grupa ma dostęp do platformy a użytkownik przynależy do tej grupy.

Po dodaniu uprawnień do aplikacji użytkownik może zalogować się do platformy - patrz niżej, "Logujemy się jako użytkownik...". Nie będziemy jednak mieć uprawnień do uruchamiania procesu. Nadajemy wiec w następnym kroku uprawnienia do uruchamiania procesów - "Process Instance". Wybieramy "Process Instance" i w menu "Process Instance Authorizations" dodajemy użytkownika lub grupę. W polu "Resource ID" możemy ograniczyć uruchamiania procesu do konkretnego ID, wpisujemy tam np "claim-process" lub nadać uprawnienia do wszystkich procesów  (pozostaje domyślna gwiazdka).

Musimy jeszcze nadać uprawnienia użytkownikowi lub grupie do definicji procesu: "Process Definition => Process Definition Authorizations". Tutaj także możemy ograniczyć widoczność procesów do konkretnej liczby procesów wstawiając ID procesu.

Logujemy się jako użytkownik "mira" do platformy BPM

Użytkownik "mira" (pamiętaj by takie konto stworzyć) loguje się do aplikacji wybierając z głównego menu opcję "Tasklist". Logowanie się do aplikacji "admin" spowoduje odrzucenie logowania. Spójrz na obrazek poniżej jak wybrać właściwą opcję logowania:

Po zalogowaniu się jako użytkownik platformy BPM masz dostęp do swoich zadań a także możesz inicjować proces do którego masz uprawnienia. By uruchomić proces (w naszym przypadku by przesłać wniosek do akceptacji), wybierasz z menu "Start process".

Po kliknięciu pojawi się formularz w którym wprowadzasz wszystkie niezbędne dane. Po wysłaniu proces zostaje uruchomiany ze zmiennymi które zostały zdefiniowane w formularzu i instancja procesu dociera do zadania "approve case". Aktualny stan procesu możesz podejrzeć jako administrator logując się do Platformy BPM i wybierajac z menu "Cockpit" a następnie właściwą definicję procesu.

OK, nasz testowy projekt jest gotowy!