Elementy procesu - czynności
Utwórz element danych
- Czynność umożliwia stworzenie nowej instancji obiektu danych. Dla czynności musisz wskazać zmienną, do której zostanie przypisany stworzony obiekt, czyli wcześniej niezbędne jest określenie Zmiennych dla procesu, patrz: Określenie zmiennych.
- Z racji tego, iż jest to operacja bazodanowa, typ zmiennej procesu musi być to struktura danych.
- Przeciągnij z przybornika czynność na obszar roboczy i połącz ją z pozostałymi czynnościami.
- Wskaż typ danych, jaki ma zostać utworzony – na panelu Właściwości wybierz opcję w polu Nazwa zmiennej. W przypadku na rysunku poniżej można wybrać spośród 2 struktur danych, które zostały zdefiniowane na panelu Zmienne.
- Struktura danych procesu, traktowana jest jako główna struktura procesu i zawsze ma nazwę PrimaryDataElement i nie można jej zmienić.

- Zapisz proces i go uruchom.
- Po uruchomieniu procesu, uaktywnij panel Bazy danych i odszukaj w bazie danych strukturę danych i otwórz edytor zapytań SQL

- Wykonaj zapytanie SQL, aby sprawdzić czy wpis został utworzony.

W powyższym przykładzie po odrzuceniu wniosku przez użytkownika, informacja jest odkładana do tabeli Komunikat z datą zmiany statusu wniosku oraz informacją o odrzuceniu wniosku i dla jakiego klienta.
- Przejdź do właściwości Mapowania na czynności.

- Określ mapowania dla pól Data i Tresc. Kliknij prawym na polu i wybierz Przypisz.

- Dla pola daty w edytorze formuł wyszukaj funkcję Dzisiaj i przeciągnij ją na węzeł formuły.

- Dla pola treści zwracanego komunikatu zdefiniuj komunikat. W poniższym przykładzie wykorzystano funkcję konkatenacji.

- W kolejnych argumentach funkcji Konkatenacja wprowadź treść komunikatu. W przykładzie poniżej treść komunikatu to stały tekst "Odrzucono wniosek klienta" i kolejno imię i nazwisko klienta w kontekście którego procesowano wniosek.
- Przejdź na zakładkę Zmienne procesu i z in-PrimaryDataElement (czyli struktury głównej dla procesu) przeciągnij pola Imie i Nazwisko na kolejne argumenty funkcji.

Punkt kontrolny
Czynność Punkt kontrolny powoduje zapis do bazy danych i zamknięcie transakcji związanej z wykonywaniem fragmentu procesu. Inaczej jest to punkt automatycznego zatwierdzania transakcji.
Operacje wykonywane w ramach procesu są wykonywane w ramach jednej transakcji na bazie danych, która rozpoczyna się w momencie uruchomienia lub wzbudzenia procesu, a kończy się w momencie zakończenia procesu, jego uśpienia (dojścia do czynności Stan) lub dojścia do punktu kontrolnego. Osiągnięcie przez proces punktu kontrolnego zamyka bieżącą transakcję w bazie danych, jednocześnie zapisując wszystkie zmienne w procesie do bazy danych, a następnie automatycznie otwiera kolejną, nową transakcję bazodanową obejmującą dalszy fragment procesu.
- Przeciągnij z przybornika czynność na obszar roboczy i połącz ją z pozostałymi czynnościami.
Mapowanie
Czynność Mapowanie pozwala na określenie konkretnych wartości wybranych pól w strukturze wynikowej lub zdefiniowanie wartości pola poprzez użycie mechanizmu formuł, pozwalającego obliczyć wartość jednego lub więcej pól.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Kliknij dwukrotnie na czynności (zostaniesz od razu przekierowany do edytora mapowań) lub zaznacz czynność i na panelu Właściwości w sekcji Mapowania wybierz przycisk
i przejdź do edytora mapowań.

- W wyświetlonym oknie określ mapowanie.
- Struktura źródłowa jest to struktura pierwotna, która została określona w zmiennych, zatem może to być cała struktura danych lub zmienne lokalne, które dodano lub poszczególne parametry wejściowe i wyjściowe. Z niej pobierane są dane.
- Struktura docelowa jest to struktura, na której odbywa się właściwe mapowanie i do której zapisywane są wartości.
- Możesz użyć opcji przeciągnij i upuść aby przypisać wartość ze struktury źródłowej danego pola na pole do struktury docelowej.

- Jeżeli chcesz określić bardziej złożone mapowanie, np. zwracać w polu wyliczoną wartość lub wartość słownikową, kliknij prawym przyciskiem myszy na polu, na którym chcesz dodać mapowanie i naciśnij Przypisz.
- Zostanie otwarte okno edytora formuł, w którym możesz zdefiniować formułę, posługując się dostępnymi funkcjami (arytmetyczne, porównywanie, konwertery, data i czas, logiczne, tekstowe, listy i inne).
- W poniższym przypadku obliczana jest rata kredytu, a wynik dzielenia jest zwracany w zaokrągleniu do dwóch miejsc po przecinku. Wyszukaj funkcję Zaokrąglenie do dwóch miejsc, a następnie funkcję Iloraz i przeciągnij ją na węzeł formuły.

- Przejdź na zakładkę Zmienne i wybierz Zmienne procesu. Przeciągnij do formuły te pola, które mają zostać podzielone. W tym przypadku są to pola KwotaKredytu oraz OkresKredytowania.

- Jeżeli chcesz dodać kolejny element/argument do formuły, naciśnij prawym klawiszem myszy na węźle formuły i wybierz opcję Dodaj argument.

- W nowym argumencie możesz przypisać pole ze struktury danych procesu jak w poprzednim przypadku lub kliknij dwukrotnie i wpisz wartość.

Lista wszystkich mapowań dostępna jest na zakładce Lista mapowań, z której możesz przejść do edycji danego mapowania lub je usunąć.
Zanim dane zostaną zapisane do bazy danych, przeprowadzane są wszystkie mapowania. Jeżeli w trakcie wykonywania kolejnych mapowań wystąpi wyjątek, wówczas żadne informacje nie zostaną zapisane do bazy danych. Kolejność mapowania nie jest bez znaczenia. Ma ona znaczenie, gdy jedno pole ze struktury będzie przyjmować wartość drugiego, a następnie to, które było źródłem danych, zmieni wartość.

