Zarządzanie przepływem pracy
Przepływy pracy publikowania/wydawania
Przepływy pracy zaczynają wpływać na Twoje operacje po ich opublikowaniu. Dopóki nie opublikujesz prawidłowego przepływu pracy, każdy projekt pozostaje roboczym szkicem:

Zanim ESM zezwoli na uruchomienie przepływu pracy, zweryfikuje, czy projekt przepływu pracy zawiera jakiekolwiek poważne błędy, takie jak brakujące instrukcje warunkowe w działaniach warunkowych. Elementy z błędnymi konfiguracjami będą oznaczone czerwonymi ramkami na płótnie edytora, dopóki konfiguracja nie będzie prawidłowa.
Po opublikowaniu przepływu pracy w usłudze aktywnej wszystkie nowe przychodzące problemy będą uruchamiać wykonywanie przepływu pracy, jeśli spełnione zostaną kryteria wyboru.
Jeśli po opublikowaniu przepływu pracy zauważysz, że nie działa on zgodnie z oczekiwaniami lub chcesz go wycofać, możesz usunąć go z aktywnej usługi, wyrejestrowując go z usługi aktywnej. W takim przypadku wersja robocza zostanie zresetowana do definicji wyrejestrowanego przepływu pracy. Wszystkie bieżące zgłoszenia, które zostały obsłużone przez wyrejestrowany przepływ pracy, pozostaną aktywne, a ESM spróbuje je ukończyć zgodnie z definicją wyrejestrowanego przepływu pracy. Jeśli zgłoszenia nie zostaną ukończone automatycznie, musisz je ręcznie zamknąć. Nowe zgłoszenia dla szablonu nie będą już obsługiwane przez wyrejestrowany przepływ pracy, ale będą musiały zostać przetworzone ręcznie lub za pomocą zastępczego przepływu pracy.
Cykl życia przepływu pracy
ESM śledzi kilka wersji tego samego przepływu pracy:
- Wersja robocza, która jest ostatnią zapisaną przez Ciebie wersją.
- Ostatni opublikowany przepływ pracy, za pomocą którego będą przetwarzane nowo utworzone lub zaktualizowane karty danych, jeśli spełniają kryteria wyboru przepływu pracy.
- Wszystkie wcześniej opublikowane wersje konfiguracji przepływu pracy, o ile nadal przetwarzane są karty danych.
Otwierając przepływ pracy w edytorze przepływów pracy, domyślnie pracujesz zawsze na roboczej wersji roboczej. Jeśli zdecydujesz się na wyewidencjonowanie przepływu pracy z aktywnej usługi (tj. cofniesz akcję publikowania), robocza wersja robocza przepływu pracy zostanie zresetowana do wersji przepływu pracy, którą właśnie wyewidencjonowałeś.
Zmiany w wersji roboczej nie są automatycznie zapisywane w bazie danych. Należy je zapisać lub odrzucić przed wykonaniem innych czynności w ESM.
Notatka:
Samo zapisanie nie powoduje opublikowania przepływu pracy w usłudze aktywnej. Samo zapisanie nie powoduje również opublikowania modyfikacji w aktywnie działającym przepływie pracy.
Zawsze musisz publikować zmiany, aby aktywować je dla nowych lub zaktualizowanych kart danych. Po opublikowaniu przepływu pracy w usłudze aktywnej, ta wersja zostanie automatycznie zapisana jako nowy projekt roboczy.
Możesz usunąć przepływy pracy z ESM, wybierając przycisk Usuń. Możesz jednak usunąć tylko te przepływy pracy, które nie mają otwartych zgłoszeń. Aby usunąć przepływ pracy, zgłoszenia muszą przejść przez całą sekwencję przepływów pracy lub zostać zamknięte przez użytkownika ESM. Nie można ręcznie usunąć starych wersji konfiguracji przepływów pracy. Zostaną one usunięte przez system po przetworzeniu ostatniej karty danych.
Samo wyrejestrowanie przepływu pracy nie wystarczy, aby umożliwić usunięcie, ponieważ mogą nadal występować problemy będące w trakcie aktywnego przetwarzania. ESM zawsze weryfikuje, czy jakiekolwiek problemy są nadal w toku, zanim zezwoli na usunięcie przepływu pracy.
Eksportowanie/importowanie przepływów pracy
Każdy przepływ pracy można wyeksportować na stację roboczą, a następnie zaimportować ponownie, na przykład do systemu produkcyjnego. Aby wyeksportować i zaimportować przepływy pracy, wybierz odpowiednią akcję z menu rozwijanego „Przepływ pracy”. Pamiętaj również o wyeksportowaniu i zaimportowaniu odpowiednich szablonów.
Eksport spowoduje wyeksportowanie ostatniej opublikowanej wersji wybranego przepływu pracy. Tylko jeśli nie ma opublikowanej wersji, zostanie wyeksportowana wersja robocza.
Eksportowanie/importowanie węzłów przepływu pracy
Możliwe jest wyeksportowanie pojedynczego węzła przepływu pracy i ponowne wykorzystanie go w innym przepływie pracy z innego szablonu. Aby wyeksportować węzeł przepływu pracy, należy najpierw wybrać odpowiadający mu węzeł, a następnie z menu rozwijanego Przepływ pracy wybrać opcję „Eksportuj węzeł przepływu pracy”. Węzeł przepływu pracy zostanie następnie pobrany na komputer.
Aby zaimportować węzeł przepływu pracy, należy najpierw wybrać przepływ pracy, do którego chcesz go zaimportować. Atrybuty i wartości atrybutów, które nie mają pasujących elementów w szablonie docelowym, zostaną zastąpione pustymi polami po imporcie. Standardowa walidacja przepływu pracy zidentyfikuje potencjalne poprawki, które należy wprowadzić w zaimportowanym węźle przepływu pracy.
Weryfikacja statusu przepływu pracy dla problemu
Silnik przepływu pracy będzie utrzymywał status przepływu pracy dla każdego zgłoszenia. Status przepływu pracy można zobaczyć w widoku karty danych samego zgłoszenia. Możliwe stany to: Uruchomiony, Zakończony, Błąd lub Anulowany. Status przepływu pracy jest wartością systemową, ale można go wyświetlić, przypisując obiekt WorkflowStatusHandler do atrybutu.

