Dotyczy wersji: 2023.1.x i powyżej; autor: Mike Fitzmaurice
Zaawansowana obsługa podobiegów
System WEBCON BPS zapewnia szereg sposobów zarządzana aktywnością równoległą. W scenariuszu zakładającym pojedyncze zadanie przypisane do wielu osób wystarczy konfiguracja zaledwie kilku ustawień. Jednak, gdy wymagane jest równoległe zastosowanie całych zestawów działań, instrukcji oraz logiki decyzyjnej, nieodzowne stają się podobiegi.
Zdecydowana większość scenariuszy zastosowania podobiegów może być z łatwością realizowana za pomocą standardowo dostępnych funkcjonalności, niemniej istnieje kilka przypadków wymagających specjalnego podejścia.
Scenariusz
Poniżej opisano analizowany obieg. Ścieżką o nazwie Start uruchamiana jest automatyzacja, która aktywuje kilka podobiegów. W kolejnym kroku Zaczekaj na zakończenie wszystkich nowych podobiegów obieg jest wstrzymywany do czasu pozytywnego zakończenia wszystkich podobiegów, negatywnego zakończenia jakiegokolwiek podobiegu lub gdy brak podobiegów, na których zakończenie należy czekać. Dostępne są ścieżki obsługujące każdy z wymienionych przypadków.
W szczególności, jeżeli którykolwiek z podobiegów zakończy się negatywnym rezultatem, obieg za pomocą ścieżki Niepowodzenie powróci do kroku początkowego.
Dla osób dobrze zaznajomionych z WEBCON BPS rozwiązanie takie nie jest niczym nowym, lecz nawet wytrawni projektanci aplikacji mogą nie zdawać sobie sprawy z dwóch kwestii:
- jeżeli podobieg kończy się negatywnym wynikiem, obieg natychmiast wychodzi z kroku ścieżką Dowolny podobieg zakończony niepowodzeniem. Standardowo system nie będzie oczekiwał na jakiekolwiek pozostałe podobiegi, które mogą nie być zakończone. Jeżeli obieg nadrzędny wymaga zebrania informacji ze wspomnianych podobiegów, może to prowadzić do problemów.
- W przypadku negatywnego zakończenia podobiegu i powrotu obiegu do kroku początkowego, użytkownik może ponownie rozpocząć obieg, przechodząc ścieżką Start, a przez to tworząc nowy zestaw podobiegów. Warto jednak pamiętać, że w tym przypadku po dotarciu obiegu do kroku Zaczekaj na zakończenie wszystkich nowych podobiegów nastąpi natychmiastowe przejście ścieżką Niepowodzenie, ponieważ istnieje już podobieg, który zakończył się negatywnie.
Uprzednio zakończone i nowo rozpoczęte podobiegi nie są rozróżniane we wspomnianym kroku.
Dla większości obiegów wystarcza jednokrotne wykonanie pojedynczego zestawu podobiegów. Zachowanie takie nie jest jednak wystarczające w przypadku obiegów skonfigurowanych tak, aby do skutku podejmować próby pozytywnego zakończenia podobiegów, bądź sytuacji, w których istnieje kilka miejsc wymagających utworzenia i przeanalizowania zestawu podobiegów.
Rozwiązanie
WEBCON BPS oferuje gotowe rozwiązanie dla wspomnianych scenariuszy przewidujące wykorzystanie atrybutu technicznego, akcji w ramach automatyzacji, dodatkowej ścieżki oraz zapytania SQL.
- Krok 1: atrybut techniczny
Utwórz dodatkowy atrybut typu Data i godzina, który będzie wykorzystywany przez obieg nadrzędny, i w Konfiguracji zaawansowanej zaznacz przycisk wyboru Wyświetlaj także kontrolkę wyboru godziny.
- Krok 2: akcja w ramach automatyzacji
W ramach automatyzacji skonfiguruj co najmniej jedną akcję Uruchom podobieg lub Uruchom podobieg (SQL), aby rozpoczynać podobiegi. Powyżej wspomnianych akcji dodaj akcję Zmień wartość pola i skonfiguruj tak, aby ustawiała ona standardowo dostępną funkcję NOW w atrybucie technicznym utworzonym w kroku pierwszym.
Zadaniem wspomnianego atrybutu technicznego będzie weryfikowanie, czy w kroku Zaczekaj na zakończenie wszystkich nowych podobiegów analizowane są wyłącznie obiegi uruchomione po czasie wyznaczanym wstawioną funkcją.
- Krok 3: dodatkowa ścieżka
Utwórz ścieżkę, która zapętlając się wychodzi z kroku Zaczekaj na zakończenie wszystkich nowych podobiegów i z powrotem do niego trafia. Na zrzutach zamieszczonych poniżej i powyżej nazwa wspomnianej ścieżki to Ponów.
- Krok 4: zapytanie SQL
W kroku Zaczekaj na zakończenie wszystkich nowych podobiegów w zakładce Ustawienia podobiegów zamiast opcji Ustawienia podstawowe wybierz opcję Ustawienia zaawansowane. W oknie edytora zapytania wstaw następujące zapytanie:
IF EXISTS (SELECT * FROM WFElements WHERE WFD_WFDID = {WFD_ID}
AND WFD_StatusId = 1
AND WFD_TSInsert >= '{custom_datetime_field}')
SELECT {loopback_path}
ELSE IF EXISTS (SELECT * FROM WFElements WHERE WFD_WFDID = {WFD_ID}
AND WFD_StatusId = 3
AND WFD_TSInsert >= '{custom_datetime_field}')
SELECT {failure_path}
ELSE IF EXISTS (SELECT * FROM WFElements WHERE WFD_WFDID = {WFD_ID}
AND WFD_StatusId = 2
AND WFD_TSInsert >= '{custom_datetime_field}')
SELECT {success_path}
ELSE
SELECT {no_subworkflows_path}
Wartość {custom_datetime_field} należy zastąpić znacznikiem atrybutu odpowiadającego atrybutowi technicznemu utworzonemu w kroku pierwszym, w którym wartość wstawiono w kroku drugim. Stosowany format powinien być zgodny ze standardem ISO (który jest ustawiony domyślnie). Wspomniany znacznik atrybutu można znaleźć w zakładce Wartości edytora wyrażeń.
Wartości {loopback_path}, {failure_path}, {success_path} oraz {no_subworkflows_path} odpowiadają ścieżkom wychodzącym ze wspomnianego kroku. Ich znaczniki można wstawić, korzystając z zakładki Obiekty edytora wyrażeń.
Szczegółowe informacje przedstawiono na zrzucie zamieszczonym poniżej.
Sposób działania
Wartości, jakie mogą być wstawione w polu WFD_StatusId to: 1 w przypadku statusu „Trwający”, 2 w przypadku statusu „Pozytywnie zakończony” oraz 3 w przypadku statusu „Negatywnie zakończony”. W związku z powyższym zapytanie przewiduje:
- po pierwsze, jeżeli którykolwiek podobieg jest nadal w toku, wykonanie pętli powrotnej i oczekiwanie na następne zdarzenie;
- w przeciwnym razie (żaden z podobiegów nie jest toku), jeżeli którykolwiek z obiegów zakończył się niepowodzeniem, przejście ścieżką Niepowodzenie;
- w przeciwnym razie (żaden z podobiegów nie jest w toku ani nie nastąpiło niepowodzenie), jeżeli podobiegi zakończyły się powodzeniem, przejście ścieżką Powodzenie;
- w przeciwnym razie jedyna możliwość jest taka, że nigdy nie istniały jakiekolwiek podobiegi, w związku z czym następuje przejście ścieżką Brak podobiegów.
W każdym z opisanych przypadków zapytanie analizuje podobiegi, które zostały uruchomione po czasie zdefiniowanym w atrybucie technicznym utworzonym w kroku pierwszym, w którym wartość wstawiono w kroku drugim.
Zapytanie jest wykonywane, gdy obieg przechodzi do przedmiotowego kroku i – zakładając, że zastosowanie ma logika pętli zwrotnej – ponownie za każdym razem, gdy podobieg zostaje zakończony.
Domyślne ustawienie dla tego kroku, tj. Ustawienia podstawowe, posiada wbudowaną logikę pętli zwrotnej. Niemniej, gdy zapytanie SQL jest wykonywane ręcznie, należy samodzielnie zakończyć pętlę obiegu w bieżącym kroku, jeżeli którakolwiek z wartości pola WFD_StatusID to 1. Poszukując wyłącznie wartości 2 lub 3 pola WFD_StatusId, nie byłoby możliwe stwierdzenie, czy podobiegi są nadal w toku bądź czy brak jakichkolwiek podobiegów, niemniej zakładano by drugą z wymienionych sytuacji.
Podsumowanie
Jak wspomniano nie w każdym obiegu muszą być uruchamiane i obsługiwane podobiegi. Co więcej jeszcze rzadziej ma się do czynienia z obiegami obsługującymi wiele zestawów podobiegów. Jednak takie scenariusze są możliwe, istotne i mogą być realizowane w systemie WEBCON BPS za pomocą opisanej w niniejszym artykule techniki.
Nawiasem mówiąc, brak obsługi równoległych rozgałęzień w WEBCON BPS wynika z założeń projektowych systemu. Rozwiązania z zakresu logiki rozgałęzień równoległych stosowane w innych platformach rzadko zapewniają obsługę śledzenia statusu ścieżek, nadawanie uprawnień, ścieżki kontroli, zastępstwa itd., a nawet jeżeli, to ich zastosowanie jest bardzo skomplikowane.
Siła systemu WEBCON BPS kryje się w możliwości obejścia tych ograniczeń za pomocą jedynie kilku dodatkowych działań. Zważywszy, że inną kluczową cechą systemu WEBCON BPS jest jego ustawiczne ulepszanie, autor niniejszego artykułu żywi nadzieję, że za jakiś czas nie będzie on już potrzebny. Do tego czasu opisywany sposób działa i można go używać wedle potrzeb.