Mapowanie warunkowe
Podczas określania mapowania możesz także wprowadzić mapowanie warunkowe. Opcja jest przydatna w przypadku, gdy dla kilku pól należy wprowadzić takie samo mapowanie, ale tylko wówczas, gdy spełniony jest ten sam warunek. Domyślnie warunek jest ustawiony na Prawda, co oznacza, że mapowanie jest wykonywane zawsze.
- Przejdź do mapowania z panelu Właściwości.
- W oknie Edytora mapowań wybierz przycisk Mapowanie warunkowe.

- Wprowadź warunek w sekcji Warunek mapowania. Wybierz przycisk umożliwiający przejście do edytora formuł.

Stan
Zobacz jak zdefiniować formularz i podpiąć go do czynności Stan
Budowanie formularza i podpięcie do procesu
Czynność Stan pozwala określić:
- Formularz, który będzie wyświetlany użytkownikowi aplikacji, gdy proces dojdzie do danego kroku.
- Listę portów wyjściowych, czyli wyjść z czynności – dla każdego z portów wyjściowych wpisywany jest kod akcji (dowolny napis). Jeśli na formularzu zostanie wykonana akcja Wzbudź proces (np. po naciśnięciu przycisku) i w ramach niej zostanie przekazany do procesu kod akcji, wówczas proces wyjdzie z czynności odpowiednim portem.
Dla przykładu:
Jeżeli zdefiniujesz formularz, na którym możesz zaakceptować dane lub je odrzucić, wówczas w czynności Stan musisz określić 2 wyjścia odpowiadające pozytywnej lub negatywnej ścieżce biznesowej.
Przed przystąpieniem do konfiguracji czynności utwórz wcześniej formularz, który będzie wykorzystany w procesie.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Przejdź do panelu Właściwości i podepnij formularz w sekcji Formularz podglądu.

- Następnie określ liczbę portów wyjściowych. Wybierz przycisk
w sekcji Porty wyjściowe.
- W oknie Edycja portów wybierz przycisk Dodaj > Wyjście akcji użytkownika i wprowadź nazwę oraz kod akcji.

Kod akcji wpisany w procesie należy podać w definicji akcji Wzbudź proces na formularzu. W zależności od otrzymanego kodu akcji proces następnie pójdzie wybraną ścieżką.
W skonfigurowanej czynności widocznej na rysunku powyżej zdefiniowane są 2 wyjścia. Proces będzie kontynuował działanie w przypadku otrzymania jednego ze zdefiniowanych kodów akcji: Oblicz lub Odrzuć.

Dla przykładu:
- Zdefiniowano formularz z akcjami, na którym użytkownik decyduje, czy potwierdza dane, czy je odrzuca.
- Podczas konfiguracji akcji na formularzu podpinany jest proces, a wskazany kod akcji określa, którą ścieżką proces ma być dalej wykonywany (Kod akcji Oblicz lub Odrzuć).
- W poniższym przykładzie do każdej akcji został podpięty ten sam proces, a wskazano tylko różne kody akcji dla rozróżnienia ścieżki pozytywnej i negatywnej.

Wyjście czasowe
Możesz określić wyjście czasowe i skonfigurować moment wzbudzenia procesu. W przypadku użycia opcji Timeout należy pamiętać, że traktuje ona skonfigurowaną wartość jako czas w UTC.

Zastosowanie wyjścia czasowego do integracji z innymi systemami
Jeśli na określonym etapie przebiegu procesu chcesz oczekiwać na zakończenie działania w zewnętrznym systemie, dodaj do czynności Stan wyjście czasowe (np. co 30 sekund) kierujące do czynności odpytującej zewnętrzny system:
- W przypadku uzyskania satysfakcjonującej odpowiedzi sterowanie procesem powinno zostać przekierowane do dalszych kroków.
- W przypadku braku odpowiedzi sterowanie powinno wrócić z powrotem do tego samego stanu.
Jeśli oczekiwanie na działanie w systemie zewnętrznym ma być ograniczone czasowo:
-
dla wyjścia czasowego określ właściwość Oczekiwanie wygasa i za pomocą formuły przypisz jej maksymalny czas, po którym wyjście czasowe przestanie obowiązywać,
-
dodaj drugie wyjście czasowe z właściwością Oczekiwanie do równą lub późniejszą niż właściwość Oczekiwanie wygasa w poprzednim wyjściu czasowym – proces wyjdzie tym wyjściem czasowym w momencie, gdy czas oczekiwania na wykonanie akcji w systemie zewnętrznym upłynie.

Zobacz jak zdefiniować formularz i podpiąć go do czynności Stan
Budowanie formularza i podpięcie do procesu
Decyzja
Dla czynności Decyzja podobnie jak dla czynności Stan można określić wiele portów wyjściowych. Element decyzyjny umożliwia wybór ścieżki działania procesu, w zależności od warunków określonych w czynności. Zadaniem użytkownika jest określenie warunków, jakie muszą być spełnione i wskazanie wyjścia, które powinno zostać wybrane.
Rozróżniamy dwa rodzaje portów:
- Wyjście warunkowe – proces wyjdzie danym portem jeśli warunek będzie spełniony.
- Wyjście domyślne – proces wyjdzie tym portem, jeśli żaden z warunków na wcześniej zdefiniowanych wyjściach nie będzie spełniony. Wyjście to powinno być ostatnie w kolejności.
Warunki sprawdzane są w kolejności ułożenia na liście. Proces wyjdzie pierwszym portem, dla którego warunek będzie spełniony.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Następnie określ liczbę portów wyjściowych. Wybierz przycisk
w sekcji Porty wyjściowe.
- W oknie Edycja portów wybierz przycisk Dodaj > Wyjście warunkowe lub Wyjście domyślne w zależności od tego, czy chcesz wprowadzić warunek dla jednego z wyjść.