Wszyscy użytkownicy mogą ręcznie anulować wykonywanie przepływu pracy, klikając wskaźnik stanu przepływu pracy.
Notatka:
Jeśli zatwierdzenia są wykonywane za pośrednictwem usługi Efecte Self-Service, ręczne anulowanie przepływów pracy w ESM spowoduje oczekujące zatwierdzenia w ESS, ponieważ nie są one usuwane po ręcznym anulowaniu w bieżącym oprogramowaniu.
Audyt konfiguracji przepływu pracy
ESM automatycznie śledzi zmiany w przepływach pracy w ogólnosystemowym dzienniku konfiguracji. Tworzenie nowych przepływów pracy, usuwanie, publikowanie, wszelkie edycje i pobieranie będą rejestrowane ze znacznikiem czasu i identyfikatorem użytkownika. Możesz audytować wszelkie zmiany w przepływach pracy z pliku dziennika konfiguracji.
Rejestrowanie wykonania przepływu pracy
Wpisy w dzienniku są generowane dla każdego wykonania przepływu pracy, aby ułatwić administrację i rozwiązywanie problemów. Wpisy te są zapisywane w pliku workflow.log. Aby pobrać ten plik dziennika, przejdź do sekcji Administracja > Konserwacja > Dzienniki > Pobierz dzienniki . Poniżej znajduje się przykład rejestrowania wykonania węzła przepływu pracy w dziennikach. Sekcje wyróżnione pogrubioną czcionką reprezentują kluczowe aspekty dziennika. Dla ułatwienia, fragment dziennika jest numerowany sekwencyjnie. Numery te odpowiadają numerom na załączonym zrzucie ekranu odpowiedniego przepływu pracy, umieszczonym po fragmencie dziennika.
1. WorkflowLogger|INFO|2023-03-22 10:12:12,123|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} run workflow {id: 371441422, name: Checklist approval workflow NEW , templateId: 119733870, wrapperId: 366102831}
2. WorkflowLogger|INFO|2023-03-22 10:12:12,123|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running StartpointNode {id: 371440955, name: Begin}
3. WorkflowLogger|INFO|2023-03-22 10:12:12,273|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ConditionNode {id: 371441271, name: LOB SMB escalation or risk amount 1,5m}
4. WorkflowLogger|INFO|2023-03-22 10:12:12,275|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} run then path:Then
5. WorkflowLogger|INFO|2023-03-22 10:12:12,430|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ApprovalNode {id: 371441119, name: LOB SMB Approval }
WorkflowLogger|INFO|2023-03-29 13:46:25,469|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ApprovalNode {id: 371441119, name: LOB SMB Approval}
WorkflowLogger|INFO|2023-03-29 13:49:40,790|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ApprovalNode {id: 371441119, name: LOB SMB Approval}
6. WorkflowLogger|INFO|2023-03-29 13:49:41,748|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ApprovalNode {id: 371441165, name: Credit Committee Approval }'
WorkflowLogger|INFO|2023-03-31 06:47:55,392|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ApprovalNode {id: 371441165, name: Credit Committee Approval}
7. WorkflowLogger|INFO|2023-03-31 06:47:56,496|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running EmailNode {id: 371441190, name: Notify onboarding team }
8. WorkflowLogger|INFO|2023-03-31 06:47:56,748|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running ConditionNode {id: 371440832, name: Check risk amount }
9. WorkflowLogger|INFO|2023-03-31 06:47:56,748|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} run then path:Then
10. WorkflowLogger|INFO|2023-03-31 06:47:56,892|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running WaitConditionNode {id: 371440854, name: Waiting for initial approval }
WorkflowLogger|INFO|2023-03-31 06:47:56,892|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} Conditions were not met. NodeId: WaitConditionNode{id='371440854', name='Waiting for initial approval', criteria=ConditionCollection[booleanOperator=AND,conditions=[SimpleCondition[operator=EQUAL_TO,leftOperand=AttributeOperand[groupAttributeId=119738157,ids=[371440842]],rightOperand=StaticValueOperand[value=StaticValueDTO[value=Initial approval,code=initial_approval,staticValueId=133859530],isOpen=false,id=371440844],id=371440847]],id=371440851]}. Workflow is pending for conditions of this node to be met before continuing.
11. WorkflowLogger|INFO|2023-03-31 08:53:03,606|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running WaitConditionNode {id: 371440854, name: Waiting for initial approval }
WorkflowLogger|INFO|2023-03-31 08:53:03,606|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} Conditions were met. NodeId: WaitConditionNode{id='371440854', name='Waiting for initial approval', criteria=ConditionCollection[booleanOperator=AND,conditions=[SimpleCondition[operator=EQUAL_TO,leftOperand=AttributeOperand[groupAttributeId=119738157,ids=[371440842]],rightOperand=StaticValueOperand[value=StaticValueDTO[value=Initial approval,code=initial_approval,staticValueId=133859530],isOpen=false,id=371440844],id=371440847]],id=371440851]}. Workflow proceeds.
12. WorkflowLogger|INFO|2023-03-31 08:53:03,883|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running SetValueNode {id: 371441300, name: Set decision to approved }
13. WorkflowLogger|INFO|2023-03-31 08:53:04,060|datacard {id: 123456789, name: Ticket name| EFE-123456, templateName: Agreement checklist} running EndpointNode {id: 371440960, name: Closed }
Przykład przepływu pracy z ponumerowanymi odniesieniami do fragmentu kodu dziennika przepływu pracy:

