====== Lab 3: Rozbudowa modelu BPMN ====== Proszę rozbudować model do postaci jak na poniższym diagramie: {{:pl:dydaktyka:bim:lab3:process8-eclipse-example.png|}} ===== Zaawansowane elementy ===== ==== Timer Boundary Event ==== Osoby, które dotychczas nie rozbudowały modelu o ten element, proszone są o jego dodanie i konfigurację zgodnie z opisem z [[pl:dydaktyka:bim:lab1#timer_boundary_event|lab 1]]. ==== Mail task ==== Jedno z zadań w podprocesie powinno wysyłać mail do klienta. \\ W pełnym procesie wcześniej należałoby pobrać dodatkowe dane do przesłania maila \\ np. jakich szczegółów chcielibyśmy się dowiedzieć,\\ natomiast u nas na razie zamarkujemy działanie tego zadania. Nie mamy skonfigurowanego serwera poczty, ale możemy zaadresować maila na adres lokalny, \\ np.: ''student@AML-Lab-316.geist.agh.edu.pl''.\\ Po przesłaniu maila możemy sprawdzić w terminalu poleceniem ''mail'', czy mamy go na skrzynce. Proszę w treści maila umieścić dane trzymane w jakiejś zmiennej instancji procesu. ==== Script task ==== Proszę rozbudować model do postaci jak na poniższym diagramie:\\ {{ :pl:dydaktyka:bim:lab3:process8-eclipse-example.png |}} Dla podanych właściwości przygotować formularz w zadaniu //Set formal conditions// (typ boolean): * ''formalCertificates'' - Firma posiada wymagane certyfikaty * ''formalExperience'' - Firma posiada wystarczające doświadczenie * ''formalConflicts'' - Oferta powoduje wystąpienie konfliktu z innymi zamówieniami W zależności od potrzeb można ustawić wartości domyślne w odpowiednich polach przy użyciu atrybutu ''default''. W zadaniu //Check formal conditions// należy wybrać język ''groovy'', a następnie ustawić odpowiednią wartość (''negative'' albo ''positive'') zmiennej ''resOffer''. Aby w groovym zdefiniować zmienną, a następnie wyeksportować ją do naszego procesu należy użyć następującej składni: def resOffer = "negative" /* TODO: sprawdz warunki i w razie potrzeby przestaw resOffer na positive */ execution.setVariable("result", resOffer) Po uruchomieniu procesu proszę sprawdzić, czy odpowiednia zmienna ''result'' została utworzona. Zmienną można również wyświetlić przy okazji jakiegoś zadania typu //UserTask// dodając w XMLu tag: Formal condition check result is: ${result} Elementy języka [[wp>Groovy (programming language)]] są wspierane zgodnie z jego składnią. Ponieważ plugin Activiti do eclipse nie wspiera walidacji składni, można próbować sprawdzać działanie w [[http://groovyconsole.appspot.com/|konsoli online]]. {{:pl:dydaktyka:bim:lab3:eclipse2-designer-gateway.png?200 |}} ** Zakończenie procesu przy negatywnym rezultacie ** Jeśli rezultat formalnego spełnienia warunków jest negatywny, proces powinien się zakończyć. Proszę dodać bramę, która w zależności od rezultatu posteruje przepływem, by odpowiednio zakończyć proces. ==== Multi instance task ==== ** Zatwierdzenie oferty przez członków zarządu ** Aby sensowniej zakończyć proces zamodelujemy zatwierdzenie oferty przez członków zarządu. {{ :pl:dydaktyka:bim:lab3:explorer2-execution-multiinstance.png|}} W tym celu zadanie ''Approve offer'' zdefiniujemy jako wieloinstancyjne. \\ W eclipsie mamy do dyspozycji w zakładce ''Multi instance'' następujące parametry: * **Sequential** -- sekwencyjne (true) lub równoległe (false) wykonanie, * **Loop cardinality** -- liczba instancji (sprawdzana tylko raz, przy utworzeniu zadania, * **Collection** -- zmienna kolekcji (lista użytkowników, którzy mają wykonać zadanie), * **Element variable** -- zmienna przechowująca poszczególnych użytkowników, \\ w celu przypisania ich do zadania, * **Completion condition** -- warunek ukończenia zadania. Sprawdź w [[http://www.activiti.org/userguide/index.html|Activiti User Guide]], w jaki sposób zdefiniować odpowiedni warunek ukończenia zadania. Przyjmijmy, że firma uznaje decyzję zarządu za podjętą, jeśli podjęło ją co najmniej 2ch z 3ch członków zarządu. Ponieważ nie definiowaliśmy jeszcze zmiennej ''board'', proszę dołożyć zmienną ''board'' będącą listą członków zarządu (złożoną z istniejących użytkowników Activiti). Proszę uruchomić proces i przetestować jego działanie dla różnych scenariuszy.