- Jeżeli wybrałeś Wyjście warunkowe, przejdź do sekcji Warunek, a następnie edytora formuł i wprowadź warunek.
- W oknie edytora formuł przeciągnij funkcję, której chcesz użyć, a następnie skonfiguruj jej argumenty. W poniższym przypadku sprawdzane jest czy istnieje wartość w polu KwotaKredytu.

- Dodaj kolejny port i wybierz opcję wyjście domyślne.
- Nazwij porty.
Poniżej przykład skonfigurowanej czynności Decyzja z 2 portami wyjściowymi. W zależności od tego, czy klient jest nowym użytkownikiem (wyjście warunkowe) czy nie (wyjście domyślne), proces dalej będzie przechodził jedną ze ścieżek określonych w czynności.
Pamiętaj o dodaniu parametrów wejściowych i wyjściowych jeżeli wymaga tego konfiguracja warunku w czynności.

Proces asynchroniczny i synchroniczny
Wykorzystanie tych czynności umożliwia z poziomu danego procesu uruchamianie innych procesów.
Jeśli w procesie głównym wykorzystasz czynność Proces asynchroniczny, wówczas nowo uruchomiony proces będzie działać równolegle do bieżącego procesu. Po uruchomieniu (zainicjowaniu działania) nowego procesu w czynności będą kontynuowane kroki procesu głównego.
Proces asynchroniczny będzie wykonywany całkowicie niezależnie od procesu głównego. Nie można zakładać żadnej relacji pomiędzy czasem wykonywania poszczególnych kroków tych dwóch procesów.
Aby zsynchronizować wykonanie procesów równoległych, użyj czynności Oczekiwanie na proces (patrz: Oczekiwanie na proces - Synchronizacja).
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Przejdź do panelu Właściwości i wskaż proces, który ma zostać uruchomiony.

- Zarówno dla czynności Proces asynchroniczny, jak i Proces synchroniczny możesz dodatkowo określić mapowania wejściowe i wyjściowe.
- Wybierz przycisk
w sekcji Mapowania wejściowe i Mapowania wyjściowe i dodaj mapowania.
- W edytorze mapowań określ mapowania. Skorzystaj z prostego przypisania wartości pola lub z zaawansowanej opcji i przejdź do edytora formuł. Zasada działania opisana przy czynności Mapowanie.

Osobne wyjścia z podprocesu
W czynności Proces synchroniczny możesz obsłużyć każde zakończenie podprocesu osobno. Po włączeniu tej opcji każdy element Koniec podprocesu staje się osobnym portem wyjściowym czynności w procesie głównym. Dzięki temu proces główny może pójść inną ścieżką w zależności od tego, w jaki sposób zakończył się podproces.
Opcja jest dostępna wyłącznie dla czynności Proces synchroniczny. W przypadku procesu asynchronicznego proces główny nie czeka na zakończenie podprocesu, więc nie może reagować na sposób jego zakończenia.
Nazwy portów wyjściowych są pobierane z właściwości Id elementów Koniec w podprocesie. Przykładowo, jeśli podproces ma dwa elementy Koniec o identyfikatorach Koniec1 i Koniec2, czynność Proces synchroniczny w procesie głównym otrzyma dwa porty wyjściowe o tych samych nazwach.

Aby skonfigurować osobne wyjścia:
- Otwórz podproces, zaznacz kolejno każdy element Koniec i w panelu Właściwości w polu Id wprowadź nazwę opisującą dany sposób zakończenia, np. Zaakceptowany lub Odrzucony. Ta nazwa będzie widoczna jako nazwa portu wyjściowego w procesie głównym, dlatego warto, aby jasno wskazywała, co oznacza dana ścieżka.
- W procesie głównym zaznacz czynność Proces synchroniczny i na panelu Właściwości wybierz Tak w polu Podziel wyjścia.

- Połącz każdy z portów wyjściowych czynności z kolejnymi elementami procesu głównego.
Oczekiwanie na proces - Synchronizacja
Czynność Oczekiwanie na proces oczekuje na podproces asynchroniczny.
Jeżeli użyłeś w procesie czynności do wywołania procesu asynchronicznego, wówczas warto użyć czynności synchronizacji (oczekiwania na proces), który będzie oczekiwać na zakończenie procesu asynchronicznego lub osiągnięcie przez niego określonego stanu.
Do czynności oczekiwania na proces niezbędne jest podanie Id instancji procesu asynchronicznego – należy to uwzględnić w mapowaniach wyjściowych czynności uruchamiającej proces asynchroniczny.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- W czynności Proces asynchroniczny niezbędne jest ustawienie mapowania wyjściowego, w którym zostanie przekazane Id procesu asynchronicznego.
- W panelu Zmienne dodaj zmienną lokalną IdProcesu typu Guid.
- Przejdź do panelu Właściwości czynności Proces asynchroniczny i wybierz przycisk
w sekcji Mapowania wyjściowe.
- Zdefiniuj mapowanie: przeciągnij ze struktury źródłowej CreatedInstanceID na pole typu Guid, które dodałeś w Zmiennych (IdProcesu).

- Przejdź teraz do czynności Oczekiwanie na proces. W sekcji Identyfikator instancji podprocesu asynchronicznego w polu Formuła wybierz przycisk
, aby wskazać Id instancji procesu, na który ma czekać czynność Oczekiwanie na proces. Odwołujesz się tutaj do zmiennej IdProcesu, ustawionej w poprzednim kroku w mapowaniu czynności Proces asynchroniczny.
- W edytorze formuł przejdź do zmiennych procesu i przeciągnij pole IdProcesu na okno formuły.

W czynności Oczekiwanie na proces możesz także określić, że proces główny ma czekać nie na zakończenie podprocesu, ale na osiągnięcie przez niego wskazanego stanu.
- Zaznacz czynność Oczekiwanie na proces i przejdź na panel Właściwości.
- W polu Oczekuj na stan wybierz opcję Tak. Zostanie wyświetlona dodatkowa opcja umożliwiająca wskazanie podprocesu asynchronicznego.