Rejestrowanie wykonania przepływu pracy i nieudanych zapisów karty danych
Gdy obiekt nasłuchujący lub obsługujący uniemożliwia przepływowi pracy zapisanie karty danych, zdarzenie jest dokumentowane w pliku itsm.log zamiast w dzienniku przepływu pracy. Błędy tego typu są rejestrowane we wpisach dziennika, które zazwyczaj wyglądają następująco:
ErrorLogger|ERROR|2023-05-25 13:43:14,116|QuartzScheduler_Worker-3||Job (workflow.7548098#7546966#7546920#0 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: com.bitmount.boas.exception.PersistenceException: com.efecte.datamodel.entity.action.FatalDataCardActionException: Data card save failed due to fail_card attribute having a value.]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: com.bitmount.boas.exception.PersistenceException: com.efecte.datamodel.entity.action.FatalDataCardActionException: Data card save failed due to fail_card attribute having a value.Ostatni identyfikator w pierwszym wierszu wskazuje konkretny węzeł przepływu pracy, w którym proces się zatrzymuje.
W dzienniku przepływu pracy wygląda to tak, jakby karta zatrzymała się na węźle, w którym wystąpił nieudany zapis. Jednak w interfejsie użytkownika (UI) krok przepływu pracy (wyświetlany w prawym górnym rogu widoku karty) wskazuje, że znajduje się on w poprzednim węźle. Ta rozbieżność występuje, ponieważ karta w rzeczywistości powraca do pierwszego poprzedzającego węzła „timera” lub „warunku oczekiwania” przed wystąpieniem błędu zapisu.