{"id":10715,"date":"2025-05-28T08:39:34","date_gmt":"2025-05-28T06:39:34","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=10715"},"modified":"2025-05-30T11:07:28","modified_gmt":"2025-05-30T09:07:28","slug":"silnik-workflow","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/","title":{"rendered":"Silnik workflow"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicje_terminow\" >Definicje termin\u00f3w<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania\" >Dzia\u0142ania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicja_dzialania\" >Definicja dzia\u0142ania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zadanie\" >Zadanie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Status_zadania\" >Status zadania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zdarzenie\" >Zdarzenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Prefiks_eksportu\" >Prefiks eksportu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#GUID\" >GUID<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Proces\" >Proces<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicja_procesu\" >Definicja procesu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Systemowy_jezyk_skryptowy\" >Systemowy j\u0119zyk skryptowy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Rola_workflow\" >Rola workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Architektura\" >Architektura<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Obiekty_workflow\" >Obiekty workflow<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicje_dzialan\" >Definicje dzia\u0142a\u0144<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania_i_zadania\" >Dzia\u0142ania i zadania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicje_procesow\" >Definicje proces\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Procesy\" >Procesy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Role_workflow\" >Role workflow<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Definicje_transportowego_workflow\" >Definicje transportowego workflow<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Szablony_workflow\" >Szablony workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Import_i_eksport_za_pomoca_polecenia_Toolshell\" >Import i eksport za pomoc\u0105 polecenia Toolshell<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania_i_praca_nad_zadaniami\" >Dzia\u0142ania i praca nad zadaniami<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania_zwiazane_z_edycja\" >Dzia\u0142ania zwi\u0105zane z edycj\u0105<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zmiany_statusu_i_warunki\" >Zmiany statusu i warunki<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania_bez_operatora\" >Dzia\u0142ania bez operatora<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dzialania_i_szablony_seryjne\" >Dzia\u0142ania i szablony seryjne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Przetwarzanie_w_tle\" >Przetwarzanie w tle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Status_bledu_dzialania\" >Status b\u0142\u0119du dzia\u0142ania<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Ocena_zdarzen\" >Ocena zdarze\u0144<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zaprogramowane_wydarzenia\" >Zaprogramowane wydarzenia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zdarzenie_Zmiana_jednostki_biznesowej\" >Zdarzenie Zmiana jednostki biznesowej<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zdarzenie_Akcja_uzytkownika\" >Zdarzenie Akcja u\u017cytkownika<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Brak_zdarzenia\" >Brak zdarzenia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Aplikacja_w_tle_Wywolaj_zdarzenia\" >Aplikacja w tle Wywo\u0142aj zdarzenia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Zmiana_obiektow_biznesowych\" >Zmiana obiekt\u00f3w biznesowych<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Atrybuty_workflow\" >Atrybuty workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Pola_zdefiniowane_przez_uzytkownika\" >Pola zdefiniowane przez u\u017cytkownika<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Wysylanie_wiadomosci_e-mail\" >Wysy\u0142anie wiadomo\u015bci e-mail<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Wiadomosci_e-mail\" >Wiadomo\u015bci e-mail<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Powiadomienia_e-mail\" >Powiadomienia e-mail<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Szablony_wiadomosci_e-mail\" >Szablony wiadomo\u015bci e-mail<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Miejsce_przechowywania\" >Miejsce przechowywania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Konteksty_uzytkowania\" >Konteksty u\u017cytkowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Szablony_zalezne_od_statusu\" >Szablony zale\u017cne od statusu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Wybor_jezyka\" >Wyb\u00f3r j\u0119zyka<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Polecenie_setMailTemplate\" >Polecenie setMailTemplate<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Formatowanie_HTML\" >Formatowanie HTML<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Parametry_szablonu\" >Parametry szablonu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Powiadomienie_o_uwagach_dotyczacych_procesu\" >Powiadomienie o uwagach dotycz\u0105cych procesu<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Konfiguracja\" >Konfiguracja<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Harmonogram_dzialan_na_dowolnym_serwerze_aplikacji_systemu_ERP\" >Harmonogram dzia\u0142a\u0144 na dowolnym serwerze aplikacji systemu ERP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Serwer_docelowy_dla_linkow\" >Serwer docelowy dla link\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Maksymalna_liczba_dzialan\" >Maksymalna liczba dzia\u0142a\u0144<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/silnik-workflow\/#Dostosowywanie_informacji_o_dzialaniach\" >Dostosowywanie informacji o dzia\u0142aniach<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Wprowadzenie <em>Workflow Management<\/em> wi\u0105\u017ce si\u0119 z takimi celami, jak zwi\u0119kszenie wydajno\u015bci, oszcz\u0119dno\u015b\u0107 koszt\u00f3w, usprawnienie proces\u00f3w pracy i wsp\u00f3\u0142pracy. Zautomatyzowany proces workflow mo\u017ce by\u0107 wykorzystywany szczeg\u00f3lnie efektywnie tam, gdzie procesy pracy musz\u0105 by\u0107 wykonywane wielokrotnie.<\/p>\n<p>Rozpocz\u0119cie pracy z <em>Workflow Management<\/em> jest niemal \u0142atwe dzi\u0119ki oferowanym funkcjom zarz\u0105dzania workflow. Dzia\u0142ania mog\u0105 by\u0107 rejestrowane i przetwarzane praktycznie bez wysi\u0142ku zwi\u0105zanego z konfiguracj\u0105 i bez konieczno\u015bci odbycia wielu szkole\u0144. Wprowadzenie i korzystanie z bardziej z\u0142o\u017conych funkcji workflow zorientowanych na procesy i zdarzenia jest znacznie \u0142atwiejsze dzi\u0119ki prefabrykowanym i konfigurowalnym szablonom workflow, kt\u00f3re mo\u017cna przyj\u0105\u0107 i aktywowa\u0107 bez dog\u0142\u0119bnej wiedzy technicznej.<\/p>\n<p><em>Workflow Management<\/em> zosta\u0142o opracowane przy u\u017cyciu w\u0142asnych modu\u0142\u00f3w systemu i dlatego jest cz\u0119\u015bci\u0105 systemu ERP. W zwi\u0105zku z tym aplikacje w ramach <em>Workflow Management<\/em> mog\u0105 by\u0107 obs\u0142ugiwane tak samo intuicyjnie, jak inne aplikacje. Ponadto podstawowe w\u0142a\u015bciwo\u015bci i funkcje systemu s\u0105 wykorzystywane do zarz\u0105dzania workflow, takie jak uprawnienia, struktura organizacyjna i zarz\u0105dzanie dokumentami. I odwrotnie, sam workflow jest r\u00f3wnie\u017c wykorzystywany w wielu obszarach systemu ERP, np. w zarz\u0105dzaniu relacjami lub przetwarzaniu w tle. Ta nienak\u0142adaj\u0105ca si\u0119 architektura poszczeg\u00f3lnych komponent\u00f3w minimalizuje zar\u00f3wno koszty szkole\u0144, jak i administracji. P\u0142ynna integracja umo\u017cliwia ka\u017cdej aplikacji dost\u0119p do funkcji <em>Workflow Management<\/em> bez konieczno\u015bci skomplikowanego programowania interfejsu.<\/p>\n<p>Silnik workflow jest centralnym komponentem w <em>Workflow Management<\/em>. Silnik workflow generuje dzia\u0142ania, gdy wyst\u0105pi\u0105 okre\u015blone zdarzenia i przypisuje zadania do odpowiednich operator\u00f3w. Silnik workflow monitoruje i koordynuje przetwarzanie zada\u0144. Je\u015bli czas zostanie przekroczony, silnik workflow mo\u017ce zainicjowa\u0107 dzia\u0142ania nast\u0119pcze, takie jak przypomnienie u\u017cytkownikowi o op\u00f3\u017anionych zadaniach, eskalacja op\u00f3\u017anionych zada\u0144 do prze\u0142o\u017conego lub powiadomienie w\u0142a\u015bciciela procesu o op\u00f3\u017anieniu.<\/p>\n<p>Niniejszy dokument opisuje model danych <em>Workflow Management<\/em> i jego komponenty, a tak\u017ce techniczne aspekty tworzenia dzia\u0142a\u0144 i przetwarzania zada\u0144. Ponadto opisano konfiguracj\u0119 i dostosowywanie powiadomie\u0144 e-mail przez silnik workflow oraz inne ustawienia konfiguracyjne.<\/p>\n<p>Systemowy j\u0119zyk skryptowy wykorzystywany w workflow i jego elementy (zasady, warunki i polecenia) zosta\u0142y wyja\u015bnione w artykule <em>J\u0119zyk skryptowy systemu<\/em>.<\/p>\n<p>Struktura poszczeg\u00f3lnych aplikacji workflow i procedury ich obs\u0142ugi s\u0105 opisane w dokumentacji aplikacji, np. w artykule <em>Dzia\u0142ania<\/em>.<\/p>\n<p>Spos\u00f3b mapowania definicji proces\u00f3w i dzia\u0142a\u0144 oraz struktur\u0119 aplikacji o tej samej nazwie mo\u017cna znale\u017a\u0107 w artyku\u0142ach <em>Definicje dzia\u0142a\u0144<\/em> i <em>Definicje procesu<\/em>.<\/p>\n<p>Szczeg\u00f3\u0142owy opis przetwarzania zada\u0144 workflow mo\u017cna znale\u017a\u0107 w artykule <em>Wprowadzenie: Workflow Management<\/em> oraz w <em>Instrukcji obs\u0142ugi<\/em>.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Grup\u0105 docelow\u0105 dla tego dokumentu s\u0105 programi\u015bci, konsultanci techniczni i administratorzy workflow, kt\u00f3rzy konfiguruj\u0105 lub administruj\u0105 <em>Workflow Management<\/em> dla klient\u00f3w.<\/p>\n<p>Niniejszy dokument zak\u0142ada zrozumienie zakresu funkcji workflow widocznych dla u\u017cytkownika.<\/p>\n<h3 id=\"definicje-terminow\" ><span class=\"ez-toc-section\" id=\"Definicje_terminow\"><\/span>Definicje termin\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"dzialania\" ><span class=\"ez-toc-section\" id=\"Dzialania\"><\/span>Dzia\u0142ania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dzia\u0142anie opisuje czynno\u015b\u0107, kt\u00f3ra mo\u017ce by\u0107 wykonana przez jednego lub wi\u0119cej u\u017cytkownik\u00f3w. Dzia\u0142anie jest przetwarzane przez u\u017cytkownik\u00f3w na podstawie jednego lub wi\u0119cej zada\u0144, w kt\u00f3rych odpowiednie dzia\u0142anie jest opisane dla ka\u017cdego u\u017cytkownika. Dzia\u0142anie tworzy zatem klamr\u0119 wok\u00f3\u0142 wynikowych zada\u0144 i zawiera niezb\u0119dne informacje o zadaniach. Dzia\u0142ania s\u0105 tworzone jako cz\u0119\u015b\u0107 <em>Workflow Management<\/em>\u00a0lub\u00a0<em>Zarz\u0105dzania relacjami<\/em>\u00a0i s\u0105 cz\u0119\u015bci\u0105 workflow.<\/p>\n<h4 id=\"definicja-dzialania\" ><span class=\"ez-toc-section\" id=\"Definicja_dzialania\"><\/span>Definicja dzia\u0142ania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicja dzia\u0142ania jest szablonem dla dzia\u0142a\u0144 generowanych na jej podstawie. Je\u015bli definicja dzia\u0142ania jest aktywna, silnik workflow generuje nowe dzia\u0142anie, gdy wyst\u0105pi zarejestrowane zdarzenie, pod warunkiem spe\u0142nienia warunku przej\u015bcia. Definicje dzia\u0142a\u0144 s\u0105 niezale\u017cne od bazy danych OLTP i systemu, w kt\u00f3rym zosta\u0142y zarejestrowane, poniewa\u017c nie zawieraj\u0105 ani danych specyficznych dla systemu, ani danych specyficznych dla OLTP. Definicje dzia\u0142a\u0144 s\u0105 zapisywane w bazie danych repozytorium.<\/p>\n<h4 id=\"zadanie\" ><span class=\"ez-toc-section\" id=\"Zadanie\"><\/span>Zadanie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Zadanie w\u00a0<em>Workflow Management<\/em>\u00a0reprezentuje przypisanie dzia\u0142ania wynikaj\u0105cego z dzia\u0142ania do u\u017cytkownika. Ka\u017cde zadanie ma zaplanowany okres przetwarzania, kt\u00f3ry jest okre\u015blony przez dzia\u0142anie wy\u017cszego poziomu, a tak\u017ce status zadania. Czas pierwszej zmiany na nowy status jest dokumentowany.<\/p>\n<h4 id=\"status-zadania\" ><span class=\"ez-toc-section\" id=\"Status_zadania\"><\/span>Status zadania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Status zadania zale\u017cy od bie\u017c\u0105cego czasu i statusu innych zada\u0144 w dzia\u0142aniu wy\u017cszego poziomu. Je\u015bli okre\u015blony okres przetwarzania dzia\u0142ania wy\u017cszego poziomu nie zosta\u0142 jeszcze osi\u0105gni\u0119ty, status zadania to\u00a0<em>Zaplanowane<\/em>. Je\u015bli okre\u015blony okres przetwarzania zosta\u0142 ju\u017c przekroczony, status zadania to\u00a0<em>Zaleg\u0142e<\/em>. Je\u015bli u\u017cytkownik pracuje nad zadaniem, status zadania to\u00a0<em>W opracowaniu<\/em>. Je\u015bli podczas przetwarzania indywidualnego aktualnie przetwarzane jest inne zadanie z dzia\u0142ania wy\u017cszego poziomu, status sprawy to\u00a0<em>Zablokowane<\/em>. Je\u015bli zadanie zosta\u0142o przekazane innemu u\u017cytkownikowi przez przekierowanie, status zadania to\u00a0<em>Przekazane<\/em>. Je\u015bli zadanie zosta\u0142o utworzone przez przekazanie innemu u\u017cytkownikowi lub przez dzia\u0142anie nast\u0119pcze w przypadku przekroczenia limitu czasu, status zadania to\u00a0<em>Odebrane<\/em>. Je\u015bli zadanie zosta\u0142o uko\u0144czone, jego status to\u00a0<em>Zrealizowane<\/em>\u00a0lub\u00a0<em>Zako\u0144czone bez przetwarzania<\/em>. Czas pierwszej zmiany na nowy status jest dokumentowany.<\/p>\n<h4 id=\"zdarzenie\" ><span class=\"ez-toc-section\" id=\"Zdarzenie\"><\/span>Zdarzenie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Zdarzenia stanowi\u0105 podstaw\u0119 do tworzenia dzia\u0142a\u0144 z definicji dzia\u0142a\u0144 w ramach\u00a0<em>Workflow Management<\/em>. Zdarzenia mog\u0105 by\u0107 wyzwalane przez zmiany danych dokonane przez system, aplikacj\u0119 lub dzia\u0142anie u\u017cytkownika. Zdarzenia zawieraj\u0105 parametry opisuj\u0105ce zdarzenie. Aby wygenerowa\u0107 dzia\u0142anie w momencie wyst\u0105pienia zdarzenia, aktywowana definicja dzia\u0142ania musi by\u0107 zarejestrowana dla tego zdarzenia, a warunek przej\u015bcia musi by\u0107 spe\u0142niony.<\/p>\n<h4 id=\"prefiks-eksportu\" ><span class=\"ez-toc-section\" id=\"Prefiks_eksportu\"><\/span>Prefiks eksportu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Ka\u017cdy system Comarch ERP Enterprise posiada prefiks eksportu. Prefiks eksportu jest unikalny podczas przesy\u0142ania aktualizacji oprogramowania z systemu deweloperskiego do systemu produkcyjnego. W Workflow Management, prefiks eksportu definicji dzia\u0142ania jest u\u017cywany do decydowania, w kt\u00f3rym systemie definicja dzia\u0142ania mo\u017ce zosta\u0107 zmieniona i aktywowana. Tylko definicje dzia\u0142a\u0144 i r\u00f3l workflow z prefiksem eksportu odpowiadaj\u0105cym prefiksowi eksportu wybranego systemu mog\u0105 zosta\u0107 zmienione. Podczas wprowadzania nowych definicji dzia\u0142a\u0144 i r\u00f3l workflow, nowa definicja lub rola otrzymuje prefiks systemu wybranego w momencie wprowadzania.<\/p>\n<h4 id=\"guid\" ><span class=\"ez-toc-section\" id=\"GUID\"><\/span>GUID<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>GUID jest skr\u00f3tem od\u00a0<em>Globally Unique Identifier<\/em>\u00a0i odpowiada globalnie unikalnemu identyfikatorowi. GUID to 128-bitowy numer obliczany zgodnie ze schematem Open Software Foundation (OSF) dla rozproszonych \u015brodowisk obliczeniowych (DCE). Zawiera on mi\u0119dzy innymi adres IP komputera generuj\u0105cego, sk\u0142adnik czasu i sk\u0142adnik losowy. Oznacza to, \u017ce dwa niezale\u017cne komputery mog\u0105 zawsze obliczy\u0107 r\u00f3\u017cne identyfikatory GUID bez synchronizacji. W Comarch ERP Enterprise identyfikatory GUID s\u0105 reprezentowane jako tablice bajt\u00f3w Java o d\u0142ugo\u015bci 16 i s\u0105 u\u017cywane g\u0142\u00f3wnie jako kompaktowe klucze podstawowe i obce w Business Objects.<\/p>\n<h4 id=\"proces\" ><span class=\"ez-toc-section\" id=\"Proces\"><\/span>Proces<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Proces to techniczny opis cz\u0119\u015bci procesu biznesowego. Proces sk\u0142ada si\u0119 z poszczeg\u00f3lnych etap\u00f3w. Etapy procesu mog\u0105 by\u0107 ze sob\u0105 powi\u0105zane. Uko\u0144czenie etapu procesu mo\u017ce uruchomi\u0107 przetwarzanie innych etap\u00f3w procesu. Proces ma zdefiniowany pocz\u0105tek i koniec. Kroki procesu mog\u0105 uzyskiwa\u0107 dost\u0119p do zmiennych procesu zadeklarowanych w procesie.<\/p>\n<h4 id=\"definicja-procesu\" ><span class=\"ez-toc-section\" id=\"Definicja_procesu\"><\/span>Definicja procesu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicja procesu to kompletny opis techniczny procesu operacyjnego lub podprocesu. Sk\u0142ada si\u0119 z krok\u00f3w procesu, kt\u00f3re opisuj\u0105 proces biznesowy pod wzgl\u0119dem czasu i organizacji. Definicja procesu jest modelowana jako diagram, kt\u00f3rego w\u0119z\u0142y reprezentuj\u0105 definicje czynno\u015bci, a kraw\u0119dzie reprezentuj\u0105 przep\u0142yw sterowania. W\u0142a\u015bciwo\u015bci proces\u00f3w i krok\u00f3w procesu s\u0105 okre\u015blane za pomoc\u0105 definicji procesu i definicji czynno\u015bci. Definicje proces\u00f3w s\u0105 niezale\u017cne od bazy danych OLTP i systemu, w kt\u00f3rym zosta\u0142y zarejestrowane, poniewa\u017c nie zawieraj\u0105 ani danych specyficznych dla systemu, ani danych specyficznych dla OLTP. Definicje proces\u00f3w s\u0105 zapisywane w bazie danych repozytorium.<\/p>\n<h4 id=\"systemowy-jezyk-skryptowy\" ><span class=\"ez-toc-section\" id=\"Systemowy_jezyk_skryptowy\"><\/span>Systemowy j\u0119zyk skryptowy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wyra\u017cenia, warunki, polecenia, funkcje i deklaracje s\u0105 u\u017cywane do wyra\u017cania z\u0142o\u017conych relacji. Wszystkie te wyra\u017cenia s\u0105 cz\u0119\u015bci\u0105 wsp\u00f3lnego j\u0119zyka skryptowego zwanego j\u0119zykiem skryptowym systemu. Sk\u0142adnia j\u0119zyka skryptowego systemu jest oparta na SQL, Pascal i Java. J\u0119zyk skryptowy systemu jest u\u017cywany w Workflow Management, na przyk\u0142ad do formu\u0142owania warunku wst\u0119pnego lub warunku przej\u015bcia lub do okre\u015blania operator\u00f3w, kt\u00f3rzy nie s\u0105 podsumowani w roli workflow.<\/p>\n<h4 id=\"rola-workflow\" ><span class=\"ez-toc-section\" id=\"Rola_workflow\"><\/span>Rola workflow<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Role workflow s\u0105 poziomem abstrakcji do mapowania organizacji procesu u\u017cywanej przez workflow. W\u0142a\u015bciciele musz\u0105 by\u0107 przypisani do roli workflow, aby mo\u017cna by\u0142o z niej odpowiednio korzysta\u0107. W\u0142a\u015bcicielami mog\u0105 by\u0107 u\u017cytkownicy, osoby, zadania lub organizacje. Przypisanie w\u0142a\u015bcicieli roli workflow jest specyficzne dla bazy danych, poniewa\u017c tylko obiekty w tej bazie danych mog\u0105 by\u0107 u\u017cyte do przypisania. Rola zazwyczaj ma r\u00f3\u017cnych w\u0142a\u015bcicieli w r\u00f3\u017cnych bazach danych. Role workflow mog\u0105 by\u0107 r\u00f3wnie\u017c definiowane przy u\u017cyciu wyra\u017cenia zamiast przypisanych w\u0142a\u015bcicieli, podobnie jak w przypadku funkcji. Gdy te role s\u0105 rozwi\u0105zywane, w\u0142a\u015bciciele s\u0105 obliczani przy u\u017cyciu wyra\u017cenia.<\/p>\n<h4 id=\"architektura\" ><span class=\"ez-toc-section\" id=\"Architektura\"><\/span>Architektura<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wszystkie automatyczne zmiany statusu dzia\u0142a\u0144 i zada\u0144 s\u0105 wykonywane przez centralny silnik workflow. Silnik workflow jest wykonywany na serwerze komunikat\u00f3w w ka\u017cdym systemie. Tylko obs\u0142uga zdarze\u0144 dzia\u0142a na ka\u017cdym innym serwerze aplikacji w systemie.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31751 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1.png\" alt=\"\" width=\"641\" height=\"441\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1.png 641w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1-300x206.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1-50x34.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1-600x413.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_1-320x220.png 320w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Architektura silnika workflow w systemie<\/em><\/p>\n<p>Harmonogram dzia\u0142a\u0144 jest wykonywany na serwerze komunikat\u00f3w. Jest on natychmiast powiadamiany o ka\u017cdym nowym dzia\u0142ania. Program planuj\u0105cy jest odpowiedzialny za zmiany statusu na pocz\u0105tku i na ko\u0144cu okresu przetwarzania. Wykorzystywana jest istniej\u0105ca komunikacja poprzez zarz\u0105dzanie blokadami, dzi\u0119ki czemu nie jest wymagana dodatkowa komunikacja. Scentralizowane przetwarzanie automatycznych zmian statusu zapewnia sp\u00f3jno\u015b\u0107 danych.<\/p>\n<p>Bez dodatkowej komunikacji sieciowej dla zdarze\u0144, obs\u0142uga zdarze\u0144 wykonywana na ka\u017cdym serwerze aplikacji mo\u017ce bezpo\u015brednio generowa\u0107 dzia\u0142ania. Ka\u017cdy serwer aplikacji generuje zatem dzia\u0142ania tylko dla zdarze\u0144, kt\u00f3re zosta\u0142y r\u00f3wnie\u017c wywo\u0142ane na tym serwerze aplikacji.<\/p>\n<p>Podobnie jak baza danych repozytorium, ka\u017cda indywidualna baza danych OLTP dzia\u0142a we w\u0142asnym w\u0105tku w harmonogramie. Mo\u017ce to zwi\u0119kszy\u0107 przepustowo\u015b\u0107 wi\u0119kszych instalacji. Lista zada\u0144 harmonogramu rozpoznaje zadania, kt\u00f3re s\u0105 aktualnie w toku i jest aktualizowana bardzo szybko ze wzgl\u0119du na opisan\u0105 powy\u017cej architektur\u0119. Og\u00f3lnie rzecz bior\u0105c, zmiany statusu dzia\u0142a\u0144 s\u0105 przetwarzane z kilkusekundowym op\u00f3\u017anieniem. Harmonogram uzyskuje dost\u0119p do bazy danych dopiero po przetworzeniu listy zada\u0144 do bie\u017c\u0105cego punktu w czasie. Takie zachowanie zapewnia kr\u00f3tki czas reakcji przep\u0142ywu pracy i tylko niewielk\u0105 utrat\u0119 szybko\u015bci ca\u0142ego systemu.<\/p>\n<p>Okno dokowane wyszukiwania zada\u0144 jest aktualizowane poprzez synchronizacj\u0119 pami\u0119ci podr\u0119cznej. Na serwerze wiadomo\u015bci okno dokowane jest aktualne z wyj\u0105tkiem kr\u00f3tkiego op\u00f3\u017anienia. Na wszystkich innych serwerach aplikacji w systemie okno dokowane wy\u015bwietla nowe dzia\u0142ania najp\u00f3\u017aniej po interwale synchronizacji pami\u0119ci podr\u0119cznej. Okno dokowane wyszukiwania zada\u0144 jest automatycznie aktualizowane za pomoc\u0105 ka\u017cdej standardowej akcji paska narz\u0119dzi, takiej jak <strong>[Otw\u00f3rz]<\/strong> lub <strong>[Zapisz]<\/strong>, a tak\u017ce akcji paska narz\u0119dzi workflow.<\/p>\n<p>Zmiany w aktywnych definicjach dzia\u0142a\u0144 staj\u0105 si\u0119 aktywne natychmiast po zapisaniu i bez ponownego uruchamiania systemu. Obs\u0142uga zdarze\u0144 wszystkich serwer\u00f3w aplikacji w systemie jest aktualizowana najp\u00f3\u017aniej po interwale synchronizacji pami\u0119ci podr\u0119cznej.<\/p>\n<p>Harmonogram mo\u017cna uruchomi\u0107 na serwerze aplikacji innym ni\u017c serwer komunikat\u00f3w. Nie jest to jednak zalecane w przypadku wydajnej pracy, poniewa\u017c prowadzi do niepotrzebnych op\u00f3\u017anie\u0144 w przetwarzaniu dzia\u0142a\u0144 z powodu synchronizacji pami\u0119ci podr\u0119cznej. Harmonogram mo\u017ce by\u0107 obs\u0142ugiwany tylko na jednym serwerze aplikacji. Uniemo\u017cliwia to uruchomienie harmonogramu na wi\u0119cej ni\u017c jednym serwerze aplikacji w tym samym czasie.<\/p>\n<p>Poni\u017csza ilustracja pokazuje, w jaki spos\u00f3b silnik workflow i powi\u0105zane z nim komponenty generuj\u0105 dzia\u0142ania po wyst\u0105pieniu zdarze\u0144.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31753 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2.png\" alt=\"\" width=\"1301\" height=\"791\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2.png 1301w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-300x182.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-1024x623.png 1024w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-768x467.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-50x30.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-920x559.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-600x365.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_2-320x195.png 320w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>Na pocz\u0105tku znajduje si\u0119 zdarzenie, kt\u00f3re mia\u0142o miejsce. Tak zwane zaprogramowane zdarzenie mo\u017ce zosta\u0107 wywo\u0142ane przez aplikacj\u0119. Zdarzenie typu <em>Jednostka biznesowa<\/em> jest wyzwalane przez us\u0142ug\u0119 trwa\u0142o\u015bci, gdy instancja obiektu biznesowego jest wstawiana, zmieniana lub usuwana w bazie danych repozytorium lub w bazie danych OLTP. Zdarzenie typu <em>Akcja u\u017cytkownika <\/em>jest wyzwalane, gdy u\u017cytkownik uruchamia proces za po\u015brednictwem menu kontekstowego jednostki biznesowej. Je\u015bli zdarzenie ma podtyp (np. wstawienie, zmiana lub usuni\u0119cie dla typu zdarzenia <em>Jednostka biznesowa<\/em>), tylko definicje dzia\u0142a\u0144, kt\u00f3re zarejestrowa\u0142y si\u0119 dla zdarzenia z tym samym podtypem, s\u0105 analizowane w momencie wyst\u0105pienia zdarzenia.<\/p>\n<p>Je\u015bli warunek przej\u015bcia jest spe\u0142niony, silnik workflow tworzy dzia\u0142anie. Dzia\u0142anie otrzymuje swoje cechy, takie jak temat, priorytet, czas rozpocz\u0119cia i planowany czas zako\u0144czenia, z definicji dzia\u0142ania. Procesory dzia\u0142ania s\u0105 r\u00f3wnie\u017c obliczane na podstawie definicji dzia\u0142ania. Na przyk\u0142ad rola workflow, zadanie, pracownik lub wyra\u017cenie mog\u0105 zosta\u0107 wybrane jako operator dzia\u0142ania w definicji dzia\u0142ania. Silnik workflow tworzy zadanie dla ka\u017cdego u\u017cytkownika, kt\u00f3ry jest mo\u017cliwym operatorem i przypisuje je do dzia\u0142ania. Zadania czerpi\u0105 swoje podstawowe cechy z dzia\u0142ania. Ponadto zadanie ma cechy specyficzne dla zadania, takie jak status oraz rzeczywisty czas rozpocz\u0119cia i zako\u0144czenia.<\/p>\n<p>Za pomoc\u0105 harmonogramu silnik workflow koordynuje przetwarzanie dzia\u0142ania i jego zada\u0144, aktualizuje ich status, powiadamia operator\u00f3w o osi\u0105gni\u0119ciu planowanego czasu rozpocz\u0119cia i inicjuje dzia\u0142ania nast\u0119pcze, je\u015bli czas ten zostanie przekroczony. W zale\u017cno\u015bci od trybu przetwarzania, dzia\u0142anie jest uznawane za zako\u0144czone, gdy uko\u0144czone zostanie pierwsze zadanie lub gdy uko\u0144czone zostan\u0105 wszystkie zadania powi\u0105zane z dzia\u0142aniem.<\/p>\n<h3 id=\"obiekty-workflow\" ><span class=\"ez-toc-section\" id=\"Obiekty_workflow\"><\/span>Obiekty workflow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dane wymagane do zarz\u0105dzania workflow mo\u017cna podzieli\u0107 na nast\u0119puj\u0105ce grupy:<\/p>\n<ul>\n<li>Definicje proces\u00f3w, dzia\u0142a\u0144 i r\u00f3l workflow, kt\u00f3re s\u0105 u\u017cywane mi\u0119dzy innymi do obs\u0142ugi zdarze\u0144, s\u0105 niezale\u017cne od systemu i baz danych OLTP. S\u0105 one przechowywane w bazie danych repozytorium i mog\u0105 by\u0107 importowane i eksportowane za pomoc\u0105 polece\u0144 pow\u0142oki narz\u0119dziowej.<\/li>\n<li>Definicje proces\u00f3w, definicje dzia\u0142a\u0144 i role workflow zapisane w systemie klienta jako szablon. S\u0105 one przechowywane w bazie danych repozytorium i mog\u0105 by\u0107 przenoszone z systemu testowego do systemu produkcyjnego, na przyk\u0142ad za pomoc\u0105 aktualizacji oprogramowania.<\/li>\n<li>Konkretne dane, takie jak pracownik i u\u017cytkownik, musz\u0105 by\u0107 przypisane do definicji proces\u00f3w, definicji dzia\u0142a\u0144 i r\u00f3l workflow. Przypisanie to nie jest ju\u017c niezale\u017cne od systemu i baz danych OLTP. Konkretne dane musz\u0105 by\u0107 przypisane do definicji dzia\u0142a\u0144 i r\u00f3l workflow w ka\u017cdym systemie.<\/li>\n<li>Definicje dzia\u0142a\u0144 s\u0142u\u017c\u0105 do tworzenia dzia\u0142a\u0144 i zada\u0144 oraz przechowywania ich w bazie danych, w kt\u00f3rej zdarzenie zosta\u0142o wywo\u0142ane. Ponadto u\u017cytkownicy mog\u0105 r\u00f3wnie\u017c rejestrowa\u0107 tak zwane r\u0119cznie wprowadzone dzia\u0142ania. U\u017cytkownik pracuje z t\u0105 baz\u0105 danych podczas korzystania z workflow i przetwarzania zadania workflow.<\/li>\n<\/ul>\n<p>Techniczne nazwy obiekt\u00f3w biznesowych s\u0105 u\u017cywane podczas opisywania modelu danych. Obiekty workflow znajduj\u0105 si\u0119 w obszarze nazw <em>com.cisag.sys.workflow.obj<\/em>. Szablony workflow znajduj\u0105 si\u0119 w obszarze nazw <em>com.cisag.sys.repository.obj<\/em>.<\/p>\n<h4 id=\"definicje-dzialan\" ><span class=\"ez-toc-section\" id=\"Definicje_dzialan\"><\/span>Definicje dzia\u0142a\u0144<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicje dzia\u0142a\u0144 \u0142\u0105cz\u0105 zdarzenia z tworzeniem nowych dzia\u0142a\u0144. Definicje dzia\u0142a\u0144 mog\u0105 okre\u015bla\u0107, czy dzia\u0142anie powinno zosta\u0107 utworzone, gdy wyst\u0105pi okre\u015blone zdarzenie i jakie cechy powinno mie\u0107 to dzia\u0142anie. Gdy wyst\u0105pi zdarzenie, silnik workflow sprawdza warunki przej\u015bcia tych definicji dzia\u0142a\u0144, kt\u00f3re reaguj\u0105 na zdarzenie. Definicje dzia\u0142a\u0144, kt\u00f3re reaguj\u0105 na podtyp inny ni\u017c wywo\u0142ane zdarzenie, nie s\u0105 brane pod uwag\u0119. Je\u015bli warunek przej\u015bcia jest prawdziwy, silnik workflow tworzy nowe dzia\u0142anie.<\/p>\n<p>Wszystkie dane wymagane dla nowego dzia\u0142ania s\u0105 obliczane na podstawie definicji dzia\u0142ania. Definicja dzia\u0142ania stanowi zatem szablon dla dzia\u0142a\u0144 generowanych na jej podstawie. Definicje dzia\u0142a\u0144 s\u0105 niezale\u017cne od bazy danych OLTP i systemu, w kt\u00f3rym zosta\u0142y utworzone, poniewa\u017c nie zawieraj\u0105 ani danych specyficznych dla systemu, ani danych specyficznych dla OLTP. Definicje dzia\u0142a\u0144 s\u0105 przechowywane w bazie danych repozytorium.<\/p>\n<p>Tylko aktywowane definicje dzia\u0142a\u0144 mog\u0105 generowa\u0107 dzia\u0142anie. Podczas aktywacji niekt\u00f3re w\u0142a\u015bciwo\u015bci, takie jak klasyfikacje dzia\u0142ania, mog\u0105 by\u0107 zmieniane w zale\u017cno\u015bci od bazy danych. Poniewa\u017c w\u0142a\u015bciciele specyficzni dla bazy danych s\u0105 r\u00f3wnie\u017c przypisani do roli workflow, dwa dzia\u0142ania utworzone z tej samej definicji dzia\u0142ania mog\u0105 mie\u0107 r\u00f3\u017cnych operator\u00f3w, je\u015bli dzia\u0142ania zosta\u0142y utworzone w r\u00f3\u017cnych bazach danych.<\/p>\n<p>Definicja dzia\u0142ania musi by\u0107 aktywowana w ka\u017cdej bazie danych, w kt\u00f3rej ma by\u0107 u\u017cywana. Umo\u017cliwia to analiz\u0119 zdarze\u0144 specyficznych dla bazy danych (tj. w szczeg\u00f3lno\u015bci specyficznych dla OLTP). Dane wymagane do aktywacji s\u0105 przechowywane w bazie danych, w kt\u00f3rej aktywowana jest definicja dzia\u0142ania. Umo\u017cliwia to kopiowanie baz danych OLTP w ramach systemu bez konieczno\u015bci reorganizacji aktywacji definicji dzia\u0142ania. Nale\u017cy u\u017cy\u0107 polecenia toolshell <em>dltwflacv<\/em>, aby usun\u0105\u0107 aktywacje po skopiowaniu bazy danych.<\/p>\n<p>Poni\u017csza ilustracja przedstawia model danych definicji dzia\u0142ania. Wszystkie obiekty biznesowe z wyj\u0105tkiem <em>ActivityDefinitionExtension<\/em> s\u0105 przechowywane w bazie danych repozytorium. Obiekt biznesowy <em>ActivityDefinitionExtension<\/em> reprezentuje aktywacj\u0119 definicji dzia\u0142ania w okre\u015blonej bazie danych i jest przechowywany w bazie danych, kt\u00f3rej dotyczy aktywacja. Zdarzenie, na kt\u00f3re reaguje definicja dzia\u0142ania i warunek przej\u015bcia s\u0105 przechowywane w obiekcie biznesowym<em> Transition<\/em>. Je\u015bli definicja dzia\u0142ania jest powi\u0105zana z definicj\u0105 procesu, relacja <em>ProcessDefinition<\/em> wskazuje na definicj\u0119 procesu.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31755 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3.png\" alt=\"\" width=\"1101\" height=\"511\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3.png 1101w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-300x139.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-1024x475.png 1024w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-768x356.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-50x23.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-920x427.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-600x278.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_3-320x149.png 320w\" sizes=\"auto, (max-width: 1101px) 100vw, 1101px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych definicji dzia\u0142ania<\/em><\/p>\n<ul>\n<li><strong>ActivityDefinition <\/strong>\u2013 definicja dzia\u0142ania<\/li>\n<li><strong>Transition<\/strong> \u2013 przypisanie zdarzenia do definicji dzia\u0142ania<\/li>\n<li><strong>ActivityDefinitionParameter<\/strong> \u2013 definicja parametr\u00f3w i warto\u015bci zwracanych w definicji dzia\u0142ania<\/li>\n<li><strong>ActionParameter<\/strong> \u2013 warto\u015b\u0107 transferu dla aplikacji powi\u0105zanej z definicj\u0105 dzia\u0142ania<\/li>\n<li><strong>ActivityDefinition Extension<\/strong> \u2013 dane dla specyficznej dla bazy danych aktywacji definicji dzia\u0142ania<\/li>\n<li><strong>ProcessDefinition<\/strong> \u2013 je\u015bli definicja dzia\u0142ania reprezentuje w\u0119ze\u0142 w definicji procesu, model danych zawiera r\u00f3wnie\u017c link do definicji procesu<\/li>\n<\/ul>\n<p>Jak wida\u0107 na ilustracji, aktywacja specyficzna dla bazy danych <em>ActivityDefinitionExtension<\/em> sk\u0142ada si\u0119 r\u00f3wnie\u017c z klasyfikacji dzia\u0142ania 1 \u2013 5. Klasyfikacje te mo\u017cna przypisa\u0107 za pomoc\u0105 aplikacji <em>Aktywacja definicji dzia\u0142a\u0144<\/em>. Przypisanie jest r\u00f3wnie\u017c mo\u017cliwe dla nieaktywowanych definicji dzia\u0142a\u0144, kt\u00f3re reprezentuj\u0105 na przyk\u0142ad w\u0119z\u0142y akcji definicji procesu.<\/p>\n<h4 id=\"dzialania-i-zadania\" ><span class=\"ez-toc-section\" id=\"Dzialania_i_zadania\"><\/span>Dzia\u0142ania i zadania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dzia\u0142ania z ich zadaniami s\u0105 obiektami widocznymi dla u\u017cytkownika, kt\u00f3ry przetwarza dzia\u0142anie lub zadanie. Dzia\u0142ania mog\u0105 by\u0107 wprowadzane bezpo\u015brednio przez u\u017cytkownika lub przez aplikacj\u0119 (np. w zarz\u0105dzaniu relacjami). Dzia\u0142ania mog\u0105 by\u0107 r\u00f3wnie\u017c generowane przez dzia\u0142ania serii, definicj\u0119 procesu lub przez obs\u0142ug\u0119 zdarze\u0144 silnika workflow.<\/p>\n<p>Je\u015bli definicja dzia\u0142ania nie jest powi\u0105zana z definicj\u0105 procesu, silnik workflow rozr\u00f3\u017cnia nast\u0119puj\u0105ce typy dzia\u0142a\u0144 (tzw. <em>dzia\u0142ania samodzielne<\/em>):<\/p>\n<ul>\n<li><strong>Pojedyncze dzia\u0142ania<\/strong><\/li>\n<li><strong>Szablony seryjny<\/strong><\/li>\n<li><strong>Dzia\u0142ania seryjne<\/strong><\/li>\n<\/ul>\n<p>Dzia\u0142anie indywidualne reprezentuje pojedyncze dzia\u0142anie dla jednego lub wi\u0119cej operator\u00f3w. Szablon serii tworzy serie dzia\u0142a\u0144 w okre\u015blonym czasie. R\u00f3\u017cnica mi\u0119dzy dzia\u0142aniem w ramach serii a dzia\u0142aniem indywidualnym polega na relacji z dzia\u0142aniem serii, kt\u00f3ra nie wyst\u0119puje w pojedynczym dzia\u0142aniu.<\/p>\n<p>Pocz\u0105tkowy status szablonu seryjnego to <em>Planowane<\/em>. Po osi\u0105gni\u0119ciu czasu przetwarzania zmienia si\u0119 on na status <em>Do opracowania<\/em>, a silnik workflow rozpoczyna przetwarzanie szablonu seryjnego. Silnik workflow tworzy nowe dzia\u0142anie seryjne na podstawie szablonu seryjnego. W\u0142a\u015bciwo\u015bci wymagane dla dzia\u0142ania seryjnego s\u0105 kopiowane z szablonu seryjnego bez ponownej oceny deklaracji.<\/p>\n<p>Definicja dzia\u0142ania, kt\u00f3ra nie jest powi\u0105zana z definicj\u0105 procesu, mo\u017ce wykorzystywa\u0107 typy dzia\u0142a\u0144 <em>Wiadomo\u015b\u0107 e-mail<\/em> i <em>Wywo\u0142anie funkcji<\/em>.<\/p>\n<p>Definicja dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail<\/em> wysy\u0142a wiadomo\u015b\u0107 e-mail do jednego lub wi\u0119cej odbiorc\u00f3w bez generowania dzia\u0142ania. Poniewa\u017c dzia\u0142anie reprezentuje r\u00f3wnie\u017c dow\u00f3d przetwarzania, a zatem wys\u0142anej wiadomo\u015bci e-mail, zaleca si\u0119 u\u017cycie definicji procesu z w\u0119z\u0142em wiadomo\u015bci e-mail, je\u015bli wymagany jest dow\u00f3d.<\/p>\n<p>Definicja dzia\u0142ania typu <em>Wywo\u0142anie funkcji<\/em> zwraca wynik obliczony przy u\u017cyciu deklaracji bez generowania dzia\u0142ania. Mog\u0105 by\u0107 one u\u017cywane na przyk\u0142ad do oceny metod Java w definicjach proces\u00f3w, kt\u00f3re u\u017cywaj\u0105 j\u0119zyka skryptowego systemu. Na przyk\u0142ad, definicja dzia\u0142ania u\u017cywaj\u0105ca j\u0119zyka skryptowego systemu mo\u017ce wywo\u0142a\u0107 definicj\u0119 dzia\u0142ania typu <em>Wywo\u0142anie funkcji <\/em>za pomoc\u0105 polecenia <em>call<\/em>. Je\u015bli wywo\u0142anie funkcji wykorzystuje JavaScript, mo\u017ce na przyk\u0142ad wywo\u0142a\u0107 metod\u0119 Java, kt\u00f3ra oblicza bie\u017c\u0105c\u0105 ilo\u015b\u0107 towaru w magazynie, a nast\u0119pnie udost\u0119pnia wynik wywo\u0142uj\u0105cej definicji dzia\u0142ania.<\/p>\n<p>Je\u015bli definicja dzia\u0142ania jest w\u0119z\u0142em w definicji procesu, silnik workflow r\u00f3wnie\u017c rozr\u00f3\u017cnia:<\/p>\n<ul>\n<li><strong>W\u0119z\u0142y akcji<\/strong><\/li>\n<\/ul>\n<ul>\n<li><strong>W\u0119ze\u0142 zdarzenia<\/strong><\/li>\n<\/ul>\n<p>W\u0119ze\u0142 akcji jest krokiem procesu, kt\u00f3ry reprezentuje dzia\u0142anie dla jednego lub wi\u0119cej procesor\u00f3w. Dzia\u0142ania generowane przez w\u0119ze\u0142 akcji mog\u0105 by\u0107 przetwarzane przez jednego lub wi\u0119cej u\u017cytkownik\u00f3w, przez zlecenie przetwarzania lub przez system. W\u0119ze\u0142 zdarze\u0144 jest krokiem procesu, kt\u00f3ry reprezentuje zdarzenie istotne dla procesu zamiast dzia\u0142ania. W\u0119z\u0142y zdarze\u0144 obejmuj\u0105 na przyk\u0142ad zdarzenie pocz\u0105tkowe, zdarzenie ko\u0144cowe i zdarzenie b\u0142\u0119du. Dzia\u0142ania generowane przez w\u0119ze\u0142 zdarze\u0144 s\u0105 przetwarzane przez system.<\/p>\n<p>W\u0119z\u0142y akcji s\u0105 podzielone na nast\u0119puj\u0105ce typy w celu mapowania okre\u015blonego dzia\u0142ania, takiego jak podejmowanie decyzji lub wysy\u0142anie wiadomo\u015bci e-mail:<\/p>\n<ul>\n<li>W\u0119ze\u0142 u\u017cytkownika<\/li>\n<li>W\u0119ze\u0142 us\u0142ugi<\/li>\n<li>W\u0119ze\u0142 skryptu<\/li>\n<li>W\u0119ze\u0142 e-mail<\/li>\n<li>Interaktywny w\u0119ze\u0142 e-mail<\/li>\n<li>W\u0119ze\u0142 us\u0142ugi sieci Web<\/li>\n<li>W\u0119ze\u0142 wyboru<\/li>\n<li>W\u0119ze\u0142 decyzji<\/li>\n<li>W\u0119ze\u0142 prezentacji<\/li>\n<\/ul>\n<p>W\u0119z\u0142y zdarze\u0144 s\u0105 podzielone na nast\u0119puj\u0105ce typy:<\/p>\n<ul>\n<li>Zdarzenie pocz\u0105tkowe<\/li>\n<li>Zdarzenie b\u0142\u0119du<\/li>\n<li>Zdarzenie ko\u0144cowe<\/li>\n<li>Zdarzenie po\u015brednie<\/li>\n<li>Zdarzenie ko\u0144cowe bez okre\u015blonego terminu<\/li>\n<li>Zdarzenie czasomierza<\/li>\n<\/ul>\n<p>Wszystkie dzia\u0142ania mog\u0105 mie\u0107 powi\u0105zanie z dowoln\u0105 jednostk\u0105 biznesow\u0105. Linki te s\u0105 u\u017cywane z jednej strony do dokumentowania dzia\u0142ania, a z drugiej strony do okre\u015blenia, kt\u00f3ra aplikacja mo\u017ce by\u0107 u\u017cywana do przetwarzania dzia\u0142ania lub zadania. Jednym z ogranicze\u0144 jest to, \u017ce linki musz\u0105 istnie\u0107 w tej samej bazie danych.<\/p>\n<p>Dzia\u0142ania maj\u0105 zadania. Zadanie jest zawsze przypisane do operatora. W zale\u017cno\u015bci od typu dzia\u0142ania, operatorem mo\u017ce by\u0107 system, zlecenie przetwarzania lub jeden lub wi\u0119cej u\u017cytkownik\u00f3w. Zadanie przechowuje r\u00f3wnie\u017c informacje o tym, kto ma je przetworzy\u0107. W przypadku dzia\u0142ania przetwarzanego przez u\u017cytkownik\u00f3w istnieje tyle zada\u0144, ilu operator\u00f3w ma dzia\u0142anie, tj. dla ka\u017cdego operatora tworzone jest osobne zadanie.<\/p>\n<p>Dzia\u0142ania i zadania mog\u0105 by\u0107 zapisywane zar\u00f3wno w bazie danych OLTP, jak i w bazie danych repozytorium. Dzia\u0142ania nie mog\u0105 by\u0107 zapisywane w bazie danych konfiguracji lub OLAP. Je\u015bli dzia\u0142anie jest zapisane w bazie danych OLTP, odnosi si\u0119 do dzia\u0142ania, kt\u00f3re jest specyficzna dla tej bazy danych OLTP. Dzia\u0142ania w bazie danych repozytorium odnosz\u0105 si\u0119 do dzia\u0142a\u0144, kt\u00f3re s\u0105 specyficzne dla bazy danych repozytorium lub cross-OLTP.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Dzia\u0142anie polegaj\u0105ce na zadzwonieniu do klienta jest specyficzne dla OLTP, poniewa\u017c klient jest przechowywany w bazie danych OLTP. Powi\u0105zane dzia\u0142anie jest zatem przechowywane w tej samej bazie danych OLTP co klient. Czynno\u015b\u0107 konfigurowania nowego u\u017cytkownika jest niezale\u017cna od OLTP, poniewa\u017c u\u017cytkownik jest wa\u017cny w ca\u0142ym systemie. Powi\u0105zane dzia\u0142anie jest zatem zapisywane w bazie danych repozytorium.<\/div><\/section>\n<p>Poniewa\u017c dzia\u0142ania mog\u0105 by\u0107 powi\u0105zane tylko z obiektami w tej samej bazie danych, dzia\u0142anie nie mo\u017ce by\u0107 powi\u0105zane z konfiguracj\u0105 lub obiektem OLAP.<\/p>\n<p>Poni\u017csza ilustracja przedstawia model danych dzia\u0142ania i zadania (elementu pracy) powi\u0105zanego z dzia\u0142aniem.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31756 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4.png\" alt=\"\" width=\"1001\" height=\"391\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4.png 1001w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-300x117.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-768x300.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-50x20.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-920x359.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-600x234.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_4-320x125.png 320w\" sizes=\"auto, (max-width: 1001px) 100vw, 1001px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych dzia\u0142ania<\/em><\/p>\n<ul>\n<li><strong>Activity<\/strong> \u2013 wszystkie dzia\u0142ania s\u0105 zapisywane w obiekcie biznesowym. Definicje dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail<\/em> nie generuj\u0105 dzia\u0142ania.<\/li>\n<li><strong>Workitem<\/strong> \u2013 zadania dzia\u0142ania. Ka\u017cde zadanie, kt\u00f3re nie jest przetwarzane przez system lub zlecenie przetwarzania, jest przypisane do dok\u0142adnie jednego u\u017cytkownika. Dzia\u0142ania typu <em>Szablon seryjny<\/em> nie maj\u0105 zada\u0144.<\/li>\n<li><strong>ActivityAttachment<\/strong> \u2013 powi\u0105zanie mi\u0119dzy dowoln\u0105 jednostk\u0105 biznesow\u0105 a dzia\u0142aniem. Jednostka biznesowa i dzia\u0142anie musz\u0105 by\u0107 przechowywane w tej samej bazie danych.<\/li>\n<li><strong>ActivityParameters <\/strong>\u2013 dzia\u0142ania tworzone przez definicje dzia\u0142a\u0144 mog\u0105 mie\u0107 parametry wymagane do oceny warunk\u00f3w. Wszystkie parametry s\u0105 zapisywane jako obiekt <em>blob<\/em> w zestawie danych.<\/li>\n<li><strong>Process<\/strong> \u2013 je\u015bli dzia\u0142anie reprezentuje w\u0119ze\u0142 w procesie, model danych zawiera r\u00f3wnie\u017c link do procesu<\/li>\n<\/ul>\n<p>Uko\u0144czone dzia\u0142ania archiwizuj\u0105 wcze\u015bniejsze dzia\u0142ania. W tym celu dzia\u0142anie zawiera czasy, w kt\u00f3rych status przyj\u0105\u0142 okre\u015blon\u0105 warto\u015b\u0107 po raz pierwszy. Zadania powi\u0105zane z dzia\u0142aniami zawieraj\u0105 odpowiednie czasy przetwarzania zadania. Uko\u0144czone dzia\u0142ania i ich zadania mo\u017cna zatem wykorzysta\u0107 do \u015bledzenia, kt\u00f3re dzia\u0142anie zosta\u0142o przetworzone w jakim czasie. U\u017cytkownik, kt\u00f3rego zadanie doprowadzi\u0142o do zako\u0144czenia dzia\u0142ania, jest rejestrowany w atrybucie <em>completeUser<\/em> dzia\u0142ania. Warto\u015b\u0107 ta jest ju\u017c dost\u0119pna do oceny w funkcji <em>close<\/em> w deklaracjach.<\/p>\n<p>Dzia\u0142ania zawieraj\u0105 wszystkie informacje wymagane do przetwarzania. Oznacza to, \u017ce zmiana definicji dzia\u0142ania nie ma wp\u0142ywu na istniej\u0105ce dzia\u0142ania, zw\u0142aszcza w przypadku dzia\u0142a\u0144, kt\u00f3re zosta\u0142y utworzone przy u\u017cyciu definicji dzia\u0142a\u0144. Dzia\u0142anie zawiera jednak odniesienie do definicji dzia\u0142ania, kt\u00f3re mo\u017cna wykorzysta\u0107 do zapyta\u0144 i analiz.<\/p>\n<p>Poniewa\u017c dzia\u0142ania tworz\u0105 wa\u017cn\u0105 histori\u0119, nie mog\u0105 by\u0107 usuwane przez u\u017cytkownika, ale tylko za specjaln\u0105 zgod\u0105 i poprzez reorganizacj\u0119.<\/p>\n<h4 id=\"definicje-procesow\" ><span class=\"ez-toc-section\" id=\"Definicje_procesow\"><\/span>Definicje proces\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicja procesu \u0142\u0105czy definicje dzia\u0142a\u0144, kt\u00f3re razem reprezentuj\u0105 proces. Podobnie jak definicja dzia\u0142ania, definicja procesu jest jednoznacznie identyfikowana poprzez jej identyfikator i prefiks eksportu.<\/p>\n<p>Definicja dzia\u0142ania w\u0119z\u0142a startowego okre\u015bla, czy proces powinien zosta\u0107 utworzony po wyst\u0105pieniu okre\u015blonego zdarzenia i jakie cechy powinien mie\u0107 ten proces. Je\u015bli w\u0119ze\u0142 startowy nie reaguje na zdarzenie, proces mo\u017cna uruchomi\u0107 tylko r\u0119cznie. Po\u015brednie w\u0119z\u0142y zdarze\u0144 nie mog\u0105 by\u0107 u\u017cyte do uruchomienia procesu. Po osi\u0105gni\u0119ciu po\u015bredniego w\u0119z\u0142a zdarze\u0144 generowane jest dzia\u0142anie typu <em>Zdarzenie po\u015brednie<\/em>. Takie dzia\u0142anie zdarzenia po\u015bredniego tworzy nowy token (przep\u0142yw procesu) za ka\u017cdym razem, gdy zdarzenie zapisane w definicji dzia\u0142ania jest wyzwalane, a warunek przej\u015bcia jest spe\u0142niony.<\/p>\n<p>Wszystkie dane wymagane dla procesu s\u0105 obliczane na podstawie definicji procesu i definicji dzia\u0142ania w\u0119z\u0142a pocz\u0105tkowego. Definicja procesu stanowi zatem szablon dla proces\u00f3w generowanych na jej podstawie. Definicje proces\u00f3w s\u0105 niezale\u017cne od bazy danych OLTP i systemu, w kt\u00f3rym zosta\u0142y zarejestrowane, poniewa\u017c nie zawieraj\u0105 ani danych specyficznych dla systemu, ani danych specyficznych dla OLTP. Definicje proces\u00f3w s\u0105 zapisywane w bazie danych repozytorium.<\/p>\n<p>Definicja dzia\u0142ania musi zosta\u0107 aktywowana w ka\u017cdej bazie danych, w kt\u00f3rej ma by\u0107 u\u017cywana. Gdy definicja procesu jest aktywowana, definicja dzia\u0142ania w\u0119z\u0142a pocz\u0105tkowego i definicje dzia\u0142a\u0144 wszelkich zdarze\u0144 po\u015brednich bez kraw\u0119dzi przychodz\u0105cych s\u0105 aktywowane w imieniu definicji procesu.<\/p>\n<p>Poni\u017csza ilustracja przedstawia model danych definicji procesu. Wszystkie obiekty biznesowe s\u0105 przechowywane w bazie danych repozytorium.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31757 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5.png\" alt=\"\" width=\"961\" height=\"481\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5.png 961w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-300x150.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-768x384.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-50x25.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-920x460.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-600x300.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_5-320x160.png 320w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych definicji procesu<\/em><\/p>\n<ul>\n<li><strong>ActivityDefinition <\/strong>\u2013 definicja dzia\u0142ania w\u0119z\u0142a definicji procesu<\/li>\n<li><strong>ProcessDefinition<\/strong> \u2013 definicja procesu<\/li>\n<li><strong>ProcessDefinitionDeclarations<\/strong> <em>\u2013 <\/em>deklaracje definicji procesu<\/li>\n<li><strong>ProcessDefinitionParameter<\/strong> \u2013 definicja zmiennych procesu zdefiniowanych w definicji procesu<\/li>\n<\/ul>\n<h4 id=\"procesy\" ><span class=\"ez-toc-section\" id=\"Procesy\"><\/span>Procesy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Proces podsumowuje wszystkie dzia\u0142ania nale\u017c\u0105ce do procesu wraz z ich zadaniami. Proces i wszystkie powi\u0105zane z nim dzia\u0142ania i zadania musz\u0105 by\u0107 zapisane w tej samej bazie danych. Proces nie mo\u017ce mie\u0107 dzia\u0142a\u0144 w dw\u00f3ch r\u00f3\u017cnych bazach danych OLTP.<\/p>\n<p>Poni\u017csza ilustracja przedstawia model danych procesu.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31759 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6.png\" alt=\"\" width=\"641\" height=\"501\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6.png 641w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6-300x234.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6-50x39.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6-600x469.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_6-320x250.png 320w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych procesu<\/em><\/p>\n<ul>\n<li><strong>Activity<\/strong> \u2013 dzia\u0142anie generowane na podstawie definicji dzia\u0142a\u0144 powi\u0105zanych z w\u0119z\u0142ami<\/li>\n<li><strong>Process<\/strong> \u2013 identyfikator procesu<\/li>\n<li><strong>ProcessComment <\/strong>\u2013 komentarze, zarejestrowane dla procesu<\/li>\n<li><strong>ProcessToken<\/strong> \u2013 token jest wewn\u0119trzn\u0105 reprezentacj\u0105 przep\u0142ywu sterowania<\/li>\n<\/ul>\n<p>Je\u015bli zdarzenie jest przechowywane w definicji dzia\u0142ania dla w\u0119z\u0142a startowego, proces mo\u017ce zosta\u0107 uruchomiony tylko przez to zdarzenie. Je\u015bli zdarzenie typu <em>Akcja u\u017cytkownika<\/em> jest przechowywane, proces mo\u017ce by\u0107 uruchomiony tylko poprzez menu kontekstowe jednostki biznesowej przechowywanej w w\u0119\u017ale startowym. Je\u015bli w definicji dzia\u0142ania nie zapisano \u017cadnego zdarzenia, proces mo\u017cna uruchomi\u0107 tylko r\u0119cznie. Proces mo\u017cna nast\u0119pnie uruchomi\u0107 w aplikacji <em>Procesy<\/em> lub w dokowanym oknie <em>Menu u\u017cytkownika i ulubione<\/em>. Proces mo\u017cna uruchomi\u0107 tylko w oknie dokowanym <em>Menu u\u017cytkownika i ulubione<\/em>, je\u015bli definicja procesu zosta\u0142a utworzona z szablonu definicji procesu, kt\u00f3ry jest powi\u0105zany z aplikacj\u0105 interaktywn\u0105 o specjalnym zastosowaniu <em>Definicja procesu<\/em>. Je\u015bli u\u017cytkownik nie ma uprawnie\u0144 do uruchomienia tej aplikacji, nie pojawi si\u0119 ona w menu u\u017cytkownika. Uprawnienia dla aplikacji powi\u0105zanej z szablonem definicji procesu s\u0105 r\u00f3wnie\u017c stosowane w aplikacji <em>Procesy<\/em>. Oznacza to, \u017ce aplikacja powi\u0105zana z szablonem definicji procesu z ustawieniem wy\u015bwietlania <em>Brak wy\u015bwietlania<\/em> mo\u017ce by\u0107 u\u017cywana do przypisywania uprawnie\u0144 do uruchamiania instancji procesu w aplikacji <em>Procesy<\/em>.<\/p>\n<p>Proces\u00f3w nie mo\u017cna edytowa\u0107 bezpo\u015brednio. Edycja odbywa si\u0119 za po\u015brednictwem dzia\u0142a\u0144 i zada\u0144 powi\u0105zanych z procesem. To, kt\u00f3re dzia\u0142ania s\u0105 generowane, jest okre\u015blane przez przep\u0142yw sterowania. Przep\u0142yw sterowania jest reprezentowany przez tokeny, kt\u00f3re s\u0105 kierowane wzd\u0142u\u017c kraw\u0119dzi \u0142\u0105cz\u0105cych w\u0119z\u0142y. Za ka\u017cdym razem, gdy token dociera do w\u0119z\u0142a, tworzone jest nowe dzia\u0142anie zgodnie z definicj\u0105 dzia\u0142ania powi\u0105zan\u0105 z w\u0119z\u0142em, a token jest zu\u017cywany przez dzia\u0142anie. Gdy dzia\u0142anie zostanie zako\u0144czone, generowany jest nowy token i przekazywany wzd\u0142u\u017c wychodz\u0105cej kraw\u0119dzi. Je\u015bli w\u0119ze\u0142 nie ma kraw\u0119dzi wychodz\u0105cej, nowy token nie jest generowany.<\/p>\n<p>Za pomoc\u0105 tak zwanych bramek przep\u0142yw sterowania mo\u017ce zosta\u0107 podzielony (rozga\u0142\u0119ziony) i ponownie po\u0142\u0105czony. W zale\u017cno\u015bci od typu rozga\u0142\u0119zienia i warunku przej\u015bcia, dla ka\u017cdej wychodz\u0105cej kraw\u0119dzi rozga\u0142\u0119zienia generowany jest token lub nie jest generowany \u017caden token. W zale\u017cno\u015bci od typu, scalenie mo\u017ce zu\u017cywa\u0107 token z pojedynczej kraw\u0119dzi lub token z ka\u017cdej z przychodz\u0105cych kraw\u0119dzi. Nast\u0119pnie powi\u0105zanie generuje nowy token i przesy\u0142a go wzd\u0142u\u017c wychodz\u0105cej kraw\u0119dzi. Je\u015bli przep\u0142yw sterowania zostanie podzielony i scalony przy u\u017cyciu sprz\u0119\u017cenia zwrotnego, tak \u017ce w\u0119ze\u0142 zostanie osi\u0105gni\u0119ty przez kilka przep\u0142yw\u00f3w sterowania, dla ka\u017cdego tokena zostanie wygenerowane nowe dzia\u0142anie.<\/p>\n<p>Gdy tylko przep\u0142yw sterowania osi\u0105gnie w\u0119ze\u0142 ko\u0144cowy, proces ko\u0144czy si\u0119, a wszystkie dzia\u0142ania, kt\u00f3re zosta\u0142y utworzone, ale nie zosta\u0142y jeszcze uko\u0144czone, s\u0105 automatycznie ko\u0144czone bez edytowania. Je\u015bli podczas wykonywania procesu lub podczas przetwarzania dzia\u0142ania wyst\u0105pi nieodwracalny b\u0142\u0105d, przep\u0142yw sterowania jest przekierowywany przez w\u0119ze\u0142 b\u0142\u0119du i tworzone jest nowe dzia\u0142anie dla w\u0119z\u0142a b\u0142\u0119du. Po zako\u0144czeniu dzia\u0142ania powi\u0105zanego z w\u0119z\u0142em b\u0142\u0119du proces zostaje zako\u0144czony. B\u0142\u0105d wyst\u0119puje r\u00f3wnie\u017c wtedy, gdy proces nie ma ju\u017c wystarczaj\u0105cej liczby token\u00f3w, wi\u0119c przep\u0142yw sterowania nie mo\u017ce ju\u017c dotrze\u0107 do w\u0119z\u0142a ko\u0144cowego. Nie ma specjalnego statusu zako\u0144czenia dla procesu, kt\u00f3ry ko\u0144czy si\u0119 za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du, ale kod b\u0142\u0119du i oznaczenie b\u0142\u0119du s\u0105 zapisywane w procesie i mog\u0105 by\u0107 r\u00f3wnie\u017c wyszukiwane w dw\u00f3ch aplikacjach list dla proces\u00f3w. Przep\u0142yw sterowania jest r\u00f3wnie\u017c kierowany przez w\u0119ze\u0142 b\u0142\u0119du, je\u015bli polecenie <em>abort<\/em> jest u\u017cywane w funkcji<em> create<\/em> w deklaracjach definicji dzia\u0142ania, kt\u00f3ra nale\u017cy do definicji procesu. W w\u0119\u017ale startowym polecenie<em> abort<\/em> oznacza, \u017ce nie zostanie utworzona \u017cadna instancja procesu.<\/p>\n<p>Je\u015bli jest to wymagane, proces mo\u017ce r\u00f3wnie\u017c zosta\u0107 zako\u0144czony bez przetwarzania poprzez akcj\u0119 u\u017cytkownika. W takim przypadku przep\u0142yw sterowania jest kierowany bezpo\u015brednio do w\u0119z\u0142a ko\u0144cowego, a proces otrzymuje status ko\u0144cowy <em>Zako\u0144czone bez przetwarzania<\/em>.<\/p>\n<p>Proces ma dzia\u0142ania z przypisanymi zadaniami. Je\u015bli zadanie jest przypisane do u\u017cytkownika, u\u017cytkownik ten jest automatycznie upowa\u017cniony do otwarcia procesu za po\u015brednictwem zadania, np. w celu wprowadzenia tam komentarzy. Wyzwalacz i osoba odpowiedzialna (jako u\u017cytkownik lub jako rola workflow) mog\u0105 by\u0107 r\u00f3wnie\u017c przechowywane w procesie. Definicja procesu okre\u015bla, jakie uprawnienia maj\u0105 te i inne role w procesie. U\u017cytkownikowi mo\u017cna r\u00f3wnie\u017c przypisa\u0107 specjalne umiej\u0119tno\u015bci dla struktury <em>Workflow Management<\/em>, kt\u00f3ra pozwala u\u017cytkownikowi otwiera\u0107 procesy i edytowa\u0107 dzia\u0142ania i zadania niezale\u017cnie od ustawie\u0144 autoryzacji w definicji procesu. Wi\u0119cej informacji na temat uprawnie\u0144 definicji proces\u00f3w mo\u017cna znale\u017a\u0107 w artykule <em>Definicje procesu<\/em>.<\/p>\n<p>Akcja <em>Zastosuj uprawnienia do proces\u00f3w<\/em> w aplikacji <em>Aktywacja definicji dzia\u0142a\u0144<\/em> mo\u017ce by\u0107 u\u017cyta do przeniesienia uprawnie\u0144 aktualnie ustawionych w definicji procesu do instancji procesu, kt\u00f3re zosta\u0142y ju\u017c utworzone. Ta funkcja jest przydatna, na przyk\u0142ad, je\u015bli organizacja procesu istotna dla definicji procesu uleg\u0142a zmianie lub je\u015bli osoba odpowiedzialna za proces jest u\u017cytkownikiem, a nie rol\u0105 workflow, a odpowiedzialno\u015b\u0107 ma zosta\u0107 przeniesiona na nowego u\u017cytkownika.<\/p>\n<p>W przeciwie\u0144stwie do dzia\u0142ania, proces nie mo\u017ce by\u0107 powi\u0105zany z \u017cadn\u0105 jednostk\u0105 biznesow\u0105. W dw\u00f3ch aplikacjach typu lista dla proces\u00f3w mo\u017cna jednak nadal wyszukiwa\u0107 procesy za po\u015brednictwem preferowanej powi\u0105zanej jednostki biznesowej. Powi\u0105zania w\u0119z\u0142a pocz\u0105tkowego maj\u0105 r\u00f3wnie\u017c zastosowanie do procesu. Na przyk\u0142ad, je\u015bli u\u017cytkownik chce mie\u0107 mo\u017cliwo\u015b\u0107 wyszukiwania proces\u00f3w za po\u015brednictwem powi\u0105zanego zam\u00f3wienia sprzeda\u017cy, mo\u017cna powi\u0105za\u0107 zam\u00f3wienie sprzeda\u017cy z procesem w w\u0119\u017ale pocz\u0105tkowym za pomoc\u0105 polecenia <em>addAttachment<\/em>. Po\u0142\u0105czenie utworzone jako pierwsze jest po\u0142\u0105czeniem preferowanym. W przypadku niekt\u00f3rych typ\u00f3w zdarze\u0144, takich jak <em>Jednostka biznesowa<\/em> i <em>Akcja u\u017cytkownika<\/em>, obiekt biznesowy, do kt\u00f3rego odwo\u0142uje si\u0119 polecenie <em>parameters.object<\/em>, jest automatycznie \u0142\u0105czony z w\u0119z\u0142em pocz\u0105tkowym. Podmiot procesu jest r\u00f3wnie\u017c definiowany za po\u015brednictwem w\u0119z\u0142a pocz\u0105tkowego. Nawet je\u015bli system jest procesorem w\u0119z\u0142a pocz\u0105tkowego, wa\u017cne jest, aby przypisa\u0107 znacz\u0105cy temat do w\u0119z\u0142a pocz\u0105tkowego, np. za pomoc\u0105 polecenia <em>formatSubject<\/em>.<\/p>\n<p>Uko\u0144czone procesy archiwizuj\u0105 przesz\u0142e dzia\u0142ania. Przechowywanie jest obowi\u0105zkowe dla niekt\u00f3rych proces\u00f3w. Aby zapobiec przedwczesnej reorganizacji takich proces\u00f3w, w definicji procesu mo\u017cna okre\u015bli\u0107 okres przechowywania. Dzia\u0142aj\u0105ca w tle aplikacja<em> Reorganizacja generowanych proces\u00f3w <\/em>odejmuje okres przechowywania od czasu procesu. Na przyk\u0142ad, je\u015bli reorganizowane s\u0105 procesy starsze ni\u017c 52 tygodnie, proces z okresem przechowywania wynosz\u0105cym 104 tygodnie musi mie\u0107 co najmniej trzy lata lub 156 tygodni, aby zosta\u0142 uwzgl\u0119dniony w reorganizacji.<\/p>\n<h4 id=\"role-workflow\" ><span class=\"ez-toc-section\" id=\"Role_workflow\"><\/span>Role workflow<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Role workflow s\u0105 poziomem abstrakcji do mapowania organizacji procesu u\u017cywanej przez workflow. Podobnie jak definicja dzia\u0142ania, rola workflow jest jednoznacznie identyfikowana poprzez jej identyfikacj\u0119 i prefiks eksportu.<\/p>\n<p>Sama rola workflow nie zawiera \u017cadnych danych istotnych dla przetwarzania dzia\u0142a\u0144 i zada\u0144. W\u0142a\u015bciciele musz\u0105 by\u0107 przypisani do roli workflow, aby mo\u017cna by\u0142o z niej odpowiednio korzysta\u0107. Przypisanie w\u0142a\u015bcicieli r\u00f3l workflow jest specyficzne dla bazy danych, poniewa\u017c obiekty biznesowe mog\u0105 by\u0107 u\u017cywane w tej bazie danych podczas przypisywania. Rola workflow ma zazwyczaj r\u00f3\u017cnych w\u0142a\u015bcicieli w r\u00f3\u017cnych bazach danych.<\/p>\n<p>Je\u015bli proces lub dzia\u0142anie ma by\u0107 obs\u0142ugiwane przez struktur\u0119 organizacyjn\u0105, do roli workflow jako w\u0142a\u015bciciela mo\u017cna przypisa\u0107 organizacj\u0119 lub organizacj\u0119 wielofirmow\u0105. W szczeg\u00f3lno\u015bci w przypadku proces\u00f3w zatwierdzania przydatne mo\u017ce by\u0107 zdefiniowanie przetwarzania jako macierzy r\u00f3l workflow i zada\u0144.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Zam\u00f3wienia o warto\u015bci do 10 000 EUR musz\u0105 by\u0107 zatwierdzone przez kierownika dzia\u0142u. Zam\u00f3wienia o warto\u015bci do 50 000 EUR musz\u0105 by\u0107 autoryzowane przez kierownika dzia\u0142u i kierownika ds. zakup\u00f3w. Zam\u00f3wienia powy\u017cej 100 000 EUR musz\u0105 by\u0107 zatwierdzone przez kierownika dzia\u0142u, kierownika ds. zakup\u00f3w i dyrektora zarz\u0105dzaj\u0105cego.<\/p>\n<p>Aby spe\u0142ni\u0107 ten wym\u00f3g, rejestrowane jest po jednym stanowisku dla kierownika dzia\u0142u, kierownika ds. zakup\u00f3w i dyrektora zarz\u0105dzaj\u0105cego. Nast\u0119pnie tworzone s\u0105 trzy role workflow dla ma\u0142ych, \u015brednich i du\u017cych zam\u00f3wie\u0144. Stanowisko kierownika dzia\u0142u jest przypisane jako w\u0142a\u015bciciel wszystkich trzech r\u00f3l workflow. Stanowisko kierownika ds. zakup\u00f3w jest przypisane jako w\u0142a\u015bciciel r\u00f3l workflow dla \u015brednich i du\u017cych zam\u00f3wie\u0144. Stanowisko dyrektora zarz\u0105dzaj\u0105cego jest przypisane tylko do roli workflow dla du\u017cych zam\u00f3wie\u0144.<\/div><\/section>\n<p>Przypisanie posiadaczy jest zale\u017cne od czasu: Ka\u017cde przypisanie posiadacza ma okres wa\u017cno\u015bci. Przypisanie jest dodawane do anulowania tylko w tym okresie. Pozwala to na rejestrowanie zmian zaplanowanych na przysz\u0142o\u015b\u0107 dla posiadaczy.<\/p>\n<p>Poni\u017csza ilustracja przedstawia model danych roli workflow. Obiekt biznesowy <em>WorkflowRole<\/em> jest przechowywany w bazie danych repozytorium. Obiekt biznesowy <em>WorkflowRoleElement<\/em> jest przechowywany w bazie danych, do kt\u00f3rej odnosi si\u0119 przypisanie w\u0142a\u015bciciela.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31760 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_7.png\" alt=\"\" width=\"561\" height=\"391\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_7.png 561w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_7-300x209.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_7-50x35.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_7-320x223.png 320w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych roli workflow<\/em><\/p>\n<ul>\n<li><strong>WorkflowRole<\/strong> \u2013 rola workflow<\/li>\n<li><strong>WorkflowRoleElement<\/strong> \u2013 specyficzne dla bazy danych przypisanie w\u0142a\u015bciciela do roli workflow<\/li>\n<li><strong>WorkflowSystemCustomising<\/strong> \u2013 funkcja konfiguracji <em>Workflow Management<\/em> z relacjami dla roli administrator\u00f3w workflow w bazie danych repozytorium i w bazach danych OLTP<\/li>\n<\/ul>\n<p>W poprzednich wersjach w\u0142a\u015bciciele roli workflow mogli by\u0107 definiowani przez wyra\u017cenie, kt\u00f3re jest oceniane, gdy ta rola workflow jest rozwi\u0105zywana. Role workflow oparte na wyra\u017ceniach u\u0142atwia\u0142y obs\u0142ug\u0119 i zrozumienie, szczeg\u00f3lnie w przypadku obs\u0142ugi eskalacji. Od czasu wprowadzenia silnika skryptowego dla JavaScript ta opcja ju\u017c nie istnieje, poniewa\u017c takie role workflow nie mog\u0105 by\u0107 oceniane przez wszystkie silniki skryptowe. Zamiast tego operatorzy dzia\u0142ania (lub operatorzy w przypadku przekroczenia limitu czasu) mog\u0105 by\u0107 obliczani za pomoc\u0105 wyra\u017cenia w definicji dzia\u0142ania.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">W procesie zatwierdzania z poprzedniego przyk\u0142adu, bardzo ma\u0142e zam\u00f3wienia o warto\u015bci do 1000 euro musz\u0105 by\u0107 zatwierdzone tylko przez kierownika inicjatora procesu. Zamiast wprowadzania pozycji dla ka\u017cdego mo\u017cliwego prze\u0142o\u017conego, jako procesor w definicji dzia\u0142ania wybierane jest <em>Wyra\u017cenie<\/em>. Wyra\u017cenie <em>superior(userGuid(process.Initiator))<\/em> jest przechowywane w polu <em>Wyra\u017cenie dla operatora<\/em>. Aby mie\u0107 wa\u017cnego operatora, nawet je\u015bli nie zdefiniowano \u017cadnego prze\u0142o\u017conego dla inicjatora procesu, wyra\u017cenie mo\u017cna rozszerzy\u0107 w nast\u0119puj\u0105cy spos\u00f3b: <em>cast(Guid[], first(superior(userGuid(process.Initiator)), processOwner())).<\/em> To wyra\u017cenie przypisuje osob\u0119 lub osoby odpowiedzialne za proces jako operatora, je\u015bli prze\u0142o\u017cony jest niezdefiniowany.<\/div><\/section>\n<p>Je\u015bli nie mo\u017cna okre\u015bli\u0107 operatora podczas tworzenia dzia\u0142ania, np. poniewa\u017c u\u017cywana rola workflow nie ma w\u0142a\u015bciciela, dzia\u0142anie jest przypisywane do w\u0142a\u015bciciela jednej z r\u00f3l workflow dla administrator\u00f3w przechowywanych w funkcji konfiguracji <em>Workflow Management<\/em>.<\/p>\n<h3 id=\"definicje-transportowego-workflow\" ><span class=\"ez-toc-section\" id=\"Definicje_transportowego_workflow\"><\/span>Definicje transportowego workflow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"szablony-workflow\" ><span class=\"ez-toc-section\" id=\"Szablony_workflow\"><\/span>Szablony workflow<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicje workflow (definicje proces\u00f3w, definicje dzia\u0142a\u0144 i role workflow) mog\u0105 by\u0107 zapisywane jako szablony w systemie klienta. Szablony workflow s\u0105 przechowywane w obszarze nazw <em>com.cisag.sys.respoitory.obj <\/em>bazy danych repozytorium. Jednak identyfikatory i lokalizacje przechowywania r\u00f3\u017cni\u0105 si\u0119 w ka\u017cdym przypadku. Efekty s\u0105 r\u00f3wnie\u017c r\u00f3\u017cne. Podczas gdy definicje workflow s\u0105 u\u017cywane do tworzenia proces\u00f3w i dzia\u0142a\u0144, szablony r\u00f3l workflow s\u0105 u\u017cywane do uproszczonej administracji.<\/p>\n<p>Aby definicja workflow mog\u0142a zosta\u0107 p\u00f3\u017aniej utworzona z szablonu workflow, szablony workflow maj\u0105 podobny model danych do modelu definicji workflow, jak wskazuje poni\u017csza ilustracja modelu danych szablonu definicji dzia\u0142ania.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-31762 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8.png\" alt=\"\" width=\"1001\" height=\"661\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8.png 1001w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-300x198.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-768x507.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-50x33.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-920x608.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-600x396.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/Silnik_workflow_8-320x211.png 320w\" sizes=\"auto, (max-width: 1001px) 100vw, 1001px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Model danych szablonu definicji dzia\u0142ania<\/em><\/p>\n<p>Szablon workflow mo\u017cna utworzy\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ul>\n<li>Otworzy\u0107 istniej\u0105c\u0105 definicj\u0119 workflow w odpowiedniej aplikacji workflow (<em>Definicje procesu, Definicje dzia\u0142a\u0144 <\/em>lub <em>Role workflow<\/em>) i zapisa\u0107 j\u0105 jako szablon.<\/li>\n<li>Otworzy\u0107 aplikacj\u0119 workflow i wybra\u0107 warto\u015b\u0107 <em>Tak<\/em> w polu <em>Szablon<\/em>. Wybra\u0107 przycisk <strong>[Nowy]<\/strong>, aby utworzy\u0107 nowy szablon.<\/li>\n<li>Otworzy\u0107 aplikacj\u0119 <em>Obiekty deweloperskie<\/em> i utworzy\u0107 nowy obiekt deweloperski z typem \u017c\u0105danego szablonu workflow. Nast\u0119pnie wybra\u0107 przycisk, aby prze\u0142\u0105czy\u0107 si\u0119 do odpowiedniej aplikacji workflow i wprowadzi\u0107 tam pozosta\u0142e cechy definicji wokflow.<\/li>\n<\/ul>\n<p>Nale\u017cy wybra\u0107 procedur\u0119, kt\u00f3ra najlepiej odpowiada wymaganiom u\u017cytkownika. Je\u015bli chce on zapisa\u0107 istniej\u0105c\u0105 definicj\u0119 workflow jako szablon, nale\u017cy otworzy\u0107 istniej\u0105c\u0105 definicj\u0119 workflow i wykona\u0107 akcj\u0119. Je\u015bli chce utworzy\u0107 now\u0105 definicj\u0119 workflow, mo\u017cliwe s\u0105 wszystkie trzy procedury. Mo\u017cna na przyk\u0142ad utworzy\u0107 nowy szablon. Mo\u017cna r\u00f3wnie\u017c utworzy\u0107 now\u0105 definicj\u0119 workflow i zapisa\u0107 j\u0105 jako szablon po pomy\u015blnym przetestowaniu.<\/p>\n<p>Aby zapewni\u0107 integralno\u015b\u0107 referencyjn\u0105 obiekt\u00f3w deweloperskich, nale\u017cy najpierw zapisa\u0107 wszystkie role workflow, do kt\u00f3rych odwo\u0142uje si\u0119 definicja procesu lub definicja dzia\u0142ania jako szablon, zanim b\u0119dzie mo\u017cna zapisa\u0107 definicj\u0119 procesu lub definicj\u0119 dzia\u0142ania jako szablon. Podczas zapisywania definicji procesu lub definicji dzia\u0142ania jako szablonu, wszystkie role workflow, do kt\u00f3rych istniej\u0105 odwo\u0142ania, s\u0105 zast\u0119powane przez szablon roli workflow powi\u0105zany z rol\u0105 workflow. Podczas zapisywania definicji procesu jako szablonu, wszystkie definicje dzia\u0142ania powi\u0105zane z definicj\u0105 procesu s\u0105 r\u00f3wnie\u017c automatycznie zapisywane jako szablon. Nie ma zatem potrzeby jawnego zapisywania definicji dzia\u0142a\u0144 dla w\u0119z\u0142\u00f3w zdarze\u0144 i akcji jako szablonu. System i tak temu zapobiega ze wzgl\u0119du na integralno\u015b\u0107 referencyjn\u0105.<\/p>\n<p>Po utworzeniu szablonu workflow generowany jest nowy obiekt deweloperski i przypisywany do zadania deweloperskiego. Je\u015bli istnieje ju\u017c otwarte zadanie deweloperskie dla obiektu deweloperskiego, u\u017cywane jest to zadanie deweloperskie. W przeciwnym razie automatycznie tworzone jest nowe zadanie. Dop\u00f3ki zadanie deweloperskie jest otwarte, mo\u017cna zmienia\u0107 i zapisywa\u0107 szablon workflow bez tworzenia nowej wersji szablonu workflow. Gdy tylko zadanie deweloperskie zostanie aktywowane, nowa wersja szablonu zostanie automatycznie utworzona, gdy szablon workflow zostanie zmieniony i zapisany. W tym samym czasie tworzone jest r\u00f3wnie\u017c nowe zadanie deweloperskie, kt\u00f3re jest powi\u0105zane z szablonem workflow. Zadania deweloperskie dla szablon\u00f3w workflow mo\u017cna aktywowa\u0107 za pomoc\u0105 akcji aktywacji zada\u0144 deweloperskich w aplikacji <em>Lista: Obiekty deweloperskie systemu produkcyjnego<\/em>. Gdy zadania s\u0105 aktywowane, system jest r\u00f3wnie\u017c restartowany, aby nowe obiekty deweloperskie by\u0142y znane systemowi.<\/p>\n<p><em>Lista: Obiekty deweloperskie systemu produkcyjnego<\/em> mo\u017ce by\u0107 r\u00f3wnie\u017c u\u017cywany do przenoszenia szablon\u00f3w workflow utworzonych jako obiekty deweloperskie z systemu \u017ar\u00f3d\u0142owego do kolejnych system\u00f3w. Na przyk\u0142ad definicja procesu, kt\u00f3ra zosta\u0142a zarejestrowana w systemie testowym klienta i zapisana tam jako szablon, mo\u017ce zosta\u0107 przetransportowana do systemu produkcyjnego klienta. Jako medium transportowe wykorzystywane s\u0105 aktualizacje oprogramowania instalowane w kolejnych systemach. Szablon roli workflow mo\u017ce by\u0107 transportowany z w\u0142a\u015bcicielem lub bez niego. Poniewa\u017c szablony workflow s\u0105 zapisywane w bazie danych repozytorium, szablon roli workflow mo\u017ce mie\u0107 tylko w\u0142a\u015bcicieli typ\u00f3w, kt\u00f3re nie s\u0105 zapisane w bazie danych OLTP. Szablon roli workflow mo\u017ce zatem mie\u0107 tylko w\u0142a\u015bcicieli typu <em>U\u017cytkownik<\/em> i <em>Grupa u\u017cytkownik\u00f3w<\/em>. System docelowy jest restartowany podczas instalacji. Dlatego nale\u017cy u\u017cy\u0107 akcji <em>Zaplanuj instalacj\u0119<\/em>, aby zainstalowa\u0107 aktualizacje oprogramowania w spos\u00f3b kontrolowany czasowo.<\/p>\n<p>Wi\u0119cej informacji na ten temat mo\u017cna znale\u017a\u0107 w artyku\u0142ach: <em>Wprowadzenie: Logistyka oprogramowania, Obiekty deweloperskie <\/em>i <em>Lista: Obiekty deweloperskie systemu produkcyjnego<\/em>.<\/p>\n<p>Poniewa\u017c szablon workflow nie mo\u017ce zosta\u0107 wykonany, nale\u017cy utworzy\u0107 i aktywowa\u0107 definicj\u0119 workflow z szablonu, aby m\u00f3c przetestowa\u0107 szablon. Utworzona definicja workflow jest automatycznie powi\u0105zana z szablonem. Je\u015bli test nie powi\u00f3d\u0142 si\u0119 lub u\u017cytkownik chce dostosowa\u0107 szablon, powinien wprowadzi\u0107 zmiany bezpo\u015brednio w szablonie workflow, a nie w definicji workflow. Je\u015bli utworzy si\u0119 now\u0105 definicj\u0119 workflow z tym samym identyfikatorem ze zmodyfikowanego szablonu, zmiany zostan\u0105 przeniesione do istniej\u0105cej definicji workflow. Nale\u017cy powtarza\u0107 t\u0119 procedur\u0119, a\u017c szablon workflow nie b\u0119dzie ju\u017c wymaga\u0142 dostosowania. Je\u015bli aplikacja definicji workflow (<em>Definicje procesu, Definicje dzia\u0142a\u0144<\/em> lub <em>Role workflow<\/em>) oferuje akcj\u0119 aktualizacji szablonu mo\u017cna przenie\u015b\u0107 wszelkie zmiany w definicji workflow do szablonu workflow. Podobnie jak w przypadku zapisywania, nowa wersja szablonu jest tworzona, je\u015bli nie ma otwartego zadania deweloperskiego dla obiektu szablonu.<\/p>\n<p>Szablony workflow utworzone w systemie nadrz\u0119dnym nie mog\u0105 by\u0107 zmieniane w systemach podrz\u0119dnych. System, w kt\u00f3rym utworzono szablon workflow, mo\u017cna rozpozna\u0107 po obszarze nazw szablonu. Szablon mo\u017cna zmieni\u0107 tylko wtedy, gdy obszar nazw odpowiada bie\u017c\u0105cemu systemowi.<\/p>\n<p>Szablon workflow dostarczony z systemem ERP lub utworzony i dostarczony przez jednego z partner\u00f3w zazwyczaj musi by\u0107 dostosowany do specyficznych wymaga\u0144 ka\u017cdego klienta. Na przyk\u0142ad role workflow przechowywane w definicjach dzia\u0142a\u0144 musz\u0105 zosta\u0107 zast\u0105pione rolami workflow specyficznymi dla klienta. Poniewa\u017c nie mo\u017cna zmieni\u0107 dostarczonych szablon\u00f3w workflow, mo\u017cna zamiast tego zduplikowa\u0107 szablon w systemie testowym. Podczas duplikowania nowy szablon jest tworzony w obszarze nazw systemu i przypisywany do automatycznie generowanego zadania deweloperskiego. Nowy szablon workflow mo\u017cna nast\u0119pnie zmieni\u0107 bezpo\u015brednio w systemie testowym, jak opisano powy\u017cej. Alternatywn\u0105 procedur\u0105 jest utworzenie definicji workflow z dostarczonego szablonu workflow. Nie nale\u017cy jednak wprowadza\u0107 \u017cadnych zmian w tej definicji workflow, poniewa\u017c jest ona ju\u017c powi\u0105zana z szablonem i dlatego nie mo\u017cna jej ponownie zapisa\u0107 jako szablonu. Zamiast tego nale\u017cy powieli\u0107 wygenerowan\u0105 definicj\u0119 workflow, wprowadzi\u0107 zmiany, a nast\u0119pnie zapisa\u0107 zmodyfikowan\u0105 definicj\u0119 workflow jako nowy szablon. Co do zasady, dostarczone szablony definicji proces\u00f3w s\u0105 zaimplementowane w taki spos\u00f3b, \u017ce mo\u017cna je dostosowa\u0107 za pomoc\u0105 sta\u0142ych warto\u015bci w deklaracjach definicji procesu. Mo\u017cna tam r\u00f3wnie\u017c znale\u017a\u0107 instrukcje dotycz\u0105ce dostosowywania i uruchamiania definicji procesu.<\/p>\n<p>Podczas tworzenia definicji workflow z szablonu, nowa definicja workflow jest automatycznie \u0142\u0105czona z szablonem. Podczas zapisywania definicji workflow jako szablonu, definicj\u0119 workflow mo\u017cna po\u0142\u0105czy\u0107 z szablonem tylko wtedy, gdy opcja ta jest wyra\u017anie oferowana w oknie dialogowym akcji. Je\u015bli akcja nie jest oferowana, nadal mo\u017cna utworzy\u0107 \u0142\u0105cze, tworz\u0105c now\u0105 definicj\u0119 workflow z szablonu o tym samym identyfikatorze, co definicja workflow, z kt\u00f3rej utworzono szablon. Gdy istniej\u0105ca definicja workflow zostanie nadpisana, zostanie ona automatycznie po\u0142\u0105czona z szablonem. Definicja workflow utworzona z szablonu workflow nie mo\u017ce zosta\u0107 zmieniona w celu zapewnienia, \u017ce definicja workflow odpowiada szablonowi.<\/p>\n<p>Je\u015bli szablon roli workflow, kt\u00f3ry zosta\u0142 przetransportowany do systemu produkcyjnego klienta i tam aktywowany, ma zosta\u0107 poprawiony lub dostosowany do zmienionych wymaga\u0144, szablon workflow powinien zosta\u0107 dostosowany w systemie testowym klienta wy\u017cszego szczebla. Gdy wynikowa nowa wersja szablonu zostanie pomy\u015blnie przetestowana, mo\u017cna aktywowa\u0107 zadanie deweloperskie i zaplanowa\u0107 instalacj\u0119 w systemie produkcyjnym klienta.<\/p>\n<p>Je\u015bli konieczne jest natychmiastowe i niezw\u0142oczne poprawienie definicji workflow utworzonej z szablonu workflow, definicj\u0119 workflow mo\u017cna otworzy\u0107 do edycji w systemie produkcyjnym klienta za pomoc\u0105 akcji <em>Edytuj tymczasowo<\/em>. Wszelkie wprowadzone zmiany s\u0105 wtedy natychmiast skuteczne. Definicja workflow pozostaje edytowalna do nast\u0119pnej aktualizacji z szablonu. Je\u015bli funkcja automatycznej aktualizacji na zak\u0142adce <em>Ustawienia szablonu<\/em> jest aktywowana w definicji workflow w systemie produkcyjnym klienta, definicja workflow jest automatycznie aktualizowana po zainstalowaniu lub aktywowaniu nowej wersji szablonu. Je\u015bli funkcja nie jest aktywna, definicja workflow jest aktualizowana tylko wtedy, gdy wykonywana jest akcja <strong>[Utw\u00f3rz lub zaktualizuj wg szablonu]<\/strong> w menu standardowego paska narz\u0119dzi.<\/p>\n<p>Podczas aktualizacji istniej\u0105cej roli workflow z szablonu roli workflow, nowi w\u0142a\u015bciciele mog\u0105 zosta\u0107 dodani do roli workflow zgodnie z szablonem. Istniej\u0105cy w\u0142a\u015bciciele, kt\u00f3rzy nie s\u0105 przypisani do nowej wersji szablonu, pozostaj\u0105 w roli workflow.<\/p>\n<p>Aktualizacja definicji procesu utworzonej z szablonu mo\u017ce mie\u0107 negatywny wp\u0142yw na otwarte instancje procesu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Nowa wersja szablonu definicji procesu zawiera now\u0105 sta\u0142\u0105 globaln\u0105. Po zainstalowaniu nowej wersji szablonu istniej\u0105 ju\u017c otwarte instancje procesu, kt\u00f3rych \u015brodowisko wykonawcze (<em>parserEnvironment<\/em>) nie rozpoznaje nowej sta\u0142ej. Definicja dzia\u0142ania dla w\u0119z\u0142a procesu, kt\u00f3ry nie zosta\u0142 jeszcze osi\u0105gni\u0119ty przez otwart\u0105 instancj\u0119 procesu, u\u017cywa nowej sta\u0142ej w deklaracjach. Je\u015bli otwarta instancja procesu dotrze do w\u0119z\u0142a, mo\u017ce to spowodowa\u0107 b\u0142\u0105d \u015brodowiska wykonawczego podczas oceny deklaracji. <\/div><\/section>\n<p>Aby zapobiec takim b\u0142\u0119dom w czasie wykonywania, zwykle lepiej jest nie aktywowa\u0107 funkcji automatycznej aktualizacji definicji procesu i zamiast tego specjalnie utworzy\u0107 now\u0105 definicj\u0119 procesu z nowej wersji szablonu za pomoc\u0105 akcji <strong>[Utw\u00f3rz lub zaktualizuj wg szablonu]<\/strong>. Nowo utworzona definicja procesu powinna mie\u0107 sw\u00f3j w\u0142asny identyfikator. Nowa definicja procesu jest nast\u0119pnie aktywowana, a istniej\u0105ca definicja procesu dezaktywowana. Nowe instancje procesu u\u017cywaj\u0105 definicji procesu utworzonej na podstawie nowej wersji szablonu. Jednak wszelkie instancje procesu, kt\u00f3re zosta\u0142y utworzone na podstawie istniej\u0105cej definicji procesu, nadal u\u017cywaj\u0105 starej definicji procesu i mog\u0105 by\u0107 wykonywane do ko\u0144ca.<\/p>\n<p>B\u0142\u0105d uruchomieniowy mo\u017ce r\u00f3wnie\u017c wyst\u0105pi\u0107 po zmianie wersji. Je\u015bli dzia\u0142anie zapisuje obiekt biznesowy z atrybutem specyficznym dla klienta, kt\u00f3ry jest zaimplementowany jako rozszerzenie w starej wersji i jako dodatek w nowej wersji, dzia\u0142anie nie mo\u017ce deserializowa\u0107 obiektu biznesowego i wyst\u0105pi b\u0142\u0105d uruchomieniowy. W takich przypadkach polecenia pow\u0142oki narz\u0119dziowej <em>dltwflact<\/em> i <em>dltwflprc<\/em> mog\u0105 by\u0107 u\u017cywane do usuwania dzia\u0142a\u0144 lub proces\u00f3w, kt\u00f3re nie mog\u0105 by\u0107 ju\u017c przetwarzane z bazy danych.<\/p>\n<p>Je\u015bli p\u00f3\u017aniej oka\u017ce si\u0119, \u017ce nowa wersja szablonu jest nieprawid\u0142owa, mo\u017cna przywr\u00f3ci\u0107 dowoln\u0105 poprzedni\u0105 wersj\u0119. W tym celu nale\u017cy otworzy\u0107 szablon workflow i wybra\u0107 wersj\u0119 do przywr\u00f3cenia w polu <em>Wersja<\/em>. Nast\u0119pnie nale\u017cy wykona\u0107 akcj\u0119 <strong>[Utw\u00f3rz lub zaktualizuj wg szablonu]<\/strong>. Je\u015bli przypisana jest nazwa istniej\u0105cej definicji workflow, zostanie ona zast\u0105piona wybran\u0105 wersj\u0105. Aby zapobiec b\u0142\u0119dom wykonania z otwartymi instancjami procesu, nale\u017cy przypisa\u0107 nowy, unikalny identyfikator. Nast\u0119pnie nale\u017cy aktywowa\u0107 nowo utworzon\u0105 definicj\u0119 procesu i dezaktywowa\u0107 istniej\u0105c\u0105.<\/p>\n<p>Je\u015bli szablon workflow jest oznaczony jako przestarza\u0142y, komunikat ostrzegawczy jest wy\u015bwietlany podczas aktywacji definicji procesu lub definicji dzia\u0142ania, je\u015bli jest ona powi\u0105zana z zapisanym szablonem workflow lub u\u017cywa odrzuconego szablonu roli workflow. Aby odrzuci\u0107 szablon workflow, nale\u017cy utworzy\u0107 now\u0105 wersj\u0119 szablonu i otworzy\u0107 j\u0105 w aplikacji <em>Obiekty deweloperskie<\/em>. Nast\u0119pnie nale\u017cy wykona\u0107 akcj\u0119 <em>Odrzu\u0107<\/em>. Po aktywacji zadania deweloperskiego odrzucona wersja szablonu mo\u017ce zosta\u0107 przetransportowana do dalszego systemu i tam zainstalowana.<\/p>\n<p>Szablony workflow mog\u0105 by\u0107 r\u00f3wnie\u017c usuwane w aplikacji <em>Obiekty deweloperskie.<\/em> Poniewa\u017c szablony workflow s\u0105 zapisywane jako obiekty deweloperskie w bazie danych repozytorium, nie mo\u017cna ich usun\u0105\u0107 w konwencjonalnym sensie. Zamiast tego tworzona jest nowa tak zwana wersja do usuni\u0119cia. Ta usuni\u0119ta wersja mo\u017ce by\u0107 aktywowana jak normalna wersja szablonu i przetransportowana do dalszego systemu. Je\u015bli podczas aktywacji definicji procesu lub dzia\u0142ania powi\u0105zanej z odrzuconym szablonem workflow pojawi si\u0119 komunikat ostrzegawczy, dla usuni\u0119tego szablonu workflow pojawi si\u0119 komunikat o b\u0142\u0119dzie uniemo\u017cliwiaj\u0105cy aktywacj\u0119. Ponadto nie mo\u017cna utworzy\u0107 instancji z definicji procesu lub definicji dzia\u0142ania powi\u0105zanej z usuni\u0119tym szablonem. W\u0142a\u015bciciele nie s\u0105 okre\u015blani na podstawie roli workflow powi\u0105zanej z usuni\u0119tym szablonem.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Komunikaty ostrzegawcze i komunikaty o b\u0142\u0119dach dla odrzuconych i usuni\u0119tych szablon\u00f3w workflow s\u0105 wydawane dopiero od wersji 6.3.<\/div><\/section>\n<h4 id=\"import-i-eksport-za-pomoca-polecenia-toolshell\" ><span class=\"ez-toc-section\" id=\"Import_i_eksport_za_pomoca_polecenia_Toolshell\"><\/span>Import i eksport za pomoc\u0105 polecenia Toolshell<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Szablony workflow s\u0105 preferowanym \u015brodkiem transportu definicji workflow z systemu nadrz\u0119dnego do systemu podrz\u0119dnego. Je\u015bli szablon workflow ma zosta\u0107 przetransportowany do systemu, kt\u00f3ry nie jest dostarczany z aktualizacjami oprogramowania przez system \u017ar\u00f3d\u0142owy, mo\u017cna u\u017cy\u0107 polece\u0144 pow\u0142oki narz\u0119dzi <em>expwfl<\/em> i <em>impwfl<\/em>. Transport przy u\u017cyciu tych polece\u0144 jest kompatybilny do przodu, ale nie wstecz. Je\u015bli system docelowy ma ni\u017cszy status wydania, transport mo\u017ce nie by\u0107 ju\u017c mo\u017cliwy. W takim przypadku definicja workflow mo\u017ce zosta\u0107 ponownie wprowadzona tylko w systemie docelowym.<\/p>\n<p>Transport przy u\u017cyciu polece\u0144 pow\u0142oki narz\u0119dziowej nie obs\u0142uguje NLS. Teksty wieloj\u0119zyczne, takie jak nazwa i temat w definicji dzia\u0142ania, s\u0105 transportowane w g\u0142\u00f3wnym j\u0119zyku bazy danych repozytorium.<\/p>\n<p>Role workflow mo\u017cna utworzy\u0107 za pomoc\u0105 polecenia pow\u0142oki narz\u0119dziowej<\/p>\n<p><em>expwfl -f:&lt;str&gt; [-role:&lt;str-1&gt; &#8230; -role:&lt;str-n&gt;*]<\/em><\/p>\n<p>mog\u0105 by\u0107 eksportowane. Symbol zast\u0119pczy <em>&lt;str&gt;<\/em> oznacza plik eksportu, kt\u00f3ry ma zosta\u0107 wygenerowany, a symbole zast\u0119pcze <em>&lt;str-1&gt;<\/em> do <em>&lt;str-n&gt;<\/em> oznaczaj\u0105 identyfikatory r\u00f3l workflow, kt\u00f3re maj\u0105 zosta\u0107 wyeksportowane. Role workflow, do kt\u00f3rych odwo\u0142uje si\u0119 definicja procesu lub definicja dzia\u0142ania, s\u0105 automatycznie eksportowane i importowane wraz z definicj\u0105 procesu lub definicj\u0105 dzia\u0142ania. Eksport nie uwzgl\u0119dnia w\u0142a\u015bcicieli r\u00f3l workflow.<\/p>\n<p>Aby wyeksportowa\u0107 definicje dzia\u0142ania i definicje proces\u00f3w, nale\u017cy u\u017cy\u0107 parametru <em>definition<\/em> lub <em>processDefinition<\/em> zamiast <em>role<\/em>. Podczas eksportowania definicji procesu automatycznie eksportowane s\u0105 r\u00f3wnie\u017c wszystkie powi\u0105zane definicje dzia\u0142a\u0144.<\/p>\n<p>Z pomoc\u0105 polecenia<\/p>\n<p><em>impwfl -f:&lt;str&gt;<\/em><\/p>\n<p>wyeksportowane role workflow mog\u0105 zosta\u0107 zaimportowane do systemu docelowego. Wi\u0119cej informacji na temat eksportowania i importowania definicji workflow mo\u017cna znale\u017a\u0107 w artyku\u0142ach <em>Eksport definicji workflow (expwfl)<\/em> i <em>Import definicji workflow (impwfl). <\/em><\/p>\n<p>Definicje workflow, kt\u00f3re zosta\u0142y utworzone w systemie z innym prefiksem eksportu, musz\u0105 najpierw zosta\u0107 przeniesione, zanim b\u0119d\u0105 mog\u0142y zosta\u0107 u\u017cyte. Definicja workflow jest kopiowana w momencie jej przyj\u0119cia. Kopia otrzymuje prefiks eksportu bie\u017c\u0105cego systemu. Zaimportowane definicje workflow z prefiksem eksportu, kt\u00f3ry r\u00f3\u017cni si\u0119 od bie\u017c\u0105cego systemu, s\u0142u\u017c\u0105 jedynie jako szablon dla definicji workflow aktywnych w systemie. Aby odwzorowa\u0107 to w modelu danych, definicja workflow jest jednoznacznie identyfikowana przez identyfikator i prefiks eksportu systemu, w kt\u00f3rym definicja workflow zosta\u0142a utworzona. Prefiks eksportu bie\u017c\u0105cego systemu jest wy\u015bwietlany w widoku <em>System<\/em> w aplikacji <em>Panel system<\/em>.<\/p>\n<h3 id=\"dzialania-i-praca-nad-zadaniami\" ><span class=\"ez-toc-section\" id=\"Dzialania_i_praca_nad_zadaniami\"><\/span>Dzia\u0142ania i praca nad zadaniami<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W tej sekcji wyja\u015bniono szczeg\u00f3\u0142y techniczne dotycz\u0105ce przetwarzania dzia\u0142a\u0144 i zada\u0144 w workflow. Zak\u0142ada si\u0119, \u017ce podstawowe przetwarzanie dzia\u0142a\u0144 i zada\u0144 jest znane.<\/p>\n<p>Artyku\u0142y <em>Wprowadzenie: Workflow Management, Dzia\u0142ania<\/em> i rozdzia\u0142 <em>Workflow Management<\/em> w <em>Podr\u0119czniku u\u017cytkownika<\/em> opisuj\u0105 opcje przetwarzania i zmiany statusu dzia\u0142a\u0144 i zada\u0144.<\/p>\n<h4 id=\"dzialania-zwiazane-z-edycja\" ><span class=\"ez-toc-section\" id=\"Dzialania_zwiazane_z_edycja\"><\/span>Dzia\u0142ania zwi\u0105zane z edycj\u0105<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dzia\u0142anie mo\u017cna przenie\u015b\u0107 do przetwarzania za po\u015brednictwem dokowanego okna wyszukiwania zada\u0144 lub za po\u015brednictwem adresu URL. W dokowanym oknie wyszukiwania zada\u0144 mo\u017cna rozpocz\u0105\u0107 przetwarzanie dzia\u0142ania za pomoc\u0105 akcji <em>Otw\u00f3rz<\/em> w menu kontekstowym zadania. Zostanie otwarta odpowiednia aplikacja, aby osoba edytuj\u0105ca dzia\u0142anie mog\u0142a wykona\u0107 zadanie zwi\u0105zane z dzia\u0142aniem. To, kt\u00f3ra aplikacja zostanie otwarta, okre\u015bla si\u0119 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ol>\n<li>Je\u015bli dzia\u0142anie zosta\u0142o utworzone na podstawie definicji dzia\u0142ania i wprowadzono tam aplikacj\u0119, zostanie ona otwarta.<\/li>\n<li>Je\u015bli dzia\u0142anie ma co najmniej jedno \u0142\u0105cze, obiekt jest otwierany za pomoc\u0105 preferowanego \u0142\u0105cza. Aplikacja otwierana dla tego obiektu mo\u017ce by\u0107 ustawiona przez u\u017cytkownika.<\/li>\n<li>Je\u015bli nie istnieje preferowane \u0142\u0105cze ani aplikacja nie jest zdefiniowana przez definicj\u0119 dzia\u0142ania, samo dzia\u0142anie jest otwierane w aplikacji <em>Dzia\u0142ania<\/em>.<\/li>\n<\/ol>\n<p>Je\u015bli aplikacja<em> Dzia\u0142ania<\/em> nie jest jeszcze otwarta, najwa\u017cniejsze informacje z dzia\u0142ania, takie jak temat i nazwa, a tak\u017ce wszelkie komunikaty dotycz\u0105ce zadania, s\u0105 wy\u015bwietlane w dokowanym oknie informacji o dzia\u0142aniu.<\/p>\n<p>Zadania powi\u0105zane z dzia\u0142aniem mog\u0105 by\u0107 przetwarzane w trybie przetwarzania pojedynczego lub w trybie przetwarzania wielokrotnego. W trybie pojedynczego przetwarzania dzia\u0142anie jest r\u00f3wnie\u017c zako\u0144czone po zako\u0144czeniu zadania. Je\u015bli zadanie zostanie uko\u0144czone bez przetwarzania, dzia\u0142anie r\u00f3wnie\u017c otrzyma status <em>Zako\u0144czone bez przetwarzania<\/em>. W przypadku przetwarzania wielokrotnego wszyscy operatorzy musz\u0105 uko\u0144czy\u0107 swoje zadania lub uko\u0144czy\u0107 je nieprzetworzone, zanim dzia\u0142anie zostanie uznane za uko\u0144czone. W takim przypadku dzia\u0142anie jest uznawane za uko\u0144czone, gdy co najmniej jedno zadanie zosta\u0142o uko\u0144czone. Je\u015bli wszystkie zadania zosta\u0142y uko\u0144czone bez przetwarzania, dzia\u0142anie jest r\u00f3wnie\u017c uwa\u017cane za uko\u0144czone bez przetwarzania. W zwi\u0105zku z tym musi istnie\u0107 co najmniej jedno uko\u0144czone zadanie, aby dzia\u0142anie zosta\u0142o uznane za uko\u0144czone. Przetwarzanie wielokrotne mo\u017ce odbywa\u0107 si\u0119 r\u00f3wnolegle lub sekwencyjnie. W przypadku r\u00f3wnoleg\u0142ego przetwarzania wielokrotnego operatorzy mog\u0105 przetwarza\u0107 swoje zadania w tym samym czasie. W przypadku sekwencyjnego przetwarzania wielokrotnego wszystkie inne otwarte zadania s\u0105 blokowane, gdy tylko operator rozpocznie przetwarzanie swojego zadania. Je\u015bli u\u017cytkownik uko\u0144czy zadanie (z edycj\u0105 lub bez) lub zawiesi je, zablokowane zadania zostan\u0105 ponownie odblokowane. Zapewnia to, \u017ce nie wi\u0119cej ni\u017c jeden u\u017cytkownik pracuje nad dzia\u0142aniem w tym samym czasie.<\/p>\n<p>Je\u015bli w definicji dzia\u0142ania ustawiony jest tryb edycji ci\u0105g\u0142ej, warunek wst\u0119pny uniemo\u017cliwia edycj\u0119 ci\u0105g\u0142\u0105. Przetwarzanie ci\u0105g\u0142e jest mo\u017cliwe tylko wtedy, gdy spe\u0142nione s\u0105 nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>Dzia\u0142anie nie ma warunku wst\u0119pnego.<\/li>\n<li>Dzia\u0142anie rozpoczyna si\u0119 za 0 milisekund.<\/li>\n<li>U\u017cytkownik, kt\u00f3ry uko\u0144czy dzia\u0142anie, jest r\u00f3wnie\u017c jednym z edytor\u00f3w dzia\u0142ania uzupe\u0142niaj\u0105cego.<\/li>\n<\/ul>\n<p>Dodatkowe zadania mog\u0105 by\u0107 dodawane do dzia\u0142ania w trakcie przetwarzania. Mo\u017cna to zrobi\u0107 r\u0119cznie, dodaj\u0105c nowych operator\u00f3w lub automatycznie, je\u015bli okres przetwarzania zostanie przekroczony.<\/p>\n<h4 id=\"zmiany-statusu-i-warunki\" ><span class=\"ez-toc-section\" id=\"Zmiany_statusu_i_warunki\"><\/span>Zmiany statusu i warunki<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Status dzia\u0142ania zmieniany jest zar\u00f3wno r\u0119cznie przez u\u017cytkownika, jak i automatycznie przez silnik workflow. Zmiany statusu inicjowane przez u\u017cytkownika s\u0105 zazwyczaj oparte na rozpoczynaniu lub ko\u0144czeniu zada\u0144 przez u\u017cytkownika. Silnik workflow zmienia statusy, gdy okres przetwarzania zostanie osi\u0105gni\u0119ty lub przekroczony.<\/p>\n<p>Dzia\u0142ania tworzone na podstawie definicji dzia\u0142a\u0144 mog\u0105 mie\u0107 warunek wst\u0119pny. Warunek wst\u0119pny dzia\u0142ania wyra\u017ca, czy dzia\u0142anie powi\u0105zane z dzia\u0142aniem zosta\u0142o ju\u017c wykonane, czy te\u017c sta\u0142o si\u0119 zb\u0119dne. Warunek wst\u0119pny jest sprawdzany za ka\u017cdym razem, gdy zmienia si\u0119 status dzia\u0142ania. Je\u015bli warunek wst\u0119pny nie jest ju\u017c spe\u0142niony, status dzia\u0142ania jest zmieniany na <em>Zako\u0144czone bez przetwarzania<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Definicja dzia\u0142ania powinna reagowa\u0107 na wstawienie nowego tekstu dla zg\u0142oszenia do pomocy technicznej i wysy\u0142a\u0107 wiadomo\u015b\u0107 e-mail do bie\u017c\u0105cego edytora. Poniewa\u017c tekst mo\u017ce zosta\u0107 zapisany kilka razy, zanim b\u0119dzie gotowy, wiadomo\u015b\u0107 e-mail powinna zosta\u0107 wys\u0142ana dopiero 5 minut po ostatnim zapisaniu tekstu. Dlatego w polu <em>Rozpocznij w<\/em> w definicji dzia\u0142ania wpisuje si\u0119 warto\u015b\u0107 <em>5 minut<\/em>. Je\u015bli poni\u017cszy warunek wst\u0119pny nie zostanie spe\u0142niony, tekst zosta\u0142 ponownie zmieniony od momentu wyzwolenia zdarzenia:<\/p>\n<p><em>parameters.newObject:modified = parameters.object:modified<\/em><\/p>\n<p>Je\u015bli warunek wst\u0119pny nie zostanie spe\u0142niony, dzia\u0142anie zmieni status z <em>Zaplanowana<\/em> na <em>Nieprzetworzona<\/em>, a silnik workflow nie wy\u015ble wiadomo\u015bci e-mail.<\/div><\/section>\n<p>Nie ka\u017cda zmiana statusu zadania prowadzi do zmiany statusu dzia\u0142ania. Je\u015bli na przyk\u0142ad dzia\u0142anie jest przetwarzane w trybie wielokrotnego procesowania, dzia\u0142anie zmienia status na <em>W opracowaniu<\/em> tylko wtedy, gdy przetwarzane jest pierwsze zadanie. Je\u015bli inny procesor przejmie zadanie do przetwarzania, status dzia\u0142ania pozostanie <em>W opracowaniu<\/em>. Podobnie, dzia\u0142anie w trybie wielokrotnego przetwarzania zmienia status na <em>Zako\u0144czone<\/em> lub <em>Zako\u0144czone bez przetwarzania<\/em> dopiero po uko\u0144czeniu ostatniego zadania. U\u017cytkownik, kt\u00f3ry uko\u0144czy\u0142 dzia\u0142anie poprzez wykonanie zadania, jest zapisywany w atrybucie <em>completeUser<\/em> dzia\u0142ania. Atrybut ten jest ju\u017c dost\u0119pny w funkcji <em>close<\/em> dla analiz.<\/p>\n<p>W w\u0119\u017ale startowym niespe\u0142niony warunek wst\u0119pny oznacza, \u017ce proces nie zostanie uruchomiony. Je\u015bli w\u0119ze\u0142 startowy ma wyniki, funkcja <em>validate<\/em> jest wykonywana przed funkcj\u0105 <em>create<\/em>. Umo\u017cliwia to sprawdzenie danych wej\u015bciowych u\u017cytkownika przed utworzeniem instancji procesu.<\/p>\n<p>Je\u015bli dzia\u0142anie ma jednego lub wi\u0119cej u\u017cytkownik\u00f3w jako operator\u00f3w, warunek kontynuacji jest oceniany po zako\u0144czeniu dzia\u0142ania. Je\u015bli warunek ko\u0144cowy nie jest spe\u0142niony, u\u017cytkownik nie mo\u017ce uko\u0144czy\u0107 swojego zadania, je\u015bli doprowadzi\u0142oby to r\u00f3wnie\u017c do zako\u0144czenia dzia\u0142ania. Wszelkie komunikaty dla u\u017cytkownika mo\u017cna wysy\u0142a\u0107 za pomoc\u0105 polecenia <em>sendMessage<\/em> zar\u00f3wno w warunku wst\u0119pnym, jak i ko\u0144cowym. W takim przypadku nale\u017cy wybra\u0107 ustawienie <em>Deklaracja<\/em> dla pola <em>Warunek wst\u0119pny<\/em> w definicji dzia\u0142ania, poniewa\u017c polecenia mog\u0105 by\u0107 u\u017cywane tylko w deklaracjach.<\/p>\n<h4 id=\"dzialania-bez-operatora\" ><span class=\"ez-toc-section\" id=\"Dzialania_bez_operatora\"><\/span>Dzia\u0142ania bez operatora<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Przypisanie operatora do dzia\u0142ania mo\u017ce nie by\u0107 mo\u017cliwe. Jest to mo\u017cliwe na przyk\u0142ad na stronie je\u015bli:<\/p>\n<ul>\n<li>operator jest rol\u0105 workflow bez w\u0142a\u015bciciela<\/li>\n<li>operatorem jest osoba bez przypisanego u\u017cytkownika<\/li>\n<li>operator przetwarzaj\u0105cy jest organem i nie znaleziono zast\u0119pc\u00f3w lub przedstawicieli w momencie rozwi\u0105zania powi\u0105za\u0144 mi\u0119dzy partnerami<\/li>\n<li>operator jest rol\u0105 procesu (tak\u0105 jak w\u0142a\u015bciciel procesu) i ta rola procesu jest niezaj\u0119ta<\/li>\n<\/ul>\n<p>Dzia\u0142anie bez edytora nie ma r\u00f3wnie\u017c zada\u0144 i dlatego nie mo\u017ce by\u0107 edytowana przez nikogo. Z tego powodu do dzia\u0142ania zawsze musi by\u0107 przypisany co najmniej jeden operator.<\/p>\n<p>Je\u015bli podczas tworzenia dzia\u0142ania nie zostanie znaleziony \u017caden operator, u\u017cywane s\u0105 role workflow dla administrator\u00f3w zdefiniowane w funkcji konfiguracji <em>Workflow Management<\/em>. Je\u015bli nie mo\u017cna okre\u015bli\u0107 operator\u00f3w z tymi rolami workflow , administrator jest wprowadzany jako operator. Administrator workflow lub administrator mo\u017ce dowiedzie\u0107 si\u0119, z jakiego powodu nie znaleziono operatora i przekaza\u0107 zadanie odpowiedniemu u\u017cytkownikowi.<\/p>\n<h4 id=\"dzialania-i-szablony-seryjne\" ><span class=\"ez-toc-section\" id=\"Dzialania_i_szablony_seryjne\"><\/span>Dzia\u0142ania i szablony seryjne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Serie s\u0105 mapowane jako specjalne dzia\u0142ania w systemie. Dzia\u0142anie typu <em>Szablon seryjny<\/em> s\u0142u\u017cy jako szablon kopii dla dzia\u0142a\u0144 seryjnych utworzonych na jego podstawie. Pocz\u0105tek okresu przetwarzania dla serii to czas, w kt\u00f3rym ma zosta\u0107 utworzone nowe dzia\u0142anie seryjne. Po utworzeniu dzia\u0142ania seryjnego pocz\u0105tek okresu przetwarzania jest zmieniany na czas, w kt\u00f3rym ma zosta\u0107 utworzone kolejne dzia\u0142anie seryjne. Je\u015bli nie ma by\u0107 tworzonych wi\u0119cej dzia\u0142a\u0144 seryjnych, szablon seryjny otrzymuje status <em>Zako\u0144czony<\/em>.<\/p>\n<p>Podczas tworzenia dzia\u0142ania seryjnego z szablonu seryjnego deklaracje nie s\u0105 ponownie oceniane. Dzia\u0142anie seryjne otrzymuje zatem swoje w\u0142a\u015bciwo\u015bci, w tym temat i opis, z szablonu seryjnego. Gdy tworzone jest dzia\u0142anie seryjne, oceniany jest warunek wst\u0119pny i warunek serii. Je\u015bli warunek wst\u0119pny nie jest spe\u0142niony, dzia\u0142anie seryjne jest pomijane. Je\u015bli warunek serii nie zostanie spe\u0142niony, ca\u0142a seria zostanie zako\u0144czona.<\/p>\n<p>Aby uzyska\u0107 wi\u0119ksz\u0105 elastyczno\u015b\u0107, zamiast definicji dzia\u0142ania typu <em>Szablon seryjny<\/em> mo\u017cna u\u017cy\u0107 definicji procesu ze zdarzeniem czasomierza. Podobnie jak w przypadku szablonu serii, wzorzec serii mo\u017ce by\u0107 przechowywany w zdarzeniu czasomierza. Zdarzenie czasomierza generuje nowy token dla ka\u017cdego punktu w czasie wzorca serii i przekazuje go do nast\u0119pnego w\u0119z\u0142a (w\u0119z\u0142\u00f3w) przez kraw\u0119d\u017a wychodz\u0105c\u0105.<\/p>\n<h4 id=\"przetwarzanie-w-tle\" ><span class=\"ez-toc-section\" id=\"Przetwarzanie_w_tle\"><\/span>Przetwarzanie w tle<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Po wprowadzeniu zlece\u0144 przetwarzania generowane jest dzia\u0142anie, gdy u\u017cywany jest wewn\u0119trzny harmonogram. Dzia\u0142anie to mo\u017ce by\u0107 pojedynczym dzia\u0142aniem lub seri\u0105 dzia\u0142a\u0144. Po osi\u0105gni\u0119ciu okresu przetwarzania dzia\u0142ania uruchamiane jest przypisane zlecenie przetwarzania. Dzia\u0142anie zostaje zako\u0144czone, gdy zlecenie przetwarzania zostanie pomy\u015blnie wykonane.<\/p>\n<p>Dzia\u0142ania utworzone na podstawie definicji dzia\u0142ania mog\u0105 generowa\u0107 i wyzwala\u0107 zlecenia przetwarzania oraz wykonywa\u0107 aplikacje dzia\u0142aj\u0105ce w tle. W tym celu zlecenie przetwarzania jest wprowadzane jako procesor w definicji dzia\u0142ania. Po utworzeniu dzia\u0142ania tworzone jest r\u00f3wnie\u017c zlecenie przetwarzania. Zlecenie przetwarzania jest zwalniane, gdy jego status zmienia si\u0119 z <em>Planowane<\/em> na <em>Do przetworzenia<\/em>.<\/p>\n<p>Czas zako\u0144czenia dzia\u0142ania zale\u017cy od ustawienia <em>Oczekuje na zadanie przetwarzania<\/em> w definicji dzia\u0142ania. Je\u015bli pole wyboru nie jest zaznaczone, dzia\u0142anie zostanie zako\u0144czone natychmiast po utworzeniu zadania przetwarzania. Je\u015bli pole wyboru jest aktywne, dzia\u0142anie zostanie zako\u0144czone dopiero po wykonaniu zlecenia przetwarzania. W pierwszym przypadku dzia\u0142anie otrzymuje status <em>Zrealizowane<\/em>, je\u015bli zlecenie przetwarzania mog\u0142o zosta\u0107 utworzone bez b\u0142\u0119d\u00f3w. W drugim przypadku dzia\u0142anie otrzymuje status <em>Zrealizowane<\/em>, je\u015bli zlecenie przetwarzania zosta\u0142o wykonane pomy\u015blnie. W przeciwnym razie dzia\u0142anie otrzymuje status <em>Zako\u0144czone bez przetwarzania<\/em>. Status dzia\u0142ania jest zatem niezale\u017cny od b\u0142\u0119d\u00f3w wyst\u0119puj\u0105cych podczas wykonywania zadania przetwarzania.<\/p>\n<p>Aby zadanie przetwarzania zosta\u0142o pomy\u015blnie zarejestrowane, definicja dzia\u0142ania musi okre\u015bla\u0107 aplikacj\u0119 dzia\u0142aj\u0105c\u0105 w tle, u\u017cytkownika i kolejk\u0119. Aplikacja dzia\u0142aj\u0105ca w tle i jej parametry s\u0105 przechowywane na zak\u0142adce <em>Aplikacja<\/em>. U\u017cytkownik, kt\u00f3ry ma zosta\u0107 wykorzystany dla zadania przetwarzania i kolejka s\u0105 okre\u015blane za pomoc\u0105 polece\u0144 <em>setJobUser<\/em> i <em>setJobQueue<\/em> w deklaracjach. Polecenia te zast\u0119puj\u0105 warto\u015bci domy\u015blne z funkcji konfiguracji <em>Workflow Management<\/em>. Nale\u017cy upewni\u0107 si\u0119, \u017ce u\u017cytkownik u\u017cywany do przetwarzania zadania jest uprawniony do wykonywania aplikacji dzia\u0142aj\u0105cej w tle, w przeciwnym razie przetwarzanie w tle zako\u0144czy si\u0119 b\u0142\u0119dem.<\/p>\n<p>Je\u015bli pole wyboru <em>Oczekuje na zadanie przetwarzania<\/em> jest aktywowane w definicji dzia\u0142ania, wyniki aplikacji dzia\u0142aj\u0105cej w tle s\u0105 dost\u0119pne w funkcji <em>close<\/em>. Poni\u017csza deklaracja ocenia wynik akcji <em>CreateCountLists<\/em> aplikacji dzia\u0142aj\u0105cej w tle <em>Rozpocznij akcje inwentaryzacyjne<\/em> (<em>com.cisag.app.inventory.physical.log.PhysicalInventoryCountProcessing<\/em>) i wy\u015bwietla wygenerowan\u0105 list\u0119 inwentaryzacyjn\u0105 w dzienniku:<\/p>\n<p><em>function close(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>var rp as HashMap; \/* parametry wyniku *\/<\/em><\/p>\n<p><em>var clGenerated as Number; \/* zliczanie wygenerowanych list *\/<\/em><\/p>\n<p><em>var clGuids as Guid[]; \/* zliczanie identyfikator\u00f3w guid listy *\/<\/em><\/p>\n<p><em>var cl as CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList);<\/em><\/p>\n<p><em>rp := cast(HashMap, getJobResult().resultParmeters);<\/em><\/p>\n<p><em>clGenerated := cast(Number, rp.ResultNumberOfSuccessfulResults);<\/em><\/p>\n<p><em>clGuids := cast(Guid[], rp.ResultPhysicalInventoryCountListGuids);<\/em><\/p>\n<p><em>echo(format(clGenerated, &#8222;0&#8221;) + &#8221; count list(s) generated:&#8221;);<\/em><\/p>\n<p><em>for (g : clGuids) {<\/em><\/p>\n<p><em>cl := getByPrimaryKey(CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList), g);<\/em><\/p>\n<p><em>echo(cl-&gt;PhysicalInventory-&gt;Type:code + &#8222;-&#8221; + cl-&gt;PhysicalInventory:number + &#8221; &#8221; + cl:number);<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Wynik znajduje si\u0119 zazwyczaj w parametrze <em>resultParmeters<\/em>.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119 na b\u0142\u0105d w nazwie parametru <em>resultParmeters<\/em>.<\/div><\/section>\n<p>Wyniki aplikacji dzia\u0142aj\u0105cej w tle s\u0105 wy\u015bwietlane w oknie dialogowym w\u0142a\u015bciwo\u015bci zadania przetwarzania na zak\u0142adce <em>Opracowanie<\/em> po wykonaniu aplikacji dzia\u0142aj\u0105cej w tle.<\/p>\n<p>Zak\u0142adka <em>Zlecenie<\/em> w oknie dialogowym w\u0142a\u015bciwo\u015bci zawiera r\u00f3wnie\u017c parametry transferu. Je\u015bli u\u017cytkownik chce zautomatyzowa\u0107 zadanie za pomoc\u0105 aplikacji dzia\u0142aj\u0105cej w tle, takiej jak wysy\u0142anie potwierdzenia zam\u00f3wienia po zwolnieniu zam\u00f3wienia sprzeda\u017cy, mo\u017ce wprowadzi\u0107 i zwolni\u0107 zam\u00f3wienie sprzeda\u017cy. Nast\u0119pnie wykona\u0107 zadanie, kt\u00f3re ma zosta\u0107 zautomatyzowane w tle i zapyta\u0107 o parametry transferu. Na zak\u0142adce <em>Aplikacja<\/em> definicji dzia\u0142ania nale\u017cy wprowadzi\u0107 te same warto\u015bci parametr\u00f3w, co w oknie dialogowym w\u0142a\u015bciwo\u015bci. Artyku\u0142 <em>Przetwarzanie zada\u0144<\/em> zawiera dalsze informacje na ten temat.<\/p>\n<p>Tylko parametry aplikacji zadeklarowane w obiekcie deweloperskim s\u0105 wy\u015bwietlane na zak\u0142adce <em>Aplikacja<\/em> definicji dzia\u0142ania. Tylko te zadeklarowane parametry aplikacji mog\u0105 by\u0107 u\u017cywane w definicji dzia\u0142ania. Je\u015bli w obiekcie deweloperskim brakuje wa\u017cnego parametru aplikacji lub je\u015bli w og\u00f3le nie zadeklarowano tam \u017cadnych parametr\u00f3w aplikacji, mo\u017cna u\u017cy\u0107 aplikacji w tle <em>Wywo\u0142aj aplikacje batch w workflow<\/em> (<em>com.cisag.app.general.log.Activity2BatchJob<\/em>), aby wywo\u0142a\u0107 rzeczywist\u0105 aplikacj\u0119 w tle. Aby to zrobi\u0107, nale\u017cy wprowadzi\u0107 aplikacj\u0119 w tle <em>Wywo\u0142aj aplikacje batch w workflow<\/em> na zak\u0142adce <em>Aplikacja<\/em> definicji dzia\u0142ania. W parametrze aplikacji <em>ProcessParameters<\/em> wprowadzi\u0107 nazw\u0119 techniczn\u0105, w tym obszar nazw aplikacji dzia\u0142aj\u0105cej w tle, kt\u00f3ra ma zosta\u0107 wywo\u0142ana. W parametrze aplikacji <em>Parameters<\/em> nale\u017cy przekaza\u0107 parametry aplikacji w tle, kt\u00f3ra ma zosta\u0107 wywo\u0142ana, w postaci tabeli haszuj\u0105cej. Warto\u015bci parametr\u00f3w s\u0105 przypisywane w deklaracjach. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w artykule <em>Wywo\u0142anie aplikacji dzia\u0142aj\u0105cych e tle w workflow<\/em>.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nie wszystkie aplikacje dzia\u0142aj\u0105ce w tle mog\u0105 by\u0107 uruchamiane bezpo\u015brednio lub przy u\u017cyciu aplikacji dzia\u0142aj\u0105cej w tle <em>Wywo\u0142anie aplikacji dzia\u0142aj\u0105cych e tle w workflow<\/em>. Jednym z mo\u017cliwych powod\u00f3w mo\u017ce by\u0107 parametr aplikacji typu danych, kt\u00f3ry nie jest obs\u0142ugiwany w j\u0119zyku skryptowym systemu. Aplikacje dzia\u0142aj\u0105ce w tle dla dzia\u0142a\u0144 w niestandardowych aplikacjach list nie zawsze mog\u0105 by\u0107 wykonywane przez dzia\u0142anie ze wzgl\u0119du na struktur\u0119 programu. To samo dotyczy kilku aplikacji dzia\u0142aj\u0105cych w tle, kt\u00f3re implementuj\u0105 tak zwany <em>BatchActionHook<\/em>, kt\u00f3rego parametr\u00f3w dla instancji jednostki biznesowej nie mo\u017cna okre\u015bli\u0107 za pomoc\u0105 og\u00f3lnego widoku obiektu.<\/div><\/section>\n<p>Je\u015bli dzia\u0142anie generuje dokument ko\u0144cowy lub dokument raportu, u\u017cywane s\u0105 ustawienia u\u017cytkownika dla zlecenia przetwarzania. Generowanie dokumentu musi jednak zna\u0107 szablon dokumentu ko\u0144cowego, kt\u00f3ry ma zosta\u0107 u\u017cyty. Dlatego zawsze nale\u017cy ustawi\u0107 polecenie <em>setJobVoucherDocumentOutputOptions(true),<\/em> aby u\u017cy\u0107 domy\u015blnego szablonu dokumentu ko\u0144cowego dla odbiorcy. Je\u015bli parametr polecenia ma warto\u015b\u0107 <em>true<\/em>, ustawienia wyj\u015bciowe z szablonu dokumentu ko\u0144cowego s\u0105 u\u017cywane zamiast ustawie\u0144 u\u017cytkownika. Do wersji 6.2 nale\u017cy stosowa\u0107 ustawienia wyj\u015bciowe z szablonu dokumentu ko\u0144cowego. Od wersji 6.3 mo\u017cna r\u00f3wnie\u017c u\u017cy\u0107 polece\u0144 <em>setJobVoucherDocumentOutputOptions(false)<\/em> i <em>setJobDeliveryMethod<\/em>, aby u\u017cy\u0107 ustawie\u0144 wyj\u015bciowych u\u017cytkownika dla okre\u015blonego no\u015bnika wyj\u015bciowego. Od wersji 6.3 dost\u0119pne s\u0105 r\u00f3wnie\u017c dalsze polecenia umo\u017cliwiaj\u0105ce okre\u015blenie indywidualnych ustawie\u0144 wyj\u015bciowych dla u\u017cytkownika, podobnie jak na zak\u0142adce <em>Ustawienia wyj\u015bciowe <\/em>w oknie dialogowym aplikacji. Je\u015bli polecenie <em>setJobVoucherDocumentOutputOptions(true)<\/em> zosta\u0142o wys\u0142ane podczas tworzenia dokumentu w celu u\u017cycia standardowego szablonu dokumentu ko\u0144cowego dla odbiorcy, ustawienia wyj\u015bciowe u\u017cytkownika s\u0105 stosowane tylko wtedy, gdy w szablonie dokumentu ko\u0144cowego wybrano ustawienie <em>Z ustawie\u0144 u\u017cytkownika<\/em>. Artyku\u0142 <em>J\u0119zyk skryptowy systemu: Funkcje workflow<\/em> opisuje te i inne polecenia, kt\u00f3re mog\u0105 by\u0107 u\u017cywane w definicjach dzia\u0142a\u0144 ze zleceniem przetwarzania jako operator w rozdziale <em>Funkcje dla w\u0119z\u0142\u00f3w us\u0142ug<\/em>.<\/p>\n<h4 id=\"status-bledu-dzialania\" ><span class=\"ez-toc-section\" id=\"Status_bledu_dzialania\"><\/span>Status b\u0142\u0119du dzia\u0142ania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W przypadku wyst\u0105pienia b\u0142\u0119du podczas przetwarzania dzia\u0142ania w silniku workflow, dzia\u0142anie zostaje zatrzymane i otrzymuje status b\u0142\u0119du <em>Niepoprawny<\/em>. Dzia\u0142anie jest wykluczane z dalszego przetwarzania w silniku workflow. Zapobiega to wielokrotnym pr\u00f3bom przetwarzania dzia\u0142a\u0144, kt\u00f3re prowadz\u0105 do b\u0142\u0119d\u00f3w. Zatrzymane dzia\u0142ania mog\u0105 by\u0107 dalej przetwarzane r\u0119cznie, tj. na przyk\u0142ad zako\u0144czone.<\/p>\n<p>Aplikacje <em>Lista: Dzia\u0142ania\/Baza danych OLTP<\/em> i <em>Lista: Dzia\u0142ania\/Baza danych repozytorium<\/em> mog\u0105 by\u0107 u\u017cywane do wyszukiwania zatrzymanych dzia\u0142a\u0144. Po usuni\u0119ciu przyczyny b\u0142\u0119du mo\u017cna u\u017cy\u0107 aplikacji <em>Dzia\u0142ania<\/em>, aby ponownie uruchomi\u0107 dzia\u0142ania ze statusem b\u0142\u0119du <em>B\u0142\u0119dnie<\/em>.<\/p>\n<h3 id=\"ocena-zdarzen\" ><span class=\"ez-toc-section\" id=\"Ocena_zdarzen\"><\/span>Ocena zdarze\u0144<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zdarzenia stanowi\u0105 podstaw\u0119 do tworzenia dzia\u0142a\u0144 z definicji dzia\u0142a\u0144. Zdarzenie jest wyzwalane przez zmian\u0119 stanu w aplikacji, przez system lub przez u\u017cytkownika. Zdarzenie wyst\u0119puje w okre\u015blonym czasie i zawiera dodatkowe parametry, kt\u00f3re dodatkowo opisuj\u0105 zdarzenie.<\/p>\n<p>Obs\u0142uga zdarze\u0144 w silniku workflow przetwarza zdarzenia z mo\u017cliwie najkr\u00f3tszym op\u00f3\u017anieniem. Zdarzenia s\u0105 przetwarzane asynchronicznie. W zwi\u0105zku z tym nie s\u0105 one przetwarzane jednocze\u015bnie z wyzwoleniem zdarzenia, ale tylko wtedy, gdy przyczyna, kt\u00f3ra doprowadzi\u0142a do wyzwolenia zdarzenia, zosta\u0142a ju\u017c zako\u0144czona. Oznacza to, \u017ce przyczyna ta mog\u0142a ju\u017c zosta\u0107 anulowana przez inne zmiany. W definicji dzia\u0142ania warunek wst\u0119pny mo\u017ce by\u0107 u\u017cyty do sprawdzenia, czy istnienie dzia\u0142ania jest nadal uzasadnione.<\/p>\n<p>Zdarzenia nie s\u0105 zapisywane na sta\u0142e. Je\u015bli serwer aplikacji, na kt\u00f3rym zdarzenie zosta\u0142o wywo\u0142ane, zostanie zamkni\u0119ty lub w inny spos\u00f3b zako\u0144czony przed ocen\u0105 zdarzenia, zdarzenie zostanie utracone, a dzia\u0142anie nie b\u0119dzie mog\u0142o zosta\u0107 wygenerowane.<\/p>\n<h4 id=\"zaprogramowane-wydarzenia\" ><span class=\"ez-toc-section\" id=\"Zaprogramowane_wydarzenia\"><\/span>Zaprogramowane wydarzenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W przypadku specjalnych przypadk\u00f3w u\u017cycia zdarzenia mog\u0105 by\u0107 wbudowane bezpo\u015brednio w aplikacj\u0119 lub klas\u0119 logiczn\u0105. Te tak zwane zaprogramowane zdarzenia mog\u0105 by\u0107 r\u00f3wnie\u017c dodawane przez partner\u00f3w w ramach adaptacji lub rozwi\u0105za\u0144 bran\u017cowych. Zaprogramowane zdarzenie jest wbudowane w kod \u017ar\u00f3d\u0142owy Java aplikacji przez programist\u0119.<\/p>\n<p>Zaprogramowane zdarzenie jest obiektem deweloperskim i jest rejestrowane za pomoc\u0105 aplikacji <em>Obiekty deweloperskie<\/em>. Do wyzwalania zaprogramowanych zdarze\u0144 dost\u0119pny jest interfejs programowania.<\/p>\n<p>Zaprogramowane zdarzenia mog\u0105 mie\u0107 dowolne parametry. Parametry zaprogramowanego zdarzenia mo\u017cna sprawdzi\u0107 w aplikacji <em>Obiekty deweloperskie<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Zaprogramowane zdarzenie <em>Powiadomienia dla zada\u0144 deweloperskich<\/em> ma mi\u0119dzy innymi parametr dla nowego stanu (<em>newState<\/em>) i inny parametr dla identyfikatora GUID u\u017cytkownika, kt\u00f3ry ma zosta\u0107 powiadomiony (<em>receiverUserGuid<\/em>). Dzi\u0119ki temu bardzo \u0142atwo jest utworzy\u0107 powiadomienie dla dok\u0142adnie tego u\u017cytkownika.<\/div><\/section>\n<p>Wyzwolenie zaprogramowanego zdarzenia zajmuje zazwyczaj stosunkowo niewiele czasu. Dla por\u00f3wnania, ka\u017cda definicja dzia\u0142ania, kt\u00f3ra ocenia zdarzenie, zajmuje stosunkowo du\u017co czasu. Podczas wprowadzania definicji dzia\u0142ania nale\u017cy zauwa\u017cy\u0107, \u017ce ocena warunku przej\u015bcia wymaga czasu. Zdarzenia, kt\u00f3re nie s\u0105 analizowane przez \u017cadn\u0105 definicj\u0119 dzia\u0142ania, nie powoduj\u0105 zatem problemu z szybko\u015bci\u0105.<\/p>\n<p>Im bardziej specyficzne jest zdarzenie i im rzadziej jest wyzwalane, tym mniejsza jest utrata wydajno\u015bci. Jednak bardzo specyficzne zdarzenia maj\u0105 tylko bardzo specyficzny cel aplikacji. W przeciwie\u0144stwie do tego, niespecyficzne zdarzenia mog\u0105 by\u0107 ograniczone przy u\u017cyciu warunk\u00f3w w definicji dzia\u0142ania. Jednak ocena tych warunk\u00f3w jest bardziej z\u0142o\u017cona ni\u017c sprawdzanie ich w aplikacji, kt\u00f3ra wyzwala zdarzenie. Przy podejmowaniu decyzji o tym, jak specyficzne jest zdarzenie, nale\u017cy rozwa\u017cy\u0107 szybko\u015b\u0107 w stosunku do u\u017cyteczno\u015bci zdarzenia. W przypadku bardzo specyficznych zdarze\u0144 i zdarze\u0144, kt\u00f3re wymagaj\u0105 z\u0142o\u017conej oceny w warunku przej\u015bcia i s\u0105 cz\u0119sto wyzwalane, zaleca si\u0119 zatem zaimplementowanie oddzielnego zaprogramowanego zdarzenia jako cz\u0119\u015bci adaptacji.<\/p>\n<p>W aplikacji <em>Lista: Zaprogramowane zdarzenia<\/em> mo\u017cna sprawdzi\u0107, kt\u00f3re zaprogramowane zdarzenia istniej\u0105 w systemie i s\u0105 u\u017cywane w definicjach dzia\u0142a\u0144.<\/p>\n<h4 id=\"zdarzenie-zmiana-jednostki-biznesowej\" ><span class=\"ez-toc-section\" id=\"Zdarzenie_Zmiana_jednostki_biznesowej\"><\/span>Zdarzenie <em>Zmiana jednostki biznesowej<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Silnik systemu wyzwala zdarzenie <em>Zmiana jednostki biznesowej<\/em>, gdy instancja obiektu biznesowego jest tworzona, zmieniana lub usuwana. To zdarzenie dostarczane przez system mo\u017ce by\u0107 u\u017cywane do rozwi\u0105zywania prostych zada\u0144. Problem ze zdarzeniami tego typu polega na tym, \u017ce s\u0105 one wyzwalane stosunkowo niespecyficznie. Oznacza to, \u017ce zdarzenie jest wyzwalane za ka\u017cdym razem, gdy instancja obiektu biznesowego jest zmieniana. Zdarzenie to nie zawsze jest powi\u0105zane przyczynowo z konkretnym procesem biznesowym. Og\u00f3lnie rzecz bior\u0105c, jest ono jednak przeznaczone do reagowania na bardzo konkretne procesy. Jest to jeden z powod\u00f3w, dla kt\u00f3rych definicja dzia\u0142ania z warunkiem przej\u015bcia mo\u017ce by\u0107 powi\u0105zana ze zdarzeniem.<\/p>\n<p>Dzia\u0142anie jest tworzone z definicji dzia\u0142ania tylko wtedy, gdy wyst\u0105pi odpowiednie zdarzenie i zostanie spe\u0142niony warunek przej\u015bcia. Dost\u0119p do starego i nowego stanu zmienionego obiektu mo\u017cna uzyska\u0107 w celu oceny zdarzenia, tj. w szczeg\u00f3lno\u015bci warunku przej\u015bcia.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Zdarzenie <em>Powiadomienia dla zada\u0144 deweloperskich<\/em> mo\u017cna wyrazi\u0107 za pomoc\u0105 zdarzenia <em>Zmiana jednostki biznesowej<\/em>. Je\u015bli \u017c\u0105danie wsparcia zostanie zmienione, nale\u017cy sprawdzi\u0107 w warunku wst\u0119pnym, czy stary status zam\u00f3wienia sprzeda\u017cy r\u00f3\u017cni si\u0119 od nowego statusu zam\u00f3wienia sprzeda\u017cy . Mo\u017cna to sprawdzi\u0107 na przyk\u0142ad za pomoc\u0105 nast\u0119puj\u0105cego wyra\u017cenia:<\/p>\n<p><em>parameters.oldObject:status &lt;&gt; parameters.newObject:status<\/em> <\/div><\/section>\n<p>Parametr zdarzenia <em>oldObject<\/em> zawiera kopi\u0119 instancji obiektu biznesowego bezpo\u015brednio przed transakcj\u0105 bazy danych, kt\u00f3ra wywo\u0142a\u0142a zdarzenie. Parametr zdarzenia <em>newObject<\/em> zawiera kopi\u0119 instancji obiektu biznesowego bezpo\u015brednio po transakcji bazy danych. Parametr <em>object<\/em> odnosi si\u0119 do instancji obiektu biznesowego. Zastosowanie <em>object<\/em> prowadzi zatem do por\u00f3wnania z aktualnym stanem instancji obiektu biznesowego w momencie oceny. Poniewa\u017c zdarzenia s\u0105 przetwarzane asynchronicznie, wa\u017cne jest, aby u\u017cy\u0107 odpowiednich parametr\u00f3w zdarzenia dla zadania w warunku przej\u015bcia.<\/p>\n<p>Atrybuty wieloj\u0119zyczne s\u0105 przenoszone w zestawie j\u0119zyk\u00f3w dla bazy danych. Je\u015bli, na przyk\u0142ad, opis artyku\u0142u zostanie zmieniony w jednym z zainstalowanych j\u0119zyk\u00f3w dodatkowych, wywo\u0142ane zostanie zdarzenie <em>Jednostka biznesowa<\/em> z podtypem <em>Change<\/em>, ale <em>parameters.oldObject:description <\/em>i <em>parameters.newObject:description<\/em> b\u0119d\u0105 mia\u0142y t\u0119 sam\u0105 warto\u015b\u0107, a mianowicie opis w g\u0142\u00f3wnym j\u0119zyku bazy danych.<\/p>\n<p>Zw\u0142aszcza podczas tworzenia definicji proces\u00f3w i dzia\u0142a\u0144 przydatne mo\u017ce by\u0107 rejestrowanie wyzwolonego zdarzenia za pomoc\u0105 funkcji <em>echo<\/em>, aby upewni\u0107 si\u0119, \u017ce zdarzenie zosta\u0142o wyzwolone zgodnie z oczekiwaniami. Poniewa\u017c funkcja <em>echo<\/em> zawsze zwraca warto\u015b\u0107 <em>true<\/em>, warunek przej\u015bcia w poprzednim przyk\u0142adzie mo\u017cna rozszerzy\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><em>echo(definition:code) and echo(&#8222;transition condition&#8221;) and echo(event) and (parameters.oldObject:status &lt;&gt; parameters.newObject:status)<\/em><\/p>\n<p>Polecenie <em>echo<\/em> powoduje wys\u0142anie zdarzenia do pliku dziennika na serwerze aplikacji, na kt\u00f3rym zdarzenie zosta\u0142o wywo\u0142ane. Je\u015bli <em>echo<\/em> jest u\u017cywane w warunku wst\u0119pnym, dane wyj\u015bciowe s\u0105 tworzone w pliku dziennika na serwerze aplikacji, na kt\u00f3rym dzia\u0142a silnik workflow lub harmonogram. Parametr <em>definition<\/em> odwo\u0142uje si\u0119 do definicji dzia\u0142ania. Do definicji procesu mo\u017cna odwo\u0142a\u0107 si\u0119 na przyk\u0142ad poprzez relacj\u0119 <em>definition-&gt;ProcessDefinition<\/em>. Numer <em>activity:number<\/em> wylosowany dla instancji dzia\u0142ania mo\u017ce by\u0107 r\u00f3wnie\u017c odpytywany w funkcji <em>create<\/em>. Numer procesu nie jest jeszcze dost\u0119pny w w\u0119\u017ale pocz\u0105tkowym, poniewa\u017c instancja procesu nie zosta\u0142a jeszcze utworzona w momencie wywo\u0142ania funkcji <em>create<\/em>.<\/p>\n<p>Zdarzenie typu<em> Jednostka biznesowa <\/em>rozr\u00f3\u017cnia podtypy wstawiania, zmiany u usuwania instancji obiektu biznesowego. Dlatego nale\u017cy wybra\u0107 odpowiedni podtyp dla zadania w definicji dzia\u0142ania. Mo\u017cna r\u00f3wnie\u017c wybra\u0107 r\u00f3\u017cne podtypy dla tego samego obiektu biznesowego w tej samej definicji dzia\u0142ania.<\/p>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce zdarzenie z podtypem <em>Delete<\/em> jest wyzwalane tylko wtedy, gdy instancja obiektu biznesowego zostanie usuni\u0119ta z bazy danych. W przypadku obiekt\u00f3w biznesowych, dla kt\u00f3rych mo\u017cna ustawi\u0107 wska\u017anik usuni\u0119cia (takich jak obiekt biznesowy <em>Partner<\/em>), oznacza to, \u017ce zdarzenie z podtypem <em>Delete<\/em> jest wyzwalane tylko wtedy, gdy partner jest reorganizowany. Je\u015bli u\u017cytkownik chce zareagowa\u0107 na ustawienie wska\u017anika usuni\u0119cia, mo\u017ce na przyk\u0142ad u\u017cy\u0107 nast\u0119puj\u0105cego warunku przej\u015bcia dla zdarzenia z podtypem<em> Change<\/em>:<\/p>\n<p><em>isNull(parameters.oldObject.updateInfo.deleteUser) and not<\/em><\/p>\n<p><em>\u00a0isNull(parameters.newObject.updateInfo.deleteUser)<\/em><\/p>\n<p>Poniewa\u017c wska\u017anik usuni\u0119cia jest przechowywany w atrybutach <em>updateInfo.deleteUser<\/em> i <em>updateInfo.deleteTime<\/em>, ten warunek przej\u015bcia jest spe\u0142niony, je\u015bli zmieniona instancja obiektu biznesowego nie mia\u0142a wska\u017anika usuni\u0119cia przed zmian\u0105, ale mia\u0142a wska\u017anik usuni\u0119cia po zmianie.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli parametr <em>object<\/em> zostanie u\u017cyty zamiast <em>newObject<\/em> w warunku przej\u015bcia, \u017cadne dzia\u0142anie nie zostanie wygenerowana, je\u015bli u\u017cytkownik ustawi wska\u017anik usuni\u0119cia dla partnera i natychmiast usunie go ponownie, zanim silnik workflow oceni warunek przej\u015bcia.<\/div><\/section>\n<p>Niekt\u00f3re dokumenty ko\u0144cowe s\u0105 tworzone przy u\u017cyciu kilku transakcji w bazie danych. Na przyk\u0142ad faktura sprzeda\u017cy jest najpierw generowana bez numeru. Dopiero w kolejnej transakcji w bazie danych pobierany jest numer dokumentu ze schematu numeracji i zapisywany na fakturze sprzeda\u017cy. Je\u015bli na przyk\u0142ad powiadomienie ma zosta\u0107 wys\u0142ane dla wygenerowanych faktur sprzeda\u017cy o kwocie brutto przekraczaj\u0105cej 10 000 EUR, a definicja dzia\u0142ania reaguje na zdarzenie z podtypem<em> Insert<\/em>, prawdopodobnie numer faktury sprzeda\u017cy jest nadal nieznany w momencie oceny. Aby upewni\u0107 si\u0119, \u017ce powiadomienie ma miejsce tylko wtedy, gdy faktura sprzeda\u017cy zosta\u0142a ca\u0142kowicie wygenerowana, definicja dzia\u0142ania mo\u017ce reagowa\u0107 na zdarzenie zar\u00f3wno z podtypem <em>Insert<\/em>, jak i <em>Change<\/em>. Warunek przej\u015bcia zdarzenia z podtypem <em>Insert<\/em>:<\/p>\n<p><em>parameters.newObject:number&lt;&gt;&#8221;&#8221;<\/em><\/p>\n<p>oraz warunek przej\u015bcia zdarzenia z podtypem <em>Change<\/em>:<\/p>\n<p><em>parameters.oldObject:number=&#8221;&#8221; i parameters.newObject:number&lt;&gt;&#8221;&#8221;<\/em><\/p>\n<p>pozwala upewni\u0107 si\u0119, \u017ce wysy\u0142ane jest tylko jedno powiadomienie.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli warunek przej\u015bcia zdarzenia z podtypem <em>Insert<\/em> zapyta\u0142by o parametr zdarzenia <em>object<\/em> zamiast <em>newObject<\/em>, w\u00f3wczas dwa powiadomienia zosta\u0142yby wys\u0142ane dla tej samej faktury sprzeda\u017cy, je\u015bli warunek przej\u015bcia zostanie oceniony z op\u00f3\u017anieniem, a numer zosta\u0142 ju\u017c zapisany. Nale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107, \u017ce u\u017cycie <em>oldObject<\/em> w podtypie <em>Insert<\/em> prowadzi do b\u0142\u0119du, poniewa\u017c obiekt biznesowy nie istnia\u0142 jeszcze przed transakcj\u0105 bazy danych, kt\u00f3ra wywo\u0142a\u0142a zdarzenie. Z podobnego powodu u\u017cycie dw\u00f3ch parametr\u00f3w <em>newObject<\/em> i <em>object<\/em> powoduje b\u0142\u0105d dla podtypu <em>Delete<\/em>.<\/div><\/section>\n<p>Niekt\u00f3re dokumenty ko\u0144cowe s\u0105 przetwarzane w blokach. Na przyk\u0142ad zam\u00f3wienie sprzeda\u017cy jest przetwarzane w blokach po 16 pozycji. Ka\u017cdy blok 16 pozycji reprezentuje oddzieln\u0105 transakcj\u0119 w bazie danych. Mo\u017cna to rozpozna\u0107 na przyk\u0142ad po tym, \u017ce zam\u00f3wienie sprzeda\u017cy jest automatycznie zapisywane po wprowadzeniu 16 pozycji zam\u00f3wienia sprzeda\u017cy. Innym wska\u017anikiem przetwarzania blokowego jest obecno\u015b\u0107 atrybutu <em>statusBackup<\/em> w obiekcie biznesowym dokumentu. Je\u015bli status dokumentu ko\u0144cowego ma zosta\u0107 zmieniony, a dokument ma wi\u0119cej pozycji ni\u017c mo\u017cna przetworzy\u0107 w jednym bloku, dokument ko\u0144cowy jest przenoszony do statusu <em>Niepoprawny<\/em> z pierwszym blokiem, a poprzedni status jest zapisywany w atrybucie <em>statusBackup<\/em>. Dopiero po przetworzeniu ostatniego bloku dokument ko\u0144cowy jest przenoszony do nowego statusu <em>Zwolniony<\/em>, a warto\u015b\u0107 w atrybucie <em>statusBackup<\/em> jest usuwana.<\/p>\n<p>Mo\u017cliwy warunek przej\u015bcia dla definicji dzia\u0142ania, kt\u00f3ry powinien reagowa\u0107 na zmian\u0119 statusu dokumentu np. z <em>W opracowaniu (1)<\/em> na nowy status <em>Wydany (2),<\/em> m\u00f3g\u0142by zatem wygl\u0105da\u0107 nast\u0119puj\u0105co:<\/p>\n<p><em>(parameters.oldObject:status=1 and parameters.newObject:status=2) or<br \/>\n(parameters.oldObject:status=6 and parameters.newObject:status=2 and parameters.oldObject:statusBackup=1)<\/em><\/p>\n<p>Druga cz\u0119\u015b\u0107 warunku przej\u015bcia sprawdza, czy status zmienia si\u0119 z warto\u015bci <em>Niepoprawny (6)<\/em> na <em>Zwolniony (2)<\/em>, a poprzedni status przechowywany w atrybucie <em>statusBackup<\/em> to <em>W opracowaniu (1)<\/em>. Dla jasno\u015bci, warunek przej\u015bcia mo\u017ce by\u0107 r\u00f3wnie\u017c podzielony na dwa zdarzenia z podtypem <em>Change<\/em>.<\/p>\n<p>Zdarzenie <em>Zmiana jednostki biznesowej<\/em> mo\u017ce by\u0107 r\u00f3wnie\u017c zastosowane do jednostek zale\u017cnych jednostki biznesowej. W takim przypadku, opr\u00f3cz starego i nowego statusu zmienionej jednostki zale\u017cnej (w parametrach <em>oldObject<\/em> i <em>newObject<\/em>), dost\u0119pny jest r\u00f3wnie\u017c stary i nowy status powi\u0105zanej jednostki biznesowej (w parametrach <em>oldEntity<\/em> i <em>newEntity<\/em>). Informacje na temat parametr\u00f3w zdarze\u0144 typu <em>Jednostka biznesowa<\/em> mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu<\/em>.<\/p>\n<p>Je\u015bli podczas oceny warunku przej\u015bcia wyst\u0105pi b\u0142\u0105d, warunek przej\u015bcia zostanie uznany za niespe\u0142niony. W takim przypadku nie jest generowane \u017cadne dzia\u0142anie. Natomiast warunek wst\u0119pny z b\u0142\u0119dem uznaje si\u0119 za spe\u0142niony. Je\u015bli dzia\u0142anie mo\u017ce zosta\u0107 pomy\u015blnie utworzone, b\u0142\u0105d w warunku wst\u0119pnym nie prowadzi do automatycznego zako\u0144czenia dzia\u0142ania bez zmiany.<\/p>\n<p>Zdarzenie <em>Zmiana jednostki biznesowej<\/em> jest zazwyczaj stosunkowo niespecyficzne. Je\u015bli u\u017cytkownik korzysta z tego zdarzenia, powinien wzi\u0105\u0107 pod uwag\u0119 wydajno\u015b\u0107 ca\u0142ego systemu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli zdarzenie jest wyzwalane za ka\u017cdym razem, gdy pozycja zam\u00f3wienia jest zmieniana i jest to przetwarzane przez definicj\u0119 dzia\u0142ania, mo\u017ce to prawdopodobnie prowadzi\u0107 do zauwa\u017calnego spadku wydajno\u015bci przetwarzania zam\u00f3wie\u0144, nawet w przypadku stosunkowo niewielkich instalacji. Je\u015bli jednak we\u017amie si\u0119 pod uwag\u0119 tylko zmian\u0119 nag\u0142\u00f3wka zam\u00f3wienia, a nie pozycji zam\u00f3wienia, obci\u0105\u017cenie systemu jest znacznie mniejsze.<\/div><\/section>\n<p>Je\u015bli zadanie ze zdarzeniem <em>Zmiana jednostki biznesowej<\/em> prowadzi do bardzo du\u017cych strat pr\u0119dko\u015bci, specjalnie zaprogramowane zdarzenie mo\u017ce by\u0107 w stanie rozwi\u0105za\u0107 problem bardziej efektywnie. Jednak zaprogramowane zdarzenia zawsze oznaczaj\u0105 programowanie dostosowywania, a zatem wi\u0119kszy wysi\u0142ek w zakresie tworzenia i konserwacji.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Zmiana daty dostawy w pozycji zam\u00f3wienia sprzeda\u017cy mo\u017ce by\u0107 wyra\u017cona zar\u00f3wno jako zaprogramowane zdarzenie, jak i przy u\u017cyciu zdarzenia <em>Jednostka biznesowa<\/em> z podtypem <em>Change<\/em>. Zaprogramowane zdarzenie wymaga dostosowania programowania do logiki aplikacji, podczas gdy zdarzenie <em>Zmiana jednostki biznesowej<\/em> mo\u017ce by\u0107 u\u017cywane bez dostosowywania programowania. Poniewa\u017c jednak zaprogramowane zdarzenie jest wyzwalane tylko wtedy, gdy data dostawy faktycznie si\u0119 zmienia, jest ono bardziej wydajne ni\u017c u\u017cycie zdarzenia <em>Jednostka biznesowa<\/em>.<\/div><\/section>\n<p>U\u017cytkownik mo\u017ce dowiedzie\u0107 si\u0119, kt\u00f3re zdarzenia typu <em>Jednostka biznesowa<\/em> s\u0105 u\u017cywane w definicjach dzia\u0142a\u0144 w systemie, korzystaj\u0105c ze szczeg\u00f3\u0142owego wyszukiwania definicji zdarze\u0144 w aplikacji <em>Lista: Definicje dzia\u0142ania<\/em>.<\/p>\n<h4 id=\"zdarzenie-akcja-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Zdarzenie_Akcja_uzytkownika\"><\/span>Zdarzenie <em>Akcja u\u017cytkownika<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Zdarzenie typu <em>Akcja u\u017cytkownika<\/em> jest wyzwalane, gdy u\u017cytkownik uruchamia proces za pomoc\u0105 pozycji <em>Rozpocznij proces<\/em> w menu kontekstowym jednostki biznesowej. Typ <em>Akcja u\u017cytkownika <\/em>jest dost\u0119pny tylko w definicjach dzia\u0142ania, kt\u00f3re reprezentuj\u0105 zdarzenie pocz\u0105tkowe lub zdarzenie po\u015brednie definicji procesu. Nazwa definicji procesu jest u\u017cywana dla wpisu w menu kontekstowym.<\/p>\n<p>Je\u015bli warunek przej\u015bcia nie jest spe\u0142niony, proces nie mo\u017ce zosta\u0107 uruchomiony, a odpowiedni wpis w menu kontekstowym jednostki biznesowej jest dezaktywowany. Poni\u017cszy warunek przej\u015bcia uniemo\u017cliwia dzia\u0142anie u\u017cytkownika w zam\u00f3wieniu sprzeda\u017cy o statusie <em>W opracowaniu <\/em>(1):<\/p>\n<p><em>parameters.object:status&lt;&gt;1<\/em><\/p>\n<p>Je\u015bli proces nie jest wy\u015bwietlany w menu kontekstowym u\u017cytkownika, mo\u017ce to by\u0107 spowodowane tym, \u017ce definicja procesu nie jest aktywna. Je\u015bli definicja procesu jest powi\u0105zana z szablonem definicji procesu, w kt\u00f3rym przechowywana jest aplikacja specjalnego zastosowania <em>Definicja procesu<\/em>, mo\u017ce to r\u00f3wnie\u017c wynika\u0107 z faktu, \u017ce u\u017cytkownik nie jest uprawniony do otwarcia tej aplikacji.<\/p>\n<p>Akcja u\u017cytkownika mo\u017ce by\u0107 r\u00f3wnie\u017c autoryzowana przy u\u017cyciu r\u00f3l workflow. Na przyk\u0142ad nast\u0119puj\u0105cy warunek przej\u015bcia oznacza, \u017ce tylko w\u0142a\u015bciciele roli workflow <em>MANAGERS<\/em> mog\u0105 rozpocz\u0105\u0107 proces. Pozycja w menu kontekstowym jest nieaktywna dla wszystkich innych u\u017cytkownik\u00f3w:<\/p>\n<p><em>contains(resolveRole(&#8222;MANAGERS&#8221;), parameters.userGuid)<\/em><\/p>\n<p>Je\u015bli ocena warunku przej\u015bcia zwr\u00f3ci warto\u015b\u0107 <em>null<\/em>, warunek przej\u015bcia nie zostanie uznany za spe\u0142niony i proces nie b\u0119dzie m\u00f3g\u0142 zosta\u0107 uruchomiony. Je\u015bli ocena warunku przej\u015bcia prowadzi do b\u0142\u0119du wykonania, komunikat o b\u0142\u0119dzie jest wy\u015bwietlany natychmiast po wybraniu pozycji w menu kontekstowym.<\/p>\n<p>Poszczeg\u00f3lne komunikaty mog\u0105 by\u0107 wyprowadzane w funkcji <em>validate<\/em>, poniewa\u017c funkcja ta jest r\u00f3wnie\u017c wywo\u0142ywana, je\u015bli definicja dzia\u0142ania nie ma wynik\u00f3w. Z drugiej strony, ostrze\u017cenie lub komunikat o b\u0142\u0119dzie w funkcji <em>create<\/em> zawsze uniemo\u017cliwia uruchomienie.<\/p>\n<p>Informacje na temat parametr\u00f3w zdarze\u0144 typu <em>Akcja u\u017cytkownika<\/em> mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu<\/em>.<\/p>\n<p>Aby sprawdzi\u0107, jakie definicje dzia\u0142a\u0144 s\u0105 u\u017cywane dla zdarzenia typu <em>Akcja u\u017cytkownika<\/em> w systemie, nale\u017cy skorzysta\u0107 z wyszukiwania szczeg\u00f3\u0142owego definicji zdarze\u0144 w aplikacji <em>Lista: Definicje dzia\u0142ania<\/em>.<\/p>\n<h4 id=\"brak-zdarzenia\" ><span class=\"ez-toc-section\" id=\"Brak_zdarzenia\"><\/span>Brak zdarzenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicja dzia\u0142ania bez definicji zdarzenia nie reaguje na zdarzenie. W zwi\u0105zku z tym nie s\u0105 generowane \u017cadne dzia\u0142ania. Je\u015bli definicja dzia\u0142ania reprezentuje w\u0119ze\u0142 pocz\u0105tkowy procesu, proces mo\u017cna uruchomi\u0107 tylko r\u0119cznie. Poniewa\u017c taki proces nie ma warunku przej\u015bcia, definicja dzia\u0142ania mo\u017ce by\u0107 autoryzowana tylko przy u\u017cyciu szablonu definicji procesu i wykorzystaniu specjalnego zastosowania <em>Definicja procesu<\/em>.<\/p>\n<p>Podobnie jak w przypadku zdarzenia typu <em>Akcja u\u017cytkownika<\/em>, poszczeg\u00f3lne komunikaty mog\u0105 by\u0107 wysy\u0142ane w funkcji <em>validate<\/em>. Jednak ostrze\u017cenie lub komunikat o b\u0142\u0119dzie w funkcji <em>create<\/em> zawsze uniemo\u017cliwia uruchomienie procesu. Je\u015bli proces jest uruchamiany r\u0119cznie za po\u015brednictwem aplikacji <em>Procesy<\/em>, wszelkie komunikaty typu informacja nie s\u0105 wy\u015bwietlane u\u017cytkownikowi, poniewa\u017c dokowane okno informacji jest czyszczone po za\u0142adowaniu instancji uruchomionego procesu.<\/p>\n<p>Informacje na temat parametr\u00f3w dost\u0119pnych podczas uruchamiania procesu bez zdarzenia mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu<\/em>.<\/p>\n<h4 id=\"aplikacja-w-tle-wywolaj-zdarzenia\" ><span class=\"ez-toc-section\" id=\"Aplikacja_w_tle_Wywolaj_zdarzenia\"><\/span>Aplikacja w tle <em>Wywo\u0142aj zdarzenia<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aplikacja dzia\u0142aj\u0105ca w tle <em>Wywo\u0142aj zdarzenia<\/em> (<em>com.cisag.sys.workflow.log.EventGenerator<\/em>) wyzwala zdarzenie <em>Wywo\u0142anie zdarzenia przez aplikacj\u0119 w tle Wywo\u0142aj zdarzenia<\/em> (<em>com.cisag.pgm.workflow.InstanceEvent<\/em>) dla wszystkich instancji obiekt\u00f3w biznesowych wybranych przez instrukcj\u0119 OQL. Aplikacja dzia\u0142aj\u0105ca w tle mo\u017ce by\u0107 wykonywana jednorazowo za pomoc\u0105 zlecenia przetwarzania lub, na przyk\u0142ad, regularnie zgodnie z wzorcem serii. Dzia\u0142ania mog\u0105 by\u0107 generowane przy u\u017cyciu definicji dzia\u0142a\u0144, kt\u00f3re zarejestrowa\u0142y si\u0119 dla wywo\u0142anego zdarzenia. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w artykule <em>Wywo\u0142aj zdarzenia<\/em>.<\/p>\n<p>Silnik workflow sprawdza warunek przej\u015bcia wszystkich definicji dzia\u0142a\u0144, kt\u00f3re reaguj\u0105 na wywo\u0142ane zdarzenie z tym samym podtypem. Na przyk\u0142ad, je\u015bli 10 definicji dzia\u0142a\u0144 reaguje na zdarzenie <em>Wywo\u0142anie zdarze\u0144 dla bazy OLTP<\/em> (<em>com.cisag.pgm.workflow.GenericOLTPEvent<\/em>) bez podtypu (podtyp 0), a zdarzenie jest wyzwalane przez dzia\u0142aj\u0105c\u0105 w tle aplikacj\u0119 <em>Wywo\u0142aj zdarzenia<\/em> (<em>com.cisag.sys.workflow.log.EventGenerator<\/em>) dla 1000 klient\u00f3w, w\u00f3wczas ocenianych jest 10 000 warunk\u00f3w przej\u015bcia. Mo\u017ce to prowadzi\u0107 do znacznych strat wydajno\u015bci i op\u00f3\u017anie\u0144 mi\u0119dzy wyzwoleniem zdarzenia a wygenerowaniem dzia\u0142ania.<\/p>\n<p>Zdarzenia s\u0105 analizowane w kolejno\u015bci, ale nie s\u0105 trwale przechowywane w bazie danych. Je\u015bli serwer aplikacji, na kt\u00f3rym zdarzenie zosta\u0142o wyzwolone, zostanie zamkni\u0119ty przed przeanalizowaniem wszystkich zdarze\u0144, zdarzenia, kt\u00f3re nie zosta\u0142y przeanalizowane, zostan\u0105 utracone. Dlatego nale\u017cy stara\u0107 si\u0119 zminimalizowa\u0107 zar\u00f3wno liczb\u0119 definicji dzia\u0142a\u0144, kt\u00f3re reaguj\u0105 na ten sam podtyp zdarzenia, jak i ca\u0142kowit\u0105 liczb\u0119 wyzwalanych zdarze\u0144. Zamiast wyzwala\u0107 zdarzenie dla ka\u017cdego klienta w aplikacji dzia\u0142aj\u0105cej w tle <em>Wywo\u0142aj zdarzenia<\/em> i tylko decydowa\u0107 w warunku przej\u015bcia, czy dzia\u0142anie powinno zosta\u0107 wygenerowane, czy nie, cz\u0119sto lepiej jest wyzwala\u0107 zdarzenia tak konkretnie, jak to mo\u017cliwe. Oznacza to, \u017ce og\u00f3lnie wyzwalanych jest mniej zdarze\u0144, a warunki przej\u015bcia s\u0105 prostsze lub nawet puste. Je\u015bli nie mo\u017cna zmapowa\u0107 prostego warunku przej\u015bcia za pomoc\u0105 OQL, zamiast aplikacji dzia\u0142aj\u0105cej w tle <em>Wywo\u0142aj zdarzenia<\/em> mo\u017cna u\u017cy\u0107 definicji procesu. Na przyk\u0142ad w\u0119ze\u0142 skryptu mo\u017ce analizowa\u0107 klient\u00f3w i wyzwala\u0107 zdarzenie dla ka\u017cdego klienta, dla kt\u00f3rego ma zosta\u0107 utworzone dzia\u0142anie przy u\u017cyciu funkcji <em>fireEvent<\/em>. Je\u015bli zdarzenie <em>Wywo\u0142anie zdarze\u0144 dla bazy OLTP<\/em> oferuje podtyp w u\u017cywanej wersji, nale\u017cy u\u017cy\u0107 osobnego podtypu dla ka\u017cdego przypadku u\u017cycia, kt\u00f3ry reaguje na to zdarzenie.<\/p>\n<h3 id=\"zmiana-obiektow-biznesowych\" ><span class=\"ez-toc-section\" id=\"Zmiana_obiektow_biznesowych\"><\/span>Zmiana obiekt\u00f3w biznesowych<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dzia\u0142ania workflow zazwyczaj maj\u0105 jedynie dost\u0119p do odczytu obiekt\u00f3w biznesowych. Gdy tylko dzia\u0142anie wywo\u0142a metod\u0119 w Javie, kt\u00f3ra pr\u00f3buje zmieni\u0107 instancj\u0119 obiektu biznesowego, pojawia si\u0119 wyj\u0105tek, a generowanie dzia\u0142ania ko\u0144czy si\u0119 b\u0142\u0119dem. Dzi\u0119ki atrybutom workflow i polom zdefiniowanym przez u\u017cytkownika (pola dodatkowe), Workflow Management oferuje dwie opcje trwa\u0142ego przechowywania informacji z dzia\u0142ania w obiekcie biznesowym. Te dwie opcje zosta\u0142y opisane w tym rozdziale. Wi\u0119cej informacji na temat korzystania z atrybut\u00f3w workflow i p\u00f3l zdefiniowanych przez u\u017cytkownika w definicjach dzia\u0142a\u0144 mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu: Funkcje OLTP<\/em>.<\/p>\n<h4 id=\"atrybuty-workflow\" ><span class=\"ez-toc-section\" id=\"Atrybuty_workflow\"><\/span>Atrybuty workflow<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Atrybuty workflow mog\u0105 by\u0107 wprowadzane w systemie z poziomem wersjonowania 7 i u\u017cywane jako produktywny system testowy lub system produktywny. Nie jest do tego wymagana \u017cadna wiedza programistyczna. Podobnie jak atrybut zdefiniowany przez u\u017cytkownika, atrybut workflow jest r\u00f3wnie\u017c zapisywany przy u\u017cyciu obiektu biznesowego, kt\u00f3ry jest sklasyfikowany jako suplement zarz\u0105dzany.<\/p>\n<p>Suplement zarz\u0105dzany z atrybutami zdefiniowanymi przez u\u017cytkownika ma zastosowanie <em>Standard<\/em>, a suplement zarz\u0105dzany z atrybutami workflow ma zastosowanie <em>Workflow<\/em>. Mo\u017cna wprowadzi\u0107 dowoln\u0105 liczb\u0119 takich suplement\u00f3w workflow. Dystrybucja atrybut\u00f3w workflow w kilku suplementach workflow ma t\u0119 zalet\u0119, \u017ce gdy dzia\u0142anie zapisuje atrybuty workflow po raz pierwszy, a tym samym tworzy now\u0105 instancj\u0119 suplementu workflow, atrybuty workflow nale\u017c\u0105ce do innych suplement\u00f3w workflow nie s\u0105 wst\u0119pnie przypisane z warto\u015bciami domy\u015blnymi. Tworzenie zbyt wielu suplement\u00f3w workflow dla tego samego obiektu biznesowego mo\u017ce zmniejszy\u0107 wydajno\u015b\u0107 systemu, poniewa\u017c jego suplementy s\u0105 \u0142adowane z bazy danych wraz z obiektem biznesowym. Je\u015bli atrybuty workflow dla r\u00f3\u017cnych proces\u00f3w workflow s\u0105 rejestrowane w tym samym suplemencie workflow, korzystne jest, je\u015bli ka\u017cdy proces workflow ma atrybut, kt\u00f3rego warto\u015b\u0107 domy\u015blna wskazuje, czy instancja procesu przypisa\u0142a warto\u015bci do atrybut\u00f3w workflow, czy nie.<\/p>\n<p>Przyk\u0142adem takiego atrybutu workflow jest status zatwierdzenia zam\u00f3wienia. Pusty ci\u0105g znak\u00f3w oznacza, \u017ce proces zatwierdzania zam\u00f3wienia nie zosta\u0142 jeszcze rozpocz\u0119ty. Je\u015bli u\u017cytkownik rozpocznie proces zatwierdzania, w\u0119ze\u0142 pocz\u0105tkowy powinien przypisa\u0107 atrybutowi workflow warto\u015b\u0107 inn\u0105 ni\u017c warto\u015b\u0107 domy\u015blna, tak\u0105 jak <em>W trakcie przegl\u0105du<\/em>. Zamiast ci\u0105gu znak\u00f3w, status zatwierdzenia mo\u017ce by\u0107 r\u00f3wnie\u017c mapowany za pomoc\u0105 warto\u015bci liczbowych. W tym przypadku domy\u015blna warto\u015b\u0107 0 oznacza\u0142aby, \u017ce nie ma jeszcze procesu zatwierdzania zam\u00f3wienia, a warto\u015b\u0107 1 mog\u0142aby oznacza\u0107, \u017ce zam\u00f3wienie jest w trakcie przegl\u0105du.<\/p>\n<p>Atrybuty workflow mog\u0105 by\u0107 dodawane do dostosowywanych aplikacji i wy\u015bwietlane, pod warunkiem, \u017ce zarz\u0105dzany dodatek nale\u017cy do widoku obiektu aplikacji. W przeciwie\u0144stwie do niestandardowego atrybutu, atrybut workflow nie mo\u017ce by\u0107 edytowany ani w aplikacji, ani poprzez import. Tylko definicje dzia\u0142a\u0144 mog\u0105 przypisa\u0107 warto\u015b\u0107 do atrybut\u00f3w workflow. Istnieje zatem wyra\u017any podzia\u0142 odpowiedzialno\u015bci mi\u0119dzy atrybutami zdefiniowanymi przez u\u017cytkownika a atrybutami workflow.<\/p>\n<h4 id=\"pola-zdefiniowane-przez-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Pola_zdefiniowane_przez_uzytkownika\"><\/span>Pola zdefiniowane przez u\u017cytkownika<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W wielu aplikacjach pola zdefiniowane przez u\u017cytkownika mog\u0105 by\u0107 tworzone na zak\u0142adce <em>Inne pola<\/em> w celu wprowadzenia dodatkowych informacji o jednostce biznesowej powi\u0105zanej z aplikacj\u0105. Pola zdefiniowane przez u\u017cytkownika s\u0105 zawsze powi\u0105zane z odpowiedni\u0105 jednostk\u0105 biznesow\u0105 (i ewentualnie okre\u015blonym widokiem). Pola zdefiniowane przez u\u017cytkownika maj\u0105 typ pola. Dla ka\u017cdego typu pola dost\u0119pne s\u0105 odpowiednie funkcje w j\u0119zyku skryptowym systemu. Zazwyczaj oferowana jest tak\u017ce dodatkowa funkcja dla typ\u00f3w p\u00f3l z list\u0105 warto\u015bci. Funkcje s\u0105 podzielone na nast\u0119puj\u0105ce kategorie:<\/p>\n<ul>\n<li>Funkcje <em>Getter<\/em> zwracaj\u0105 warto\u015b\u0107 pola zdefiniowanego przez u\u017cytkownika.<\/li>\n<li>Funkcje <em>Setter<\/em> przypisuj\u0105 warto\u015b\u0107 do pola zdefiniowanego przez u\u017cytkownika.<\/li>\n<li>Funkcja <em>Reset<\/em> resetuje pole zdefiniowane przez u\u017cytkownika do warto\u015bci domy\u015blnej.<\/li>\n<li>Funkcje <em>Validate<\/em> sprawdzaj\u0105, czy dana warto\u015b\u0107 mo\u017ce zosta\u0107 przypisana do innego pola.<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Pole zdefiniowane przez u\u017cytkownika dla widoku podstawowego aplikacji <em>Partnerzy<\/em> jest identyfikowane przez nazw\u0119 schematu jednostki biznesowej, instancj\u0119 jednostki biznesowej i nazw\u0119 pola. Na przyk\u0142ad wyra\u017cenie<\/p>\n<p><em>dboString(&#8222;EXTPartner&#8221;, loadPartner(&#8222;10010&#8221;), &#8222;REFERENCE&#8221;)<\/em><\/p>\n<p>zwraca warto\u015b\u0107 zdefiniowanego przez u\u017cytkownika pola o nazwie <em>REFERENCE<\/em> dla partnera <em>10010<\/em>, a wyra\u017cenie<\/p>\n<p><em>setDboString(&#8222;EXTPartner&#8221;, loadPartner(&#8222;10010&#8221;), &#8222;REFERENCE&#8221;, &#8222;Hello World!&#8221;)<\/em><\/p>\n<p>przypisuje warto\u015b\u0107 <em>Hello World!<\/em> do tego samego pola zdefiniowanego przez u\u017cytkownika.<\/div><\/section>\n<p>Jak pokazuj\u0105 te dwa przyk\u0142ady, nazwa schematu sk\u0142ada si\u0119 z przedrostka <em>EXT<\/em>, po kt\u00f3rym nast\u0119puje nazwa jednostki biznesowej.<\/p>\n<h3 id=\"wysylanie-wiadomosci-e-mail\" ><span class=\"ez-toc-section\" id=\"Wysylanie_wiadomosci_e-mail\"><\/span>Wysy\u0142anie wiadomo\u015bci e-mail<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Wiadomo\u015b\u0107 e-mail to wiadomo\u015b\u0107 wysy\u0142ana w ramach workflow. Przyk\u0142adem wiadomo\u015bci e-mail jest wiadomo\u015b\u0107 informuj\u0105ca klienta o nowej dacie dostawy. Powiadomienie e-mail to wiadomo\u015b\u0107 e-mail wysy\u0142ana automatycznie po wyst\u0105pieniu okre\u015blonych stan\u00f3w procesu w celu poinformowania os\u00f3b zaanga\u017cowanych w proces. Nale\u017cy zapozna\u0107 si\u0119 z tym rozdzia\u0142em, aby dowiedzie\u0107 si\u0119, jak skonfigurowa\u0107 wysy\u0142anie wiadomo\u015bci e-mail i powiadomie\u0144 e-mail.<\/p>\n<h4 id=\"wiadomosci-e-mail\" ><span class=\"ez-toc-section\" id=\"Wiadomosci_e-mail\"><\/span>Wiadomo\u015bci e-mail<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicje dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail, W\u0119ze\u0142 e-mail<\/em> lub <em>Interaktywny w\u0119ze\u0142 e-mail<\/em> mog\u0105 wysy\u0142a\u0107 wiadomo\u015bci e-mail. Je\u015bli definicja dzia\u0142ania ma jednego lub wi\u0119cej u\u017cytkownik\u00f3w jako edytor\u00f3w, wiadomo\u015b\u0107 e-mail jest wysy\u0142ana dla ka\u017cdego u\u017cytkownika na adres e-mail u\u017cytkownika przechowywany w aplikacji <em>Panel System<\/em>. Je\u015bli w definicji dzia\u0142ania wybrano operatora <em>System<\/em>, nale\u017cy okre\u015bli\u0107 odbiorc\u0119 za pomoc\u0105 polecenia <em>setMailRecipientsTo<\/em>. Alternatywnie mo\u017cna r\u00f3wnie\u017c u\u017cy\u0107 polece\u0144 <em>setMailRecipientsCC<\/em> i <em>setMailRecipientsBCC<\/em>. Je\u015bli wiadomo\u015b\u0107 e-mail ma kilku odbiorc\u00f3w, nale\u017cy oddzieli\u0107 adresy e-mail przecinkiem. Adres e-mail przechowywany w aplikacji <em>Serwer poczty<\/em> \u00a0serwera e-mail oznaczonego jako domy\u015blny jest u\u017cywany jako adres e-mail odpowiedzi. Te i inne cechy wiadomo\u015bci e-mail mo\u017cna r\u00f3wnie\u017c okre\u015bli\u0107 za pomoc\u0105 polece\u0144 w deklaracjach. Opis polece\u0144 dla wiadomo\u015bci e-mail mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu: Funkcje workflow<\/em>.<\/p>\n<p>Definicja dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail<\/em> nie generuje dzia\u0142ania. Poniewa\u017c dzia\u0142anie reprezentuje r\u00f3wnie\u017c dow\u00f3d wys\u0142ania wiadomo\u015bci e-mail, definicja procesu z w\u0119z\u0142em e-mail jest preferowana, je\u015bli wymagany jest dow\u00f3d.<\/p>\n<p>Je\u015bli w definicji dzia\u0142ania wybrano operatora innego ni\u017c <em>System<\/em>, wiadomo\u015bci e-mail s\u0105 wysy\u0142ane w j\u0119zyku tre\u015bci danego odbiorcy. Je\u015bli wybrano operator <em>System<\/em>, u\u017cywany jest domy\u015blny j\u0119zyk systemu. Aby wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail w j\u0119zyku partnera, kt\u00f3ry nie jest u\u017cytkownikiem systemu, mo\u017cna u\u017cy\u0107 polece\u0144 zmiany j\u0119zyka tre\u015bci i wy\u015bwietlania. Poni\u017cszy przyk\u0142ad zmienia j\u0119zyk wy\u015bwietlania na j\u0119zyk korespondencji partnera <em>10010<\/em>:<\/p>\n<p><em>var language := loadPartner(&#8222;10010&#8221;)-&gt;Language:isoCode;<\/em><\/p>\n<p><em>if (not isNull(language)) {<\/em><\/p>\n<p><em>setNLSDisplayLanguage(language);<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Warunek <em>if<\/em> oznacza, \u017ce j\u0119zyk wy\u015bwietlania jest zmieniany tylko wtedy, gdy u partnera zapisany jest j\u0119zyk korespondencyjny. Opis funkcji zmiany j\u0119zyka wy\u015bwietlania i tre\u015bci, a tak\u017ce kilka przyk\u0142ad\u00f3w u\u017cycia mo\u017cna znale\u017a\u0107 w dokumentacji <em>J\u0119zyk skryptowy systemu: Funkcje podstawowe<\/em>.<\/p>\n<h4 id=\"powiadomienia-e-mail\" ><span class=\"ez-toc-section\" id=\"Powiadomienia_e-mail\"><\/span>Powiadomienia e-mail<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Mechanizm workflow mo\u017ce powiadamia\u0107 u\u017cytkownik\u00f3w o istotnych zmianach statusu przypisanego im zadania. Wiadomo\u015bci e-mail mog\u0105 by\u0107 wysy\u0142ane w nast\u0119puj\u0105cych momentach:<\/p>\n<ul>\n<li>Je\u015bli dzia\u0142anie otrzyma status <em>Do realizacji<\/em>, powiadomienia e-mail mog\u0105 by\u0107 wysy\u0142ane do wszystkich u\u017cytkownik\u00f3w posiadaj\u0105cych zadanie.<\/li>\n<li>Je\u015bli dzia\u0142anie otrzyma status <em>Zaleg\u0142e<\/em> lub <em>Zaleg\u0142e w opracowaniu<\/em>, powiadomienia e-mail mog\u0105 by\u0107 wysy\u0142ane do wszystkich u\u017cytkownik\u00f3w, kt\u00f3rzy jeszcze nie uko\u0144czyli swojego zadania.<\/li>\n<li>Je\u015bli dzia\u0142anie otrzyma status <em>Zaleg\u0142e<\/em> lub <em>Zaleg\u0142e w opracowaniu<\/em>, powiadomienie e-mail mo\u017ce zosta\u0107 wys\u0142ane do os\u00f3b odpowiedzialnych za proces.<\/li>\n<li>Je\u015bli proces otrzyma status <em>Zaleg\u0142e,<\/em> powiadomienie e-mail mo\u017ce zosta\u0107 wys\u0142ane do os\u00f3b odpowiedzialnych za proces.<\/li>\n<li>Je\u015bli w procesie wyst\u0105pi b\u0142\u0105d i proces zako\u0144czy si\u0119 za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du, powiadomienie e-mail mo\u017ce zosta\u0107 wys\u0142ane do os\u00f3b odpowiedzialnych za proces.<\/li>\n<li>Je\u015bli w procesie wyst\u0105pi b\u0142\u0105d i proces zako\u0144czy si\u0119 za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du, powiadomienie e-mail mo\u017ce zosta\u0107 wys\u0142ane do administratora (administrator\u00f3w) workflow.<\/li>\n<li>Je\u015bli zadanie zostanie przekazane innemu u\u017cytkownikowi, mo\u017ce on otrzyma\u0107 powiadomienie e-mail.<\/li>\n<li>Je\u015bli zadanie zostanie przekazane innemu u\u017cytkownikowi, powiadomienie e-mail mo\u017ce zosta\u0107 wys\u0142ane do pierwotnego u\u017cytkownika, aby poinformowa\u0107 go o zmianach statusu przekazanego zadania.<\/li>\n<\/ul>\n<p>Ponadto definicja procesu mo\u017ce r\u00f3wnie\u017c zawiera\u0107 inne w\u0119z\u0142y e-mail, kt\u00f3re wysy\u0142aj\u0105 wiadomo\u015bci e-mail do uczestnik\u00f3w procesu w dowolnym momencie lub gdy wyst\u0105pi jakikolwiek status procesu. Na przyk\u0142ad w\u0119ze\u0142 wiadomo\u015bci e-mail mo\u017ce informowa\u0107 w\u0142a\u015bciciela (w\u0142a\u015bcicieli) procesu, je\u015bli krok procesu lub punkt kontrolny w procesie zostanie osi\u0105gni\u0119ty zbyt p\u00f3\u017ano, a ca\u0142y proces jest zagro\u017cony eskalacj\u0105. Definicje dzia\u0142a\u0144 w procesie mog\u0105 r\u00f3wnie\u017c wykorzystywa\u0107 polecenia takie jak <em>setActivityWorkDuration<\/em> i <em>setActivityPriority<\/em> do obliczania planowanego czasu trwania przetwarzania lub priorytetu dzia\u0142ania, kt\u00f3re ma zosta\u0107 utworzone przy u\u017cyciu czas\u00f3w wykonania poprzednich krok\u00f3w procesu. Je\u015bli poprzedni punkt kontrolny zosta\u0142 osi\u0105gni\u0119ty zbyt p\u00f3\u017ano, czas trwania przetwarzania zostanie odpowiednio skr\u00f3cony lub priorytet zostanie zwi\u0119kszony.<\/p>\n<p>To, czy powiadomienie e-mail zostanie faktycznie wys\u0142ane do u\u017cytkownika w odpowiednim czasie, zale\u017cy zar\u00f3wno od ustawie\u0144 w definicji dzia\u0142ania lub definicji procesu, jak i od ustawie\u0144 u\u017cytkownika odbiorcy.<\/p>\n<p>W ustawieniach u\u017cytkownika mo\u017cna ustawi\u0107 dla bazy danych OLTP i bazy danych repozytorium, czy powiadomienia e-mail maj\u0105 by\u0107 wysy\u0142ane, a je\u015bli tak, to z jakiego priorytetu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli dla opcji <em>Powiadomienie e-mail<\/em> wybrano warto\u015b\u0107 <em>Tak<\/em>, a dla opcji <em>Dla dzia\u0142a\u0144 z priorytetu<\/em> wybrano warto\u015b\u0107 <em>9 (najni\u017cszy priorytet)<\/em>, wiadomo\u015b\u0107 e-mail zostanie wys\u0142ana niezale\u017cnie od priorytetu.<\/p>\n<p>Je\u015bli warto\u015b\u0107 <em>Tak<\/em> jest ustawiona dla opcji <em>Powiadomienie e-mail<\/em> i warto\u015b\u0107 <em>5 (\u015bredni priorytet)<\/em> jest ustawiona dla opcji <em>Dla dzia\u0142a\u0144 z priorytetu<\/em>, w\u00f3wczas wiadomo\u015b\u0107 e-mail jest wysy\u0142ana dla wszystkich dzia\u0142a\u0144 o priorytecie 5 lub wy\u017cszym (tj. priorytecie &lt;= 5).<\/p>\n<p>Je\u015bli opcja <em>Powiadomienie e-mail<\/em> jest ustawiona na <em>Nie<\/em>, wiadomo\u015bci e-mail nie b\u0119d\u0105 wysy\u0142ane.<\/div><\/section>\n<p>W przypadku definicji dzia\u0142ania ustawienia <em>Wy\u015blij e-mail<\/em> i <em>Powiadom operatora po przekroczeniu limitu czasu <\/em>z warto\u015bci\u0105 <em>Zawsze<\/em> lub <em>Nigdy<\/em> nie uwzgl\u0119dniaj\u0105 ustawie\u0144 u\u017cytkownika. Definicja dzia\u0142ania i definicja procesu oferuj\u0105 podobne pola do powiadamiania w\u0142a\u015bciciela procesu i administrator\u00f3w workflow.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli w aplikacji<em> Konfiguracja<\/em> lub <em>Serwer poczty<\/em> nie wprowadzono prawid\u0142owych nadawc\u00f3w workflow, zasadniczo nie jest mo\u017cliwe wysy\u0142anie wiadomo\u015bci e-mail z workflow.<\/div><\/section>\n<h4 id=\"szablony-wiadomosci-e-mail\" ><span class=\"ez-toc-section\" id=\"Szablony_wiadomosci_e-mail\"><\/span>Szablony wiadomo\u015bci e-mail<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Workflow wysy\u0142a wiadomo\u015bci e-mail w formacie HTML. Wszystkie wiadomo\u015bci e-mail wysy\u0142ane przez workflow s\u0105 generowane na podstawie szablonu wiadomo\u015bci e-mail zale\u017cnego od bazy danych, kt\u00f3ry mo\u017cna sparametryzowa\u0107 za pomoc\u0105 danych kontekstowych.<\/p>\n<h5 id=\"miejsce-przechowywania\" ><span class=\"ez-toc-section\" id=\"Miejsce_przechowywania\"><\/span>Miejsce przechowywania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Standardowy szablon wiadomo\u015bci e-mail w j\u0119zyku niemieckim jest przechowywany pod nazw\u0105 <em>Mailtemplate_en.html<\/em> w Knowledge Store bie\u017c\u0105cego systemu, w folderze <em>Documents\/Workflow<\/em> standardowego obszaru roboczego, kt\u00f3ry ma tak\u0105 sam\u0105 nazw\u0119 jak bie\u017c\u0105ca baza danych. W przypadku innych j\u0119zyk\u00f3w kod ISO <em>de<\/em> w nazwie pliku nale\u017cy zast\u0105pi\u0107 \u017c\u0105danym kodem ISO. W Knowledge Store rozr\u00f3\u017cniana jest wielko\u015b\u0107 liter. Dlatego plik musi mie\u0107 dok\u0142adnie okre\u015blon\u0105 pisowni\u0119.<\/p>\n<p>W zale\u017cno\u015bci od kontekstu u\u017cycia, inne szablony s\u0105 u\u017cywane do powiadomie\u0144 e-mail. Je\u015bli szablon nie istnieje w folderze <em>Documents\/Workflow<\/em>, u\u017cywany jest standardowy szablon z tabeli ci\u0105g\u00f3w <em>com.cisag.sys.workflow.template.MailTemplates<\/em>.<\/p>\n<h5 id=\"konteksty-uzytkowania\" ><span class=\"ez-toc-section\" id=\"Konteksty_uzytkowania\"><\/span>Konteksty u\u017cytkowania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Poni\u017cej opisano, kt\u00f3ry szablon jest u\u017cywany w jakim kontek\u015bcie u\u017cytkowania:<\/p>\n<ul>\n<li><strong>ActivityTimeoutTemplate<\/strong> \u2013 szablon ten jest u\u017cywany, gdy dzia\u0142anie zostanie zako\u0144czone, aby poinformowa\u0107 u\u017cytkownik\u00f3w o otwartym zadaniu. Szablon ten jest r\u00f3wnie\u017c u\u017cywany dla wszystkich operator\u00f3w dodanych w ramach dzia\u0142a\u0144 nast\u0119pczych. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>ACTIVITY_TIMEOUT<\/em>.<\/li>\n<li><strong>AdhocMailtemplate<\/strong> \u2013 jest to standardowy szablon dla dzia\u0142a\u0144, kt\u00f3re nie zosta\u0142y utworzone przez silnik workflow, ale przez u\u017cytkownika. Szablon ten mo\u017ce zatem odnosi\u0107 si\u0119 do tw\u00f3rcy dzia\u0142ania. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>ADHOC<\/em>.<\/li>\n<li><strong>DelegationBeginMailtemplate<\/strong> \u2013 ten szablon jest wysy\u0142any do zast\u0119pcy na pocz\u0105tku nieobecno\u015bci. Szablon ten mo\u017ce zatem zawiera\u0107 parametry zwi\u0105zane z zast\u0119pstwem lub nieobecno\u015bci\u0105. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>DELEGATION_BEGIN<\/em>.<\/li>\n<li><strong>DelegationEndMailtemplate<\/strong> \u2013 ten szablon jest wysy\u0142any do zast\u0119pcy, gdy nieobecno\u015b\u0107 jest anulowana. Szablon ten mo\u017ce zatem zawiera\u0107 parametry zwi\u0105zane z zast\u0119pstwem lub nieobecno\u015bci\u0105. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>DELEGATION_END<\/em>.<\/li>\n<li><strong>MailOnlyMailtemplate<\/strong> \u2013 jest to domy\u015blny szablon dla dzia\u0142a\u0144 utworzonych z definicji dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail<\/em> lub <em>W\u0119ze\u0142 wiadomo\u015bci e-mail<\/em>. Szablon nie powinien zawiera\u0107 \u017cadnych parametr\u00f3w zwi\u0105zanych z zadaniem, dzia\u0142aniem lub procesem. Je\u015bli nie mo\u017cna znale\u017a\u0107 szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>MAIL_ONLY<\/em>.<\/li>\n<li><strong>Mailtemplate <\/strong>\u2013 jest to standardowy szablon dla dzia\u0142a\u0144, kt\u00f3re zosta\u0142y utworzone na podstawie definicji dzia\u0142ania i nie s\u0105 powi\u0105zane z procesem. Szablon ten nie powinien zawiera\u0107 \u017cadnych parametr\u00f3w odnosz\u0105cych si\u0119 do procesu. Szablon jest u\u017cywany, gdy status dzia\u0142ania zmienia si\u0119 na <em>Do opracowania<\/em>, aby poinformowa\u0107 u\u017cytkownik\u00f3w o zadaniu. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>DEFAULT<\/em>.<\/li>\n<li><strong>ProcessErrorTemplate<\/strong> \u2013 ten szablon jest u\u017cywany podczas ko\u0144czenia procesu za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du w celu poinformowania w\u0142a\u015bciciela procesu lub administrator\u00f3w workflow. Szablon ten mo\u017ce zawiera\u0107 przyk\u0142adowo parametry zwi\u0105zane z b\u0142\u0119dem. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>PROCESS_ERROR<\/em>.<\/li>\n<li><strong>ProcessMailtemplate<\/strong> \u2013 jest to standardowy szablon dla dzia\u0142a\u0144, kt\u00f3re zosta\u0142y utworzone na podstawie definicji dzia\u0142ania i s\u0105 w\u0119z\u0142ami procesu. Szablon ten mo\u017ce zatem zawiera\u0107 parametry odnosz\u0105ce si\u0119 do procesu. Ten szablon jest u\u017cywany, gdy status dzia\u0142ania zmienia si\u0119 na <em>Do opracowania<\/em>, aby poinformowa\u0107 u\u017cytkownik\u00f3w o zadaniu. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>DEFAULT<\/em>.<\/li>\n<li><strong>ProcessTimeoutTemplate<\/strong> \u2013 ten szablon jest u\u017cywany, gdy wyst\u0105pi przekroczenie limitu czasu procesu w celu poinformowania osoby odpowiedzialnej za proces. Je\u015bli nie mo\u017cna znale\u017a\u0107 \u017cadnego szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>PROCESS_TIMEOUT<\/em>.<\/li>\n<li><strong>TaskTrackingTemplate<\/strong> \u2013 ten szablon s\u0142u\u017cy do informowania u\u017cytkownika, kt\u00f3ry przekaza\u0142 zadanie, o przysz\u0142ych zmianach statusu zadania. Je\u015bli nie mo\u017cna znale\u017a\u0107 szablonu, u\u017cywany jest szablon z tabeli ci\u0105g\u00f3w znak\u00f3w ze sta\u0142\u0105 <em>TASK_TRACKING<\/em>.<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Wpis o sta\u0142ej warto\u015bci <em>REMINDER<\/em> w tabeli string\u00f3w <em>com.cisag.sys.workflow.template.MailTemplates<\/em> nie jest obecnie u\u017cywany.<\/div><\/section>\n<h5 id=\"szablony-zalezne-od-statusu\" ><span class=\"ez-toc-section\" id=\"Szablony_zalezne_od_statusu\"><\/span>Szablony zale\u017cne od statusu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W niekt\u00f3rych kontekstach u\u017cycia mog\u0105 by\u0107 r\u00f3wnie\u017c u\u017cywane szablony zale\u017cne od statusu. Na przyk\u0142ad, inny szablon mo\u017ce by\u0107 u\u017cyty dla przekazanych zada\u0144 ni\u017c dla zada\u0144 przypisanych przez silnik workflow. Szablony zale\u017cne od statusu s\u0105 przechowywane w tym samym katalogu co inne szablony, ale sta\u0142a warto\u015b\u0107 odpowiedniego statusu jest do\u0142\u0105czana do nazwy.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Szablon <em>ProcessMailtemplate_RECEIVED_fr.html<\/em> jest u\u017cywany do francuskoj\u0119zycznego powiadomienia odbiorcy przekazanego zadania, kt\u00f3re jest powi\u0105zane z procesem.<\/div><\/section>\n<p>Nast\u0119puj\u0105ce szablony obs\u0142uguj\u0105 nazwy zale\u017cne od statusu:<\/p>\n<ul>\n<li><strong>AdhocMailtemplate<\/strong><\/li>\n<li><strong>Mailtemplate<\/strong><\/li>\n<li><strong>ProcessMailtemplate<\/strong><\/li>\n<\/ul>\n<h5 id=\"wybor-jezyka\" ><span class=\"ez-toc-section\" id=\"Wybor_jezyka\"><\/span>Wyb\u00f3r j\u0119zyka<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>J\u0119zyk wy\u015bwietlania u\u017cytkownika okre\u015bla, kt\u00f3ry plik szablonu jest u\u017cywany. Je\u015bli nie ma pliku szablonu dla kontekstu u\u017cycia w j\u0119zyku wy\u015bwietlania u\u017cytkownika, u\u017cywany jest plik szablonu w j\u0119zyku wy\u015bwietlania systemu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">J\u0119zyk wy\u015bwietlania <em>pl<\/em> jest zapisany w ustawieniach u\u017cytkownika. W folderze <em>Documents\/Workflow<\/em> nie ma jednak pliku o nazwie <em>ProcessMailtemplate_pl.html<\/em>.<\/p>\n<p>Je\u015bli system u\u017cywa j\u0119zyka wy\u015bwietlania <em>en<\/em> i istnieje plik o nazwie <em>ProcessMailtemplate_en.html<\/em>, zostanie on u\u017cyty.<\/p>\n<p>Je\u015bli nie istnieje plik o nazwie <em>ProcessMailtemplate_en.html<\/em>, u\u017cywany jest standardowy szablon z tabeli string\u00f3w <em>com.cisag.sys.workflow.template.MailTemplates<\/em> ze sta\u0142\u0105 warto\u015bci\u0105 <em>DEFAULT<\/em>.<\/div><\/section>\n<h5 id=\"polecenie-setmailtemplate\" ><span class=\"ez-toc-section\" id=\"Polecenie_setMailTemplate\"><\/span>Polecenie <em>setMailTemplate<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Mo\u017cna u\u017cy\u0107 dowolnego szablonu wiadomo\u015bci e-mail za pomoc\u0105 polecenia <em>setMailTemplate<\/em> w deklaracjach definicji dzia\u0142a\u0144. Podobnie jak w przypadku standardowych szablon\u00f3w, w\u0142asne szablony r\u00f3wnie\u017c musz\u0105 by\u0107 przechowywane w folderze <em>Documents\/Workflow<\/em> w Knowledge Store bie\u017c\u0105cego systemu, a ich nazwa musi ko\u0144czy\u0107 si\u0119 podkre\u015bleniem i kodem ISO j\u0119zyka.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Mo\u017cliwe jest utworzenie w\u0142asnego szablonu wiadomo\u015bci e-mail <em>MyMailTemplate<\/em> w j\u0119zyku niemieckim w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><em>Documents\/Workflow\/MyMailTemplate_en.html<\/em><\/p>\n<p>Mo\u017cliwe jest utworzenie w\u0142asnego szablonu wiadomo\u015bci e-mail <em>MyMailTemplate<\/em> w j\u0119zyku angielskim w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><em>Documents\/Workflow\/MyMailTemplate_en.html<\/em><\/p>\n<p>Termin <em>setMailTemplate(&#8222;MyMailTemplate&#8221;);<\/em> w funkcji <em>create<\/em> deklaracji definicji dzia\u0142ania powoduje u\u017cycie szablonu wiadomo\u015bci e-mail <em>MyMailTemplate<\/em>. To, kt\u00f3ry z dw\u00f3ch plik\u00f3w szablon\u00f3w jest u\u017cywany, zale\u017cy od bie\u017c\u0105cych ustawie\u0144 j\u0119zyka.<\/div><\/section>\n<p>J\u0119zyk wy\u015bwietlania u\u017cytkownika okre\u015bla, kt\u00f3ry z mo\u017cliwych plik\u00f3w szablon\u00f3w o okre\u015blonej nazwie jest u\u017cywany. Je\u015bli nazwa <em>Standard<\/em> zostanie przekazana do polecenia, a j\u0119zyk angielski (<em>en<\/em>) jest zapisany jako j\u0119zyk wy\u015bwietlania w ustawieniach u\u017cytkownika, u\u017cyty zostanie plik szablonu <em>Standard_en.html<\/em>. Je\u015bli w ustawieniach u\u017cytkownika odbiorcy zapisany jest j\u0119zyk tre\u015bci, dla kt\u00f3rego nie ma pliku szablonu o okre\u015blonej nazwie, u\u017cywany jest plik szablonu dla domy\u015blnego j\u0119zyka systemu. Polecenie <em>setMailTemplate<\/em> dzia\u0142a nie tylko w definicjach dzia\u0142ania typu <em>Wiadomo\u015b\u0107 e-mail, W\u0119ze\u0142 e-mail<\/em> i <em>Interaktywny w\u0119ze\u0142 e-mail<\/em>, ale ma r\u00f3wnie\u017c zastosowanie do wszystkich typ\u00f3w dzia\u0142a\u0144 dla powiadomie\u0144 e-mail przez silnik workflow.<\/p>\n<p>Aby nie u\u017cywa\u0107 szablonu wiadomo\u015bci e-mail, nale\u017cy przekaza\u0107 pusty ci\u0105g do polecenia w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><em>setMailTemplate(&#8222;&#8221;)<\/em><\/p>\n<p>W takim przypadku u\u017cywany jest szablon wiadomo\u015bci e-mail ze sta\u0142\u0105 <em>EMPTY<\/em> z tabeli ci\u0105g\u00f3w znak\u00f3w <em>com.cisag.sys.workflow.template.MailTemplates<\/em>. Je\u015bli przesy\u0142any jest nieistniej\u0105cy szablon wiadomo\u015bci e-mail, u\u017cywany jest standardowy szablon wiadomo\u015bci e-mail z tabeli ci\u0105g\u00f3w znak\u00f3w <em>com.cisag.sys.workflow.template.MailTemplates <\/em>ze sta\u0142\u0105<em> DEFAULT<\/em>.<\/p>\n<h5 id=\"formatowanie-html\" ><span class=\"ez-toc-section\" id=\"Formatowanie_HTML\"><\/span>Formatowanie HTML<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Do sformatowania szablonu wiadomo\u015bci e-mail mo\u017cna u\u017cy\u0107 znacznik\u00f3w HTML. Szablon wiadomo\u015bci e-mail w j\u0119zyku niemieckim mo\u017ce wygl\u0105da\u0107 na przyk\u0142ad tak:<\/p>\n<p><em>&lt;html&gt;<\/em><\/p>\n<p><em>&lt;title&gt;Nowe zadanie: {$code} {$subject}&lt;\/title&gt;<\/em><\/p>\n<p><em>&lt;body&gt;<\/em><\/p>\n<p><em>&lt;p&gt;Witam {$odbiorca},&lt;\/p&gt;<\/em><\/p>\n<p><em>&lt;p&gt;Jeste\u015b nowym edytorem zadania &lt;a href=&#8221;{$workitemUrl}&#8221;&gt;{$subject}&lt;\/a&gt; w statusie &amp;quot;{$state}&amp;quot;.&lt;\/p&gt;<\/em><\/p>\n<p><em>&lt;p&gt;Zadanie powinno mie\u0107 priorytet &amp;quot;{$priority}&amp;quot; i zosta\u0107 uko\u0144czone do {$endTime}. Aby uzyska\u0107 wi\u0119cej informacji, zapoznaj si\u0119 z dzia\u0142aniem&lt;a href=&#8221;{$activityUrl}&#8221;&gt;{$code}&lt;\/a&gt; i nast\u0119puj\u0105cym opisem zadania:&lt;\/p&gt;<\/em><\/p>\n<p><em>&lt;p&gt;&lt;dir&gt;{$description}&lt;\/dir&gt;&lt;\/p&gt;<\/em><\/p>\n<p><em>&lt;\/body&gt;<\/em><\/p>\n<p><em>&lt;\/html&gt;<\/em><\/p>\n<p>Adresy URL musz\u0105 by\u0107 wprowadzane bezpo\u015brednio jako adres URL, np. w odno\u015bniku.<br \/>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"> <em>&lt;a href=&#8221;{$activityUrl}&#8221;&gt;zadanie&lt;\/a&gt;.<\/em> <\/div><\/section><\/p>\n<p>Tytu\u0142 strony HTML jest u\u017cywany jako temat wysy\u0142anej wiadomo\u015bci e-mail. Parametr <em>description<\/em> ma zawarto\u015b\u0107 HTML. Zawarto\u015b\u0107 tego parametru mo\u017ce zawiera\u0107 w\u0142asne formatowanie HTML. W tym celu nale\u017cy u\u017cy\u0107 polecenia <em>formatDescriptionHTML<\/em>. Szczeg\u00f3\u0142owy opis polecenia mo\u017cna znale\u017a\u0107 w artykule <em>J\u0119zyk skryptowy systemu: Funkcje workflow<\/em>.<\/p>\n<h5 id=\"parametry-szablonu\" ><span class=\"ez-toc-section\" id=\"Parametry_szablonu\"><\/span>Parametry szablonu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Jak pokazano w przyk\u0142adzie w rozdziale <em>Formatowanie HTML<\/em>, szablony wiadomo\u015bci e-mail mog\u0105 zawiera\u0107 parametry takie jak <em>{$subject}.<\/em> Parametry s\u0105 okre\u015blone w nawiasach klamrowych z wiod\u0105cym znakiem dolara. Otaczaj\u0105ce formatowanie okre\u015bla r\u00f3wnie\u017c spos\u00f3b formatowania tekstu lub zawarto\u015bci parametru.<br \/>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>&lt;it&gt;{$state}&lt;\/it&gt;<\/em><br \/>\nPowoduje, \u017ce stan (<em>state<\/em>) jest wy\u015bwietlany kursyw\u0105. <\/div><\/section><\/p>\n<p>Poni\u017cej om\u00f3wione zosta\u0142y parametry odnosz\u0105ce si\u0119 do zada\u0144:<\/p>\n<ul>\n<li><strong>actionUrl<\/strong> \u2013 URL, kt\u00f3ry wykonuje akcj\u0119 otwierania dla zadania. Nie powoduje to jednak prze\u0142\u0105czenia do trybu workflow, jak ma to zwykle miejsce w przypadku akcji <em>Otw\u00f3rz<\/em>.<\/li>\n<li><strong>forwardUser<\/strong> \u2013 pe\u0142na nazwa u\u017cytkownika, kt\u00f3ry przekaza\u0142 zadanie<\/li>\n<li><strong>forwardText<\/strong> \u2013 tekst wprowadzony podczas przekazywania zadania<\/li>\n<li><strong>forwardUser<\/strong> \u2013 pe\u0142na nazwa u\u017cytkownika, kt\u00f3ry przekaza\u0142 zadanie<\/li>\n<li><strong>forwardText<\/strong> \u2013 tekst wprowadzony podczas przekazywania zadania<\/li>\n<li><strong>oldState<\/strong> \u2013 status zadania bezpo\u015brednio przed zdarzeniem, kt\u00f3re doprowadzi\u0142o do wys\u0142ania powiadomienia<\/li>\n<li><strong>state <\/strong>\u2013 status zadania<\/li>\n<li><strong>user<\/strong> \u2013 imi\u0119 i nazwisko osoby pracuj\u0105cej nad zadaniem<\/li>\n<li><strong>workitemUrl<\/strong> \u2013 URL, kt\u00f3ry wykonuje akcj\u0119<em> Otw\u00f3rz<\/em> dla zadania<\/li>\n<\/ul>\n<p>Poni\u017cej om\u00f3wione zosta\u0142y parametry zwi\u0105zane z dzia\u0142aniami:<\/p>\n<ul>\n<li><strong>activityUrl<\/strong> \u2013 URL, kt\u00f3ry wykonuj\u0119 akcj\u0119 <em>Dzia\u0142anie<\/em>, dla zadania<\/li>\n<li><strong>code <\/strong>\u2013 numer dzia\u0142ania<\/li>\n<li><strong>createUser<\/strong> \u2013 pe\u0142na nazwa u\u017cytkownika, kt\u00f3ry zarejestrowa\u0142 dzia\u0142anie. Ten parametr mo\u017ce by\u0107 u\u017cywany na przyk\u0142ad do powiadamiania o r\u0119cznie zarejestrowanym dzia\u0142aniu.<\/li>\n<li><strong>database <\/strong>\u2013 nazwa bazy danych, w kt\u00f3rej zosta\u0142o wyzwolone zdarzenie prowadz\u0105ce do wys\u0142ania powiadomienia<\/li>\n<li><strong>definition<\/strong> \u2013 nazwa definicji dzia\u0142ania<\/li>\n<li><strong>description<\/strong> \u2013 opis dzia\u0142ania wraz z formatowaniem<\/li>\n<li><strong>endTime<\/strong> \u2013 koniec okresu przetwarzania dla dzia\u0142ania<\/li>\n<li><strong>priority<\/strong> \u2013 priorytet dzia\u0142ania<\/li>\n<li><strong>startTime <\/strong>\u2013 pocz\u0105tek okresu przetwarzania dla dzia\u0142ania<\/li>\n<li><strong>subject <\/strong>\u2013 przedmiot dzia\u0142ania<\/li>\n<\/ul>\n<p>Poni\u017cej przedstawiono parametry odnosz\u0105ce si\u0119 do proces\u00f3w:<\/p>\n<ul>\n<li><strong>processUrl <\/strong>\u2013 URL, kt\u00f3ry wykonuje akcj\u0119 <em>Proces<\/em> dla zadania<\/li>\n<li><strong>processCode<\/strong> \u2013 numer procesu<\/li>\n<li><strong>processSubject<\/strong> \u2013 przedmiot procesu<\/li>\n<li><strong>processInitiator<\/strong> \u2013 wyzwalacz procesu<\/li>\n<li><strong>processOwner<\/strong> \u2013 w\u0142a\u015bciciel procesu<\/li>\n<li><strong>processComments<\/strong> \u2013 liczba komentarzy zarejestrowanych dla procesu<\/li>\n<li><strong>processStartTime<\/strong> \u2013 pocz\u0105tek okresu przetwarzania procesu<\/li>\n<li><strong>processEndTime<\/strong> \u2013 koniec okresu przetwarzania procesu<\/li>\n<li><strong>processError<\/strong> \u2013 opis przyczyny b\u0142\u0119du, gdy proces jest ko\u0144czony przez w\u0119ze\u0142 b\u0142\u0119du<\/li>\n<li><strong>definition <\/strong>\u2013 nazwa definicji dzia\u0142ania<\/li>\n<\/ul>\n<p>Poni\u017cej przedstawiono parametry odnosz\u0105ce si\u0119 do odbiorcy wiadomo\u015bci e-mail:<\/p>\n<ul>\n<li><strong>greeting<\/strong> \u2013 spersonalizowane powitanie dla u\u017cytkownika, do kt\u00f3rego wysy\u0142ane jest powiadomienie<\/li>\n<li><strong>recipient <\/strong>\u2013 pe\u0142na nazwa u\u017cytkownika, do kt\u00f3rego wysy\u0142ane jest powiadomienie<\/li>\n<li><strong>valediction<\/strong> \u2013 spersonalizowana formu\u0142a zamkni\u0119cia dla u\u017cytkownika, do kt\u00f3rego wysy\u0142ane jest powiadomienie<\/li>\n<\/ul>\n<p>Poni\u017cej przedstawiono parametry odnosz\u0105ce si\u0119 do nieobecno\u015bci:<\/p>\n<ul>\n<li><strong>absentWorker<\/strong> \u2013 u\u017cytkownik, kt\u00f3rego nieobecno\u015b\u0107 rozpoczyna si\u0119 lub ko\u0144czy<\/li>\n<li><strong>delegatedWorkitems<\/strong> \u2013 liczba otwartych zada\u0144 nieobecnego u\u017cytkownika, kt\u00f3re mog\u0105 by\u0107 przetwarzane w ramach delegacji<\/li>\n<li><strong>endOfDelegation <\/strong>\u2013 koniec nieobecno\u015bci<\/li>\n<li><strong>startOfDelegation<\/strong> \u2013 pocz\u0105tek nieobecno\u015bci<\/li>\n<\/ul>\n<h5 id=\"powiadomienie-o-uwagach-dotyczacych-procesu\" ><span class=\"ez-toc-section\" id=\"Powiadomienie_o_uwagach_dotyczacych_procesu\"><\/span>Powiadomienie o uwagach dotycz\u0105cych procesu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Podczas wprowadzania nowego komentarza w procesie, okno dialogowe akcji oferuje trzy pola wyboru, aby powiadomi\u0107 w\u0142a\u015bcicieli nast\u0119puj\u0105cych r\u00f3l procesu:<\/p>\n<ul>\n<li><strong>W\u0142a\u015bciciel procesu<\/strong><\/li>\n<li><strong>Inicjator<\/strong><\/li>\n<li><strong>Uczestnicy<\/strong><\/li>\n<\/ul>\n<p>W tym przypadku powiadomienie nie jest wysy\u0142ane przy u\u017cyciu standardowych szablon\u00f3w wiadomo\u015bci e-mail. Zamiast tego aplikacja uruchamia zaprogramowane zdarzenie <em>com.cisag.pgm.workflow.ProcessCommentCreated<\/em>. Zdarzenie jest wyzwalane raz dla ka\u017cdego w\u0142a\u015bciciela wybranej roli procesu. Parametr zdarzenia<em> recipient<\/em> zawiera identyfikator GUID u\u017cytkownika, kt\u00f3ry ma zosta\u0107 powiadomiony. Pozosta\u0142e parametry zawieraj\u0105 informacje o tw\u00f3rcy, komentarzu i instancji procesu.<\/p>\n<ul>\n<li><strong>creator<\/strong> \u2013 identyfikator GUID u\u017cytkownika, kt\u00f3ry wprowadzi\u0142 komentarz<\/li>\n<li><strong>processDefinition<\/strong> \u2013 identyfikator (kod) definicji procesu<\/li>\n<li><strong>recipient <\/strong>\u2013 identyfikator GUID u\u017cytkownika, kt\u00f3ry ma zosta\u0107 powiadomiony<\/li>\n<li><strong>comment<\/strong> \u2013 odniesienie do komentarza procesu (obiekt biznesowy <em>cisag.sys.workflow.obj.ProcessComment<\/em>)<\/li>\n<li><strong>process<\/strong> \u2013 odwo\u0142anie do instancji procesu (obiekt biznesowy <em>cisag.sys.workflow.obj.Process<\/em>)<\/li>\n<li><strong>startNode<\/strong> \u2013 odwo\u0142anie do w\u0119z\u0142a pocz\u0105tkowego (obiekt biznesowy <em>cisag.sys.workflow.obj.Activity<\/em>)<\/li>\n<\/ul>\n<h3 id=\"konfiguracja\" ><span class=\"ez-toc-section\" id=\"Konfiguracja\"><\/span>Konfiguracja<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W tym rozdziale opisano odpowiednie ustawienia <em>Workflow Management<\/em>. Opis ustawie\u0144 j\u0119zyka skryptowego systemu znajduje si\u0119 w artykule <em>J\u0119zyk skryptowy systemu<\/em>.<\/p>\n<p>Opis ustawie\u0144 konfiguracji znajduje si\u0119 w rozdziale dotycz\u0105cym g\u0142\u00f3wnej funkcji <em>Workflow Management<\/em> w artykule <em>Konfiguracja: Workflow Management<\/em>.<\/p>\n<h4 id=\"harmonogram-dzialan-na-dowolnym-serwerze-aplikacji-systemu-erp\" ><span class=\"ez-toc-section\" id=\"Harmonogram_dzialan_na_dowolnym_serwerze_aplikacji_systemu_ERP\"><\/span>Harmonogram dzia\u0142a\u0144 na dowolnym serwerze aplikacji systemu ERP<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Do cel\u00f3w testowych harmonogram dzia\u0142ania mo\u017cna uruchomi\u0107 na serwerze aplikacji (SAS) innym ni\u017c serwer komunikat\u00f3w. Nie jest to zalecane do u\u017cytku produkcyjnego. Pomocne mo\u017ce by\u0107 jednak uruchomienie harmonogramu na lokalnym serwerze aplikacji w systemie testowym lub deweloperskim, szczeg\u00f3lnie w celu sprawdzenia wynik\u00f3w debugowania przy u\u017cyciu polecenia <em>echo<\/em>. Harmonogram jest zatrzymywany na serwerze komunikat\u00f3w, gdy harmonogram jest uruchamiany na innym serwerze aplikacji. Gdy tylko serwer aplikacji z harmonogramem zostanie zamkni\u0119ty, harmonogram na serwerze komunikat\u00f3w wznawia swoj\u0105 prac\u0119. Tylko jeden serwer aplikacji w systemie mo\u017ce przej\u0105\u0107 harmonogram z serwera komunikat\u00f3w.<\/p>\n<p>Opcja<em> workflowEngineMaster<\/em> powoduje, \u017ce harmonogram jest uruchamiany na tym serwerze aplikacji, gdy uruchamiany jest serwer aplikacji. Ta specyfikacja nie jest konieczna dla serwera komunikat\u00f3w.<br \/>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"> semiramis -workflowEngineMaster XYZ <\/div><\/section><\/p>\n<h4 id=\"serwer-docelowy-dla-linkow\" ><span class=\"ez-toc-section\" id=\"Serwer_docelowy_dla_linkow\"><\/span>Serwer docelowy dla link\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wiadomo\u015bci e-mail wysy\u0142ane przez workflow mog\u0105 zawiera\u0107 \u0142\u0105cza do zada\u0144, dzia\u0142a\u0144 i dowolnych jednostek biznesowych. Mo\u017cna skonfigurowa\u0107 serwer aplikacji, na kt\u00f3ry linki te powinny wskazywa\u0107, tj. na kt\u00f3rym serwerze link powinien zosta\u0107 wykonany.<\/p>\n<p>W systemach z serwerem aplikacji nie jest wymagana dalsza konfiguracja. Serwer docelowy to serwer aplikacji, na kt\u00f3rym uruchomiony jest silnik workflow.<\/p>\n<p>Je\u015bli system sk\u0142ada si\u0119 z kilku serwer\u00f3w aplikacji, nale\u017cy wprowadzi\u0107 serwer aplikacji dialogu w polu <em>Docelowy serwer dla atrybut\u00f3w linka<\/em> dla wszystkich serwer\u00f3w aplikacji. Serwer ten jest u\u017cywany dla wszystkich \u0142\u0105czy w wiadomo\u015bciach e-mail workflow wysy\u0142anych przez serwer wiadomo\u015bci.<\/p>\n<p>Je\u015bli serwer docelowy jest zale\u017cny od u\u017cytkownika, mo\u017cna u\u017cy\u0107 r\u00f3l workflow, aby przypisa\u0107 serwery docelowe specyficzne dla u\u017cytkownika.<\/p>\n<h4 id=\"maksymalna-liczba-dzialan\" ><span class=\"ez-toc-section\" id=\"Maksymalna_liczba_dzialan\"><\/span>Maksymalna liczba dzia\u0142a\u0144<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli definicja procesu zawiera p\u0119tl\u0119, dzi\u0119ki czemu przep\u0142yw procesu mo\u017ce by\u0107 kierowany z definicji dzia\u0142ania z powrotem do tej samej definicji dzia\u0142ania, w\u00f3wczas b\u0142\u0119dny warunek przej\u015bcia w zak\u0142adce <em>Przej\u015bcia<\/em> mo\u017ce spowodowa\u0107, \u017ce silnik workflow b\u0119dzie generowa\u0142 coraz wi\u0119cej dzia\u0142a\u0144 dla procesu, a\u017c baza danych zostanie zape\u0142niona i system ulegnie awarii.<\/p>\n<p>Aby temu zapobiec, liczba dzia\u0142a\u0144 w procesie jest ograniczona do 1000. Je\u015bli proces podejmie pr\u00f3b\u0119 wygenerowania wi\u0119kszej liczby dzia\u0142a\u0144, proces zako\u0144czy si\u0119 za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du z b\u0142\u0119dem <em>WFL-00582 Przekroczono maksymaln\u0105 liczb\u0119 dzia\u0142a\u0144<\/em>.<\/p>\n<p>W razie potrzeby maksymaln\u0105 liczb\u0119 dzia\u0142a\u0144 mo\u017cna zmieni\u0107 za pomoc\u0105 w\u0142a\u015bciwo\u015bci <em>com.cisag.sys.workflow.process.MaxActivities<\/em>.<\/p>\n<h4 id=\"dostosowywanie-informacji-o-dzialaniach\" ><span class=\"ez-toc-section\" id=\"Dostosowywanie_informacji_o_dzialaniach\"><\/span>Dostosowywanie informacji o dzia\u0142aniach<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aplikacja <em>Informacje o dzia\u0142aniach<\/em> zapewnia prosty i szybki przegl\u0105d dzia\u0142a\u0144 workflow w dokowanym oknie. Aplikacja jest otwierana automatycznie po otwarciu zadania, a dzia\u0142anie wy\u017cszego poziomu jest powi\u0105zane z aplikacj\u0105 lub obiektem biznesowym. Oznacza to, \u017ce zar\u00f3wno obiekt biznesowy, kt\u00f3ry ma by\u0107 przetwarzany, jak i najwa\u017cniejsze informacje o dzia\u0142aniu zawsze pozostaj\u0105 widoczne. Uk\u0142ad aplikacji, a tym samym wy\u015bwietlane pola, mo\u017cna zmieni\u0107 za pomoc\u0105 dostosowywanego interfejsu.<\/p>\n<p>Aplikacj\u0119 <em>Informacj\u0119 o dzia\u0142aniach<\/em> mo\u017cna dostosowa\u0107, ale je\u015bli jest ona otwarta jako okno dokowane, nie mo\u017cna jej dostosowa\u0107. Aby dostosowa\u0107 aplikacj\u0119, nale\u017cy otworzy\u0107 j\u0105 za pomoc\u0105 serwera aplikacji, kt\u00f3ry u\u017cywa nast\u0119puj\u0105cej w\u0142a\u015bciwo\u015bci:<\/p>\n<p><em>com.cisag.pgm.base.CisInfoApplicationOpenDialog=Never<\/em><\/p>\n<p>Aby otworzy\u0107 aplikacj\u0119 jako okno dokowane, nale\u017cy u\u017cy\u0107 warto\u015bci <em>Always<\/em>:<\/p>\n<p><em>com.cisag.pgm.base.CisInfoApplicationOpenDialog=Always<\/em><\/p>\n<p>Je\u015bli w\u0142a\u015bciwo\u015b\u0107 ma warto\u015b\u0107 <em>Always<\/em>, okno dokowane u\u017cywa widoku aplikacji oznaczonego jako standardowy.<\/p>\n","protected":false},"author":27,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-10715","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-definicje-workflow"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/10715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=10715"}],"version-history":[{"count":21,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/10715\/revisions"}],"predecessor-version":[{"id":32106,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/10715\/revisions\/32106"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=10715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}