- W polu Podproces asynchroniczny wskaż podproces. Pojawi się pole Stan w procesie asynchronicznym.
- Z listy w polu Stan w procesie asynchronicznym wybierz stan, na który ma czekać proces główny.
Lista zawiera wszystkie czynności Stan zdefiniowane we wskazanym podprocesie. Każdy stan jest widoczny na liście pod nazwą z jego właściwości Id, a nie z pola Nazwa wyświetlana. Na poniższym przykładzie czynność Stan w podprocesie ma nazwę wyświetlaną Stan i identyfikator ObliczRating, dlatego na liście w czynności Oczekiwanie na proces widoczna jest pozycja ObliczRating.

Aby łatwo rozpoznać stany na liście, nadaj im w podprocesie znaczące identyfikatory. Zaznacz czynność Stan w podprocesie i w panelu Właściwości w polu Id wprowadź nazwę opisującą dany etap, np. ObliczRating zamiast domyślnego Stan1.
Czynność Oczekiwanie na proces ma domyślnie 3 porty wyjściowe, które możesz określić. Czyli zachowanie podczas prawidłowego wykonania procesu, timeoutu lub w przypadku błędu. Należy określić wszystkie wyjścia czynności i połączyć je z kolejnymi elementami procesu.
Jeżeli nie chcesz określać różnych zachowań w procesie w przypadku błędu lub timeoutu możesz wszystkie wyjścia połączyć z tą samą czynnością co w przypadku prawidłowego wykonania procesu czyli success.
- Dla wyjścia z czynności Oczekiwanie na proces typu timeout możesz określić czas oczekiwania na wykonanie procesu asynchronicznego w milisekundach.
- Zaznacz czynność Oczekiwanie na proces i przejdź do panelu Właściwości.
- W sekcji Czas oczekiwania wprowadź wartość (w milisekundach).

Maksymalny czas oczekiwania to 2 minuty, nawet jeśli podasz większą wartość zostanie ona obcięta do 2 minut.
Wiele procesów asynchronicznych
Czynność umożliwia uruchomienie naraz kilku procesów asynchronicznych.
Jeżeli chcesz uruchomić kilka procesów asynchronicznych możesz je zdefiniować w jednej czynności, bez potrzeby dodawania osobnych czynności dla każdego z procesów.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Zaznacz czynność i przejdź do panelu Właściwości i wybierz przycisk
w sekcji Aktywności.

- Dodaj elementy kolekcji czyli procesy asynchroniczne, które będą uruchamiane w ramach czynności.
- Wybierz przycisk Dodaj, a następnie we Właściwościach procesu wskaż ścieżkę do procesu, który chcesz uruchomić w czynności.
- Jeśli tego potrzebujesz, określ mapowania wejściowe i wyjściowe.
- Jeżeli chcesz dodać kolejny proces wybierz Dodaj i postępuj jak powyżej.

Synchronizacja wielu procesów
Czynność Synchronizacja wielu procesów synchronizuje procesy dodane w obrębie czynności. Dojście do czynności Synchronizacja wielu procesów spowoduje, że proces będzie oczekiwał dopóki nie zostaną zakończone wszystkie procesy wskazane w czynności.
Synchronizacja wielu procesów bazuje tylko na oczekiwaniu na zakończenie wszystkich podanych procesów. Jeśli chcesz podać szczegółowe parametry synchronizacji, użyj czynności Oczekiwanie na proces.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- W tym przypadku zostały dodane 2 czynności Proces asynchroniczny z podpiętymi procesami do wykonania asynchronicznego
- Przed przystąpieniem do konfigurowania czynności synchronizacji niezbędne jest dodanie w czynnościach Proces asynchroniczny mapowań wyjściowych, w których zostanie przekazane Id procesu asynchronicznego.
- W panelu Zmienne dodaj zmienne lokalne IdProcesu1 i IdProcesu2 typu Guid. Potrzebne są 2 zmienne, ponieważ uruchamiane są 2 procesy asynchroniczne.

- Przejdź do czynności Proces asynchroniczny i w panelu Właściwości przejdź do mapowań wyjściowych.
- Zdefiniuj mapowanie: przeciągnij ze struktury źródłowej CreatedInstanceID na pole typu Guid, które dodałeś w Zmiennych (IdProcesu1).
- To samo wykonaj dla drugiej czynności Proces asynchroniczny i określ mapowanie wyjściowe dla pola IdProcesu2.

- Teraz można przejść do konfiguracji czynności Synchronizacja wielu procesów. Aby określić listę procesów asynchronicznych przejdź do panelu Właściwości i wybierz przycisk
, aby przejść do Edytora formuł, w którym zostanie przekazana lista procesów.

Aby poprawnie zdefiniować formułę z listą procesów użyj następujących funkcji:
- Wyszukaj funkcję Konkatenacja i przeciągnij na węzeł formuły.
- Następnie wyszukaj funkcję Identyfikator na tekst i przeciągnij na jeden z argumentów formuły.

- Przejdź na zakładkę Zmienne > Zmienne procesu i w pole Identyfikator przeciągnij pole IdProcesu1.
- W drugim argumencie funkcji kliknij dwukrotnie i wpisz znak średnika ;

- Kliknij prawym na węźle formuły na polu Konkatenacja i wybierz Dodaj argument.
- Na dodany argument przeciągnij funkcję Identyfikator na tekst, a następnie ze zmiennych procesu pole IdProcesu2.
- Zapisz formułę.

