Przypisywanie zadań

Facebooktwitterpinterestlinkedinmail
Dotyczy wersji 2020.1.3.x; autor: Józef Cyran

 

Idea aplikacji

Aplikacja pozwala na przydzielanie zadań do grup zadaniowych – każda grupa zawiera pracowników odpowiedzialnych za wykonanie zadań o określonym charakterze. Przykładowo, aplikacja ta może usprawnić obsługę zgłoszeń przez dział wsparcia przypisując do odpowiedniej grupy na podstawie kategorii zgłoszenia. W procesie określana jest maksymalna liczba zadań dla jednego pracownika. W przypadku, gdy do wszystkich pracowników w danej grupie przypisana została maksymalna (zdefiniowana dla procesu) liczba zadań, następne trafiają do kolejki (kroku systemowego) oczekując na zwolnienie się któregoś z pracowników.

Wykorzystywane procesy

Create Task – główny proces aplikacji, pozwala na utworzenie zadań dla grup. Przydziela zadania do „wolnych” pracowników w danej grupie, oraz pozwala pracownikowi oznaczyć wykonanie zadania. Mechanizm kolejkowania zaimplementowany jest przy pomocy dwóch akcji, oraz kroku sterowania obiegiem.

Rys. 1 Schemat procesu Create Task

 

Task Groups – proces pozwalający zdefiniować grupy zadań oraz przypisać do niej pracowników. Grupy zadań trafiają do kroku Aktywna, gdzie można je edytować.

Rys. 2 Schemat procesu Task Groups

Implementacja

Po pierwsze należy przygotować proces Task Groups, który pozwoli na utworzenia słownika dostępnych grup zadań. Najprościej w tym celu wykorzystać proces słownikowy. Przypisanie użytkowników do grupy może wyglądać następująco:

Rys. 3 Tworzenie grupy zadaniowej wraz z pracownikami

 

Wystarczy podać nazwę grupy zadań do której mogą być tworzone zgłoszenia oraz jej członków – osoby odpowiedzialne za realizację tych zgłoszeń.

Następnie, dane z tego procesu będą naszym źródłem w konfiguracji pola wyboru Task type w obiegu TASK.

Rys. 4 Pole wyboru Task type wraz z przykładowymi wartościami ze źródła danych

 

Najlepiej wykorzystać ID elementu zawierającego grupę zadań (Instance numer) – w atrybucie Task type jako ID w tym polu wyboru.

Rys. 5 STAŁA PROCESU – Maximum number of tasks per person. Stała ta pozwala nam ustawić w konfiguracji procesu maksymalną liczbę zadań, które pracownik może mieć przypisane do siebie

 

UWAGA: Dobrą praktyką jest stosowanie stałych w procesach, ich użycie pozwala na szeroką parametryzację, a także zabezpiecza nas przed koniecznością zmiany wartości parametru we wszystkich miejscach gdzie jest używany.

 

Następnie, należy odpowiednio skonfigurować krok sterowania obiegiem Queue or assign – poniżej przedstawiono regułę biznesową służącą do wyboru odpowiedniej ścieżki:

Rys. 6 Reguła wyboru ścieżki w kroku sterowania obiegem Queue or assign

 

Warunek sprawdza, czy liczba wszystkich zadań należących do wybranej grupy jest mniejsza niż iloczyn liczby pracowników w tej grupie i stałej procesu, oznaczającej maksymalna liczbę jednoczesnych zadań dla pracownika. Jeżeli tak to przypisuje zadanie do jednego z pracowników tej grupy (ścieżka: Assign), jeżeli nie to przesyła zadanie do „zakolejkowania” (krok: Queued).

Rys. 7 Zapytanie zwracające liczbę przydzielonych zadań do wszystkich pracowników z grupy

 

Ograniczenie w powyższym zapytaniu wybiera tylko te elementy, które są:

  • typu TASK (zawężenie do typu formularza WFD_DTypeID = ‘TASK’)
  • aktualnie są w trakcie realizacji (WFD_STPID = ‘In progress’)
  • oraz są przypisane do tej samej kategorii/typu zadania (Task type).

W tabeli WFElements znajdują się elementy workflow z wszystkich procesów, dlatego niezbędne jest dodanie warunków na poszczególne kolumny: kolumna WFD_STPID zawiera informacje o kroku w którym znajduje się formularz, a kolumna WFD_DTypeID określa typ formularza (dokładnie: ID typu formularza). Tabela WFElements opisana jest w artykule https://kb.webcon.pl/tabela-wfelements/.

Dzięki temu zawężeniu policzone zostaną tylko właściwe elementy.

Rys. 8 Zapytanie zwracające liczbę pracowników w grupie

 

Zapytanie liczy ile jest użytkowników (Member) w grupie przypisanych do danej kategorii zadań (Task type). Dane pobierane są z tabeli WFElementDetails, w której przechowywane są wszystkie informacje wprowadzone na listy pozycji – w tym przypadku listę członków danej grupy zdefiniowaną w procesie Task Groups.

W przypadku tabeli WFElementDetails (przechowującej dane z list pozycji na formularzu) istotnym jest aby dodać filtry na wartości znajdujące się w kolumnach:

  • DET_WFDID – ID elementu w którym znajduje się lista pozycji,
  • DET_WFCONID – określa ID listy pozycji (w jednym typie formularza możemy mieć kilka list pozycji – DET_WFCONID pozwala nam wybrać tylko tą, która nas interesuje)

