====== 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.