Czynność Synchronizacja wielu procesów ma 3 porty wyjściowe, które są używane odpowiednio w następujących sytuacjach:
- Poprawne zakończenie wykonania procesów (bez błędów).
- Wystąpienie timeoutu przed zakończeniem wykonania procesów.
- Wystąpienie błędu w jednym ze wskazanych procesów.
Wyjście typu Timeout
- Dla wyjścia z czynności typu timeout możesz określić czas oczekiwania na wykonanie procesu asynchronicznego w milisekundach.
- Zaznacz czynność Synchronizacja wielu procesów i przejdź do panelu Właściwości.
- W sekcji Czas oczekiwania wprowadź wartość (wartość w milisekundach).
Maksymalny czas oczekiwania to 2 minuty, nawet jeśli podasz większą wartość zostanie ona obcięta do 2 minut. Jeśli chcesz oczekiwać na proces dłużej, zastosuj konstrukcję pętli, z czynnością Stan, w której dodaj wyjście czasowe. Zastosowanie czynności Stan z wyjściem czasowym spowoduje uśpienie procesu i wyładowanie go z pamięci.
Wzbudź proces
Czynność umożliwia wzbudzenie innego procesu. Dla czynności niezbędne jest podanie kodu akcji aby móc wzbudzić proces (czyli określenie jaki kod akcji zostanie przekazany do uśpionego procesu) oraz Id instancji procesu, który ma zostać wzbudzony.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Przejdź do panelu Właściwości i w sekcji Kod akcji wprowadź kod akcji zdefiniowany na czynności Stan w procesie, który chcesz wzbudzić. W tym przypadku jest to wartość Oblicz.

- Aby wybrać właściwy kod, przejdź do procesu, który chcesz wzbudzić. Zaznacz czynność Stan, przejdź do panelu Właściwości i sekcji Porty wyjściowe. Wpisz jeden z kodów akcji, które zdefiniowałeś w portach wyjściowych.

- Kolejnym krokiem jest wprowadzenie Id procesu, który chcesz wzbudzić. W tym celu należy uruchomić ten proces i przejść do menedżera procesów.
- Wybierz przycisk Uruchom proces, a następnie z menu głównego wybierz Narzędzia i Menedżer procesów.

- Możesz także przejść do przebiegu uruchomionego procesu i wybrać przycisk przenoszący do menedżera procesów.

- W oknie Menedżer procesów odszukaj uruchomiony proces i skopiuj wartość z kolumny Id instancji, np. klikając wiersz prawym przyciskiem myszy i wybierając Kopiuj do schowka. Id instancji zaznaczonego procesu jest widoczne także na panelu Właściwości w sekcji Aktywacja.

Id instancji możesz odczytać także bez otwierania menedżera procesów. Karta przebiegu procesu otwiera się automatycznie po wybraniu akcji Uruchom proces, a na panelu Właściwości w sekcji Aktywacja widoczne jest pole Id instancji (patrz zrzut w kroku 6). Możesz je skopiować bezpośrednio stamtąd.
- Wróć do procesu, w którym używasz czynności Wzbudź proces, przejdź do panelu Właściwości i wprowadź w sekcji Id instancji skopiowane Id instancji.

Wyznaczenie Id instancji formułą
Zamiast wpisywać skopiowane Id ręcznie, możesz wyznaczyć je formułą, wskazując proces bezpośrednio z serwera wersji:
- Zaznacz czynność Wzbudź proces i przejdź na panel Właściwości.
- W sekcji Id instancji w polu Sposób określenia wybierz Formuła i otwórz edytor formuł.
- W edytorze formuł przejdź na zakładkę Zmienne, a następnie do sekcji Serwer wersji.
- Odszukaj proces, który chcesz wzbudzić, i przeciągnij go na okno formuły.
Po upuszczeniu elementu edytor automatycznie dodaje funkcję Id wersji na Guid, która konwertuje identyfikator elementu z serwera wersji na wartość typu Guid wymaganą w polu Id instancji. Nie musisz dodawać tej funkcji samodzielnie.

Algorytm/Tabela
Czynność Algorytm umożliwia wywołanie w procesie algorytmu, a czynność Tabela wywołuje tabelę decyzyjną. Więcej informacji jak tworzyć algorytmy i tabele patrz: Algorytmy oraz Tabele decyzyjne.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Przejdź do panelu Właściwości czynności i wybierz przycisk
w sekcji Tabela lub Algorytm aby wczytać odpowiedni algorytm/tabelę.
- Zarówno dla czynności Algorytm jak i Tabela niezbędne jest uzupełnienie daty algorytmu. Zarówno tabele jak i algorytmy mogą mieć różne wersje, które obowiązują w poszczególnych przedziałach czasowych, stąd ważne jest wprowadzenie odpowiedniej daty, tak aby został podpięty algorytm/tabela z obowiązującej wersji w danym czasie. Więcej o wersjach tabel patrz: Wersjonowanie tabel.
- Możesz także określić mapowania wejściowe oraz wyjściowe.
- Po otwarciu edytora mapowań w oknie struktury docelowej (na mapowaniach wejściowych) znajduje się ta struktura danych, która została wykorzystana w algorytmie, a w przypadku tabeli dane użyte do definiowania kluczy tabeli. Więcej o algorytmach i tabelach patrz: Tabele decyzyjne, Algorytmy.

- Z kolei w mapowaniach wyjściowych strukturą docelową będzie ponownie struktura danych procesu, gdzie będzie można przekazać wartości obliczone przez algorytm/tabele do procesu.

Usługa sieciowa
Czynność umożliwia wywołanie i komunikację z zewnętrznymi serwisami, w tym również wywołanie pakietu przetwarzania utworzonego w archITekcie i opublikowanego jako usługa.
Komunikacja z zewnętrznymi serwisami
Wywołanie zewnętrznej usługi
Jeżeli chcesz wywołać zewnętrzną usługę za pomocą czynności Usługa sieciowa, wówczas przeciągnij czynność na obszar roboczy i poprawnie ją skonfiguruj w panelu Właściwości.
Źródło WSDL – może to być adres url do WSDL lub ścieżka do pliku z WSDL’em lub plik WSDL.
Obsługiwane rodzaje źródeł:
- Adres usługi, np.
http://test/service.wsdl - Ścieżka do pliku np.
E:\Myservice.wsdl - Ścieżka do folderu np.
E:\WSDLs\ - Wiele plików lub folderów, np.
E:\MyService.wsdl| E:\MyService.xsd(oddzielone znakiem nowej linii lub|) - Single WSDL – XML opisujący usługę (zaczynający się od
<?xml version="1.0" encoding="UTF-8"?>)
Źródło jest wykorzystywane do wygenerowania kodu proxy podczas projektowania procesu, a w czasie wykonania procesu wygenerowany kod proxy jest kompilowany. Odświeżenie źródła skutkuje ponownym wygenerowaniem kodu proxy i zapisaniem go w czynności.
- Jeżeli wprowadziłeś poprawne dane czyli adres lub ścieżkę dla źródła WSDL, wówczas zostanie wygenerowany kod proxy wraz z datą wygenerowania, inaczej mówiąc zostanie nawiązane połączenie z serwisem.