więcej na temat tabeli WFElementDetails można przeczytać tutaj: https://kb.webcon.pl/tabela-wfelementdetails/.

Kiedy nowe zadanie zostaje utworzone, system sprawdza czy istnieje pracownik, któremu można przydzielić zadanie. Jeśli nie ma takiej osoby to element trafia do kroku Queue. Jeśli taki pracownik istnieje, element przechodzi ścieżką Assign, gdzie wykonywana jest akcja Set responsible person w celu uzupełnienia osoby odpowiedzialnej za wykonanie zadania.

Rys. 9 Konfiguracja akcji Set responsible person

 

Akcja wstawia odpowiednia osobę w polu Responsible do której jest przypisane zadanie w kolejnym kroku. Wybór osoby odbywa się przez wykonanie zapytania:

Rys. 10 Pole Responsible jest typu Osoba lub Grupa. Zapytanie SQL zwraca login pracownika do którego zadanie jest delegowane i ustawia go jako wartość pola

 

W zapytaniu zwracamy login użytkownika PersonLogin – identyfikator pracownika któremu przydzielamy zadanie – na podstawie listy pozycji w procesie Task Groups, gdzie wprowadzona została lista pracowników przypisanej do danej kategorii zadania. Pozostałe kolumny służą właściwemu jego wybraniu – kolumna NumberOfTasks pozwala na posortowanie pracowników i wybranie tego najmniej obłożonego pracą. Kolumna RandomValue zapewnia sprawiedliwy, losowy podział zadań w przypadku pracowników mających tyle samo przydzielonych zadań.

Kolumna PersonLogin zwracana jest zapytaniem na tabelę WFElementDetails, warunek:

  • DET_WFDID = ‘Task type ID’ zawęża zwracanych pracowników do tych, którzy znajdują się w grupie wybranej na formularzu danego zadania,
  • DET_WFCONID = ‘Group members ID’ ogranicza wiersze do tych należących do listy pozycji Group members w procesie Task Groups.

W zapytaniu głównym znajduje się podzapytanie służące otrzymaniu liczby zadań przypisanych do pracownika. Zwracamy wszystkie elementy, gdzie:

  • typ formularza jest typu TASK (ograniczenie tylko do elementów z procesu Create task),
  • znajdujące się w kroku In Progress (aktualnie są w trakcie realizacji),
  • osoba odpowiedzialna za realizację (Responsible) jest jednym z członków (Member) grupy osób przypisanych do realizacji danego typu zadań w procesie Task Groups.

RandomValue przypisuje losową liczbę do każdego zwracanego pracownika. Wyniki najpierw sortujemy po liczbie zadań, a w przypadku gdy liczba ta jest taka sama dla kilku pracowników, sortujemy wynik po RandomValue.

Ostatnią akcją, która pozostaje do konfiguracji jest akcja typu Przesuń obieg (SQL) – w przykładzie Assign new task for me. Zostanie ona uruchomiona w momencie zakończenia aktywnego zadania przez pracownika. Wykonywane jest wtedy zapytanie SQL, które zwraca ID kolejnego elementu-zadania z kolejki. Zadanie to zostanie przypisane do pracownika, który właśnie zakończył realizację zadania (tym samym może przyjąć kolejny „task” do realizacji).

W konfiguracji akcji należy wskazać ścieżkę, którą obieg ma zostać przesunięty.

Rys. 11 Konfiguracja akcji Assign new task for me

 

Jak również na zakładce Data należy wskazać ID elementu, który ma zostać zaktualizowany.

Rys. 12 Wybór elementu do aktualizacji

 

Zapytanie SQL przedstawione powyżej wybiera ID elementu typu TASK, znajdującego się w kroku Queued. Istotnym jest, aby zwracane kolumny wskazywały WFD_ID jako ID elementu do przesunięcia, oraz wartości do aktualizacji danych jako kolumny o nazwach atrybutów przesuwanego formularza. W tym wypadku podczas przypisania chcemy wypełnić atrybut Responsible osobą, do której zadanie zostanie przypisywane.

Działanie aplikacji

Po pierwsze należy utworzyć grupy zadaniowe zawierające pracowników.

Rys. 13 Zdefiniowanie grupy zadaniowej oraz przypisanie do niej pracowników

 

Teraz możemy utworzyć zadanie w procesie Create task, podając typ zadania i opis.

Rys. 14 Tworzenie nowego zadania

 

Wszyscy pracownicy mają obecnie przydzieloną maksymalną liczbę zadań (w naszym przykładzie równą 2), dlatego utworzony element trafi do kolejki.

Rys. 15 Raport z ilości zadań przypisanych do każdego pracownika w danej grupie

 

W momencie gdy jedno z tych zadań zostanie oznaczone jako wykonane, element zostanie automatycznie przesłany do realizacji.

Rys. 16 Oznaczenie innego elementu z tego samego typu jako wykonany

 

Rys. 17 Zadanie ‘Check the lightbulb on floor 3’ zostało przesunięte akcją ‘Assign new task for me’ i znajduje się obecnie w kroku ‘In Progress’. Jest przypisane do osoby, która zaznaczyła poprzednie zadanie jako wykonane

 

Aplikacja działa poprawnie – gdy pracownik kończy realizację jednego z zadań, element w którym przechodzi ścieżką uruchamia akcję przesuwania obiegu. Tym samym kolejne zadanie z grupy jest automatycznie przypisywane do tego pracownika.

Przedstawione procesy pozwalają w szybki sposób dodać mechanizm kolejkowania zadań do dowolnej aplikacji WEBCON BPS.