- W kolejnym kroku wybierz metodę jakiej chcesz użyć; lista dostępnych metod będzie taka jaką oferuje zewnętrzna usługa.
- Jeżeli potrzebujesz, określ mapowania wejściowe i wyjściowe. Jeżeli wprowadzisz mapowania, zostaną wyświetlone dodatkowe opcje gdzie możesz zaznaczyć czy zapisać zmiany na wejściu i wyjściu. Wybór opcji Tak skutkuje natychmiastowym zapisaniem danych do bazy danych po wykonaniu mapowań wejściowych i wyjściowych (bez zatwierdzania transakcji). Opcja nie skutkuje opóźnieniem zapisu do następnej operacji mapowania, w której możesz dokonać zapisania zmian lub do czasu zatwierdzenia transakcji.
Jeśli zdefiniowano źródło, ale metody nadal nie są dostępne, zweryfikuj poprawność wygenerowanego kodu proxy.

Endpoint – w sekcji Konfiguracja - Krok 3 wybierz z listy endpoint, przez który ma zostać wywołana usługa. Usługa może udostępniać kilka endpointów (np. CalculatorSoap i CalculatorSoap12). Informacje o konfiguracji uzyskasz w dokumentacji dotyczącej danej usługi. Aby wywołanie działało, po stronie archITekta należy dodać konfigurację techniczną endpointów.
- Kliknij ikonę Pokaż konfigurację wszystkich endpoint'ów usługi przy polu Endpoint. Zostanie otwarte okno z konfiguracją XML usługi.
- Skopiuj sekcje bindings oraz client z węzła
system.serviceModel.

- Przejdź do VSoft archITekt Launcher i otwórz lokalizację z plikami projektu.

- Utwórz nowe pliki
Bindings.configiClient.config– wklej do nich odpowiednio zawartość sekcji bindings i client. - Umieść utworzone pliki w poniższych katalogach (utwórz brakujące katalogi), tak aby ścieżki do plików wyglądały w następujący sposób:
[PROJECT_FOLDER]\Files\APP\archITekt\Configuration\Environment\Bindings.config.ANY_SUFFIX[PROJECT_FOLDER]\Files\APP\Workflow.Host\Configuration\Environment\Bindings.config.ANY_SUFFIX[PROJECT_FOLDER]\Files\WWW\WWW\Configuration\Environment\Bindings.config.ANY_SUFFIX
W analogiczny sposób dla pliku Client.config:
[PROJECT_FOLDER]\Files\APP\archITekt\Configuration\Environment\Client.config.ANY_SUFFIX[PROJECT_FOLDER]\Files\APP\Workflow.Host\Configuration\Environment\Client.config.ANY_SUFFIX[PROJECT_FOLDER]\Files\WWW\WWW\Configuration\Environment\Client.config.ANY_SUFFIX
Konfiguracja wprowadzona w ten sposób i w tych dokładnie ścieżkach nie zostanie utracona przykładowo przy aktualizacji lub resetowaniu projektu.
- Po zdefiniowaniu konfiguracji przejdź do VSoft archITekt Launcher i zaktualizuj projekt: przy projekcie wybierz przycisk Manage, następnie w sekcji MAINTENANCE opcję Upgrade, a z rozwiniętego podmenu Upgrade project. Więcej informacji patrz: Aktualizacja, resetowanie projektu.

- Następnie uruchom ponownie serwisy projektu: przy projekcie wybierz przycisk Start (Run all engines).

- Po wykonaniu powyższych akcji możesz wybrać nowo dodany Endpoint do usługi.

Komunikacja z pakietem przetwarzania
Czynność Usługa sieciowa możesz także wykorzystać do wywołania pakietu przetwarzania.
Pakiet przetwarzania, który chcesz wywołać, musi wcześniej zostać zapisany i opublikowany, a serwisy projektu muszą zostać ponownie uruchomione w VSoft archITekt Launcher. Patrz: Publikowanie wersji.
Przygotowanie pakietu:
- Pakiet musi rozpoczynać się bloczkiem Żądanie. Aby wywołać pakiet z procesu, wystarczy skonfigurować sekcję SOAP – pól w sekcji WCF nie musisz uzupełniać. W bloczku na panelu Właściwości w sekcji SOAP wybierz Tak w polu Publikuj jako SOAP.
- Opcjonalnie w polu Akcja (Action) wprowadź nazwę operacji. Pod tą nazwą operacja będzie widoczna na liście Metoda w czynności Usługa sieciowa. Na poniższym przykładzie bloczek nazywa się PobierzDaneKlienta, a operacja – DaneKlienta. Jeśli pole Akcja (Action) pozostawisz puste, na liście Metoda będzie widoczna nazwa bloczka.
- Zapisz pakiet i opublikuj go w serwerze wersji, patrz: Publikowanie wersji. Następnie przejdź do VSoft archITekt Launcher i uruchom ponownie serwisy projektu (w tym TransformationServices.Host), aby usługa była dostępna pod adresem usługi.

Jeżeli w środowisku są co najmniej dwie usługi SOAP, których bloczki Żądanie mają element główny wejścia o tej samej nazwie (np. domyślną nazwę Request), host usług może się nie uruchomić z powodu konfliktu nazw. Wygenerowanie kodu proxy w procesie kończy się wtedy oknem Błąd odświeżania proxy, a w polach Data wygenerowania proxy i Kod proxy pozostaje wartość <brak_proxy>. Po wybraniu Pokaż szczegóły widoczny jest komunikat, że komputer docelowy aktywnie odmawia połączenia. Opis przyczyny i rozwiązania znajdziesz w rozdziale: Konflikt nazw elementu głównego.

Konfiguracja czynności:
- Źródło WSDL – adres usługi znajdziesz w polu Adres usługi, po wcześniejszym wybraniu opcji TransformationService w polu Endpoint. Adres ma postać
http://localhost:<port>/<ŚRODOWISKO>-TransformationServicei zawiera nazwę środowiska, dlatego kod proxy wygenerowany dla jednego środowiska nie połączy się z usługami innego.

- Po wygenerowaniu kodu proxy w polu Metoda wybierz operację, którą chcesz wywołać. Lista zawiera operacje wszystkich usług SOAP opublikowanych w środowisku, pod nazwami z pola Akcja (Action) bloczków Żądanie (a jeśli to pole jest puste – pod nazwami bloczków) – na poniższym przykładzie są to CounterService i DaneKlienta. Jeżeli bloczki Żądanie nie mają ustawionej nazwy punktu końcowego, w polu Klient serwisowy widoczny jest wspólny klient ServiceContractSeedClient.

- Określ mapowania wejściowe (np. pole IdKlienta ze zmiennej procesu) oraz wyjściowe (np. pola Nazwa, NIP, Adres do zmiennych procesu).
Więcej informacji o budowie pakietu usługi SOAP patrz: Usługa SOAP wywoływana z procesu.
Odświeżanie danych w procesie po użyciu czynności Usługa sieciowa
Jeżeli w procesie wykorzystujesz czynność Usługa sieciowa i następnie chcesz dalej pracować w procesie na tych samych danych, które zmodyfikowała dana usługa (lub w ramach czynności Usługa sieciowa pakiet przetwarzania wykonał modyfikacje na danych) wówczas niezbędne jest odświeżenie danych w procesie.
Przykładowo, jeżeli w procesie pracujesz na danym obiekcie danych, a następnie wysyłasz te dane do pakietu poprzez czynność Usługa sieciowa, gdzie pakiet wykonuje modyfikacje i dane zwracane są ponownie do procesu, wówczas aby proces zaczytał zmienione dane należy wykonać ich odświeżenie.
Odświeżanie danych możesz wykonać na dwa sposoby:
- stosując w procesie czynność Odśwież element danych – patrz: Odśwież element danych,
- rozbudowując proces o możliwość odświeżania poprzez wykorzystanie dodatkowego stanu z wyjściem czasowym i akcji JavaScript na formularzu. Scenariusz tego użycia został opisany poniżej.
W poniższym przypadku na formularzu uruchamiany jest proces, który kolejno wywołuje poprzez czynność Usługa sieciowa pakiet przetwarzania, który wykonuje modyfikacje na danych.
W celu odświeżenia danych w procesie należy dodać czynność Stan z wyjściem czasowym. Aby uzyskać natychmiastowe wyjście czasowe można skorzystać z formuł, a konkretnie z funkcji TerazUtc.

Wyjście czasowe w procesie niestety nie powoduje odświeżenia formularzy na aplikacji webowej. W tym celu można na przykład na formularzu technicznym lub formularzu, który jest podpięty do podglądu procesu, na zdarzeniu po uzupełnieniu danych, zastosować akcję kod JavaScript z wywołaniem odświeżenia strony z określonym interwałem czasowym (przykładowo 200 ms). Spowoduje to odświeżanie formularza, aż do momentu przejścia na następny stan.
setInterval(() => {
location.reload();
}, 200);

Wyświetl komunikat
Czynność umożliwia wyświetlenie komunikatu, który sam możesz skonfigurować. Komunikat zostanie wyświetlony na formularzu najbliższego stanu.
Komunikat zostanie wyświetlony wyłącznie, jeśli dany fragment procesu uruchamiany jest synchronicznie w ramach ścieżki procesu obsługiwanej przez użytkownika aplikacji WWW. W przypadku procesów działających w tle (asynchronicznych, wzbudzanych z wyjścia czasowego czy wyzwalanych przez zewnętrzne usługi) komunikat zostanie przechwycony i trafi do logów aplikacji.
- Przeciągnij z przybornika czynność i połącz ją z pozostałymi czynnościami.
- Przejdź do panelu Właściwości i wprowadź dane w polach Wyświetlany tekst oraz wybierz typ wiadomości.

W tym przypadku komunikat zostanie wyświetlony po wykonanej akcji na formularzu (po odrzuceniu danych).

Jeżeli w definicji procesu po czynności wyświetlenia komunikatu nie ma już żadnego stanu (formularza), do którego przechodzi proces, wówczas komunikat zostanie wyświetlony na formularzu podglądu dla procesu, jeżeli został taki ustawiony. Patrz: Formularz podglądu.

Typ komunikatu wpływa na formatowanie wyświetlanego tekstu.

Zobacz, jak wywołać proces z akcji formularza
Wywołanie procesu z formularza
Odśwież element danych
Czynność ta umożliwia odświeżenie elementu danych dla wybranej zmiennej lub struktury danych. Jest szczególnie przydatna w sytuacjach, gdy w procesie wywoływany jest podproces asynchroniczny z synchronizacją, operujący na tych samych danych, albo gdy uruchamiany jest pakiet modyfikujący ten sam rekord danych lub korzystający z zewnętrznej usługi.
Przykładowo: jeśli w procesie pracujesz na określonym obiekcie danych, a następnie przekazujesz go do pakietu za pomocą czynności Usługa sieciowa, gdzie dane są modyfikowane i zwracane z powrotem do procesu, konieczne jest ich odświeżenie, aby proces mógł odczytać zaktualizowaną wersję.
Odświeżenie danych możesz wykonać na dwa sposoby:
- stosując odświeżanie na dodatkowym stanie z wyjściem czasowym w procesie i formularz z kodem JavaScript - patrz: Odświeżanie danych w procesie po użyciu czynności Usługa sieciowa.
- wykorzystując czynność Odśwież element danych.
W poniższym przypadku podproces wywoływany poprzez czynność Proces asynchroniczny, wykonuje mapowania na danym elemencie danych (zmienia status wniosku). Aby w procesie głównym zostały odświeżone dane, które zmienił podproces należy dodać czynność Odśwież element danych. Przykładowo, jeżeli chcesz wyświetlić zmieniony status użytkownikowi na formularzu lub poprzez czynność Wyświetl komunikat.

Konfiguracja czynności:
- Przeciągnij z przybornika czynność Odśwież element danych i umieść ją w miejscu, w którym proces ma odczytać aktualne dane – w powyższym przykładzie na wyjściu success czynności Oczekiwanie na proces, czyli po zakończeniu podprocesu.
- Zaznacz czynność i na panelu Właściwości w sekcji Specyficzne w polu Nazwa zmiennej wybierz z listy zmienną, której dane mają zostać odświeżone, np. in-PrimaryDataElement.

Pole Nazwa zmiennej musi zostać uzupełnione. Bez wskazania zmiennej czynność nie wie, który element danych ma odświeżyć.
Zgłoś błąd
Czynność Zgłoś błąd służy do celowego zakończenia ścieżki procesu błędem. Jest odpowiednikiem końcowego zdarzenia błędu (error end event) w notacji BPMN.
Czynność umożliwia zdefiniowanie własnego komunikatu błędu. Zastępuje dotychczasowe obejścia polegające na celowym generowaniu błędu w czynności Mapowanie.
- Przeciągnij z przybornika czynność Zgłoś błąd i połącz ją z czynnością, po której ma zostać zgłoszony błąd. Czynność jest przedstawiana na diagramie jako czerwone koło z symbolem błyskawicy i kończy daną ścieżkę procesu – nie łączy się jej z elementem Koniec.
- Zaznacz czynność i na panelu Właściwości rozwiń sekcję Komunikat błędu. W polu Sposób określenia wybierz, czy komunikat ma być stałym tekstem (Stała), czy ma zostać wyznaczony formułą (Formuła). Następnie wprowadź treść komunikatu w polu Stała lub zdefiniuj formułę w polu Formuła.
W poniższym przykładzie czynność Decyzja sprawdza, czy kwota kredytu mieści się w limicie. Jeśli tak, proces przechodzi wyjściem Kwota poprawna do stanu Wniosek do akceptacji. W przeciwnym razie proces przechodzi wyjściem Przekroczono do czynności Zgłoś błąd z komunikatem „Kwota kredytu przekracza dopuszczalny limit”.

Czynność obsługuje również scenariusze z podprocesami. Jeżeli błąd zostanie zgłoszony w podprocesie, jest on przekazywany do procesu nadrzędnego, gdzie można go obsłużyć za pomocą portu wyjściowego do obsługi błędu czynności wywołującej podproces. Patrz: Port wyjściowy do obsługi błędu.
W poniższym przykładzie proces główny wywołuje czynnością Proces synchroniczny podproces Weryfikacja klienta. W podprocesie czynność Usługa sieciowa sprawdza klienta, a czynność Decyzja kieruje proces dalej:
- jeśli klient został zweryfikowany (wyjście Tak), podproces kończy się prawidłowo, a proces główny przechodzi do stanu Wniosek do akceptacji,
- jeśli nie (wyjście Nie), czynność Zgłoś błąd zgłasza błąd z komunikatem „Klient nie przeszedł weryfikacji”. Błąd trafia do procesu głównego, który wychodzi portem błędu czynności Proces synchroniczny – ustawia status wniosku na odrzucony (czynność Mapowanie) i informuje o tym użytkownika (czynność Wyświetl komunikat).

Port wyjściowy do obsługi błędu
Dla niektórych czynności domyślnie jest zdefiniowany dodatkowy port wyjściowy, który możesz użyć aby poprowadzić dalej obsługę procesu w przypadku wystąpienia błędu w danej czynności.
Port wyjściowy jest oznaczony symbolem błędu zgodnym z notacją BPMN, umieszczonym po prawej stronie elementu reprezentującego czynność. Po najechaniu na niego kursorem symbol zostaje podświetlony. Port dostępny jest dla czynności:
- Mapowanie
- Decyzja
- Utwórz element danych
- Usługa sieciowa
- Algorytm
- Tabela
- Wyświetl komunikat
- Proces asynchroniczny
- Proces synchroniczny
- Wiele procesów asynchronicznych
- Wzbudź proces
W poniższym przypadku jeżeli proces dojdzie do czynności Usługa sieciowa i nie uzyska połączenia z serwisem, wskutek czego wykonanie czynności zakończy się błędem, proces przejdzie ścieżką, która została zdefiniowana dla czynności w przypadku napotkania błędu.

Czynności Oczekiwanie na proces oraz Synchronizacja wielu procesów również posiadają domyślnie zdefiniowane porty wyjściowe dla obsługi błędu (exception) oraz dodatkowy port. Jednak w tym przypadku port wyjściowy dla błędu musi zostać połączony z kolejnym elementem procesu. Może to być odrębna ścieżka w procesie dla obsługi błędu lub możesz połączyć port wyjściowy z tym samym elementem co w przypadku prawidłowego wykonania procesu. Z kolei dodatkowy port obsługi błędu można obsłużyć jak w przypadku pozostałych czynności.
Na poniższym przykładzie obie czynności mają połączone wszystkie trzy wyjścia: success (prawidłowe wykonanie), timeout (oznaczone ikoną zegara) oraz exception (oznaczone symbolem błędu BPMN). Wyjścia timeout i exception mogą prowadzić do osobnych ścieżek obsługi lub do tej samej czynności.

Przydatne formuły procesowe
Edytor formuł umożliwia wykorzystanie formuł procesowych, które są przydatne podczas projektowania procesów.
- Przejdź do edytora mapowań, a następnie do edytora formuł.
- Na liście możesz wyszukać formuły.
Przydatne formuły:
- do pobierania Id instancji na podstawie danych – przydatne zwłaszcza w kontekście czynności wzbudzania procesów,
- do pobierania statusu, daty/czasu następnego wzbudzenia, ostatniego wyjątku, do pobierania Id instancji bieżącego procesu – formuły o charakterze informacyjnym.

Jeżeli chcesz pobrać identyfikator instancji procesu, który chcesz wzbudzić, wówczas możesz zastosować formułę. W tym przypadku wybierz formułę Identyfikator instancji procesu działającego na danych.
Więcej informacji o samym edytorze formuł znajdziesz tutaj: Formuły.