{"id":10701,"date":"2025-05-08T13:54:35","date_gmt":"2025-05-08T11:54:35","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=10701"},"modified":"2025-05-30T11:05:17","modified_gmt":"2025-05-30T09:05:17","slug":"jezyk-skryptowy-systemu","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/","title":{"rendered":"J\u0119zyk skryptowy systemu"},"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\/jezyk-skryptowy-systemu\/#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\/jezyk-skryptowy-systemu\/#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\/jezyk-skryptowy-systemu\/#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-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Deklaracje\" >Deklaracje<\/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\/jezyk-skryptowy-systemu\/#GUID\" >GUID<\/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\/jezyk-skryptowy-systemu\/#Hook_Contract\" >Hook Contract<\/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\/jezyk-skryptowy-systemu\/#Wdrozenie_Hook_Contract\" >Wdro\u017cenie Hook Contract<\/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\/jezyk-skryptowy-systemu\/#Indywidualne_walidacje\" >Indywidualne walidacje<\/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\/jezyk-skryptowy-systemu\/#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-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Silnik_workflow\" >Silnik workflow<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Struktura_i_skladnia\" >Struktura i sk\u0142adnia<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Typy_danych\" >Typy danych<\/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\/jezyk-skryptowy-systemu\/#Automatyczna_konwersja_prostych_trybow_danych\" >Automatyczna konwersja prostych tryb\u00f3w danych<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Weryfikacja_typowania_CisObject_i_CisObjectReference\" >Weryfikacja typowania CisObject i CisObjectReference<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Listy\" >Listy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wartosc_null\" >Warto\u015b\u0107 null<\/a><\/li><\/ul><\/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\/jezyk-skryptowy-systemu\/#Stale_wartosci\" >Sta\u0142e warto\u015bci<\/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\/jezyk-skryptowy-systemu\/#Komentarze\" >Komentarze<\/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\/jezyk-skryptowy-systemu\/#Terminy_i_warunki\" >Terminy i warunki<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Operatory_arytmetyczne\" >Operatory arytmetyczne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Operatory_na_ciagach_znakow\" >Operatory na ci\u0105gach znak\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Operatory_porownania\" >Operatory por\u00f3wnania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Warunki\" >Warunki<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Nawiasy\" >Nawiasy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Dostep_do_list_i_tablic_hash\" >Dost\u0119p do list i tablic hash<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Dostep_do_obiektow_biznesowych_czesci_i_widokow_obiektow\" >Dost\u0119p do obiekt\u00f3w biznesowych, cz\u0119\u015bci i widok\u00f3w obiekt\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wywolywanie_definicji_dzialania\" >Wywo\u0142ywanie definicji dzia\u0142ania<\/a><\/li><\/ul><\/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\/jezyk-skryptowy-systemu\/#Polecenia\" >Polecenia<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Przeplyw_sterowania_i_przypisywanie_zmiennych\" >Przep\u0142yw sterowania i przypisywanie zmiennych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Stale\" >Sta\u0142e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Zmienne\" >Zmienne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#ValueSets\" >ValueSets<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Definicje_typow\" >Definicje typ\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Przydzialy\" >Przydzia\u0142y<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Bloki_polecen\" >Bloki polece\u0144\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Polecenie_warunkowe_if\" >Polecenie warunkowe (if)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Polecenie_warunkowe_z_alternatywa_if_%E2%80%A6_else\" >Polecenie warunkowe z alternatyw\u0105 (if &#8230; else )<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Petla_z_warunkiem_while\" >P\u0119tla z warunkiem (while)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Petla_po_wszystkich_elementach_for\" >P\u0119tla po wszystkich elementach (for)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Petla_po_wszystkich_elementach_for_%E2%80%A6_as\" >P\u0119tla po wszystkich elementach (for &#8230; as)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Polecenie_koncowe_return\" >Polecenie ko\u0144cowe (return)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wyjscie_z_funkcji_return_z_wartoscia_zwrotna\" >Wyj\u015bcie z funkcji (return z warto\u015bci\u0105 zwrotn\u0105)<\/a><\/li><\/ul><\/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\/jezyk-skryptowy-systemu\/#Funkcje\" >Funkcje<\/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\/jezyk-skryptowy-systemu\/#Funkcje_jezyka_skryptowego_systemu\" >Funkcje j\u0119zyka skryptowego systemu<\/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\/jezyk-skryptowy-systemu\/#Wlasne_deklaracje_funkcji\" >W\u0142asne deklaracje funkcji<\/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-46\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Deklaracje-2\" >Deklaracje<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Deklaracje_w_definicjach_dzialan\" >Deklaracje w definicjach dzia\u0142a\u0144<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Deklaracje_w_definicjach_procesow\" >Deklaracje w definicjach proces\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Kolejnosc_oceny_w_definicjach_dzialania\" >Kolejno\u015b\u0107 oceny w definicjach dzia\u0142ania<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#W_wezle_startowym\" >W w\u0119\u017ale startowym<\/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\/jezyk-skryptowy-systemu\/#Ogolne\" >Og\u00f3lne<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Polecenia-2\" >Polecenia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Obiekty_i_biblioteki_skryptow\" >Obiekty i biblioteki skrypt\u00f3w<\/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\/jezyk-skryptowy-systemu\/#Indywidualne_weryfikacje\" >Indywidualne weryfikacje<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Ocena_informacji\" >Ocena informacji<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wydarzenie_event\" >Wydarzenie (event)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Parametry\" >Parametry<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Typ_zdarzenia_Zaprogramowane_zdarzenie\" >Typ zdarzenia Zaprogramowane zdarzenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Typ_zdarzenia_Jednostka_biznesowa\" >Typ zdarzenia Jednostka biznesowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Typ_zdarzenia_Akcja_uzytkownika\" >Typ zdarzenia Akcja u\u017cytkownika<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Bez_definicji_zdarzenia\" >Bez definicji zdarzenia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-62\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Proces\" >Proces<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-63\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Dzialanie_activity\" >Dzia\u0142anie (activity)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-64\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Definicja_dzialania_definition\" >Definicja dzia\u0142ania (definition)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-65\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Parametry_akcji_actionParameters\" >Parametry akcji (actionParameters)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-66\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wyniki_dzialania_results\" >Wyniki dzia\u0142ania (results)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-67\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Kontrola_dialogow_dialog\" >Kontrola dialog\u00f3w (dialog)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-68\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Wywolania_funkcji_parameters_i_result\" >Wywo\u0142ania funkcji (parameters i result)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-69\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Aplikacje_dzialajace_w_tle_getJobResult\" >Aplikacje dzia\u0142aj\u0105ce w tle (getJobResult)<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-70\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Uslugi_sieci_Web_getServiceResponse\" >Us\u0142ugi sieci Web (getServiceResponse)<\/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-71\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Obsluga_bledow\" >Obs\u0142uga b\u0142\u0119d\u00f3w<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-72\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Ograniczenie_zlozonosci_wyrazen\" >Ograniczenie z\u0142o\u017cono\u015bci wyra\u017ce\u0144<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-73\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Obsluga_bledow_uruchomieniowych\" >Obs\u0142uga b\u0142\u0119d\u00f3w uruchomieniowych<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-74\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/jezyk-skryptowy-systemu\/#Rozszerzenie_jezyka_skryptowego_systemu\" >Rozszerzenie j\u0119zyka skryptowego systemu<\/a><\/li><\/ul><\/nav><\/div>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu jest u\u017cywany w <em>Workflow Management<\/em>, 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.<\/span><\/p>\n<p><span style=\"color: #000000;\">Silnik workflow obs\u0142uguje zar\u00f3wno w\u0142asny j\u0119zyk skryptowy systemu, jak i JavaScript do wyra\u017cania z\u0142o\u017conych relacji. Niniejszy dokument dotyczy wy\u0142\u0105cznie systemowego j\u0119zyka skryptowego. Jest on podzielony na nast\u0119puj\u0105ce rozdzia\u0142y:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><strong>Struktura i sk\u0142adnia<\/strong><\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Deklaracje<\/strong><\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Ocena informacji<\/strong><\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Obs\u0142uga b\u0142\u0119d\u00f3w<\/strong><\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Rozszerzenie j\u0119zyka skryptowego systemu<\/strong><\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">Wprowadzenie do j\u0119zyka skryptowego systemu jest podzielone na kilka dokument\u00f3w. Niniejszy dokument zawiera szczeg\u00f3\u0142owe informacje na temat struktury i sk\u0142adni j\u0119zyka skryptowego systemu. Wi\u0119cej informacji na temat poszczeg\u00f3lnych funkcji i polece\u0144 mo\u017cna znale\u017a\u0107 w poni\u017cszej dokumentacji:<\/span><\/p>\n<ul>\n<li><strong><span style=\"color: #000000;\">Systemowy j\u0119zyk skryptowy: Funkcje og\u00f3lne<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Systemowy j\u0119zyk skryptowy: Funkcje OLTP<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Systemowy j\u0119zyk skryptowy: Funkcje workflow<\/span><\/strong><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">Informacje na temat silnika workflow mo\u017cna znale\u017a\u0107 w dokumentacji <em>Silnik workflow<\/em>. Informacje na temat korzystania z j\u0119zyka skryptowego systemu w definicjach workflow mo\u017cna znale\u017a\u0107 w dokumentacji <em>Definicje dzia\u0142a\u0144<\/em> i <em>Definicje proces\u00f3w<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\">Systemowy j\u0119zyk skryptowy mo\u017ce by\u0107 r\u00f3wnie\u017c u\u017cywany mi\u0119dzy innymi w nast\u0119puj\u0105cych aplikacjach:<\/span><\/p>\n<ul>\n<li><strong><span style=\"color: #000000;\">Indywidualne implementacje hook<\/span><\/strong><\/li>\n<li><strong>Indywidualne weryfikacje<\/strong><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w odpowiedniej dokumentacji.<\/span><\/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><span style=\"color: #000000;\">Grup\u0105 docelow\u0105 tego dokumentu s\u0105 programi\u015bci i konsultanci techniczni, kt\u00f3rzy tworz\u0105 lub dostosowuj\u0105 workflow dla klient\u00f3w, a tak\u017ce klienci, kt\u00f3rzy zarz\u0105dzaj\u0105 w\u0142asnym workflow.<\/span><\/p>\n<p><span style=\"color: #000000;\">Niniejszy dokument zak\u0142ada zrozumienie zakresu funkcji Workflow Management widocznych dla u\u017cytkownika. Ponadto, czytelnik powinien posiada\u0107 podstawow\u0105 znajomo\u015b\u0107 SQL lub innego j\u0119zyka programowania w celu zrozumienia j\u0119zyka skryptowego systemu.<\/span><\/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=\"definicja-dzialania\" 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=\"deklaracje\" id=\"deklaracje\" ><span class=\"ez-toc-section\" id=\"Deklaracje\"><\/span>Deklaracje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Deklaracje to skrypty w definicjach proces\u00f3w i dzia\u0142a\u0144, kt\u00f3re zapewniaj\u0105 metody wywo\u0142ywane podczas tworzenia dzia\u0142a\u0144, zmiany statusu i wprowadzania okre\u015blonych warto\u015bci parametr\u00f3w. W\u0142a\u015bciwo\u015bci proces\u00f3w i dzia\u0142a\u0144 mog\u0105 by\u0107 elastycznie definiowane poprzez dostosowanie deklaracji. Deklaracje s\u0105 zapisywane w j\u0119zyku skryptowym.<\/p>\n<h4 id=\"guid\" 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=\"hook-contract\" ><span class=\"ez-toc-section\" id=\"Hook_Contract\"><\/span>Hook Contract<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Hook to interfejs, za pomoc\u0105 kt\u00f3rego istniej\u0105cy kod programu mo\u017cna rozszerzy\u0107 niezale\u017cnie od wydania, a zatem bez konfliktu. Hooki s\u0105 u\u017cywane na przyk\u0142ad wtedy, gdy konieczne jest przeprowadzenie dodatkowych kontroli w adaptacji lub aplikacji dla rozszerzenia obiektu biznesowego w celu uzupe\u0142nienia istniej\u0105cych kontroli.<\/span><\/p>\n<h4 id=\"wdrozenie-hook-contract\" ><span class=\"ez-toc-section\" id=\"Wdrozenie_Hook_Contract\"><\/span>Wdro\u017cenie Hook Contract<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Hooki, kt\u00f3re maj\u0105 zosta\u0107 zaimplementowane i odpowiednia klasa implementacji s\u0105 okre\u015blone w implementacji Hook Contract. Implementacja Hook Contract zawsze odnosi si\u0119 do definicji Hook Contract, kt\u00f3ra zawiera implementowalne hooki.<\/span><\/p>\n<h4 id=\"indywidualne-walidacje\" ><span class=\"ez-toc-section\" id=\"Indywidualne_walidacje\"><\/span>Indywidualne walidacje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Niekt\u00f3re jednostki biznesowe oferuj\u0105 Hook Contract dla kontroli, kt\u00f3re mog\u0105 by\u0107 zaimplementowane przy u\u017cyciu j\u0119zyka skryptowego systemu i bez dost\u0119pu do systemu deweloperskiego. Te rozszerzone kontrole s\u0105 u\u017cywane we wszystkich kana\u0142ach wej\u015bciowych i wyj\u015bciowych, tj. w aplikacjach dialogowych, a tak\u017ce podczas importu lub eksportu.<\/span><\/p>\n<h4 id=\"systemowy-jezyk-skryptowy\" 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=\"silnik-workflow\" id=\"silnik-workflow\" ><span class=\"ez-toc-section\" id=\"Silnik_workflow\"><\/span><span id=\"Silnik_workflow\" class=\"ez-toc-section\"><\/span>Silnik workflow<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wraz z us\u0142ug\u0105 zdarze\u0144, silnik workflow koordynuje i monitoruje wykonywanie workflow Silnik workflow jest wykonywany na serwerze komunikat\u00f3w w ka\u017cdym systemie.<\/p>\n<h3 id=\"struktura-i-skladnia\" ><span class=\"ez-toc-section\" id=\"Struktura_i_skladnia\"><\/span>Struktura i sk\u0142adnia<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"color: #000000;\">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, Pascalu i Javie.<\/span><\/p>\n<p><span style=\"color: #000000;\">Poniewa\u017c generalnie nie ma potrzeby wyra\u017cania z\u0142o\u017conych algorytm\u00f3w za pomoc\u0105 tego j\u0119zyka, wcze\u015bniejsza znajomo\u015b\u0107 SQL powinna by\u0107 wystarczaj\u0105ca do nauki tego j\u0119zyka.<\/span><\/p>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu sk\u0142ada si\u0119 z nast\u0119puj\u0105cych element\u00f3w:<\/span><\/p>\n<ul>\n<li><strong><span style=\"color: #000000;\">Typy danych<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Sta\u0142e sta\u0142e<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Komentarze<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Zasady i warunki<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Polecenia<\/span><\/strong><\/li>\n<li><strong><span style=\"color: #000000;\">Funkcje<\/span><\/strong><\/li>\n<\/ul>\n<h4 id=\"typy-danych\" ><span class=\"ez-toc-section\" id=\"Typy_danych\"><\/span>Typy danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Typ danych definiuje prawid\u0142owe zakresy warto\u015bci i dozwolone operacje. J\u0119zyk skryptowy systemu rozpoznaje zar\u00f3wno proste, jak i z\u0142o\u017cone typy danych. Przyk\u0142adami prostych typ\u00f3w danych s\u0105 ci\u0105gi znak\u00f3w i liczby. Z\u0142o\u017cone typy danych obejmuj\u0105 na przyk\u0142ad listy, obiekty biznesowe i widoki obiekt\u00f3w.<\/span><\/p>\n<p><span style=\"color: #000000;\">Wszystkie typy danych w j\u0119zyku skryptowym systemu maj\u0105 warto\u015b\u0107 standardow\u0105 (domy\u015bln\u0105). Warto\u015b\u0107 domy\u015blna jest zawsze u\u017cywana, je\u015bli wymagana jest nowa, jeszcze niezdefiniowana warto\u015b\u0107 tego typu danych. Podczas analizowania (oceny) wyra\u017cenia w j\u0119zyku skryptowym systemu sprawdzane jest u\u017cycie typ\u00f3w danych jako argument\u00f3w funkcji, polece\u0144 i operator\u00f3w. Je\u015bli przekazana warto\u015b\u0107 nie jest zgodna z oczekiwanym typem danych, wy\u015bwietlany jest komunikat o b\u0142\u0119dzie.<\/span><\/p>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu rozpoznaje nast\u0119puj\u0105ce typy danych:<\/span><\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 1575px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\"><strong><span style=\"color: #000000;\">Nazwa<\/span><\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\"><strong><span style=\"color: #000000;\">Opis<\/span><\/strong><\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"180\"><span style=\"color: #000000;\">Boolean<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"360\"><span style=\"color: #000000;\">Warto\u015bci logiczne (<em>Boolean<\/em>) mog\u0105 przyjmowa\u0107 tylko warto\u015bci <em>true<\/em> dla <em>true<\/em> i <em>false<\/em> dla <em>false<\/em>. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>Boolean<\/em> jest <em>false<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"180\"><span style=\"color: #000000;\">Bytes<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"360\"><span style=\"color: #000000;\">Typ danych <em>bytes<\/em> to dane binarne o dowolnej zawarto\u015bci. Ten typ danych mo\u017ce by\u0107 u\u017cywany w szczeg\u00f3lno\u015bci jako parametr dla zaprogramowanych zdarze\u0144 i plik\u00f3w. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>bytes<\/em> jest <em>null<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\"><span style=\"color: #000000;\">Class<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\"><span style=\"color: #000000;\">Klasa to ustrukturyzowany typ danych z zestawem atrybut\u00f3w. Ka\u017cdy atrybut ma nazw\u0119 i typ danych. Domy\u015bln\u0105 warto\u015bci\u0105 <em>class<\/em> jest <em>null<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\"><span style=\"color: #000000;\">CisDate<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\"><span style=\"color: #000000;\"><em>CisDate<\/em> to po\u0142\u0105czenie punktu w czasie ze stref\u0105 czasow\u0105. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>CisDate<\/em> jest <em>null<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 513px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 513px;\" width=\"180\"><span style=\"color: #000000;\">CisObjectReference<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 513px;\" width=\"360\"><span style=\"color: #000000;\">Obiekty biznesowe s\u0105 zarz\u0105dzane za pomoc\u0105 typ\u00f3w danych <em>CisObject<\/em> lub <em>CisObjectReference<\/em>, cz\u0119\u015bci z typem danych <em>CisObject<\/em>. Odniesienia do obiekt\u00f3w biznesowych zawieraj\u0105 klucz obiektu biznesowego. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>CisObjectReference<\/em> jest <em>null<\/em>.<\/span>\n<p><span style=\"color: #000000;\">Aby uzyska\u0107 typowan\u0105 referencj\u0119 <em>CisObjectReference<\/em>, nale\u017cy wprowadzi\u0107 nazw\u0119 obiektu biznesowego w nawiasach. Je\u015bli u\u017cytkownik nie okre\u015bli nazwy, otrzyma nieokre\u015blony <em>CisObjectReference<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\"><\/span><span style=\"color: #000000;\">W celu wydajnej oceny skrypt\u00f3w i unikni\u0119cia niepotrzebnych dost\u0119p\u00f3w do bazy danych, zmienne zadeklarowane jako <em>CisObjectReference<\/em> s\u0105 dost\u0119pne tylko jako warto\u015bci, tak jak w przypadku typu danych <em>CisObject<\/em>. Je\u015bli u\u017cytkownik chce oceni\u0107 bie\u017c\u0105c\u0105 warto\u015b\u0107 obiektu biznesowego, powinien otworzy\u0107 go ponownie, np. za pomoc\u0105 funkcji <em>getByPrimaryKey<\/em> lub <em>getByBusinessKey<\/em>.<\/div><\/section><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 226px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 226px;\" width=\"180\"><span style=\"color: #000000;\">CisObject<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 226px;\" width=\"360\"><span style=\"color: #000000;\">Obiekty biznesowe s\u0105 zarz\u0105dzane za pomoc\u0105 typ\u00f3w danych <em>CisObject<\/em> lub <em>CisObjectReference<\/em>, cz\u0119\u015bci z typem danych <em>CisObject<\/em>. Obiekty biznesowe i ich cz\u0119\u015bci s\u0105 r\u00f3wnie\u017c dost\u0119pne jako warto\u015bci. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>CisObject<\/em> jest <em>null<\/em>.<\/span>\n<p><span style=\"color: #000000;\">Aby uzyska\u0107 wpisany obiekt <em>CisObject<\/em>, nalezy wprowadzi\u0107 nazw\u0119 obiektu biznesowego w nawiasach. Je\u015bli nazwa nie zostanie wprowadzona, u\u017cytkownik otrzyma niewpisany obiekt <em>CisObject<\/em>.<\/span><\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 140px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 140px;\" width=\"180\"><span style=\"color: #000000;\">DataView<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 140px;\" width=\"360\"><span style=\"color: #000000;\">Widoki obiekt\u00f3w (<em>DataView<\/em>) to widok statusu z\u0142o\u017conej jednostki biznesowej. Widoki obiekt\u00f3w s\u0105 wykorzystywane w szczeg\u00f3lno\u015bci w indywidualnych kontrolach. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>DataView<\/em> jest <em>null<\/em>. Aby uzyska\u0107 typowany widok <em>DataView<\/em>, nalezy wprowadzi\u0107 nazw\u0119 widoku obiektu w nawiasach. Je\u015bli nazwa nie zostanie wprowadzona, u\u017cytkownik otrzyma niewpisany widok <em>DataView<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"180\"><span style=\"color: #000000;\">GUID<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"360\"><span style=\"color: #000000;\">Identyfikatory <em>GUID<\/em> s\u0105 cz\u0119sto wymagane do identyfikacji obiekt\u00f3w biznesowych za pomoc\u0105 klucza podstawowego. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>Guid<\/em> jest <em>null<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 117px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 117px;\" width=\"180\"><span style=\"color: #000000;\">HashMap<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 117px;\" width=\"360\"><span style=\"color: #000000;\"><em>HashMap<\/em>\u00a0przechowuje pary klucz-warto\u015b\u0107. Ka\u017cdemu kluczowi mo\u017cna przypisa\u0107 dok\u0142adnie jedn\u0105 warto\u015b\u0107. Warto\u015b\u0107 mo\u017ce by\u0107 wielokrotnie wyszukiwana przy u\u017cyciu klucza. Jako klucze dozwolone s\u0105 tylko ci\u0105gi znak\u00f3w. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>HashMap<\/em> jest pusta tablica.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\"><span style=\"color: #000000;\">Number<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\"><span style=\"color: #000000;\">Liczby zawsze zawieraj\u0105 znak. Mog\u0105 mie\u0107 miejsca dziesi\u0119tne, kt\u00f3re s\u0105 oddzielone kropk\u0105. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>Number<\/em> jest 0.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\"><span style=\"color: #000000;\">String<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\"><span style=\"color: #000000;\">Ci\u0105gi znak\u00f3w (<em>String<\/em>) mog\u0105 mie\u0107 dowoln\u0105 d\u0142ugo\u015b\u0107. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>String<\/em> jest pusty ci\u0105g znak\u00f3w.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"180\"><span style=\"color: #000000;\">Timestamp<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"360\"><span style=\"color: #000000;\">Punkt czasowy (<em>Timestamp<\/em>) to punkt w czasie z dok\u0142adno\u015bci\u0105 do milisekund. Wszystkie specyfikacje czasu s\u0105 odwzorowywane w punktach w czasie. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>timestamp<\/em> jest sta\u0142a <em>UNDEFINED_DATE<\/em>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\"><span style=\"color: #000000;\">Unknown<\/span><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\"><span style=\"color: #000000;\">Do typu danych <em>Unknown<\/em> mo\u017cna przypisa\u0107 dowolny inny typ danych. Domy\u015bln\u0105 warto\u015bci\u0105 typu danych <em>Unknown<\/em> jest <em>null<\/em>.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"automatyczna-konwersja-prostych-trybow-danych\" ><span class=\"ez-toc-section\" id=\"Automatyczna_konwersja_prostych_trybow_danych\"><\/span>Automatyczna konwersja prostych tryb\u00f3w danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Niekt\u00f3re proste typy danych, takie jak <em>Number, Boolean<\/em> i <em>Guid<\/em>, s\u0105 w razie potrzeby automatycznie konwertowane na ci\u0105gi znak\u00f3w.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli funkcja oczekuje parametru typu <em>String<\/em>, a przekazywana jest warto\u015b\u0107 typu <em>Number<\/em>, liczba jest konwertowana na ci\u0105g znak\u00f3w.<\/span><\/p>\n<p><span style=\"color: #000000;\">Nale\u017cy pami\u0119ta\u0107, \u017ce typ danych jest okre\u015blany przez pierwszy cz\u0142on wyra\u017cenia.<\/span><\/p>\n<p><span style=\"color: #000000;\">Przy nast\u0119puj\u0105cym przypisaniu liczba 40 jest automatycznie konwertowana na ci\u0105g znak\u00f3w <em>40<\/em>:<\/span><\/p>\n<p><em><span style=\"color: #000000;\">var t := &#8222;UB&#8221; + 40;<\/span><\/em><\/p>\n<p><span style=\"color: #000000;\">Nast\u0119puj\u0105ce przypisanie powoduje b\u0142\u0105d, poniewa\u017c ci\u0105g znak\u00f3w <em>ers<\/em> nie mo\u017ce zosta\u0107 przekonwertowany na liczb\u0119:<\/span><\/p>\n<p><span style=\"color: #000000;\"><em>var t := 101 + &#8222;ers&#8221;;<\/em><\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">Inne typy danych mo\u017cna konwertowa\u0107 za pomoc\u0105 funkcji rzutowania. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w dokumentacji <em>J\u0119zyk skryptowy systemu: Funkcje podstawowe<\/em>.<\/span><\/p>\n<h5 id=\"weryfikacja-typowania-cisobject-i-cisobjectreference\" ><span class=\"ez-toc-section\" id=\"Weryfikacja_typowania_CisObject_i_CisObjectReference\"><\/span>Weryfikacja typowania CisObject i CisObjectReference<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><span style=\"color: #000000;\">Je\u015bli u\u017cytkownik zna typ obiektu biznesowego lub cz\u0119\u015bci, powinien zawsze u\u017cywa\u0107 typowanego <em>CisObject<\/em> lub <em>CisObjectReference<\/em>. Prawid\u0142owe u\u017cycie atrybut\u00f3w i ich typ\u00f3w danych jest sprawdzane tylko w przypadku typowania.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>CisObject<\/em> (<em>com.cisag.app.general.obj.Partner<\/em>) jest obiektem biznesowym typu <em>Partner<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\"><em>CisObject<\/em> (<em>com.cisag.app.general.obj.DomesticAmount<\/em>) jest cz\u0119\u015bci\u0105 typu <em>Waluta krajowa<\/em>.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">W przypadku nieoznaczonego <em>CisObject<\/em> lub <em>CisObjectReference<\/em>, system nie sprawdza, czy nazwa atrybutu jest faktycznie zdefiniowana na obiekcie, ani nie sprawdza, czy atrybut faktycznie ma wymagany typ danych.<\/span><\/p>\n<h5 id=\"listy\" ><span class=\"ez-toc-section\" id=\"Listy\"><\/span>Listy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><span style=\"color: #000000;\">Lista jest uporz\u0105dkowan\u0105 sekwencj\u0105 warto\u015bci. Lista ma typ danych elementu i opcjonalnie d\u0142ugo\u015b\u0107. Wszystkie elementy listy musz\u0105 by\u0107 konwertowalne do tego typu danych elementu. Je\u015bli typ danych listy ma d\u0142ugo\u015b\u0107, d\u0142ugo\u015b\u0107 ta jest sta\u0142a i nie mo\u017cna jej p\u00f3\u017aniej zmieni\u0107.<\/span><\/p>\n<p><span style=\"color: #000000;\">Typ danych <em>List<\/em> jest wyra\u017cany poprzez okre\u015blenie typu danych elementu, po kt\u00f3rym nast\u0119puj\u0105 nawiasy kwadratowe. Nawiasy kwadratowe opcjonalnie zawieraj\u0105 sta\u0142\u0105 d\u0142ugo\u015b\u0107 listy.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>String[10]<\/em> to lista \u0142a\u0144cuch\u00f3w znak\u00f3w sk\u0142adaj\u0105ca si\u0119 z 10 element\u00f3w.<\/span><\/p>\n<p><span style=\"color: #000000;\"><em>Number[]<\/em> to lista liczb o nieokre\u015blonej liczbie element\u00f3w.<\/span><\/p>\n<p><span style=\"color: #000000;\"><em>Unknown[]<\/em> to lista dowolnych obiekt\u00f3w o nieokre\u015blonej liczbie element\u00f3w.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">Domy\u015bln\u0105 warto\u015bci\u0105 listy o okre\u015blonej d\u0142ugo\u015bci jest lista o tej d\u0142ugo\u015bci. Je\u015bli lista nie ma d\u0142ugo\u015bci, warto\u015bci\u0105 domy\u015bln\u0105 jest pusta lista. Pust\u0105 list\u0119 mo\u017cna sprawdzi\u0107 za pomoc\u0105 funkcji skryptowe<em>j isEmpty<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>isEmpty(new(String[]))<\/em> zwraca warto\u015b\u0107\u00a0 <em>true<\/em>.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">Funkcja skryptu list tworzy now\u0105 list\u0119 z elementami. Typ danych pierwszego elementu okre\u015bla typ danych listy. Je\u015bli nie okre\u015blono \u017cadnego elementu, funkcja list zwraca pust\u0105 list\u0119 typu danych <em>Unknown[]<\/em>.<\/span><\/p>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em style=\"color: #000000;\">list(&#8222;UB&#8221;, 40)<\/em> tworzy list\u0119 typu danych <em style=\"color: #000000;\">String[]<\/em> z dwoma elementami typu danych <em style=\"color: #000000;\">String<\/em>.<\/p>\n<p><span style=\"color: #000000;\"><em>list(101, &#8222;ers&#8221;)<\/em> nie jest prawid\u0142ow\u0105 list\u0105, poniewa\u017c ci\u0105g znak\u00f3w <em>ers<\/em> nie mo\u017ce zosta\u0107 przekonwertowany na typ danych elementu <em>Number<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\"><em>list()<\/em> tworzy now\u0105 pust\u0105 list\u0119 danych typu <em>Unknown[]<\/em>.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">Element mo\u017ce zosta\u0107 dodany do istniej\u0105cej listy tylko wtedy, gdy typ danych elementu jest zgodny z typem danych listy lub mo\u017ce zosta\u0107 do niego przekonwertowany.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Wywo\u0142anie funkcji <em>add<\/em> powoduje b\u0142\u0105d, poniewa\u017c ci\u0105g znak\u00f3w nie mo\u017ce zosta\u0107 przekonwertowany na liczb\u0119.<\/span><\/p>\n<p><em><span style=\"color: #000000;\">var list1 := Number[];<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">add(list1, &#8222;500&#8221;);<\/span><\/em><\/p>\n<p><span style=\"color: #000000;\">Je\u015bli jednak lista jest zadeklarowana jako <em>string[]<\/em>, w\u00f3wczas wyra\u017cenie<em> add(list1, 500)<\/em> jest poprawne sk\u0142adniowo, poniewa\u017c liczba mo\u017ce zosta\u0107 przekonwertowana na ci\u0105g znak\u00f3w.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">W przypadku przypisywania do listy element\u00f3w o r\u00f3\u017cnych typach danych (np. jako listy parametr\u00f3w do wywo\u0142ywania aplikacji dzia\u0142aj\u0105cej w tle), nale\u017cy wybra\u0107 pierwszy element, aby pozosta\u0142e elementy mog\u0142y zosta\u0107 przekonwertowane na typ danych pierwszego elementu. Na przyk\u0142ad, liczby mog\u0105 by\u0107 konwertowane na ci\u0105gi znak\u00f3w, ale nie odwrotnie. Je\u015bli nie jest to mo\u017cliwe, mo\u017cna zadeklarowa\u0107 list\u0119 typu danych <em>Unknown[]<\/em> i przypisa\u0107 elementy r\u00f3\u017cnych typ\u00f3w danych za pomoc\u0105 funkcji <em>add<\/em>. Elementy dowolnego typu danych mog\u0105 by\u0107 dodawane do listy o typie danych<em> Unknown[]<\/em>, poniewa\u017c wszystkie inne typy danych mog\u0105 by\u0107 konwertowane na <em>Unknown<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\">Oznacza to na przyk\u0142ad, \u017ce lista parametr\u00f3w mo\u017ce by\u0107 r\u00f3wnie\u017c generowana dla funkcji <em>getCisObjectList<\/em> i <em>getResultList<\/em>, je\u015bli zapytanie OQL ma parametry o r\u00f3\u017cnych typach danych, kt\u00f3rych nie mo\u017cna przekonwertowa\u0107 automatycznie (na typ danych pierwszego parametru). Poni\u017cszy przyk\u0142ad tworzy list\u0119 parametr\u00f3w w celu okre\u015blenia pierwszych 100 os\u00f3b wewn\u0119trznych za pomoc\u0105 funkcji <em>getCisObjectList<\/em> i wyprowadzenia ich na konsol\u0119:<\/span><\/p>\n<p><em><span style=\"color: #000000;\">const PartnerType as valueSet(com.cisag.app.general.PartnerType);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">function create()<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">{<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">var params as Unknown[];<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">var OQL :=<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">&#8222;SELECT FROM com.cisag.app.general.obj.Partner p&#8221; +<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">&#8221; WHERE p:type = ? AND p:human = ?&#8221; +<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">&#8221; ORDER BY p:number&#8221;;<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">add(params, PartnerType.INTERNAL);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">add(params, true);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">var pList := getCisObjectList(OQL, params, BlockSize);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">for (p as CisObject(com.cisag.app.general.obj.Partner) : pList)<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">echo(p:number);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">}<\/span><\/em><\/p>\n<p><span style=\"color: #000000;\">Je\u015bli lista zawiera elementy o r\u00f3\u017cnych typach danych, mo\u017ce by\u0107 konieczne wpisanie element\u00f3w za pomoc\u0105 funkcji rzutowania przed ich u\u017cyciem, jak pokazuje poni\u017cszy przyk\u0142ad.<\/span><\/p>\n<p><em><span style=\"color: #000000;\">var myList as Unknown[];<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">add(myList, 800);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">add(myList, &#8222;\u00b0&#8221;);<\/span><\/em><\/p>\n<p><em><span style=\"color: #000000;\">var song := cast(String, myList[0]) + cast(String, myList[1]);<\/span><\/em><\/p>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu zawiera wiele funkcji s\u0142u\u017c\u0105cych do tworzenia i edytowania list. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w rozdziale <em>Funkcje list<\/em> w dokumentacji <em>Systemowy j\u0119zyk skryptowy: Funkcje og\u00f3lne<\/em>.<\/span><\/p>\n<h5 id=\"wartosc-null\" ><span class=\"ez-toc-section\" id=\"Wartosc_null\"><\/span>Warto\u015b\u0107 null<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><span style=\"color: #000000;\">Warto\u015b\u0107 <em>null<\/em> istnieje opr\u00f3cz warto\u015bci typ\u00f3w danych. Warto\u015b\u0107 <em>null<\/em> nie jest przypisana do typu danych. Je\u015bli warto\u015b\u0107 ma warto\u015b\u0107 <em>null<\/em>, jest ona niezdefiniowana. Wiele funkcji i operator\u00f3w w j\u0119zyku skryptowym systemu zwraca wynik <em>null<\/em>, je\u015bli jeden z parametr\u00f3w ma warto\u015b\u0107 <em>null<\/em>. Je\u015bli wi\u0119c co\u015b ma zosta\u0107 obliczone na podstawie niezdefiniowanej warto\u015bci, wynik jest r\u00f3wnie\u017c niezdefiniowany. Funkcje specjalne <em>isNull<\/em> i <em>first<\/em> mog\u0105 by\u0107 u\u017cywane do oddzielnej obs\u0142ugi warto\u015bci <em>null<\/em>.<\/span><\/p>\n<p><span style=\"color: #000000;\">Warunek przej\u015bcia w definicji dzia\u0142ania nie jest uwa\u017cany za spe\u0142niony, je\u015bli jego warto\u015b\u0107 wynosi <em>null (false)<\/em>. Z drugiej strony, warunek wst\u0119pny jest uwa\u017cany za spe\u0142niony, je\u015bli jego warto\u015b\u0107 wynosi <em>null (true)<\/em>. Nale\u017cy zatem sprawdza\u0107 atrybuty opcjonalne z kluczami obcymi w szczeg\u00f3lno\u015bci pod k\u0105tem warto\u015bci <em>null<\/em>.<\/span><\/p>\n<p><span style=\"color: #ff9900;\"><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Dzia\u0142anie workflow powinno zosta\u0107 utworzone, gdy zam\u00f3wienie sprzeda\u017cy zostanie zwolnione, a zam\u00f3wienie sprzeda\u017cy nie zosta\u0142o zwolnione przez odpowiedzialnego pracownika.<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\">Warunek przej\u015bcia <em>not(contains(resolvePartner(parameters.object:responsible), parameters.userGuid))<\/em> ma niezdefiniowan\u0105 warto\u015b\u0107 <em>null<\/em>, je\u015bli \u017caden odpowiedzialny pracownik nie jest zapisany w zam\u00f3wieniu sprzeda\u017cy. Dlatego w tym przypadku nie jest generowane \u017cadne dzia\u0142anie.<\/span><\/p>\n<p><span style=\"color: #000000;\">Warunki przej\u015bcia <em>isNull(parameters.object:responsible) lub not(contains(resolvePartner(parameters.object:responsible), parameters.userGuid)) i not(contains(resolvePartner(cast(Guid, first(parameters.object:responsible, ZERO_GUID))), parameters.userGuid))<\/em> r\u00f3wnie\u017c maj\u0105 prawid\u0142ow\u0105 warto\u015b\u0107, je\u015bli \u017caden odpowiedzialny pracownik nie jest zapisany w zam\u00f3wieniu sprzeda\u017cy.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">Wyra\u017cenie, kt\u00f3re \u015bledzi relacj\u0119 poprzez atrybut z warto\u015bci\u0105 <em>null<\/em> r\u00f3wnie\u017c prowadzi do niezdefiniowanego wyniku.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>parameters.object-&gt;Responsible:number<\/em> ma niezdefiniowan\u0105 warto\u015b\u0107 <em>null,<\/em> je\u015bli \u017caden odpowiedzialny pracownik nie jest przechowywany w obiekcie biznesowym, do kt\u00f3rego odwo\u0142uje si\u0119 parametr <em>parameters.object<\/em>.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu zawiera dwie funkcje <em>isNull<\/em> i <em>first<\/em> do obs\u0142ugi warto\u015bci <em>null<\/em>. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w rozdziale <em>Funkcje listy<\/em> dokumentacji <em>Systemowy j\u0119zyk skryptowy: Funkcje og\u00f3lne<\/em>.<\/span><\/p>\n<h4 id=\"stale-wartosci\" ><span class=\"ez-toc-section\" id=\"Stale_wartosci\"><\/span>Sta\u0142e warto\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Sta\u0142a mo\u017ce przyjmowa\u0107 tylko jedn\u0105 z g\u00f3ry okre\u015blon\u0105 warto\u015b\u0107. Sta\u0142e s\u0105 u\u017cywane, mi\u0119dzy innymi, w celu u\u0142atwienia korzystania z j\u0119zyka skryptowego systemu i uczynienia go bardziej zwartym. Nast\u0119puj\u0105ce sta\u0142e s\u0105 zdefiniowane na sta\u0142e i zawsze dost\u0119pne:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 632px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"144\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"396\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"144\">INVALID_GUID<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"396\"><em>INVALID_GUID<\/em> reprezentuje nieprawid\u0142ow\u0105 warto\u015b\u0107 dla typu danych Guid.<\/td>\n<\/tr>\n<tr style=\"height: 138px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 138px;\" width=\"144\">MAX_DATE<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 138px;\" width=\"396\">Najwi\u0119kszy wy\u015bwietlany punkt w czasie (<em>TimeStamp<\/em>). Warto\u015b\u0107 <em>MAX_DATE<\/em> mo\u017ce by\u0107 u\u017cywana na przyk\u0142ad dla zakres\u00f3w wa\u017cno\u015bci, kt\u00f3re s\u0105 otwarte od g\u00f3ry.\n<p><em>MAX_DATE<\/em> odpowiada sta\u0142ej <em>MAX_TIME_STAMP<\/em> zapytania OQL.<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 138px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 138px;\" width=\"144\">MIN_DATE<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 138px;\" width=\"396\">Najmniejszy czas, jaki mo\u017ce by\u0107 wy\u015bwietlany (<em>TimeStamp<\/em>). <em>MIN_DATE<\/em> mo\u017ce by\u0107 u\u017cywane na przyk\u0142ad dla zakres\u00f3w wa\u017cno\u015bci, kt\u00f3re s\u0105 otwarte od do\u0142u.\n<p><em>MIN_DATE<\/em> odpowiada sta\u0142ej <em>MIN_TIME_STAMP<\/em> zapytania OQL.<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 217px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 217px;\" width=\"144\">UNDEFINED_DATE<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 217px;\" width=\"396\">Niezdefiniowany punkt w czasie (<em>TimeStamp<\/em>). Atrybut <em>UNDEFINED_DATE<\/em> jest u\u017cywany na przyk\u0142ad dla punkt\u00f3w w czasie przed przypisaniem okre\u015blonej warto\u015bci. Na przyk\u0142ad czas ostatniej zmiany obiektu biznesowego (w atrybucie <em>updateInfo.updateTime<\/em>), kt\u00f3ry nie zosta\u0142 zmieniony od czasu jego utworzenia.\n<p><em>UNDEFINED_DATE<\/em> odpowiada sta\u0142ej <em>UNDEFINED_TIME_STAMP<\/em> zapytania OQL.<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"144\">ZERO_GUID<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"396\">Identyfikator <em>GUID ZERO<\/em> jest zawsze u\u017cywany, gdy identyfikator GUID nie mo\u017ce by\u0107 zerowy, ale nadal jest niezdefiniowany. Dzieje si\u0119 tak na przyk\u0142ad, gdy identyfikator GUID jest cz\u0119\u015bci\u0105 klucza podstawowego. <em>ZERO_GUID<\/em> odpowiada sta\u0142ej <em>ZEROGUID<\/em> zapytania OQL.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Aby sprawdzi\u0107, czy warto\u015b\u0107 typu danych <em>CisDate<\/em> ma najmniejsz\u0105 lub najwi\u0119ksz\u0105 wy\u015bwietlan\u0105 warto\u015b\u0107, mo\u017cna u\u017cy\u0107 funkcji <em>isMinDate<\/em> i <em>isMaxDate<\/em>.<\/div><\/section>\n<h4 id=\"komentarze\" ><span class=\"ez-toc-section\" id=\"Komentarze\"><\/span>Komentarze<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Komentarze s\u0105 wprowadzane przez \/* i ko\u0144czone przez *\/. Komentarze mog\u0105 sk\u0142ada\u0107 si\u0119 z kilku linii.<\/p>\n<p>W przypadku bardziej z\u0142o\u017conych proces\u00f3w przep\u0142ywu pracy zaleca si\u0119 wprowadzenie wystarczaj\u0105cej liczby komentarzy w definicjach dzia\u0142a\u0144, aby u\u0142atwi\u0107 dostosowanie i konserwacj\u0119. Poni\u017cszy przyk\u0142adowy komentarz z definicji procesu opisuje proces.<\/p>\n<p><em>\/**<\/em><\/p>\n<p><em>\u00a0* This process exports changes to the Partner object every 15<\/em><\/p>\n<p><em>\u00a0* minutes. The process ends automaticallly when the processing<\/em><\/p>\n<p><em>\u00a0* duration has been exceeded.<\/em><\/p>\n<p><em>\u00a0*<\/em><\/p>\n<p><em>\u00a0* Start: Manual process without event definition<\/em><\/p>\n<p><em>\u00a0*<\/em><\/p>\n<p><em>\u00a0* Owner: If the process owner is not defined in the process<\/em><\/p>\n<p><em>\u00a0* definition then the start node automatically sets the owner to<\/em><\/p>\n<p><em>\u00a0* the initiator (user who triggered the event) so that he or she<\/em><\/p>\n<p><em>\u00a0* can display the process and be notified in case of errors.<\/em><\/p>\n<p><em>\u00a0* Number1: Total number of export runs<\/em><\/p>\n<p><em>\u00a0* Number2: Total number of Partners exported<\/em><\/p>\n<p><em>\u00a0* Timestamp1: Begin time of Partner query of the last export run<\/em><\/p>\n<p><em>\u00a0* Timestamp2: End time of Partner query of the last export run<\/em><\/p>\n<p><em>*\/<\/em><\/p>\n<p>Zaleca si\u0119 r\u00f3wnie\u017c deklarowanie i komentowanie sta\u0142ych globalnych w definicjach proces\u00f3w w celu uproszczenia konfiguracji proces\u00f3w workflow.<\/p>\n<p><em>\/** <\/em><br \/><em>* JOB_QUEUE is the name of the job queue for the batch job. <\/em><br \/><em>* If no job queue is specified in this constant then the default <\/em><br \/><em>* job queue from the Customizing function 'Workflow Management&#8217; <\/em><br \/><em>* is used. <\/em><br \/><em>*\/ <\/em><br \/><em>const JOB_QUEUE := &#8222;&#8221;; <\/em><\/p>\n<p>Puste wyra\u017cenie w polu warunku jest uwa\u017cane za spe\u0142nione (<em>true<\/em>). Poniewa\u017c warunek sk\u0142adaj\u0105cy si\u0119 tylko z jednego komentarza nie jest pusty, nast\u0119puj\u0105cy warunek przej\u015bcia jest uwa\u017cany za niespe\u0142niony (<em>false<\/em>), nawet je\u015bli nie zawiera wyra\u017cenia podlegaj\u0105cego ocenie, a zatem nie generuje \u017cadnego dzia\u0142ania.<\/p>\n<p><em>\/* parameters.object:status = OrderStatus.RELEASED *\/<\/em><\/p>\n<p>Je\u015bli na przyk\u0142ad u\u017cytkownik chce upewni\u0107 si\u0119, \u017ce dzia\u0142anie jest zawsze tworzone niezale\u017cnie od warunku przej\u015bcia podczas rozwi\u0105zywania problem\u00f3w, ale nie chce usuwa\u0107 warunku przej\u015bcia, mo\u017cna zamiast tego skomentowa\u0107 warunek przej\u015bcia i zast\u0105pi\u0107 go warto\u015bci\u0105 <em>true<\/em>.<\/p>\n<p><em>true \/* parameters.object:status = OrderStatus.RELEASED *\/<\/em><\/p>\n<h4 id=\"terminy-i-warunki\" ><span class=\"ez-toc-section\" id=\"Terminy_i_warunki\"><\/span>Terminy i warunki<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Termin to wyra\u017cenie lub formu\u0142a, kt\u00f3ra oblicza warto\u015b\u0107.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ady termin\u00f3w:<\/p>\n<p><em>a * a + b * b<\/em><\/p>\n<p><em>max(a, b) * min(c, d)<\/em><\/div><\/section>\n<p>Warunek to wyra\u017cenie, kt\u00f3re zwraca warto\u015b\u0107 prawdy, a tym samym umo\u017cliwia podj\u0119cie decyzji tak\/nie.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ady warunk\u00f3w:<\/p>\n<p><em>a * a + b * b = c * c<\/em><\/p>\n<p><em>max(a, b) &gt; 0<\/em><\/p>\n<p><em>parameters.object:updateInfo.createUser &lt;&gt; parameters.userGuid<\/em><\/div><\/section>\n<p>Sk\u0142adnia warunk\u00f3w jest podobna do tej w SQL. Je\u015bli jeden z operand\u00f3w nie odpowiada oczekiwanemu typowi danych, wynikiem operacji jest <em>null<\/em>. Je\u015bli jeden z operand\u00f3w ma warto\u015b\u0107 <em>null<\/em>, wynikiem operacji jest r\u00f3wnie\u017c <em>null<\/em>.<\/p>\n<h5 id=\"operatory-arytmetyczne\" ><span class=\"ez-toc-section\" id=\"Operatory_arytmetyczne\"><\/span>Operatory arytmetyczne<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Nast\u0119puj\u0105ce operatory s\u0105 zdefiniowane dla liczb:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a * b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Mno\u017cenie liczb a i b.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a \/ b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Podziel liczb\u0119 a przez liczb\u0119 b.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a % b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Reszta z dzielenia liczby ca\u0142kowitej a przez liczb\u0119 b.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a + b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dodawanie liczb a i b.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a &#8211; b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Odejmowanie liczby b od liczby a.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Operatory arytmetyczne, nawet r\u00f3\u017cnych typ\u00f3w, mog\u0105 by\u0107 dowolnie \u0142\u0105czone. Jak zwykle, operatory *, \/ i % maj\u0105 wy\u017csze wi\u0105zanie ni\u017c operatory + i -. Operatory z tym samym wi\u0105zaniem s\u0105 wykonywane od lewej do prawej.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p><em>1 + 3<\/em> i <em>3 * 4 &#8211; 8<\/em> s\u0105 poprawnymi wyra\u017ceniami z tymi operatorami i oba zwracaj\u0105 wynik <em>4<\/em>.<\/p>\n<p><em>1 * &#8222;a&#8221;<\/em> zwraca <em>null<\/em>.<\/div><\/section>\n<p>J\u0119zyk skryptowy systemu zawiera r\u00f3wnie\u017c wiele funkcji arytmetycznych. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w rozdziale<em> Funkcje arytmetyczne<\/em> dokumentacji <em>Systemowy j\u0119zyk skryptowy: Funkcje podstawowe<\/em>.<\/p>\n<h5 id=\"operatory-na-ciagach-znakow\" ><span class=\"ez-toc-section\" id=\"Operatory_na_ciagach_znakow\"><\/span>Operatory na ci\u0105gach znak\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Nast\u0119puj\u0105ce operatory s\u0105 zdefiniowane dla ci\u0105g\u00f3w znak\u00f3w:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">a + b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">\u0141\u0105czenie ci\u0105g\u00f3w a i b.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dowolna liczba ci\u0105g\u00f3w mo\u017ce by\u0107 po\u0142\u0105czona w celu utworzenia terminu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>&#8222;Hello&#8221; + &#8221; &#8221; + &#8222;world&#8221;<\/em> jest poprawnym wyra\u017ceniem z tym operatorem.<\/div><\/section>\n<p>J\u0119zyk skryptowy systemu zawiera r\u00f3wnie\u017c wiele funkcji dla ci\u0105g\u00f3w znak\u00f3w. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w rozdziale <em>Funkcje dla ci\u0105g\u00f3w znak\u00f3w<\/em> dokumentacji <em>Systemowy j\u0119zyk skryptowy: Funkcje podstawowe<\/em>.<\/p>\n<h5 id=\"operatory-porownania\" ><span class=\"ez-toc-section\" id=\"Operatory_porownania\"><\/span>Operatory por\u00f3wnania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Operatory por\u00f3wnania (komparatory) to:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 230px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"132\">a = b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015bci termin\u00f3w <em>a<\/em> i <em>b<\/em> s\u0105 takie same.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"132\">a &lt; b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015b\u0107 terminu <em>a<\/em> jest mniejsza ni\u017c warto\u015b\u0107 terminu <em>b<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"132\">a &lt;= b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015b\u0107 wyra\u017cenia <em>a<\/em> jest mniejsza lub r\u00f3wna warto\u015bci wyra\u017cenia <em>b<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"132\">a &gt; b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015b\u0107 terminu <em>a<\/em> jest wi\u0119ksza ni\u017c warto\u015b\u0107 terminu <em>b<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"132\">a &gt;= b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015b\u0107 wyra\u017cenia <em>a<\/em> jest wi\u0119ksza lub r\u00f3wna warto\u015bci wyra\u017cenia <em>b<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"132\">a &lt;&gt; b<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"408\">Por\u00f3wnuje, czy warto\u015bci termin\u00f3w <em>a<\/em> i <em>b<\/em> nie s\u0105 r\u00f3wne. Wszystkie typy danych mog\u0105 by\u0107 por\u00f3wnywane za pomoc\u0105 <em>&lt;&gt;<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wszystkie typy danych mog\u0105 by\u0107 por\u00f3wnywane za pomoc\u0105 operator\u00f3w <em>=<\/em> i <em>&lt;&gt;<\/em>. W przypadku jednostek biznesowych por\u00f3wnywana jest ca\u0142a zawarto\u015b\u0107. Por\u00f3wnanie z innymi operatorami jest mo\u017cliwe tylko dla typ\u00f3w danych <em>Number, String, CisDate, Timestamp <\/em>i<em> Boolean<\/em>.<\/p>\n<p>Lewa strona operacji por\u00f3wnania okre\u015bla por\u00f3wnywany typ danych.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>3 &lt;= 1 + 2<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>&#8222;a&#8221; &lt; &#8222;b&#8221;<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>&#8222;a&#8221; &gt; 1<\/em> jest warunkiem prawdziwym, poniewa\u017c liczba 1 mo\u017ce zosta\u0107 przekonwertowana na ci\u0105g znak\u00f3w.<\/p>\n<p><em>1 &gt; &#8222;a&#8221;<\/em> zwraca <em>null<\/em>, poniewa\u017c ci\u0105g znak\u00f3w<em> a<\/em> nie mo\u017ce zosta\u0107 przekonwertowany na liczb\u0119.<\/div><\/section>\n<p>Wynik operacji por\u00f3wnania jest typu danych warto\u015b\u0107 prawdy.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>(1 = 3) = false<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>today() &lt; addDays(today(), 1)<\/em> jest warunkiem true.<\/p>\n<p><em>true = false<\/em> jest warunkiem fa\u0142szywym.<\/div><\/section>\n<p>Je\u015bli por\u00f3wnywane s\u0105 ze sob\u0105 dwie daty <em>CisDate<\/em>, brana jest r\u00f3wnie\u017c pod uwag\u0119 strefa czasowa.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>createCisDate(&#8222;CET&#8221;, 2020, 1, 1, 0,0,0,0) &lt; <\/em><\/p>\n<p><em>createCisDate(&#8222;NST&#8221;, 2019, 12, 31, 23,0,0,0)<\/em> jest warunkiem prawdziwym, poniewa\u017c strefa czasowa <em>NST<\/em> jest ponad godzin\u0119 po strefie czasowej <em>CET<\/em>.<\/div><\/section>\n<p>Aby por\u00f3wna\u0107 <em>CisDate<\/em> z czasem, mo\u017cna u\u017cy\u0107 funkcji skryptu <em>toTimestamp<\/em> w celu przekonwertowania <em>CisDate<\/em> na czas.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>toTimestamp(today()) &lt;= now()<\/em> jest warunkiem <em>true<\/em>.<\/div><\/section>\n<h5 id=\"warunki\" ><span class=\"ez-toc-section\" id=\"Warunki\"><\/span>Warunki<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Warunki mog\u0105 by\u0107 \u0142\u0105czone zgodnie z wymaganiami za pomoc\u0105 operator\u00f3w logicznych <em>AND<\/em> i <em>OR<\/em>:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 24.6429%;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 74.6429%;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 24.6429%;\" width=\"132\">a i b<\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 74.6429%;\" width=\"408\"><em>AND<\/em> jest kombinacj\u0105 dw\u00f3ch warunk\u00f3w. Wynik jest prawdziwy, je\u015bli oba warunki <em>a<\/em> i <em>b<\/em> s\u0105 prawdziwe.<\/td>\n<\/tr>\n<tr style=\"height: 47px;\">\n<td style=\"height: 47px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 24.6429%;\" width=\"132\">a LUB b<\/td>\n<td style=\"height: 47px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 74.6429%;\" width=\"408\"><em>OR<\/em> jest operacj\u0105 <em>LUB<\/em> dw\u00f3ch warunk\u00f3w. Wynik jest prawdziwy, je\u015bli warunek <em>a<\/em> lub warunek <em>b<\/em> lub <em>a<\/em> i <em>b<\/em> s\u0105 prawdziwe.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 24.6429%;\" width=\"132\">NIE<\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff; width: 74.6429%;\" width=\"408\"><em>NOT<\/em> jest zaprzeczeniem warunku. Wynik jest prawdziwy, je\u015bli warunek <em>a<\/em> jest fa\u0142szywy i fa\u0142szywy, je\u015bli warunek <em>a<\/em> jest prawdziwy.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Operatory <em>AND<\/em> i <em>OR<\/em> mo\u017cna dowolnie \u0142\u0105czy\u0107. Jak zwykle, operator <em>AND<\/em> ma wy\u017csze wi\u0105zanie ni\u017c operator <em>OR<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>1 = 1 ORAZ 3 = 3<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>1 = 1 LUB 2 = 2 ORAZ 3 = 4<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>1 = 0 LUB 2 = 2 ORAZ 3 = 4<\/em> to nieprawid\u0142owy warunek.<\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Dla operator\u00f3w logicznych mo\u017cna u\u017cywa\u0107 zar\u00f3wno wielkich, jak i ma\u0142ych liter. Oznacza to, \u017ce <em>a<\/em> <em>AND<\/em> <em>b<\/em> oraz<em> a<\/em> i <em>b<\/em> s\u0105 sk\u0142adniowo identycznymi i poprawnymi warunkami.<\/div><\/section>\n<h5 id=\"nawiasy\" ><span class=\"ez-toc-section\" id=\"Nawiasy\"><\/span>Nawiasy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Warunki mog\u0105 by\u0107 umieszczone w nawiasach zgodnie z wymaganiami:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">(a)<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Nawiasy warunk\u00f3w umowy.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wyra\u017cenie w nawiasie jest zawsze wykonywane jako jednostka, niezale\u017cnie od r\u00f3\u017cnic mi\u0119dzy wi\u0105zaniami operator\u00f3w.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>(2 + 3) * 2 = 10<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>(2 * (7 &#8211; 6) + 1) = 3<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>(1 = 1 LUB 3 &lt; 1) ORAZ 2 = 2<\/em> jest warunkiem prawdziwym.<\/div><\/section>\n<h5 id=\"dostep-do-list-i-tablic-hash\" ><span class=\"ez-toc-section\" id=\"Dostep_do_list_i_tablic_hash\"><\/span>Dost\u0119p do list i tablic hash<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Istniej\u0105 nast\u0119puj\u0105ce operatory dost\u0119pu do list i HashMap:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<thead>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">b[a]<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dost\u0119p do elementu o indeksie <em>a<\/em> listy <em>b<\/em>, pocz\u0105wszy od indeksu 0. Indeks a musi by\u0107 liczb\u0105. Je\u015bli<em> a<\/em> nie jest liczb\u0105 ca\u0142kowit\u0105, pod uwag\u0119 brana jest tylko cz\u0119\u015b\u0107 ca\u0142kowita. Je\u015bli indeks jest poza prawid\u0142owym zakresem listy, wynikiem jest <em>null<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">b.a<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dost\u0119p do warto\u015bci z kluczem a w HashMap<em> b<\/em>. Je\u015bli dla klucza nie istnieje \u017cadna warto\u015b\u0107, wynikiem jest <em>null<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">b[&#8222;a&#8221;]<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dost\u0119p do warto\u015bci z kluczem <em>a<\/em> w HashMap <em>b<\/em>. Je\u015bli dla klucza nie istnieje \u017cadna warto\u015b\u0107, wynikiem jest <em>null<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Oba typy dost\u0119pu do HasMap s\u0105 r\u00f3wnowa\u017cne. Dost\u0119p za pomoc\u0105 kropki <em>(b.a)<\/em> jest bardziej kompaktowy i jest szczeg\u00f3lnie odpowiedni, je\u015bli wpisy HashMap s\u0105 znane w momencie pisania wyra\u017cenia. Je\u015bli wpisy s\u0105 obliczane dynamicznie w czasie wykonywania, dost\u0119p za pomoc\u0105 nawias\u00f3w kwadratowych<em> (b[&#8222;a&#8221;])<\/em> ma wi\u0119kszy sens.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>h<\/em> jest HashMap z nast\u0119puj\u0105cymi wpisami (klucz, warto\u015b\u0107):<\/p>\n<p><em>h = {(&#8222;a&#8221;,1), (&#8222;x1&#8221;, 11), (&#8222;x2&#8221;, 12) , (&#8222;x3&#8221;, 13)}<\/em><\/p>\n<p><em>h.a = 1<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>h[&#8222;a&#8221;] = 1<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>h[&#8222;x&#8221; + (3 &#8211; 2)] = 11<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>h.x = 1<\/em> zwraca warto\u015b\u0107 zero.<\/p>\n<p>l jest list\u0105 zawieraj\u0105c\u0105 nast\u0119puj\u0105ce wpisy:<\/p>\n<p><em>l = {&#8222;a&#8221;, &#8222;b&#8221;, &#8222;c&#8221;}<\/em><\/p>\n<p><em>l[0] = &#8222;a&#8221;<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>l[2] = &#8222;c&#8221;<\/em> jest warunkiem prawdziwym.<\/p>\n<p><em>l[2 * 3] = &#8222;a&#8221;<\/em> zwraca warto\u015b\u0107 <em>null<\/em>.<\/div><\/section>\n<h5 id=\"dostep-do-obiektow-biznesowych-czesci-i-widokow-obiektow\" ><span class=\"ez-toc-section\" id=\"Dostep_do_obiektow_biznesowych_czesci_i_widokow_obiektow\"><\/span>Dost\u0119p do obiekt\u00f3w biznesowych, cz\u0119\u015bci i widok\u00f3w obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Nast\u0119puj\u0105ce operatory s\u0105 dost\u0119pne dla jednostek biznesowych i cz\u0119\u015bci:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\"><strong>Operator<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\"><strong>Wyja\u015bnienie<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">o:a<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dost\u0119p do atrybutu<em> a<\/em> obiektu biznesowego, cz\u0119\u015bci lub widoku obiektu <em>o<\/em>. Je\u015bli atrybut <em>a<\/em> nie istnieje w obiekcie <em>o<\/em> lub zawiera nieobs\u0142ugiwany typ danych, wynikiem jest <em>null<\/em>. Atrybut <em>a<\/em> mo\u017ce by\u0107 z\u0142o\u017con\u0105 \u015bcie\u017ck\u0105 dost\u0119pu do atrybut\u00f3w cz\u0119\u015bci i p\u00f3l osadzonych w obiekcie <em>o<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"132\">o-&gt;R<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"408\">Dost\u0119p do relacji 1:1 <em>R<\/em> obiektu biznesowego, cz\u0119\u015bci lub widoku obiektu <em>o.<\/em> Je\u015bli relacja nie istnieje lub nie wskazuje na \u017caden obiekt, wynikiem jest <em>null<\/em>. Wynikiem dost\u0119pu do relacji jest obiekt biznesowy jako warto\u015b\u0107.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dost\u0119p do obiekt\u00f3w biznesowych, cz\u0119\u015bci i widok\u00f3w obiekt\u00f3w jest cz\u0119sto wymagany, poniewa\u017c obiekty te s\u0105 najwa\u017cniejszymi kontenerami danych w systemie.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>loadPartner(&#8222;10010&#8221;):address.city<\/em> jest prawid\u0142owym dost\u0119pem do atrybutu <em>city<\/em> w z\u0142o\u017conym atrybucie <em>address<\/em> obiektu biznesowego <em>Partner<\/em> o identyfikatorze <em>10010<\/em>.<\/p>\n<p><em>loadPartner(&#8222;10010&#8221;):organizationalUnit.name[1]<\/em> jest prawid\u0142owym dost\u0119pem do pola o indeksie <em>1<\/em> w atrybucie pola <em>name<\/em> w atrybucie z\u0142o\u017conym<em> organizationalUnit<\/em> obiektu biznesowego <em>Partner<\/em> o identyfikatorze <em>10010<\/em>.<\/p>\n<p><em>loadPartner(&#8222;10010&#8221;)-&gt;Language:isoCode<\/em> jest prawid\u0142owym dost\u0119pem do atrybutu <em>isoCode<\/em> obiektu biznesowego, do kt\u00f3rego odwo\u0142uje si\u0119 relacja <em>Language<\/em> obiektu biznesowego <em>Partner<\/em> o identyfikatorze <em>10010<\/em>.<\/div><\/section>\n<p>Aby oceni\u0107 atrybuty, kt\u00f3rych nazwy zaczynaj\u0105 si\u0119 od podkre\u015blenia, mo\u017cna u\u017cy\u0107 funkcji <em>getAttribute<\/em>. Przed u\u017cyciem wyniku nale\u017cy przekonwertowa\u0107 go na typ danych pasuj\u0105cy do atrybutu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>loadCurrency(getCorporateCurrency(cast(Guid, <\/em><\/p>\n<p><em>getAttribute(parameters.object, &#8222;_organisation&#8221;)))):isoCode<\/em> zwraca kod ISO kluczowej waluty organizacji, w kt\u00f3rej kontek\u015bcie zarejestrowano obiekt biznesowy, do kt\u00f3rego odwo\u0142uje si\u0119 parametr <em>parameters.object<\/em>.<\/div><\/section>\n<h5 id=\"wywolywanie-definicji-dzialania\" ><span class=\"ez-toc-section\" id=\"Wywolywanie_definicji_dzialania\"><\/span>Wywo\u0142ywanie definicji dzia\u0142ania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Definicje dzia\u0142ania z kategori\u0105 <em>Wywo\u0142anie funkcji<\/em> mo\u017cna wywo\u0142ywa\u0107 jak funkcje. Nazwa definicji dzia\u0142ania mo\u017ce zawiera\u0107 tylko litery, cyfry i znaki specjalne: kropk\u0119 (.), podkre\u015blenie (_), znak dolara ($) lub hash (#) dla wywo\u0142ania. Je\u015bli nazwa zawiera inne znaki, definicja dzia\u0142ania musi zosta\u0107 wywo\u0142ana za pomoc\u0105 funkcji wywo\u0142ania. Wi\u0119cej informacji znajduje si\u0119 w rozdziale <em>Inne funkcje<\/em> w dokumentacji <em>J\u0119zyk skryptowy systemu: Funkcje podstawowe<\/em>.<\/p>\n<p>Aby odr\u00f3\u017cni\u0107 wywo\u0142anie definicji dzia\u0142ania od wywo\u0142ania funkcji, znak <em>at (@)<\/em> jest umieszczany przed nazw\u0105 definicji dzia\u0142ania. Warto\u015b\u0107 musi by\u0107 przypisana do ka\u017cdego parametru definicji dzia\u0142ania, gdy jest ona wywo\u0142ywana. Parametry s\u0105 sortowane alfabetycznie. Zwracane warto\u015bci definicji dzia\u0142ania s\u0105 zwracane jako klasa. Poszczeg\u00f3lne warto\u015bci zwracane s\u0105 atrybutami tej klasy.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Definicja dzia\u0142ania <em>isPythagorean<\/em> ma parametry<em> A, B<\/em> i <em>C<\/em> typu <em>Number<\/em> oraz warto\u015b\u0107 zwracan\u0105 <em>RESULT<\/em> typu <em>Boolean<\/em>. Definicja dzia\u0142ania jest wywo\u0142ywana w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><em>var result := @isPythagoreanTheorem(A:=3, B:=4, C:=5).RESULT;<\/em><\/div><\/section>\n<p>Maksymalna g\u0142\u0119boko\u015b\u0107 rekurencji jest ograniczona. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale Ograniczenia z\u0142o\u017cono\u015bci wyra\u017ce\u0144.<\/p>\n<h4 id=\"polecenia\" ><span class=\"ez-toc-section\" id=\"Polecenia\"><\/span>Polecenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Polecenie to wyra\u017cenie wykonuj\u0105ce operacj\u0119, kt\u00f3ra nie zwraca wyniku. W j\u0119zyku skryptowym systemu polecenia s\u0105 oddzielone \u015brednikiem (;).<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>echo(definition:code);<\/em><\/p>\n<p><em>setMailRecipientsTo(&#8222;somebody@localhost.local&#8221;);<\/em><\/div><\/section>\n<p>W zale\u017cno\u015bci od kontekstu zastosowania mo\u017cna zdefiniowa\u0107 r\u00f3\u017cne polecenia. Poni\u017csze sekcje opisuj\u0105 polecenia pogrupowane wed\u0142ug kontekst\u00f3w zastosowania.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nawet je\u015bli polecenie nie ma warto\u015bci zwracanej, s\u0105 one opisane razem z funkcjami w dokumentacji J\u0119zyk skryptowy systemu: <em>Funkcje podstawowe, J\u0119zyk skryptowy systemu: Funkcje OLTP, J\u0119zyk skryptowy systemu: Funkcje workflow<\/em>.<\/div><\/section>\n<h5 id=\"przeplyw-sterowania-i-przypisywanie-zmiennych\" ><span class=\"ez-toc-section\" id=\"Przeplyw_sterowania_i_przypisywanie_zmiennych\"><\/span>Przep\u0142yw sterowania i przypisywanie zmiennych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Polecenia do sterowania przep\u0142ywem sterowania i przypisywania zmiennych s\u0105 wbudowane w j\u0119zyk skryptowy systemu.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 752px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\"><strong>Opis<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\"><strong>Sk\u0142adnia<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Deklaracja zmiennej (typ)<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">var &lt;VariableName&gt; as &lt;Type&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Deklaracja zmiennej (termin)<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">var &lt;VariableName&gt; := &lt;Expression&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Sta\u0142a deklaracja<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">const &lt;VariableName&gt; := &lt;Expression&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Deklaracja zestawu warto\u015bci<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">const &lt;VariableName&gt; as valueSet(&lt;Name&gt;)<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Definicja typu<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">type &lt;TypeName&gt; as &lt;Type&gt;<\/td>\n<\/tr>\n<tr style=\"height: 192px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 192px;\" width=\"180\">Definicja typu (klasa)<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 192px;\" width=\"360\">type &lt;TypeName&gt; as class {&lt;AttributeName&gt; jako &lt;Type&gt;;\n<p>&#8230;<\/p>\n<p>&lt;AttributeName&gt; as &lt;Type&gt;;<\/p>\n<p>}<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Przydzia\u0142<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">&lt;VariableName&gt; := &lt;Expression&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Polecenie warunkowe<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">if (&lt;Condition&gt;) &lt;Command&gt;<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\">Polecenie warunkowe z alternatyw\u0105<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\">if (&lt;Condition&gt;) &lt;Command&gt; else &lt;Command&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">P\u0119tla z warunkiem<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">while (&lt;Condition&gt;) &lt;Command&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">P\u0119tla nad wszystkimi elementami<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">for (&lt;VariableName&gt; : &lt;List&gt;) &lt;Command&gt;<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"180\">P\u0119tla nad wszystkimi elementami z wpisywaniem<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 46px;\" width=\"360\">for (&lt;VariableName&gt; as &lt;Type&gt; : &lt;List&gt;)&lt;Command&gt;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Zako\u0144cz polecenie<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">return<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"180\">Koniec funkcji<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"360\">return &lt;Expression&gt;<\/td>\n<\/tr>\n<tr style=\"height: 192px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 192px;\" width=\"180\">Blok instrukcji<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 192px;\" width=\"360\">{&lt;Command&gt;\n<p>&#8230;<\/p>\n<p>&lt;Command&gt;<\/p>\n<p>}<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>J\u0119zyk skryptowy systemu zawiera r\u00f3wnie\u017c funkcj\u0119 <em>if,<\/em> kt\u00f3ra s\u0142u\u017cy do okre\u015blania przep\u0142ywu sterowania w wyra\u017ceniu. Wi\u0119cej informacji i przyk\u0142ad\u00f3w mo\u017cna znale\u017a\u0107 w rozdziale <em>Inne funkcje<\/em> dokumentacji <em>J\u0119zyk skryptowy systemu: Funkcje podstawowe<\/em>.<\/p>\n<h5 id=\"stale\" ><span class=\"ez-toc-section\" id=\"Stale\"><\/span>Sta\u0142e<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Sta\u0142a mo\u017ce przyjmowa\u0107 tylko jedn\u0105 z g\u00f3ry okre\u015blon\u0105 warto\u015b\u0107. Sta\u0142e s\u0105 u\u017cywane, mi\u0119dzy innymi, w celu u\u0142atwienia korzystania z j\u0119zyka skryptowego systemu i uczynienia go bardziej zwartym.<\/p>\n<p>Sta\u0142e s\u0105 deklarowane podobnie jak zmienne z terminem. W przeciwie\u0144stwie do zmiennych, warto\u015b\u0107 sta\u0142ej nie mo\u017ce zosta\u0107 zmieniona po jej zadeklarowaniu.<\/p>\n<p>W przypadku bardziej z\u0142o\u017conych proces\u00f3w workflow zaleca si\u0119 zadeklarowanie sta\u0142ych globalnych w definicji procesu, za pomoc\u0105 kt\u00f3rych proces workflow mo\u017cna skonfigurowa\u0107 centralnie, tak aby definicje dzia\u0142ania poszczeg\u00f3lnych krok\u00f3w procesu nie musia\u0142y by\u0107 dostosowywane, je\u015bli to mo\u017cliwe.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p><em>\/** <\/em><br \/><em>* JOB_QUEUE is the name of the job queue for the batch job. <\/em><br \/><em>* If no job queue is specified in this constant then the <\/em><br \/><em>* default job queue from the Customizing function 'Workflow <\/em><br \/><em>* Management&#8217; is used. <\/em><br \/><em>*\/ <\/em><br \/><em>const JOB_QUEUE := &#8222;&#8221;;<\/em><\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">W przypadku tworzenia definicji proces\u00f3w w j\u0119zyku JavaScript mo\u017cna zadeklarowa\u0107 sta\u0142e globalne w definicji procesu jako zmienne, je\u015bli u\u017cywany silnik skryptowy nie zezwala na deklarowanie sta\u0142ych.<\/div><\/section>\n<h5 id=\"zmienne\" ><span class=\"ez-toc-section\" id=\"Zmienne\"><\/span>Zmienne<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Wszystkie u\u017cywane zmienne i sta\u0142e musz\u0105 by\u0107 zadeklarowane. Zmienne mog\u0105 by\u0107 deklarowane z typem lub warto\u015bci\u0105 pocz\u0105tkow\u0105. Je\u015bli okre\u015blono typ, zmienna ma warto\u015b\u0107 domy\u015bln\u0105 typu jako warto\u015b\u0107 pocz\u0105tkow\u0105. Je\u015bli zmienna jest zadeklarowana za pomoc\u0105 wyra\u017cenia, jako warto\u015b\u0107 ma warto\u015b\u0107 wynikow\u0105 wyra\u017cenia, a jako typ danych, jego typ danych.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Po zadeklarowaniu zmiennej n, n ma domy\u015bln\u0105 warto\u015b\u0107 0 dla liczb:<\/p>\n<p><em>var n as Number;<\/em><\/p>\n<p>Po zadeklarowaniu m, m ma warto\u015b\u0107 liczbow\u0105 6:<\/p>\n<p><em>var m := 1 + 5;<\/em><\/div><\/section>\n<p>Aby u\u0142atwi\u0107 odr\u00f3\u017cnienie sta\u0142ych od zmiennych, zaleca si\u0119, aby sta\u0142e zdefiniowane w definicjach proces\u00f3w by\u0142y zawsze deklarowane wielkimi literami, sta\u0142e zdefiniowane w definicjach dzia\u0142a\u0144 zaczyna\u0142y si\u0119 wielk\u0105 liter\u0105, a zmienne zaczyna\u0142y si\u0119 ma\u0142\u0105 liter\u0105.<\/p>\n<h5 id=\"valuesets\" ><span class=\"ez-toc-section\" id=\"ValueSets\"><\/span>ValueSets<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby u\u017cy\u0107 zestawu warto\u015bci, nale\u017cy zadeklarowa\u0107 go za pomoc\u0105 instrukcji <em>const &lt;VariableName&gt; as valueSet(&lt;Name&gt;)<\/em>, aby m\u00f3c p\u00f3\u017aniej uzyska\u0107 dost\u0119p do jego wpis\u00f3w. Deklaracja tworzy zmienn\u0105 typu <em>Class<\/em> i sta\u0142\u0105 z techniczn\u0105 nazw\u0105 wpisu i jego identyfikatorem dla ka\u017cdego wpisu zestawu warto\u015bci.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli zam\u00f3wienie sprzeda\u017cy, do kt\u00f3rego odwo\u0142uje si\u0119 parametr <em>parameters.object<\/em>, zostanie zwolnione, do dziennika zostanie wypisany ci\u0105g znak\u00f3w <em>RELEASED<\/em>:<\/p>\n<p><em>const OrderStatus as <\/em><br \/><em>valueSet(com.cisag.app.general.OrderStatus); <\/em><br \/><em>function create() <\/em><br \/><em>{ <\/em><br \/><em>if (parameters.object:status = OrderStatus.RELEASED) <\/em><br \/><em>echo(valueSetName(OrderStatus, parameters.object:status); <\/em><br \/><em>}<\/em><\/div><\/section>\n<h5 id=\"definicje-typow\" ><span class=\"ez-toc-section\" id=\"Definicje_typow\"><\/span>Definicje typ\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby upro\u015bci\u0107 spraw\u0119, mo\u017cna zadeklarowa\u0107 i u\u017cywa\u0107 w\u0142asnych typ\u00f3w danych w j\u0119zyku skryptowym systemu. U\u017cycie typ\u00f3w u\u0142atwia zrozumienie programu dzi\u0119ki lepszym opcjom abstrakcji. Typ musi by\u0107 zdefiniowany dla ka\u017cdego u\u017cycia klas. S\u0142owo kluczowe <em>class<\/em> mo\u017ce by\u0107 u\u017cywane tylko z deklaracj\u0105 typu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Definicja i wykorzystanie r\u00f3\u017cnych typ\u00f3w danych:<\/p>\n<p><em>type PartnerCode as String; <\/em><br \/><em>type PartnerCodeList as PartnerCode[]; <\/em><br \/><em>type WeekdaySum as Number[7]; <\/em><br \/><em>var code as PartnerCode; <\/em><br \/><em>code := &#8222;4711&#8221;; <\/em><\/p>\n<p><em>Definicja i zastosowanie klasy:<\/em><\/p>\n<p><em>type Bike as class { <\/em><br \/><em>name as String; <\/em><br \/><em>weight as Number; <\/em><br \/><em>chainset as String; <\/em><br \/><em>} <\/em><br \/><em>var myBike := new(Bike); <\/em><br \/><em>myBike.name := &#8222;Niner RLT&#8221;; <\/em><br \/><em>myBike.weight := 9250; <\/em><br \/><em>myBike.chainset := &#8222;Shimano 105&#8221;;<\/em><\/div><\/section>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Definicje typ\u00f3w s\u0105 mo\u017cliwe tylko w definicjach dzia\u0142a\u0144. Nie s\u0105 one dozwolone w deklaracjach definicji procesu.<\/div><\/section>\n<h5 id=\"przydzialy\" ><span class=\"ez-toc-section\" id=\"Przydzialy\"><\/span>Przydzia\u0142y<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Podczas przypisywania, warto\u015b\u0107 mo\u017ce by\u0107 przypisana do zmiennej, atrybutu klasy, wpisu na li\u015bcie lub HashMap. Element, do kt\u00f3rego co\u015b jest przypisywane, znajduje si\u0119 po lewej stronie przypisania. Przypisana warto\u015b\u0107 jest obliczana na podstawie terminu po prawej stronie przypisania.<\/p>\n<p>Ka\u017cda u\u017cywana zmienna musi by\u0107 zadeklarowana i dlatego ma ustalony typ. Tylko warto\u015bci tego typu mog\u0105 by\u0107 przypisane do zmiennej.<\/p>\n<p>Poni\u017cej znajduje si\u0119 kilka przyk\u0142ad\u00f3w przypisywania warto\u015bci do zmiennej.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p>Po wykonaniu tego polecenia zmienna x ma warto\u015b\u0107 2:<\/p>\n<p><em>x := 2;<\/em><\/p>\n<p>Po wykonaniu tego polecenia zmienna x ma warto\u015b\u0107 7:<\/p>\n<p><em>x := x * x + 3;<\/em><\/p>\n<p>Po wykonaniu tych polece\u0144 zmienna l zawiera pole z elementami <em>Hello<\/em> i <em>World<\/em><\/p>\n<p><em>var l as String[2];<\/em><\/p>\n<p><em>l[0] := &#8222;Hello&#8221;;<\/em><\/p>\n<p><em>l[1] := &#8222;World&#8221;;<\/em><\/p>\n<p>Poni\u017csze dwa polecenia s\u0105 r\u00f3wnowa\u017cne i przypisuj\u0105 warto\u015b\u0107 X do klucza a w HashMap c:<\/p>\n<p><em>var c as HashMap;<\/em><\/p>\n<p><em>c.a := &#8222;X&#8221;;<\/em><\/p>\n<p><em>c[&#8222;a&#8221;] := &#8222;X&#8221;;<\/em><\/div><\/section>\n<h5 id=\"bloki-polecen\" ><span class=\"ez-toc-section\" id=\"Bloki_polecen\"><\/span>Bloki polece\u0144\u00a0<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Nawiasy klamrowe mog\u0105 by\u0107 u\u017cywane do \u0142\u0105czenia sekwencji polece\u0144 w jedno polecenie w bloku instrukcji. Wszystkie polecenia w bloku instrukcji s\u0105 wykonywane w kolejno\u015bci okre\u015blonej w bloku. Je\u015bli polecenie zg\u0142asza b\u0142\u0105d podczas wykonywania, ca\u0142y blok instrukcji ko\u0144czy si\u0119 b\u0142\u0119dem. Wiele polece\u0144 i funkcji zg\u0142asza b\u0142\u0105d, je\u015bli otrzymaj\u0105 warto\u015b\u0107 zero jako parametr.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Po wykonaniu tego bloku zmienna x ma warto\u015b\u0107 7:<\/p>\n<p><em>{<\/em><\/p>\n<p><em>x := 2;<\/em><\/p>\n<p><em>x := x * x + 3;<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h5 id=\"polecenie-warunkowe-if\" ><span class=\"ez-toc-section\" id=\"Polecenie_warunkowe_if\"><\/span>Polecenie warunkowe (if)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Polecenie warunkowe <em>if<\/em> wykonuje polecenie w zale\u017cno\u015bci od wyniku warunku. Je\u015bli warunek jest prawdziwy, polecenie jest wykonywane. Je\u015bli warunek nie jest prawdziwy, polecenie jest pomijane.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Po wykonaniu tych polece\u0144 zmienna x ma warto\u015b\u0107 0:<\/p>\n<p><em>x := -13;<\/em><\/p>\n<p><em>if (x &lt; 0)<\/em><\/p>\n<p><em>x := 0;<\/em><\/div><\/section>\n<h5 id=\"polecenie-warunkowe-z-alternatywa-if-else\" ><span class=\"ez-toc-section\" id=\"Polecenie_warunkowe_z_alternatywa_if_%E2%80%A6_else\"><\/span>Polecenie warunkowe z alternatyw\u0105 (if &#8230; else )<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Polecenie warunkowe z alternatyw\u0105 <em>if else<\/em> wykonuje jedno z dw\u00f3ch alternatywnych polece\u0144 w zale\u017cno\u015bci od wyniku warunku. Je\u015bli warunek jest prawdziwy, polecenie jest wykonywane przed <em>else<\/em>. Je\u015bli warunek nie jest prawdziwy, polecenie przed<em> else<\/em> jest pomijane i wykonywane jest polecenie po <em>else<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Po wykonaniu tych polece\u0144 zmienna x ma warto\u015b\u0107 1:<\/p>\n<p><em>x := 13;<\/em><\/p>\n<p><em>if (x &lt; 0) {<\/em><\/p>\n<p><em>x := -1;<\/em><\/p>\n<p><em>} else if (x &gt; 0) {<\/em><\/p>\n<p><em>x := 1;<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h5 id=\"petla-z-warunkiem-while\" ><span class=\"ez-toc-section\" id=\"Petla_z_warunkiem_while\"><\/span>P\u0119tla z warunkiem (while)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>P\u0119tla z warunkiem <em>while<\/em> wykonuje polecenie tak d\u0142ugo, jak d\u0142ugo spe\u0142niony jest warunek. Warunek jest sprawdzany przed ka\u017cdym wykonaniem polecenia, czyli w szczeg\u00f3lno\u015bci przed pierwszym wykonaniem. Je\u015bli warunek nie jest spe\u0142niony, polecenie nie jest wykonywane.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Poni\u017csze polecenie oblicza sum\u0119 liczb od 1 do 10:<\/p>\n<p><em>var i := 10;<\/em><\/p>\n<p><em>var r := 0;<\/em><\/p>\n<p><em>while (i &gt; 0) {<\/em><\/p>\n<p><em>r := r + i:<\/em><\/p>\n<p><em>i := i &#8211; 1;<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<p>Liczba przebieg\u00f3w w p\u0119tli <em>while<\/em> jest ograniczona. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale <em>Ograniczenie z\u0142o\u017cono\u015bci wydarze\u0144<\/em>.<\/p>\n<h5 id=\"petla-po-wszystkich-elementach-for\" ><span class=\"ez-toc-section\" id=\"Petla_po_wszystkich_elementach_for\"><\/span>P\u0119tla po wszystkich elementach (for)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>P\u0119tla <em>for<\/em> wykonuje polecenie dla wszystkich element\u00f3w listy. Kolejno\u015b\u0107 element\u00f3w na li\u015bcie jest zachowana. Je\u015bli lista nie zawiera \u017cadnych element\u00f3w, polecenie nie jest wykonywane.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Poni\u017csze polecenie oblicza sum\u0119 liczb od 1 do 10.<\/p>\n<p><em>var l := list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);<\/em><\/p>\n<p><em>var r := 0;<\/em><\/p>\n<p><em>for (e : l) {<\/em><\/p>\n<p><em>r := r + e:<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h5 id=\"petla-po-wszystkich-elementach-for-as\" ><span class=\"ez-toc-section\" id=\"Petla_po_wszystkich_elementach_for_%E2%80%A6_as\"><\/span>P\u0119tla po wszystkich elementach (for &#8230; as)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>P\u0119tla <em>for<\/em> wykonuje polecenie dla wszystkich element\u00f3w listy. Kolejno\u015b\u0107 element\u00f3w na li\u015bcie jest zachowana. Element mo\u017cna przekonwertowa\u0107 na okre\u015blony typ za pomoc\u0105 <em>as<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Poni\u017csze polecenia wy\u015bwietlaj\u0105 10 element\u00f3w na konsoli:<\/p>\n<p><em>var objects := getCisObjectList(<\/em><\/p>\n<p><em>&#8222;SELECT FROM com.cisag.app.general.obj.Item o&#8221;, list(), 10);<\/em><\/p>\n<p><em>for (item as CisObject(com.cisag.app.general.obj.Item) : objects)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>echo(item:number);<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h5 id=\"polecenie-koncowe-return\" ><span class=\"ez-toc-section\" id=\"Polecenie_koncowe_return\"><\/span>Polecenie ko\u0144cowe (return)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Polecenie<em> return<\/em> ko\u0144czy aktualnie wykonywan\u0105 funkcj\u0119.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>function validate(state as Number) <\/em><br \/><em>{ <\/em><br \/><em>if (state = State.CANCELED) <\/em><br \/><em>return; <\/em><br \/><em>if (results.COMMENT = &#8222;&#8221;) { <\/em><br \/><em>sendMessage(results.COMMENT_id, &#8222;ERROR&#8221;, &#8222;Comment is <\/em><br \/><em>missing.&#8221;); <\/em><br \/><em>return; <\/em><br \/><em>} <\/em><br \/><em>if (length(results.COMMENT) &lt; 20) { <\/em><br \/><em>sendMessage(results.COMMENT_id, &#8222;WARNING&#8221;, &#8222;Comment should <\/em><br \/><em>be at least 20 characters.&#8221;); <\/em><br \/><em>return; <\/em><br \/><em>} <\/em><br \/><em>}<\/em><\/div><\/section>\n<h5 id=\"wyjscie-z-funkcji-return-z-wartoscia-zwrotna\" ><span class=\"ez-toc-section\" id=\"Wyjscie_z_funkcji_return_z_wartoscia_zwrotna\"><\/span>Wyj\u015bcie z funkcji (return z warto\u015bci\u0105 zwrotn\u0105)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Polecenie <em>return<\/em> ko\u0144czy aktualnie wykonywan\u0105 funkcj\u0119 i zwraca warto\u015b\u0107 zwracan\u0105 jako wynik funkcji.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Poni\u017csza funkcja \u0142\u0105czy list\u0119 ci\u0105g\u00f3w znak\u00f3w w ci\u0105g znak\u00f3w przy u\u017cyciu separatora. Polecenie return <em>r_text<\/em> ko\u0144czy dzia\u0142anie funkcji i przekazuje wynik do wywo\u0142uj\u0105cego.<\/p>\n<p><em>function join(p_textList as String[], p_separator as String) as String<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>var r_text as String;<\/em><\/p>\n<p><em>for (word as String : p_textList)<\/em><\/p>\n<p><em>r_text := r_text + p_separator + word;<\/em><\/p>\n<p><em>if (r_text &lt;&gt; &#8222;&#8221;)<\/em><\/p>\n<p><em>r_text := substring(r_text, length(p_separator));<\/em><\/p>\n<p><em>return r_text;<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h4 id=\"funkcje\" ><span class=\"ez-toc-section\" id=\"Funkcje\"><\/span>Funkcje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<h5 id=\"funkcje-jezyka-skryptowego-systemu\" ><span class=\"ez-toc-section\" id=\"Funkcje_jezyka_skryptowego_systemu\"><\/span>Funkcje j\u0119zyka skryptowego systemu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>J\u0119zyk skryptowy systemu udost\u0119pnia wiele funkcji. Aby dzia\u0142a\u0107 poprawnie, funkcje wymagaj\u0105 odpowiedniego \u015brodowiska, tj. musz\u0105 by\u0107 spe\u0142nione pewne warunki ramowe. Rozr\u00f3\u017cnia si\u0119 baz\u0119 danych z jednej strony i to, czy dzia\u0142anie jest wymagane, czy nie, z drugiej strony. Je\u015bli na przyk\u0142ad funkcja ma by\u0107 u\u017cywana w warunku przej\u015bcia definicji dzia\u0142ania, funkcja nie mo\u017ce uzyska\u0107 dost\u0119pu do dzia\u0142ania, poniewa\u017c jest ono generowane dopiero w p\u00f3\u017aniejszym czasie.<\/p>\n<p>Zakres funkcji jest definiowany w konstruktorze funkcji. W klasie ParserFunctions mo\u017cliwe zakresy s\u0105 zdefiniowane w postaci sta\u0142ych.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\"><strong>Kontekst u\u017cytkowania<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">SYS_SCRIPT_OLTP<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany w obiektach skryptowych, indywidualnych kontrolach i indywidualnych implementacjach hook\u00f3w w kontek\u015bcie bazy danych OLTP.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_TRANSITION_REPOSITORY<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany w warunkach przej\u015bcia i w funkcji tworzenia definicji dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych repozytorium.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_TRANSITION_OLTP<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany w warunkach przej\u015bcia i w funkcji tworzenia definicji dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych OLTP.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_ACTIVITY_REPOSITORY<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany w wyra\u017ceniach i deklaracjach, ale nie w warunkach przej\u015bcia definicji dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych repozytorium.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_ACTIVITY_OLTP<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany w wyra\u017ceniach i deklaracjach, ale nie w warunkach przej\u015bcia definicji dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych OLTP.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_REPOSITORY<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Odpowiada kontekstom u\u017cycia <em>WF_TRANSITION_REPOSITORY<\/em> i <em>WF_ACTIVITY_REPOSITORY<\/em>. Mo\u017ce by\u0107 u\u017cywany w definicjach dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych repozytorium.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">WF_OLTP<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Odpowiada kontekstom u\u017cycia <em>WF_TRANSITION_OLTP<\/em> i <em>WF_ACTIVITY_OLTP<\/em>. Mo\u017ce by\u0107 u\u017cywany w definicjach dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych OLTP.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">OLTP<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Odpowiada kontekstom u\u017cycia<em> WF_SYS_SCRIPT_OLTP<\/em> i <em>WF_OLTP<\/em>. Oznacza to, \u017ce kontekst u\u017cycia nie wymaga definicji dzia\u0142a\u0144, ale wymaga bazy danych OLTP. Obejmuje to funkcje takie jak <em>loadPartner<\/em> i <em>loadItem<\/em>. Mo\u017ce by\u0107 u\u017cywany w definicjach dzia\u0142a\u0144 dla dzia\u0142a\u0144 w bazie danych OLTP, a tak\u017ce w obiektach skrypt\u00f3w, indywidualnych kontrolach i indywidualnych implementacjach hook\u00f3w w kontek\u015bcie bazy danych OLTP.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"231\">ALL<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"309\">Mo\u017ce by\u0107 u\u017cywany we wszystkich kontekstach, tj. nie jest wymagana definicja dzia\u0142ania ani baza danych OLTP. Obejmuje to funkcje takie jak <em>createCisDate, getByPrimaryKey<\/em> i <em>getCisObjectList<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dalsze informacje i przyk\u0142ady funkcji i polece\u0144 mo\u017cna znale\u017a\u0107 w poni\u017cszej dokumentacji:<\/p>\n<ul>\n<li><strong>Systemowy j\u0119zyk skryptowy: Funkcje podstawowe<\/strong><\/li>\n<\/ul>\n<p>Funkcje kontekstu u\u017cytkowania ALL.<\/p>\n<ul>\n<li><strong>Systemowy j\u0119zyk skryptowy: Funkcje OLTP<\/strong><\/li>\n<\/ul>\n<p>Funkcje kontekstu u\u017cycia OLTP lub SYS_SCRIPT_OLTP.<\/p>\n<ul>\n<li><strong>Systemowy j\u0119zyk skryptowy: Funkcje workflow<\/strong><\/li>\n<\/ul>\n<p>Funkcje kontekstu u\u017cycia WF_REPOSITORY, WF_OLTP, WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP, WF_TRANSITION_REPOSITORY lub WF_TRANSITION_OLTP.<\/p>\n<h5 id=\"wlasne-deklaracje-funkcji\" ><span class=\"ez-toc-section\" id=\"Wlasne_deklaracje_funkcji\"><\/span>W\u0142asne deklaracje funkcji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Funkcje podsumowuj\u0105 r\u00f3\u017cne elementy j\u0119zyka skryptowego systemu w celu wyra\u017cenia z\u0142o\u017conych relacji. Je\u015bli funkcja nie zwraca warto\u015bci, jej warto\u015b\u0107 wynosi <em>null<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p><em>function isPythagoreanTheorem(a as Number, b as Number, c as <\/em><br \/><em>Number) as Boolean <\/em><br \/><em>{ <\/em><br \/><em>return a * a + b * b = c * c; <\/em><br \/><em>} <\/em><br \/><em>function create() <\/em><br \/><em>{ <\/em><br \/><em>var tryPythagoreanTheorem := isPythagoreanTheorem(3, 4, 5) <\/em><br \/><em>}<\/em><\/div><\/section>\n<p>Funkcje mog\u0105 by\u0107 wywo\u0142ywane w terminach. Funkcje obliczaj\u0105 wynik na podstawie parametr\u00f3w wej\u015bciowych. W zale\u017cno\u015bci od danej funkcji istniej\u0105 wymagania wst\u0119pne dotycz\u0105ce liczby i typu parametr\u00f3w wej\u015bciowych. Wymagania te s\u0105 wyra\u017cone w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p>niech <em>f<\/em> b\u0119dzie funkcj\u0105, kt\u00f3rej wynik ma typ danych <em>R<\/em> i kt\u00f3ra oczekuje typ\u00f3w danych od <em>D1 <\/em>do<em> Dn<\/em> od swoich parametr\u00f3w od <em>p1<\/em> do <em>pn<\/em>. Zapisuje si\u0119 to nast\u0119puj\u0105co:<\/p>\n<p><em>R f(D1 p1, &#8230;, Dn pn)<\/em><\/p>\n<p>Je\u015bli typ danych jest ca\u0142kowicie wolny, u\u017cywany jest typ danych <em>Unknown<\/em>.<\/p>\n<h3 id=\"deklaracje\" ><span class=\"ez-toc-section\" id=\"Deklaracje-2\"><\/span>Deklaracje<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W tym rozdziale opisano, gdzie mo\u017cna wprowadza\u0107 i u\u017cywa\u0107 deklaracji, kt\u00f3re wst\u0119pnie przypisane funkcje s\u0105 dost\u0119pne w ka\u017cdym przypadku oraz kolejno\u015b\u0107 oceny.<\/p>\n<h4 id=\"deklaracje-w-definicjach-dzialan\" ><span class=\"ez-toc-section\" id=\"Deklaracje_w_definicjach_dzialan\"><\/span>Deklaracje w definicjach dzia\u0142a\u0144<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Deklaracje definicji dzia\u0142a\u0144 maj\u0105 nast\u0119puj\u0105ce wst\u0119pnie przypisane funkcje:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\"><strong>Funkcja<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">create<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja <em>create<\/em> jest wywo\u0142ywana podczas tworzenia dzia\u0142ania. Poniewa\u017c dzia\u0142anie nie zosta\u0142o jeszcze utworzone w momencie wywo\u0142ania, informacje o dzia\u0142aniu s\u0105 dost\u0119pne tylko w ograniczonym zakresie w funkcji <em>create<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">applyDefaults<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja <em>applyDefaults<\/em> jest wywo\u0142ywana po otwarciu okna dialogowego <em>Wyniki dzia\u0142ania<\/em>. W przypadku w\u0119z\u0142a pocz\u0105tkowego z wynikiem dzia\u0142ania dialog, a tym samym funkcja <em>applyDefaults<\/em>, jest wywo\u0142ywana przed funkcj\u0105 <em>create<\/em>. W przypadku wszystkich innych dzia\u0142a\u0144 wywo\u0142anie nast\u0119puje dopiero po wywo\u0142aniu funkcji <em>create<\/em>. Poniewa\u017c celem funkcji <em>applyDefaults<\/em> jest inicjalizacja p\u00f3l okna dialogowego <em>Wyniki dzia\u0142ania<\/em> i wst\u0119pne przypisanie warto\u015bci, \u015brodowisko nie jest trwale zapisywane po zako\u0144czeniu wywo\u0142ania. Wszelkie przypisania zmiennych w ramach funkcji <em>applyDefaults<\/em> nie s\u0105 zatem dost\u0119pne dla innych funkcji.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">validate<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja walidacji jest wywo\u0142ywana w oknie dialogowym <em>Wyniki dzia\u0142ania<\/em> przed zaakceptowaniem wynik\u00f3w dzia\u0142ania. Funkcja ta jest r\u00f3wnie\u017c wywo\u0142ywana podczas zapisywania dzia\u0142ania w aplikacji <em>Dzia\u0142ania<\/em>. Parametr stanu wskazuje przysz\u0142y status dzia\u0142ania.\n<p>Funkcja <em>validate<\/em> zwraca warto\u015b\u0107 typu danych <em>Boolean<\/em>. Je\u015bli zwracana warto\u015b\u0107 jest <em>false<\/em>, wyniki dzia\u0142a\u0144 nie mog\u0105 zosta\u0107 zaakceptowane. W w\u0119\u017ale startowym wy\u015bwietlenie komunikatu o b\u0142\u0119dzie za pomoc\u0105 polecenia <em>sendMessage<\/em> uniemo\u017cliwia zaakceptowanie wynik\u00f3w dzia\u0142a\u0144. Je\u015bli u\u017cytkownik zamknie okno dialogowe <em>Wyniki dzia\u0142ania<\/em> za pomoc\u0105 przycisku<strong> [Usu\u0144]<\/strong>, \u017cadne dzia\u0142anie nie zostanie utworzone.<\/p>\n<p>Poniewa\u017c celem funkcji <em>validate<\/em> jest sprawdzenie danych wprowadzonych przez u\u017cytkownika w oknie dialogowym <em>Wyniki dzia\u0142ania<\/em>, \u015brodowisko nie jest zapisywane na sta\u0142e po zako\u0144czeniu wywo\u0142ania. Wszelkie przypisania zmiennych w ramach funkcji <em>validate<\/em> nie s\u0105 zatem dost\u0119pne dla innych funkcji.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">validatePrecondition<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja <em>validatePrecondition<\/em> jest wywo\u0142ywana, gdy zmienia si\u0119 status dzia\u0142ania, je\u015bli w polu <em>Prognoza<\/em> wybrano warto\u015b\u0107 <em>Deklaracja<\/em>. Funkcja ta jest r\u00f3wnie\u017c wywo\u0142ywana, gdy dzia\u0142anie jest zapisywane, nawet je\u015bli status nie ulega zmianie. Parametr stanu wskazuje przysz\u0142y status dzia\u0142ania.\n<p>Funkcja <em>validatePrecondition<\/em> zwraca warto\u015b\u0107 typu danych <em>Boolean<\/em>. Je\u015bli warunek wst\u0119pny ma warto\u015b\u0107 <em>false<\/em>, dzia\u0142anie jest automatycznie ko\u0144czone bez przetwarzania. \u017badne dzia\u0142anie nie zostanie utworzona w w\u0119\u017ale pocz\u0105tkowym, je\u015bli funkcja wy\u015bwietli komunikat o b\u0142\u0119dzie za pomoc\u0105 polecenia <em>sendMessage<\/em>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">validatePostcondition<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja <em>validatePostcondition<\/em> jest wywo\u0142ywana przed zako\u0144czeniem dzia\u0142ania, je\u015bli w polu <em>Warunek ko\u0144cowy<\/em> wybrano warto\u015b\u0107 <em>Deklaracja<\/em>. Parametr stanu wskazuje przysz\u0142y status dzia\u0142ania.\n<p>Funkcja <em>validatePostcondition<\/em> zwraca warto\u015b\u0107 typu danych <em>Boolean<\/em>. Je\u015bli warunek ko\u0144cowy wynosi <em>false<\/em>, dzia\u0142anie nie mo\u017ce zosta\u0107 zako\u0144czone. Dzia\u0142anie nie mo\u017ce zosta\u0107 zako\u0144czone, nawet je\u015bli funkcja wysy\u0142a komunikat o b\u0142\u0119dzie za pomoc\u0105 polecenia <em>sendMessage<\/em>.<\/p>\n<p>Funkcja <em>validatePostcondition<\/em> jest wywo\u0142ywana tylko wtedy, gdy operatorem jest u\u017cytkownik. Nie jest ona wywo\u0142ywana w przypadku dzia\u0142a\u0144 przetwarzanych przez system lub zlecenie przetwarzania.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">validateSeriesCondition<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja v<em>alidateSeriesCondition<\/em> jest wywo\u0142ywana zgodnie z wzorcem serii zapisanym w szablonie serii, je\u015bli w polu <em>Warunek serii<\/em> wybrano warto\u015b\u0107 <em>Deklaracja<\/em>. Funkcja <em>validateSeriesCondition<\/em> zwraca warto\u015b\u0107 zwrotn\u0105 typu danych <em>Boolean<\/em>. Je\u015bli warunek serii wskazuje <em>false<\/em>, seria jest anulowana i nie s\u0105 generowane \u017cadne dalsze dzia\u0142ania serii.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">validateSelection<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja <em>validateSelection<\/em> jest wywo\u0142ywana w dzia\u0142aniu typu <em>Warunek wst\u0119pny<\/em>, gdy u\u017cytkownik \u0142\u0105czy obiekt biznesowy z dzia\u0142aniem. Funkcja <em>validateSelection<\/em> zwraca warto\u015b\u0107 typu danych <em>Boolean<\/em>. Je\u015bli warunek wyboru wskazuje<em> false<\/em>, link jest odrzucany z komunikatem o b\u0142\u0119dzie. Link jest r\u00f3wnie\u017c odrzucany, je\u015bli funkcja wysy\u0142a komunikat o b\u0142\u0119dzie za pomoc\u0105 polecenia <em>sendMessage<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"180\">close<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"360\">Funkcja zamkni\u0119cia jest wywo\u0142ywana, gdy dzia\u0142anie zostanie zako\u0144czone lub zako\u0144czone bez przetwarzania. Parametr stanu wskazuje przysz\u0142y status dzia\u0142ania.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"deklaracje-w-definicjach-procesow\" ><span class=\"ez-toc-section\" id=\"Deklaracje_w_definicjach_procesow\"><\/span>Deklaracje w definicjach proces\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Deklaracje definicji procesu s\u0105 dodawane do globalnych deklaracji definicji dzia\u0142ania przed ich ocen\u0105. Z tego powodu deklaracje definicji procesu mog\u0105 zawiera\u0107 tylko deklaracje, kt\u00f3re mog\u0105 by\u0107 r\u00f3wnie\u017c zadeklarowane poza deklaracjami definicji dzia\u0142a\u0144.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Sta\u0142a do konfiguracji procesu i funkcja s\u0105 zdefiniowane na zak\u0142adce <em>Deklaracje<\/em> definicji procesu.<\/p>\n<p><em>const MaxAmount := &#8222;123&#8221;;<\/em><\/p>\n<p><em>function helloWorld () as String<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>return &#8222;Hello World!&#8221;;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Sta\u0142a<em> MaxAmount<\/em> i funkcja <em>helloWorld<\/em> mog\u0105 by\u0107 u\u017cywane bez ogranicze\u0144 we wszystkich definicjach dzia\u0142a\u0144 definicji procesu, kt\u00f3re u\u017cywaj\u0105 tego samego j\u0119zyka skryptowego co definicja procesu.<\/div><\/section>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce mog\u0105 istnie\u0107 dalsze ograniczenia w zale\u017cno\u015bci od u\u017cywanego silnika skryptowego. Na przyk\u0142ad silnik JavaScript <em>Nashorn<\/em> nie pozwala na deklarowanie sta\u0142ych.<\/p>\n<p>Nale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107, \u017ce oddzielna definicja typu (klasa) zadeklarowana w definicji procesu nie mo\u017ce by\u0107 u\u017cywana w definicjach dzia\u0142a\u0144.<\/p>\n<h4 id=\"kolejnosc-oceny-w-definicjach-dzialania\" ><span class=\"ez-toc-section\" id=\"Kolejnosc_oceny_w_definicjach_dzialania\"><\/span>Kolejno\u015b\u0107 oceny w definicjach dzia\u0142ania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Gdy nowe dzia\u0142anie jest tworzone z powodu zdarzenia, \u015brodowisko, w kt\u00f3rym wykonywane s\u0105 warunki, polecenia i warunki, jest inicjowane warto\u015bciami zmiennych okre\u015blonymi przez zdarzenie. Je\u015bli aktywowana definicja\u00a0 dzia\u0142ania otrzyma zdarzenie, wyra\u017cenia tej definicji dzia\u0142ania s\u0105 oceniane w kolejno\u015bci opisanej poni\u017cej.<\/p>\n<h5 id=\"w-wezle-startowym\" ><span class=\"ez-toc-section\" id=\"W_wezle_startowym\"><\/span>W w\u0119\u017ale startowym<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Podczas tworzenia dzia\u0142ania dla w\u0119z\u0142a pocz\u0105tkowego funkcje s\u0105 wywo\u0142ywane w nast\u0119puj\u0105cej kolejno\u015bci:<\/p>\n<ol>\n<li>Globalne deklaracje definicji procesu<\/li>\n<li>Globalne deklaracje definicji dzia\u0142ania (poza funkcjami)<\/li>\n<li>applyDefaults<\/li>\n<li>validate<\/li>\n<li>create<\/li>\n<li>validatePrecondition<\/li>\n<li>close<\/li>\n<\/ol>\n<p>Funkcje<em> applyDefaults<\/em> i <em>validate<\/em> s\u0105 wywo\u0142ywane tylko wtedy, gdy definicja dzia\u0142ania ma zdarzenie dzia\u0142ania, a proces jest uruchamiany r\u0119cznie, tj. dla typu zdarzenia <em>Akcja u\u017cytkownika<\/em> lub dla w\u0119z\u0142\u00f3w startowych bez definicji zdarzenia. Te dwie funkcje nie s\u0105 wywo\u0142ywane dla typ\u00f3w zdarze\u0144 <em>Zaprogramowane zdarzenie<\/em> i <em>Jednostka biznesowa<\/em>.<\/p>\n<h5 id=\"ogolne\" ><span class=\"ez-toc-section\" id=\"Ogolne\"><\/span>Og\u00f3lne<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli nie jest to w\u0119ze\u0142 pocz\u0105tkowy, funkcje s\u0105 wywo\u0142ywane w nast\u0119puj\u0105cej kolejno\u015bci:<\/p>\n<ol>\n<li>Globalne deklaracje definicji procesu<\/li>\n<li>Globalne deklaracje definicji dzia\u0142ania (poza funkcjami)<\/li>\n<li>Stan przej\u015bciowy<\/li>\n<li>create<\/li>\n<li>Parametry aplikacji<\/li>\n<li>Wydruk dla operator\u00f3w<\/li>\n<li>validatePrecondition<\/li>\n<li>applyDefaults<\/li>\n<li>validate<\/li>\n<li>validatePostcondition<\/li>\n<li>close<\/li>\n<\/ol>\n<p>Funkcja <em>validatePrecondition<\/em> jest wywo\u0142ywana za ka\u017cdym razem, gdy zmienia si\u0119 stan dzia\u0142ania, tj. zwykle jest wywo\u0142ywana kilka razy.<\/p>\n<p>Funkcje <em>applyDefaults<\/em> i <em>validate<\/em> s\u0105 wywo\u0142ywane tylko wtedy, gdy definicja dzia\u0142ania ma wynik dzia\u0142ania, a operatorem jest u\u017cytkownik. Je\u015bli dzia\u0142anie jest zako\u0144czone przez aplikacj\u0119 typu lista, okno dialogowe wynik\u00f3w dzia\u0142ania nie jest otwierane i \u017cadna z funkcji nie jest wywo\u0142ywana.<\/p>\n<p>Je\u015bli operatorem dzia\u0142ania nie jest u\u017cytkownik, ale system lub zlecenie przetwarzania, funkcja <em>validatePostcondition<\/em> nie jest wywo\u0142ywana.<\/p>\n<h4 id=\"polecenia\" ><span class=\"ez-toc-section\" id=\"Polecenia-2\"><\/span>Polecenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Definicje dzia\u0142ania zarejestrowane w wersji 5.1 lub wcze\u015bniejszej mog\u0105 zawiera\u0107 polecenia zamiast deklaracji. Polecenia s\u0105 wykonywane podczas tworzenia dzia\u0142ania i odpowiadaj\u0105 w przybli\u017ceniu funkcji <em>create<\/em>. Definicje dzia\u0142ania u\u017cywaj\u0105ce polece\u0144 nie mog\u0105 wykonywa\u0107 skrypt\u00f3w podczas wprowadzania zdarze\u0144 i ko\u0144czenia dzia\u0142ania. Dlatego zaleca si\u0119 przekszta\u0142cenie polece\u0144 w deklaracje.<\/p>\n<p>W tym celu nale\u017cy skopiowa\u0107 skrypt z zak\u0142adki <em>Polecenia<\/em> do funkcji <em>create<\/em> na zak\u0142adce <em>Deklaracje<\/em> i usun\u0105\u0107 skrypt z zak\u0142adki <em>Polecenia<\/em>. Po zapisaniu definicji dzia\u0142ania karta<em> Polecenia<\/em> zostanie ukryta, gdy jej pole edytora b\u0119dzie puste.<\/p>\n<p>Poniewa\u017c sta\u0142e i zmienne zadeklarowane na zak\u0142adce <em>Polecenia<\/em> s\u0105 dost\u0119pne we wszystkich polach definicji dzia\u0142ania, nale\u017cy r\u00f3wnie\u017c zadeklarowa\u0107 wszystkie sta\u0142e, zmienne i definicje typ\u00f3w, kt\u00f3re s\u0105 u\u017cywane w innych polach definicji dzia\u0142ania, np. w warunku wst\u0119pnym lub w polu parametr\u00f3w aplikacji, poza funkcj\u0105 tworzenia.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Podczas wybierania zam\u00f3wienia sprzeda\u017cy stara definicja dzia\u0142ania tworzy dzia\u0142anie dla odpowiedzialnego pracownika klienta, aby m\u00f3g\u0142 on powiadomi\u0107 klienta. Dzia\u0142anie otwiera aplikacj\u0119 <em>Partnerzy<\/em>, aby wy\u015bwietli\u0107 dane kontaktowe klienta.<\/p>\n<p>Poni\u017cszy skrypt jest przechowywany na zak\u0142adce<em> Polecenia<\/em>:<\/p>\n<p><em>var editors as Guid[];<\/em><\/p>\n<p><em>var customer := parameters.object-&gt;CustomerData-&gt;CustomerPartner;<\/em><\/p>\n<p><em>var responsible := loadTargetsOfPartnerRelations(customer:guid, parameters.object-&gt;DeliveryPartnerData-&gt;Organisation:guid, &#8222;Responsible&#8221;);<\/em><\/p>\n<p><em>for (r : responsible) {<\/em><\/p>\n<p><em>editors := union(editors, resolvePartner(r:guid));<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Zmienna <em>editors<\/em> jest u\u017cywana jako wyra\u017cenie operatora. Zmienna <em>customer<\/em> jest u\u017cywana jako warto\u015b\u0107 parametru<em> Partner<\/em> aplikacji <em>com.cisag.app.general.partner.ui.PartnerMaintenance<\/em>.<\/p>\n<p>Aby przekszta\u0142ci\u0107 polecenia w deklaracje, deklaracja edytor\u00f3w i zmiennych klienta jest umieszczana poza funkcj\u0105 <em>create<\/em>.<\/p>\n<p><em>const State as valueSet(com.cisag.sys.workflow.ActivityState);<\/em><\/p>\n<p><em>var editors as Guid[];<\/em><\/p>\n<p><em>var customer := parameters.object-&gt;CustomerData-&gt;CustomerPartner;<\/em><\/p>\n<p><em>function create()<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>var responsible := loadTargetsOfPartnerRelations(customer:guid, parameters.object-&gt;DeliveryPartnerData-&gt;Organisation:guid, &#8222;Responsible&#8221;);<\/em><\/p>\n<p><em>for (r : responsible) {<\/em><\/p>\n<p><em>editors := union(editors, resolvePartner(r:guid));<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<h4 id=\"obiekty-i-biblioteki-skryptow\" ><span class=\"ez-toc-section\" id=\"Obiekty_i_biblioteki_skryptow\"><\/span>Obiekty i biblioteki skrypt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Niestandardowe deklaracje funkcji, zmiennych i sta\u0142ych mog\u0105 by\u0107 zapisywane w systemach klienta jako obiekty skrypt\u00f3w. W tym celu nale\u017cy u\u017cy\u0107 aplikacji <em>Obiekty deweloperskie<\/em>. Zalet\u0105 integracji obiekt\u00f3w skryptu jest to, \u017ce niestandardowe deklaracje mog\u0105 by\u0107 zarz\u0105dzane centralnie; zmiany w obiektach skryptu maj\u0105 natychmiastowy wp\u0142yw na skrypty, z kt\u00f3rymi s\u0105 zintegrowane.<\/p>\n<p>Jako obiekty deweloperskie, obiekty skrypt\u00f3w podlegaj\u0105 wersjonowaniu. Aplikacja <em>Lista: Obiekty deweloperskie systemu produkcyjnego<\/em> mo\u017ce by\u0107 u\u017cywana do przenoszenia obiekt\u00f3w skrypt\u00f3w utworzonych w systemie testowym (podobnie jak szablony workflow) do systemu produkcyjnego.<\/p>\n<p>W aplikacji <em>Biblioteki<\/em> mo\u017cna r\u00f3wnie\u017c wprowadza\u0107 w\u0142asne deklaracje i podsumowywa\u0107 je w bibliotece. Podobnie jak szablony workflow na wszystkich bazach danych OLTP systemu.<\/p>\n<p>Aby obiekt skryptu lub biblioteka mog\u0142y zosta\u0107 zintegrowane, musz\u0105 u\u017cywa\u0107 tego samego j\u0119zyka skryptowego co skrypt. Je\u015bli skrypt zosta\u0142 utworzony w j\u0119zyku skryptowym systemu, do zintegrowania obiektu skryptu lub biblioteki nale\u017cy u\u017cy\u0107 polecenia importu. Je\u015bli skrypt zosta\u0142 utworzony w j\u0119zyku JavaScript, nale\u017cy u\u017cy\u0107 polecenia<em> load<\/em>. Wi\u0119cej informacji i przyk\u0142ad\u00f3w tych dw\u00f3ch polece\u0144 mo\u017cna znale\u017a\u0107 w dokumentacji <em>J\u0119zyk skryptowy systemu: Funkcje podstawowe<\/em>.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Biblioteki mo\u017cna wprowadza\u0107 wy\u0142\u0105cznie w j\u0119zyku skryptowym systemu.<\/div><\/section>\n<h4 id=\"indywidualne-weryfikacje\" ><span class=\"ez-toc-section\" id=\"Indywidualne_weryfikacje\"><\/span>Indywidualne weryfikacje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Indywidualna weryfikacja rozszerza kontrol\u0119 okre\u015blonej jednostki biznesowej. Ta rozszerzona kontrola jest u\u017cywana we wszystkich kana\u0142ach wej\u015bciowych i wyj\u015bciowych, tj. w aplikacjach dialogowych, a tak\u017ce podczas importu lub eksportu. Wynik tych niestandardowych kontroli mo\u017cna wy\u015bwietli\u0107 jako niestandardowy komunikat. Ten indywidualny komunikat jest wy\u015bwietlany wraz z komunikatami zapisanymi w bazie danych repozytorium w odpowiednim kontek\u015bcie.<\/p>\n<p>Aplikacja <em>Indywidualne weryfikacje<\/em> wy\u015bwietla funkcje wybranego hook contract. Na przyk\u0142ad hook contract dla zam\u00f3wie\u0144 sprzeda\u017cy ma nast\u0119puj\u0105ce funkcje.<\/p>\n<p><em>function validateHeader(<\/em><\/p>\n<p><em>persistent as DataView(com.cisag.app.sales.order.model.SalesOrder),<\/em><\/p>\n<p><em>current as DataView(com.cisag.app.sales.order.model.SalesOrder))<\/em><\/p>\n<p><em>{ }<\/em><\/p>\n<p><em>function validateDetail(<\/em><\/p>\n<p><em>persistent as DataView(com.cisag.app.sales.order.model.SalesOrderDetail),<\/em><\/p>\n<p><em>current as DataView(com.cisag.app.sales.order.model.SalesOrderDetail))<\/em><\/p>\n<p><em>{ }<\/em><\/p>\n<p><em>function validateDeleteHeader(<\/em><\/p>\n<p><em>persistent as DataView(com.cisag.app.sales.order.model.SalesOrder))<\/em><\/p>\n<p><em>{ }<\/em><\/p>\n<p><em>function validateDeleteDetail(<\/em><\/p>\n<p><em>persistent as DataView(com.cisag.app.sales.order.model.SalesOrderDetail))<\/em><\/p>\n<p><em>{ }<\/em><\/p>\n<p>Mo\u017cna u\u017cy\u0107 przekazanych widok\u00f3w obiekt\u00f3w <em>persistent<\/em> i <em>current<\/em>, aby por\u00f3wna\u0107 zmiany, kt\u00f3re maj\u0105 zosta\u0107 zweryfikowane w <em>current<\/em> z trwale zapisanym stanem jednostki biznesowej w <em>persistent<\/em>. W przypadku niekt\u00f3rych hook contract (takich jak kampanie) funkcje nie maj\u0105 parametru <em>current.<\/em> Aby oceni\u0107 zapisany stan jednostki biznesowej r\u00f3wnie\u017c w takich przypadkach, mo\u017cna otworzy\u0107 jednostk\u0119 biznesow\u0105 za pomoc\u0105 funkcji skryptu <em>getByPrimaryKey<\/em>, na przyk\u0142ad, poniewa\u017c wiele atrybut\u00f3w widoku obiektu jest r\u00f3wnie\u017c dost\u0119pnych w jednostce biznesowej.<\/p>\n<p>Je\u015bli jednostka biznesowa ma inne pole, mo\u017cna sprawdzi\u0107 jego warto\u015b\u0107 za pomoc\u0105 innej funkcji o tej samej nazwie, ale z przyrostkiem <em>Extension_<\/em>, po kt\u00f3rym nast\u0119puje nazwa schematu. Funkcja ta zawiera dodatkowy parametr <em>extension<\/em>, kt\u00f3ry zapewnia tablic\u0119 hash z nazwami i warto\u015bciami wszystkich innych p\u00f3l jednostki biznesowej. Je\u015bli element ma inne pole w widoku podstawowym o nazwie <em>EXTNUM<\/em> i typie pola <em>Tekst<\/em>, tabela hash mo\u017ce mie\u0107 zawarto\u015b\u0107 <em>{EXTNUM_val=[S=], EXTNUM_id=[N=7070]}<\/em>.<\/p>\n<p>Poni\u017csze indywidualne sprawdzenie powoduje wy\u015bwietlenie komunikatu o b\u0142\u0119dzie, je\u015bli dodatkowe pole <em>EXTNUM<\/em> jest puste:<\/p>\n<p><em>function validate(<\/em><\/p>\n<p><em>view as DataView(com.cisag.app.general.item.model.Item))<\/em><\/p>\n<p><em>{ }<\/em><\/p>\n<p><em>function validateExtension_EXTItem(<\/em><\/p>\n<p><em>view as DataView(com.cisag.app.general.item.model.Item),<\/em><\/p>\n<p><em>extension as Extension_EXTItem)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>if (extension.EXTNUM_val = &#8222;&#8221;)<\/em><\/p>\n<p><em>sendMessage(extension.EXTNUM_id, &#8222;ERROR&#8221;, list(&#8222;Brak warto\u015bci.&#8221;));<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Je\u015bli pierwsze dodatkowe pole jednostki biznesowej zostanie utworzone po wprowadzeniu indywidualnej weryfikacji, mo\u017cna ponownie wprowadzi\u0107 indywidualn\u0105 weryfikacj\u0119, aby automatycznie wygenerowa\u0107 szablon dodatkowej funkcji z parametrem rozszerzenia.<\/p>\n<h3 id=\"ocena-informacji\" ><span class=\"ez-toc-section\" id=\"Ocena_informacji\"><\/span>Ocena informacji<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>R\u00f3\u017cne zmienne s\u0105 wype\u0142niane w zale\u017cno\u015bci od stanu inicjalizacji nowego dzia\u0142ania. Na przyk\u0142ad \u017cadne dzia\u0142anie nie istnieje w momencie oceny warunku przej\u015bcia i funkcji tworzenia. Warto\u015bci zmiennej dzia\u0142ania s\u0105 zatem niedost\u0119pne lub dost\u0119pne tylko w ograniczonym zakresie.<\/p>\n<h4 id=\"wydarzenie-event\" ><span class=\"ez-toc-section\" id=\"Wydarzenie_event\"><\/span>Wydarzenie (event)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Je\u015bli definicja dzia\u0142ania zawiera definicj\u0119 zdarzenia, zmienna zdarzenia zawiera tablic\u0119 hash z informacjami o wywo\u0142anym zdarzeniu.<\/span><\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">type<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">\n<p>Zmienna <em>type<\/em> zawiera typ zdarzenia. Mo\u017cliwe warto\u015bci s\u0105 zdefiniowane w <em>ValueSet com.cisag.sys.workflow.EventTypeLimited<\/em>. Istotne s\u0105 tutaj nast\u0119puj\u0105ce warto\u015bci:<\/p>\n<ul>\n<li>3 oznacza zaprogramowane zdarzenie<\/li>\n<li>5 oznacza typ zdarzenia <em>Jednostka biznesowa<\/em><\/li>\n<li>8 oznacza typ zdarzenia <em>Akcja u\u017cytkownika<\/em><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">subtype<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna <em>subtype<\/em> zawiera podtyp zdarzenia. W przypadku zaprogramowanych zdarze\u0144 jest to warto\u015b\u0107 wpisu <em>ValueSet<\/em>. Je\u015bli do zdarzenia nie przypisano \u017cadnego <em>ValueSet<\/em>, warto\u015b\u0107 wynosi 0. Dla typu zdarzenia <em>Jednostka biznesowa<\/em> mo\u017cliwe warto\u015bci s\u0105 zdefiniowane w <em>ValueSet com.cisag.sys.kernel.ObjectChangeType<\/em>:\n<ul>\n<li>1 oznacza wstawienie<\/li>\n<li>2 oznacza zmian\u0119<\/li>\n<li>3 oznacza usuni\u0119cie<\/li>\n<\/ul>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce ustawienie znacznika usuni\u0119cia dla obiektu biznesowego jest uwa\u017cane za zmian\u0119. Obiekt biznesowy nie jest usuwany z bazy danych, dop\u00f3ki nie zostanie zreorganizowany.<\/p>\n<p>Podtyp mo\u017ce by\u0107 u\u017cywany z typem zdarzenia <em>Jednostka biznesowa<\/em>, aby poprawnie oceni\u0107 obiekt biznesowy dla definicji zdarze\u0144 r\u00f3\u017cnych podtyp\u00f3w. Je\u015bli na przyk\u0142ad numer artyku\u0142u ma by\u0107 wy\u015bwietlany w tek\u015bcie dzia\u0142ania dla wszystkich trzech podtyp\u00f3w, mo\u017cna u\u017cy\u0107 nast\u0119puj\u0105cego skryptu:<\/p>\n<p><em>var itemNumber := String;<\/em><\/p>\n<p><em>if (event.subtype = 3)<\/em><\/p>\n<p><em>itemNumber := parameters.oldObject:number;<\/em><\/p>\n<p><em>else<\/em><\/p>\n<p><em>itemNumber := parameters.newObject:number;<\/em><\/p>\n<p><em>format(&#8222;itemNumber&#8221;, itemNumber);<\/em><\/p>\n<p>Je\u015bli skrypt oceni parametry <em>parameters.object<\/em> lub <em>parametryrers.newObject<\/em> dla podtypu 3, wyst\u0105pi b\u0142\u0105d uruchomieniowy, poniewa\u017c obiekt biznesowy ju\u017c nie istnieje.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">guid<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna <em>guid<\/em> zawiera identyfikator GUID zaprogramowanego zdarzenia lub identyfikator GUID obiektu biznesowego dla zdarzenia <em>Jednostka biznesowa<\/em>. Mo\u017cna u\u017cy\u0107 wyra\u017cenia <em>objectName(event.guid)<\/em>, aby okre\u015bli\u0107 pe\u0142n\u0105 nazw\u0119 techniczn\u0105 obiektu biznesowego dla typu zdarzenia <em>Jednostka biznesowa<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">database<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna bazy danych zawiera identyfikator GUID bazy danych, w kt\u00f3rej zdarzenie zosta\u0142o wywo\u0142ane. Aby okre\u015bli\u0107 nazw\u0119 bazy danych, mo\u017cna u\u017cy\u0107 wyra\u017cenia <em>databaseName(event.database)<\/em>.\n<p>Aby okre\u015bli\u0107 nazw\u0119 systemu, mo\u017cna wywo\u0142a\u0107 metod\u0119 <em>Java.type(&#8217;com.cisag.pgm.util.ServerInfo&#8217;).getSystemName()<\/em> w deklaracji wykorzystuj\u0105cej JavaScript. Metoda <em>Java.type(&#8217;com.cisag.pgm.util.ServerInfo&#8217;).getSVMName()<\/em> zwraca nazw\u0119 serwera.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">parameters<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">\n<p>Zmienna <em>parameters<\/em> zawiera tablic\u0119 hash z dodatkowymi informacjami na temat wywo\u0142anego zdarzenia. Informacje zawarte w parametrach r\u00f3\u017cni\u0105 si\u0119 w zale\u017cno\u015bci od typu i podtypu zdarzenia:<\/p>\n<ul>\n<li>W przypadku zaprogramowanych zdarze\u0144 parametry zdarzenia s\u0105 definiowane podczas rejestrowania zdarzenia.<\/li>\n<li>Zakres parametr\u00f3w jest sta\u0142y dla zdarzenia <em>Zmiana jednostki biznesowej<\/em>.<\/li>\n<\/ul>\n<p>Zmienna parametr\u00f3w zosta\u0142a opisana szczeg\u00f3\u0142owo w rozdziale <em>Parametry<\/em>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"parametry\" ><span class=\"ez-toc-section\" id=\"Parametry\"><\/span>Parametry<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W zale\u017cno\u015bci od typu i podtypu zdarzenia, zmienna <em>parameters<\/em> zawiera tablic\u0119 hash z dalszymi informacjami na temat wywo\u0142anego zdarzenia. Zmienna parametr\u00f3w jest dost\u0119pna tylko w definicjach dzia\u0142ania bez odniesienia do definicji procesu i w w\u0119z\u0142ach zdarze\u0144. Nale\u017cy zatem zapisa\u0107 parametry, kt\u00f3re b\u0119d\u0105 potrzebne p\u00f3\u017aniej w procesie, w zmiennych procesu w w\u0119\u017ale startowym.<\/p>\n<h5 id=\"typ-zdarzenia-zaprogramowane-zdarzenie\" ><span class=\"ez-toc-section\" id=\"Typ_zdarzenia_Zaprogramowane_zdarzenie\"><\/span>Typ zdarzenia <em>Zaprogramowane zdarzenie<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zaprogramowane zdarzenia maj\u0105 dok\u0142adnie te parametry, kt\u00f3re zosta\u0142y wprowadzone dla danego zdarzenia 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\">Zdarzenie <em>com.cisag.pgm.workflow.GenericOLTPEvent<\/em> posiada dwa parametry <em>name<\/em> i <em>parameters<\/em>, kt\u00f3re s\u0105 przekazywane jako string lub HashMap.<\/div><\/section>\n<p>Je\u015bli dzia\u0142anie ma zosta\u0107 utworzone tylko wtedy, gdy nazwa ma tak\u0105 sam\u0105 warto\u015b\u0107 jak definicja dzia\u0142ania, mo\u017cna u\u017cy\u0107 warunku przej\u015bcia <em>parameters.name = definition:code<\/em>.<\/p>\n<p>Poni\u017csze przypisanie przyjmuje warto\u015b\u0107 wpisu user tabeli hash jako wyzwalacz procesu:<\/p>\n<p><em>process.initiator := cast(String, parameters.parameters.user);<\/em><\/p>\n<p>Poniewa\u017c tablica hash nie jest typowana, wpisy musz\u0105 zosta\u0107 przekonwertowane na prawid\u0142owe typy danych za pomoc\u0105 funkcji rzutowania, zanim b\u0119d\u0105 mog\u0142y zosta\u0107 u\u017cyte w deklaracjach.<\/p>\n<h5 id=\"typ-zdarzenia-jednostka-biznesowa\" ><span class=\"ez-toc-section\" id=\"Typ_zdarzenia_Jednostka_biznesowa\"><\/span>Typ zdarzenia <em>Jednostka biznesowa<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zdarzenie typu <em>Jednostka biznesowa<\/em> jest mo\u017cliwe dla obiekt\u00f3w biznesowych w bazie danych repozytorium lub bazie danych OLTP. Parametry zdarzenia zale\u017c\u0105 od podtypu <em>Insert, Change<\/em> lub <em>Delete<\/em> i typu monitorowanego obiektu biznesowego.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">userGuid<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna <em>userGuid<\/em> zawiera identyfikator GUID u\u017cytkownika, kt\u00f3ry zmieni\u0142 obiekt biznesowy. W przypadku zdarzenia typu <em>Jednostka biznesowa<\/em> wyzwalacz procesu jest automatycznie wst\u0119pnie przypisywany w <em>process.Initiator<\/em>. Nast\u0119puj\u0105ce przypisanie definiuje r\u00f3wnie\u017c wyzwalacz procesu jako w\u0142a\u015bciciela procesu:\n<p><em>process.Owner := userName(parameters.userGuid);<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">obiect<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna obiektu zawiera odniesienie do zmienionego obiektu biznesowego. Zmienna <em>object<\/em> odzwierciedla aktualny stan obiektu biznesowego w momencie oceny. Dla podtypu <em>Delete<\/em> zmienna <em>object<\/em> ma warto\u015b\u0107 zero. Zmienna obiektu mo\u017ce by\u0107 u\u017cywana na przyk\u0142ad do oceny bie\u017c\u0105cego stanu zmienionego obiektu biznesowego na pocz\u0105tku okresu przetwarzania.\n<p>Poni\u017cszy warunek wst\u0119pny sprawdza, czy dokument, dla kt\u00f3rego zdarzenie zosta\u0142o wywo\u0142ane, zosta\u0142 zwolniony. Je\u015bli tak nie jest, warunek wst\u0119pny jest fa\u0142szywy, a dzia\u0142anie jest automatycznie ko\u0144czone bez przetwarzania:<\/p>\n<p><em>parameters.object:status = 2 \/* ORDER_RELEASED *\/<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">oldObject<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna <em>oldObject<\/em> zawiera warto\u015b\u0107 zmienionego obiektu biznesowego bezpo\u015brednio przed wyzwoleniem zdarzenia. Dla podtypu <em>Insert<\/em> zmienna <em>oldObject<\/em> ma warto\u015b\u0107 zero. Poni\u017cszy warunek przej\u015bcia sprawdza, czy atrybut <em>number<\/em> zosta\u0142 zmieniony:\n<p><em>parameters.oldObject:number &lt;&gt; parameters.newObject:number<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">newObject<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Zmienna <em>newObject<\/em> zawiera warto\u015b\u0107 zmienionego obiektu biznesowego bezpo\u015brednio po zmianie. Dla podtypu <em>Delete<\/em> zmienna <em>newObject<\/em> ma warto\u015b\u0107 zero. Poni\u017cszy warunek wst\u0119pny sprawdza, czy dokument lub obiekt biznesowy zosta\u0142 ponownie zmieniony mi\u0119dzy wyzwoleniem zdarzenia a rozpocz\u0119ciem okresu przetwarzania:\n<p><em>parameters.object:updateInfo.updateTime = parameters.newObject:updateInfo.updateTime<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">entity<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Je\u015bli zmodyfikowany obiekt biznesowy jest zale\u017cny, zmienna encji zawiera odniesienie do encji biznesowej powi\u0105zanej z obiektem biznesowym poprzez relacj\u0119 <em>_entity<\/em>. To, czy obiekt biznesowy jest zale\u017cny, mo\u017cna sprawdzi\u0107 w aplikacji <em>Obiekty deweloperskie<\/em>. Je\u015bli w polu <em>Typ<\/em> wybrana jest warto\u015b\u0107 <em>Dependent<\/em>, obiekt biznesowy jest zale\u017cny. Przyk\u0142adem elementu zale\u017cnego jest pozycja zam\u00f3wienia sprzeda\u017cy. Je\u015bli definicja dzia\u0142ania ma definicj\u0119 zdarzenia dla pozycji zam\u00f3wienia sprzeda\u017cy, w\u00f3wczas <em>parameters.object<\/em> odwo\u0142uje si\u0119 do obiektu biznesowego <em>com.cisag.app.sales.obj.SalesOrderDetail<\/em> (pozycja zam\u00f3wienia sprzeda\u017cy), a <em>parameters.entity<\/em> odwo\u0142uje si\u0119 do obiektu biznesowego <em>com.cisag.app.sales.obj.SalesOrder<\/em> (zam\u00f3wienie sprzeda\u017cy).\n<p>Je\u015bli obiekt biznesowy nie jest zale\u017cny, jednostka nie jest zdefiniowana. Dla podtypu <em>Delete<\/em> zmienna<em>\u00a0entity<\/em> ma warto\u015b\u0107 zero.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">oldEntity<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Je\u015bli zmieniony obiekt biznesowy jest zale\u017cny, zmienna <em>oldEntity<\/em> zawiera warto\u015b\u0107 jednostki biznesowej powi\u0105zanej z obiektem biznesowym poprzez relacj\u0119<em> _entity<\/em> bezpo\u015brednio przed zmian\u0105. Je\u015bli obiekt biznesowy nie jest zale\u017cny, <em>oldEntity<\/em> nie jest zdefiniowane. Dla podtypu <em>Insert oldEntity<\/em> ma warto\u015b\u0107 zero.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"156\">newEntity<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"384\">Je\u015bli zmieniony obiekt biznesowy jest zale\u017cny, zmienna <em>newEntity<\/em> zawiera warto\u015b\u0107 jednostki biznesowej powi\u0105zanej z obiektem biznesowym poprzez relacj\u0119 <em>_entity<\/em> bezpo\u015brednio po zmianie. Je\u015bli obiekt biznesowy nie jest zale\u017cny, <em>newEntity<\/em> nie jest zdefiniowane. Dla podtypu <em>Insert<\/em> <em>newEntity<\/em> ma warto\u015b\u0107 zero.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 id=\"typ-zdarzenia-akcja-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Typ_zdarzenia_Akcja_uzytkownika\"><\/span>Typ zdarzenia <em>Akcja u\u017cytkownika<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zdarzenie typu<em> Akcja u\u017cytkownika<\/em> jest mo\u017cliwe dla jednostek biznesowych w bazie danych repozytorium lub bazie danych OLTP. Zdarzenia dla jednostek zale\u017cnych nie s\u0105 obs\u0142ugiwane. Zdarzenie ma nast\u0119puj\u0105ce parametry.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 729px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"156\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"384\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 498px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 498px;\" width=\"156\">userGuid<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 498px;\" width=\"384\">Zmienna <em>userGuid<\/em> zawiera identyfikator GUID u\u017cytkownika, kt\u00f3ry zmieni\u0142 jednostk\u0119 biznesow\u0105. W przypadku zdarzenia typu Akcja u\u017cytkownika wyzwalacz procesu jest automatycznie wst\u0119pnie przypisywany w <em>process.initiator<\/em>. Nast\u0119puj\u0105ce przypisanie definiuje r\u00f3wnie\u017c wyzwalacz procesu jako w\u0142a\u015bciciela procesu:\n<p><em>process.Owner := userName(parameters.userGuid);<\/em><\/p>\n<p>Poni\u017cszy warunek przej\u015bcia sprawdza, czy u\u017cytkownik jest pracownikiem odpowiedzialnym za dokument. Je\u015bli tak nie jest, warunek przej\u015bcia jest fa\u0142szywy, a akcja u\u017cytkownika jest dezaktywowana dla u\u017cytkownika w menu kontekstowym dokumentu:<\/p>\n<p><em>parameters.userGuid = cast(Guid, first(parameters.object:responsible, parameters.userGuid))<\/em><\/p>\n<p>Je\u015bli dokument nie ma odpowiedzialnego pracownika, akcja u\u017cytkownika pozostaje aktywna w menu kontekstowym wszystkich u\u017cytkownik\u00f3w.<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 208px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 208px;\" width=\"156\">obiect<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 208px;\" width=\"384\">Zmienna obiektu zawiera odniesienie do jednostki biznesowej, dla kt\u00f3rej wywo\u0142ano akcj\u0119 u\u017cytkownika. Zmienna obiektowa odzwierciedla aktualny stan obiektu biznesowego w momencie oceny. Poni\u017cszy warunek przej\u015bcia sprawdza, czy dokument jest przetwarzany. Je\u015bli tak nie jest, warunek przej\u015bcia jest fa\u0142szywy, a akcja u\u017cytkownika jest dezaktywowana w menu kontekstowym dokumentu:\n<p><em>parameters.object:status = 1 \/* ORDER_ENTERED *\/<\/em><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 id=\"bez-definicji-zdarzenia\" ><span class=\"ez-toc-section\" id=\"Bez_definicji_zdarzenia\"><\/span>Bez definicji zdarzenia<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Proces bez definicji zdarzenia w w\u0119\u017ale startowym mo\u017cna uruchomi\u0107 tylko r\u0119cznie. Aby m\u00f3c zdecydowa\u0107 w w\u0119\u017ale startowym, czy u\u017cytkownik jest upowa\u017cniony do uruchomienia procesu, zmienna parametr\u00f3w dostarcza odpowiednich informacji, nawet je\u015bli nie ma zdarzenia.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 325px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"156\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"384\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 162px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 162px;\" width=\"156\">userGuid<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 162px;\" width=\"384\">Zmienna <em>userGuid<\/em> zawiera identyfikator GUID u\u017cytkownika, kt\u00f3ry uruchamia proces r\u0119cznie. Poni\u017csze wyra\u017cenie w polu <em>Wyra\u017cenie dla warunku wst\u0119pnego<\/em> uniemo\u017cliwia uruchomienie procesu, je\u015bli u\u017cytkownik nie jest przypisany do roli workflow <em>MANAGERS<\/em>.\n<p><em>contains(resolveRole(&#8222;MANAGERS&#8221;, parameters.userGuid)<\/em><\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"156\">database<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"384\">Zmienna bazy danych zawiera identyfikator GUID bazy danych, w kt\u00f3rej uruchamiany jest proces. <em>Przyk\u0142ady zosta\u0142y przedstawione w rozdziale Zdarzenia (events)<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"156\">organization<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 70px;\" width=\"384\">W przypadku r\u0119cznie uruchomionego procesu zmienna organizacji zawiera identyfikator GUID organizacji wybranej w aplikacji, z kt\u00f3rej proces zosta\u0142 uruchomiony.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"proces\" ><span class=\"ez-toc-section\" id=\"Proces\"><\/span>Proces<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli definicja dzia\u0142ania jest powi\u0105zana z definicj\u0105 procesu, zmienna procesu zawiera tablic\u0119 hash z informacjami o procesie.<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 102.012%;\">\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Code<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Code<\/em> zawiera identyfikator procesu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Database<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Database<\/em> zawiera identyfikator GUID bazy danych. Ta zmienna jest dost\u0119pna tylko w funkcji tworzenia w\u0119z\u0142a pocz\u0105tkowego.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Description<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Description<\/em> zawiera nazw\u0119 procesu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">EndTime<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>EndTime<\/em> zawiera czas zako\u0144czenia okresu przetwarzania.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">ErrorCode<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>ErrorCode<\/em> zawiera kod b\u0142\u0119du po wyst\u0105pieniu b\u0142\u0119du w procesie. Ocena ma zatem sens tylko w w\u0119\u017ale b\u0142\u0119du. Kod b\u0142\u0119du i opis b\u0142\u0119du mo\u017cna ustawi\u0107 przez przypisanie. Polecenie <em>abortProcess<\/em> mo\u017ce by\u0107 nast\u0119pnie u\u017cyte do zako\u0144czenia procesu za po\u015brednictwem w\u0119z\u0142a b\u0142\u0119du.\n<p><em>process.ErrorCode := &#8222;USER_ERROR&#8221;;<\/em><\/p>\n<p><em>process.ErrorDescription := &#8222;B\u0142\u0105d zg\u0142oszony przez u\u017cytkownika w funkcji create() dzia\u0142ania&#8221; + activity:code + &#8222;.&#8221;;<\/em><\/p>\n<p><em>abortProcess();<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">ErrorDescription<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>ErrorDescription<\/em> zawiera opis b\u0142\u0119du powi\u0105zany z kodem b\u0142\u0119du po wyst\u0105pieniu b\u0142\u0119du w procesie. Ocena ma zatem sens tylko w w\u0119\u017ale b\u0142\u0119du.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">FinishTime<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>FinishTime<\/em> zawiera czas zako\u0144czenia procesu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Initiator<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">\n<p>Zmienna <em>Initiator<\/em> zawiera wyzwalacz procesu. Wyzwalacz procesu jest dost\u0119pny tylko z funkcji zamykania w\u0119z\u0142a pocz\u0105tkowego. Wyzwalacz procesu jest ustawiany automatycznie dla zdarze\u0144 typu <em>Jednostka biznesowa<\/em> i <em>Akcja u\u017cytkownika<\/em>. Dla typu zdarzenia <em>Zaprogramowane zdarzenie<\/em> i dla proces\u00f3w bez definicji zdarzenia, wyzwalacz procesu mo\u017ce by\u0107 zdefiniowany tylko poprzez przypisanie nazwy u\u017cytkownika.<\/p>\n<p><em>process.Initiator := userName(getByBusinessKey(CisObject(com.cisag.app.inventory.obj.InventoryTransaction), parameters.internalNumber):updateInfo.createUser) <\/em><\/p>\n<p>przypisuje u\u017cytkownikowi, kt\u00f3ry wprowadzi\u0142 lub utworzy\u0142 rezerwacj\u0119 materia\u0142u, kt\u00f3ra wywo\u0142a\u0142a zaprogramowane zdarzenie <em>com.cisag.app.inventory.MinimumOnhand<\/em> proces jako inicjator.<\/p>\n<p>Wyzwalacz mo\u017cna zmieni\u0107 w razie potrzeby podczas wykonywania procesu.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Number1<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">\n<p>Zmienna <em>Number1<\/em> zawiera pierwszy og\u00f3lny atrybut wyniku liczbowego. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/p>\n<p><em>process.Number1 := parameters.object:totalValues.grossValue.amount <\/em><\/p>\n<p>przypisuje ca\u0142kowit\u0105 kwot\u0119 brutto zam\u00f3wienia, do kt\u00f3rego odwo\u0142uje si\u0119 parametr parameters.object, do atrybutu Number1.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Number2<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Number2<\/em> zawiera drugi og\u00f3lny atrybut wyniku liczbowego. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">OrganizationalUnit<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>OrganizationalUnit<\/em> zawiera identyfikator GUID organizacji. Kontekst organizacyjny zdarzenia mo\u017ce zosta\u0107 przekazany do procesu poprzez przypisanie. Przypisana organizacja ma wp\u0142yw mi\u0119dzy innymi na autoryzacj\u0119 niezaanga\u017cowanych u\u017cytkownik\u00f3w. Je\u015bli w definicji procesu wybrano opcj\u0119 <em>Standard<\/em> dla niezaanga\u017cowanych u\u017cytkownik\u00f3w, a dzia\u0142anie jest przypisane do organizacji, tylko ci niezaanga\u017cowani u\u017cytkownicy, kt\u00f3rzy s\u0105 przypisani do tej samej organizacji, mog\u0105 wy\u015bwietli\u0107 proces.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Owner<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Owner<\/em> zawiera osob\u0119 odpowiedzialn\u0105 za proces. W\u0142a\u015bciciel procesu jest dost\u0119pny tylko w funkcji zamykania w\u0119z\u0142a pocz\u0105tkowego. W procesie r\u0119cznym ze zdarzeniami dzia\u0142ania w w\u0119\u017ale pocz\u0105tkowym, w\u0142a\u015bciciel nie mo\u017ce zosta\u0107 oceniony w funkcjach <em>applyDefaults<\/em> i <em>validate<\/em>. Warto\u015b\u0107 mo\u017cna zmieni\u0107, przypisuj\u0105c nazw\u0119 u\u017cytkownika lub okre\u015blaj\u0105c rol\u0119 workflow.\n<p><em>process.Owner := process.Initiator<\/em> r\u00f3wnie\u017c przypisuje wyzwalacz do procesu jako osoby odpowiedzialnej.<\/p>\n<p>Pochodzenie osoby odpowiedzialnej za proces mo\u017cna sprawdzi\u0107 w atrybucie <em>activity-&gt;Process:processData.sourceOfOwner<\/em>. Warto\u015b\u0107 1 oznacza u\u017cytkownika, a warto\u015b\u0107 2 &#8212; rol\u0119 workflow.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">previousStep<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Je\u015bli dzia\u0142anie ma tylko jedno dzia\u0142anie poprzedzaj\u0105ce, zmienna <em>previousStep<\/em> zawiera odniesienie do dzia\u0142ania poprzedzaj\u0105cego. Je\u015bli dzia\u0142anie nie ma dzia\u0142ania poprzedzaj\u0105cego, co ma miejsce na przyk\u0142ad w przypadku w\u0119z\u0142a pocz\u0105tkowego, lub ma kilka dzia\u0142a\u0144 poprzedzaj\u0105cych, zmienna ma warto\u015b\u0107 domy\u015bln\u0105 zero. Wyra\u017cenie <em>process.previousStep:completeUser<\/em> zwraca identyfikator GUID u\u017cytkownika, kt\u00f3ry zako\u0144czy\u0142 poprzednie dzia\u0142anie swoim zadaniem.\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce nazwa tego atrybutu zaczyna si\u0119 od ma\u0142ej litery.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">previousSteps<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Je\u015bli dzia\u0142anie ma kilka dzia\u0142a\u0144 poprzedzaj\u0105cych, np. poprzez u\u017cycie w\u0119z\u0142a scalania, zmienna <em>previousSteps<\/em> zawiera list\u0119 z odniesieniem do ka\u017cdego dzia\u0142ania poprzedzaj\u0105cego. Je\u015bli dzia\u0142anie nie ma poprzednika lub ma tylko jednego poprzednika, zmienna ma warto\u015b\u0107 domy\u015bln\u0105 zero. Poni\u017cszy skrypt przypisuje do zmiennej <em>users<\/em> list\u0119 z identyfikatorami GUID wszystkich u\u017cytkownik\u00f3w, kt\u00f3rzy uko\u0144czyli poprzednie dzia\u0142anie ze swoim zadaniem.\n<p>v<em>ar users as Guid[];<\/em><\/p>\n<p><em>for (a : process.previousSteps)<\/em><\/p>\n<p><em>users := union(users, list(a:completeUser));<\/em><\/p>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce nazwa tego atrybutu zaczyna si\u0119 od ma\u0142ej litery.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">StartTime<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>StartTime<\/em> zawiera czas rozpocz\u0119cia okresu przetwarzania.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">State<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>State<\/em> zawiera status procesu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Result<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Result<\/em> zawiera og\u00f3lny wynik procesu. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przypisania, ale jest ograniczona do 80 znak\u00f3w. Poni\u017csze przypisanie w funkcji <em>close<\/em> podsumowuje wiele indywidualnych wynik\u00f3w procesu zatwierdzania dla zam\u00f3wienia, do kt\u00f3rego odwo\u0142uje si\u0119 zmienna procesowa<em> PO<\/em>, w og\u00f3lny wynik procesu:\n<p><em>process.result := process.PO:number + &#8221; z\u0142o\u017cony przez &#8221; + process.Initiator + &#8221; zosta\u0142 &#8221; + results.approvalResult + &#8221; przez &#8221; + userName(activity:completeUser);<\/em><\/p>\n<p>Wynik sprawdzenia mo\u017cna znale\u017a\u0107 w wyniku dzia\u0142ania <em>approvalResult<\/em>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Text1<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">\n<p>Zmienna <em>Text1<\/em> zawiera pierwszy og\u00f3lny atrybut wyniku dla \u0142a\u0144cuch\u00f3w znak\u00f3w. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/p>\n<p><em>process.Text1 := &#8222;APPROVED&#8221;<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Text2<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Text2<\/em> zawiera drugi og\u00f3lny atrybut wyniku dla \u0142a\u0144cuch\u00f3w znak\u00f3w. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Text3<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Text3<\/em> zawiera trzeci og\u00f3lny atrybut wyniku dla \u0142a\u0144cuch\u00f3w znak\u00f3w. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Text4<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Text4<\/em> zawiera czwarty og\u00f3lny atrybut wyniku dla \u0142a\u0144cuch\u00f3w znak\u00f3w. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Text5<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Text5<\/em> zawiera pi\u0105ty og\u00f3lny atrybut wyniku dla \u0142a\u0144cuch\u00f3w znak\u00f3w. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Timestamp1<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">\n<p>Zmienna <em>Timestamp1<\/em> zawiera pierwszy og\u00f3lny atrybut wyniku dla punkt\u00f3w w czasie. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/p>\n<p><em>process.Timestamp1 := now();<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 22.287%;\" width=\"141\">Timestamp2<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 77.0129%;\" width=\"396\">Zmienna <em>Timestamp2<\/em> zawiera drugi og\u00f3lny atrybut wyniku dla punkt\u00f3w w czasie. Warto\u015b\u0107 mo\u017ce by\u0107 zmieniana zgodnie z wymaganiami przez przypisanie.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>W zale\u017cno\u015bci od kontekstu wykonania i stanu dzia\u0142ania dost\u0119pne s\u0105 r\u00f3\u017cne atrybuty. W funkcjach <em>applyDefaults<\/em> i <em>validate<\/em> w\u0119z\u0142a startowego wszystkie atrybuty nadal maj\u0105 swoje warto\u015bci domy\u015blne. Poniewa\u017c w\u0119ze\u0142 startowy nie ma poprzednika, atrybuty <em>previousStep<\/em> i <em>previousSteps<\/em> zawsze maj\u0105 warto\u015b\u0107 domy\u015bln\u0105 zero w w\u0119\u017ale startowym.<\/p>\n<p>W funkcji tworzenia w\u0119z\u0142a pocz\u0105tkowego atrybuty<em> OrganizationalUnit<\/em> i <em>Database<\/em> maj\u0105 warto\u015bci z bie\u017c\u0105cego kontekstu. Aby r\u00f3wnie\u017c zapyta\u0107 o te atrybuty w funkcjach <em>applyDefaults<\/em> i <em>validate<\/em> w\u0119z\u0142a startowego, mo\u017cna zamiast tego oceni\u0107 zmienne <em>event<\/em> i <em>parameters<\/em>.<\/p>\n<p>W funkcji zamykania w\u0119z\u0142a pocz\u0105tkowego i we wszystkich funkcjach kolejnych w\u0119z\u0142\u00f3w dzia\u0142a\u0144 i zdarze\u0144 wszystkie atrybuty z wyj\u0105tkiem <em>OrganisationalUnit<\/em> i <em>Database<\/em> maj\u0105 warto\u015bci z bie\u017c\u0105cego kontekstu. Je\u015bli u\u017cytkownik chce oceni\u0107 te dwie warto\u015bci w p\u00f3\u017aniejszym momencie procesu, powinien zapisa\u0107 je w funkcji zamykania w zmiennych procesu.<\/p>\n<h4 id=\"dzialanie-activity\" ><span class=\"ez-toc-section\" id=\"Dzialanie_activity\"><\/span>Dzia\u0142anie (activity)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli warunek przej\u015bcia jest spe\u0142niony i funkcja <em>create<\/em> zosta\u0142a wykonana, tworzone jest nowe dzia\u0142anie. Od tego momentu zmienna dzia\u0142ania stanowi odniesienie do utworzonego dzia\u0142ania.<\/p>\n<p>Aby upro\u015bci\u0107 ocen\u0119, niekt\u00f3re atrybuty s\u0105 ju\u017c dost\u0119pne w funkcji tworzenia. Mo\u017cna na przyk\u0142ad przeanalizowa\u0107 identyfikacj\u0119 i status dzia\u0142ania. Inne informacje, takie jak relacje z innymi obiektami biznesowymi, mo\u017cna analizowa\u0107 dopiero po wykonaniu funkcji tworzenia.<\/p>\n<p>Z tego samego powodu niekt\u00f3re atrybuty s\u0105 dost\u0119pne w funkcji zamykania, kt\u00f3re s\u0105 zapisywane na sta\u0142e dopiero po zako\u0144czeniu dzia\u0142ania. Na przyk\u0142ad mo\u017cna u\u017cy\u0107 atrybutu <em>activity:completeUser<\/em>, aby przeanalizowa\u0107, kt\u00f3ry u\u017cytkownik aktualnie ko\u0144czy dzia\u0142anie.<\/p>\n<p>Po wykonaniu funkcji tworzenia mo\u017cna oceni\u0107 proces przy u\u017cyciu relacji<em> Process<\/em>. Na przyk\u0142ad wyra\u017cenie<br \/><em>activity-&gt;Process:code<\/em> okre\u015bla identyfikacj\u0119 procesu.<\/p>\n<h4 id=\"definicja-dzialania-definition\" ><span class=\"ez-toc-section\" id=\"Definicja_dzialania_definition\"><\/span>Definicja dzia\u0142ania (definition)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Zmienna definicji zawiera odniesienie do definicji dzia\u0142ania, kt\u00f3ra otrzyma\u0142a zdarzenie i za pomoc\u0105 kt\u00f3rej ma zosta\u0107 utworzone nowe dzia\u0142anie. Ta zmienna jest dost\u0119pna wsz\u0119dzie w definicji dzia\u0142ania.<\/p>\n<p>U\u017cywaj\u0105c warunku przej\u015bcia <em>parameters.name = definition:code<\/em> w definicji dzia\u0142ania dla zaprogramowanego zdarzenia <em>com.cisag.pgm.workflow.GenericOLTPEvent<\/em>, zaprogramowane zdarzenie mo\u017ce zosta\u0107 wyzwolone z identyfikacj\u0105 definicji dzia\u0142ania jako nazwy, kt\u00f3ra ma zosta\u0107 u\u017cyta do wygenerowania dzia\u0142ania.<\/p>\n<p>Definicja procesu powi\u0105zana z definicj\u0105 dzia\u0142ania mo\u017ce by\u0107 r\u00f3wnie\u017c oceniana za pomoc\u0105 zmiennej definicji. Na przyk\u0142ad wyra\u017cenie <em>definition-&gt;ProcessDefinition:code<\/em> okre\u015bla identyfikacj\u0119 definicji procesu.<\/p>\n<h4 id=\"parametry-akcji-actionparameters\" ><span class=\"ez-toc-section\" id=\"Parametry_akcji_actionParameters\"><\/span>Parametry akcji (actionParameters)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli funkcja <em>create<\/em> zosta\u0142a wykonana i dzia\u0142anie zosta\u0142a wygenerowane, zmienna <em>actionParameters<\/em> zawiera tablic\u0119 hash z warto\u015bciami wszystkich parametr\u00f3w aplikacji. Zmienna ta mo\u017ce zosta\u0107 obliczona na przyk\u0142ad w warunku wst\u0119pnym lub w funkcji zamykania.<\/p>\n<h4 id=\"wyniki-dzialania-results\" ><span class=\"ez-toc-section\" id=\"Wyniki_dzialania_results\"><\/span>Wyniki dzia\u0142ania (results)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Po wykonaniu funkcji <em>create<\/em> i utworzeniu dzia\u0142ania zmienna <em>results<\/em> zawiera tablic\u0119 hash z warto\u015bciami wszystkich wynik\u00f3w dzia\u0142ania. Zmienna <em>results<\/em> jest cz\u0119sto u\u017cywana w funkcji <em>close<\/em> do zapisywania wynik\u00f3w dzia\u0142ania w zmiennych procesu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Definicja dzia\u0142ania ma nast\u0119puj\u0105ce dwa wyniki dzia\u0142ania:<\/p>\n<ul>\n<li><em>approvalStatus<\/em> typu pola <em>Pole wyboru<\/em> z dwiema warto\u015bciami <em>APPROVED<\/em> i <em>REJECTED.<\/em><\/li>\n<li>komentarz typu pola <em>Wielowierszowe pole tekstowe<\/em>.<\/li>\n<\/ul>\n<p>W funkcji <em>applyDefaults<\/em> pole wyboru <em>approvalStatus<\/em> jest wst\u0119pnie przypisane do <em>REJECTED<\/em>:<\/p>\n<p><em>function applyDefaults()<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>results.approvalStatus := &#8222;REJECTED&#8221;;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>W funkcji zatwierdzania wy\u015bwietlany jest indywidualny komunikat <em>COMMENT<\/em>, je\u015bli u\u017cytkownik wybra\u0142 warto\u015b\u0107 <em>APPROVED<\/em> bez wprowadzania komentarza:<\/p>\n<p><em>function validate(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>if (results.approvalStatus &lt;&gt; &#8222;APPROVED&#8221; and results.comment = &#8222;&#8221;)<\/em><\/p>\n<p><em>sendMessage(results.comment_id, &#8222;COMMENT&#8221;, list());<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Przyrostek <em>_id<\/em> po nazwie wyniku dzia\u0142ania powoduje wy\u015bwietlenie kolorowego naro\u017cnika komunikatu w polu komentarza.<\/p>\n<p>Na koniec, dwa wyniki dzia\u0142ania s\u0105 zapisywane w zmiennych procesowych o tej samej nazwie w funkcji zamykania:<\/p>\n<p><em>function close(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>if(results.approvalStatus = &#8222;APPROVED&#8221;)<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;APPROVED&#8221;;<\/em><\/p>\n<p><em>inny<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;REJECTED&#8221;;<\/em><\/p>\n<p><em>process.comment := results.comment;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Inne dzia\u0142ania w procesie mog\u0105 nast\u0119pnie wykorzysta\u0107 te warto\u015bci.<\/p>\n<p>W powy\u017cszym przyk\u0142adzie mo\u017cliwe by\u0142oby r\u00f3wnie\u017c prostsze przypisanie <em>process.approvalStatus := results.approvalStatus<\/em>. R\u00f3\u017cnica polega na tym, \u017ce przy takim przypisaniu zmienna <em>process.approvalStatus<\/em> mia\u0142aby niezdefiniowany wynik, je\u015bli u\u017cytkownik uko\u0144czy zadanie lub dzia\u0142anie za po\u015brednictwem aplikacji typu lista, poniewa\u017c w tym przypadku nie jest mo\u017cliwe wprowadzenie wynik\u00f3w.<\/p>\n<p>Innym wariantem by\u0142oby przypisanie zdarzenia dzia\u0142ania w zale\u017cno\u015bci od statusu dzia\u0142ania: je\u015bli u\u017cytkownik uko\u0144czy dzia\u0142anie za pomoc\u0105 aplikacji typu lista, jest to uwa\u017cane za niejawne zatwierdzenie. Je\u015bli dzia\u0142anie zostanie zako\u0144czone bez przetworzenia, jest to uwa\u017cane za niejawne odrzucenie:<\/p>\n<p><em>function close(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>if(results.approvalStatus = &#8222;APPROVED&#8221;)<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;APPROVED&#8221;;<\/em><\/p>\n<p><em>else if(results.approvalStatus &lt;&gt; &#8222;&#8221;)<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;REJECTED&#8221;;<\/em><\/p>\n<p><em>else if (state = State:DONE)<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;APPROVED&#8221;;<\/em><\/p>\n<p><em>inny<\/em><\/p>\n<p><em>process.approvalStatus := &#8222;REJECTED&#8221;;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Mo\u017cliwe jest r\u00f3wnie\u017c wybranie warto\u015bci <em>Wykonaj za pomoc\u0105 paska narz\u0119dzi workflow<\/em> w polu <em>Potwierdzenie realizacji<\/em> na zak\u0142adce <em>Opracowanie<\/em> definicji dzia\u0142ania, aby uniemo\u017cliwi\u0107 jej uko\u0144czenie przez aplikacj\u0119 typu lista.<\/div><\/section>\n<h4 id=\"kontrola-dialogow-dialog\" ><span class=\"ez-toc-section\" id=\"Kontrola_dialogow_dialog\"><\/span>Kontrola dialog\u00f3w (dialog)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli definicja dzia\u0142ania ma wynik dzia\u0142ania typu pola <em>page<\/em>, okno dialogowe wprowadzania wynik\u00f3w dzia\u0142ania sk\u0142ada si\u0119 z kilku stron. Aby m\u00f3c prze\u0142\u0105cza\u0107 si\u0119 mi\u0119dzy stronami za pomoc\u0105 skrypt\u00f3w, zmienna parametr\u00f3w udost\u0119pnia nast\u0119puj\u0105ce atrybuty:<\/p>\n<table style=\"border-style: outset; border-color: #000000; background-color: #ffffff; width: 100%; height: 233px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"141\"><strong>Zmienna<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 23px;\" width=\"396\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"141\">page<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 93px;\" width=\"396\">Zmienna <em>page<\/em> zawiera techniczn\u0105 nazw\u0119 bie\u017c\u0105cej strony w oknie dialogowym wprowadzania wynik\u00f3w dzia\u0142ania. Je\u015bli bie\u017c\u0105ca strona jest pierwsz\u0105 stron\u0105 okna dialogowego, warto\u015b\u0107 <em>page<\/em> jest pustym ci\u0105giem znak\u00f3w.<\/td>\n<\/tr>\n<tr style=\"height: 117px;\">\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 117px;\" width=\"141\">nextPage<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; height: 117px;\" width=\"396\">Je\u015bli nazwa techniczna zdarzenia dzia\u0142ania typu pola <em>Page<\/em> jest przypisana do zmiennej <em>nextPage<\/em> i strona ta znajduje si\u0119 po bie\u017c\u0105cej stronie, dialog prze\u0142\u0105cza si\u0119 bezpo\u015brednio na t\u0119 stron\u0119, nawet je\u015bli w rezultacie inne strony musz\u0105 zosta\u0107 pomini\u0119te. Nie jest mo\u017cliwe pozostanie na tej samej stronie lub przej\u015bcie do strony, kt\u00f3ra znajduje si\u0119 przed bie\u017c\u0105c\u0105 stron\u0105.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">W poni\u017cszym przyk\u0142adzie definicja dzia\u0142ania ma cztery strony dialogowe o nazwach <em>page1<\/em>, <em>page2, page3<\/em> i <em>page4<\/em>. Ka\u017cda strona ma pole tekstowe o nazwach <em>text1, text2, text3<\/em> i <em>text4<\/em>. Je\u015bli pole tekstowe na stronie jest puste, system nie powinien prze\u0142\u0105cza\u0107 si\u0119 na nast\u0119pn\u0105 stron\u0119, ale bezpo\u015brednio na ostatni\u0105 stron\u0119 <em>page4<\/em>.<\/p>\n<p><em>function validate(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>if (dialogue.page = &#8222;page1&#8221; lub dialogue.page = &#8222;&#8221;) {<\/em><\/p>\n<p><em>if (results.text1 = &#8222;&#8221;)<\/em><\/p>\n<p><em>dialogue.nextPage := &#8222;page4&#8221;;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p><em>if (dialogue.page = &#8222;page2&#8221;) {<\/em><\/p>\n<p><em>if (results.text2 = &#8222;&#8221;)<\/em><\/p>\n<p><em>dialogue.nextPage := &#8222;page4&#8221;;<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p><em>}<\/em><\/p>\n<p>Sprawdzanie strony <em>page3<\/em> nie jest konieczne, poniewa\u017c strona <em>page4<\/em> i tak jest nast\u0119pn\u0105 stron\u0105.<\/div><\/section>\n<h4 id=\"wywolania-funkcji-parameters-i-result\" ><span class=\"ez-toc-section\" id=\"Wywolania_funkcji_parameters_i_result\"><\/span>Wywo\u0142ania funkcji (parameters i result)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wywo\u0142anie funkcji to definicja dzia\u0142ania, kt\u00f3ra oblicza i zwraca wynik zamiast generowania dzia\u0142ania. Wywo\u0142ania funkcji s\u0105 u\u017cywane na przyk\u0142ad do jednokrotnego wprowadzania z\u0142o\u017conych oblicze\u0144 lub do u\u017cywania wyra\u017ce\u0144 w j\u0119zyku JavaScript w definicjach dzia\u0142a\u0144 wprowadzanych w j\u0119zyku skryptowym systemu.<\/p>\n<p>Parametry i warto\u015bci zwracane definicji dzia\u0142a\u0144 typu <em>Wywo\u0142anie funkcji<\/em> s\u0105 rejestrowane wraz z definicj\u0105 dzia\u0142ania. Ka\u017cdy parametr i ka\u017cda warto\u015b\u0107 zwracana ma nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci w definicji dzia\u0142ania:<\/p>\n<ul>\n<li>Unikalna nazwa techniczna w ramach definicji dzia\u0142ania<\/li>\n<li>Termin, kt\u00f3ry mo\u017cna przet\u0142umaczy\u0107<\/li>\n<li>Typ danych<\/li>\n<\/ul>\n<p>Dla ka\u017cdego parametru <em>P1,&#8230;,Pn<\/em> i warto\u015bci zwracanej <em>R1,&#8230;,Rm<\/em> istnieje zmienna o nazwie technicznej w zmiennych parametry i wynik, tj:<\/p>\n<p><em>parameters.P1,&#8230;,parameters.Pn<\/em><\/p>\n<p><em>result.R1,&#8230;,result.Rm<\/em><\/p>\n<p>Warto\u015bci parametr\u00f3w s\u0105 przekazywane i ustawiane w momencie wywo\u0142ania definicji dzia\u0142ania. Warto\u015bci zwracane s\u0105 zerowe w momencie wywo\u0142ania i mog\u0105 by\u0107 obliczane przez definicj\u0119 dzia\u0142ania.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Definicja dzia\u0142ania X ma parametr <em>ITEMNUMBER<\/em> z oznaczeniem <em>Numer artyku\u0142u<\/em> i typem danych b\u0119d\u0105cych ci\u0105giem znak\u00f3w oraz warto\u015b\u0107 zwracan\u0105 <em>PRICE<\/em> z oznaczeniem <em>Cena<\/em> i typem danych <em>Liczba<\/em>. W tym przypadku istniej\u0105 nast\u0119puj\u0105ce zmienne:<\/p>\n<p><em>parameters.ITEMNUMBER<\/em><\/p>\n<p><em>result.PRICE<\/em><\/p>\n<p>Warto\u015b\u0107 zmiennej <em>ITEMNUMBER<\/em> jest ustawiana podczas wywo\u0142ywania definicji dzia\u0142ania. Warto\u015b\u0107 zmiennej<em> PRICE<\/em> musi by\u0107 ustawiona przez definicj\u0119 dzia\u0142ania.<\/div><\/section>\n<p><span style=\"font-size: revert;\">Nale\u017cy pami\u0119ta\u0107, \u017ce zwyk\u0142e zmienne \u015brodowiskowe dla bazy danych i u\u017cytkownika nie s\u0105 dost\u0119pne w definicji dzia\u0142ania typu <em>Wywo\u0142anie funkcji<\/em>, poniewa\u017c takie definicje dzia\u0142a\u0144 nie s\u0105 zwykle ko\u0144czone interaktywnie przez u\u017cytkownika.<\/span><\/p>\n<h4 id=\"aplikacje-dzialajace-w-tle-getjobresult\" ><span class=\"ez-toc-section\" id=\"Aplikacje_dzialajace_w_tle_getJobResult\"><\/span>Aplikacje dzia\u0142aj\u0105ce w tle (getJobResult)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Typ w\u0119z\u0142a <em>W\u0119ze\u0142 us\u0142ug<\/em> jest u\u017cywany w definicjach proces\u00f3w do tworzenia dzia\u0142anie, kt\u00f3re wywo\u0142uje aplikacj\u0119 dzia\u0142aj\u0105c\u0105 w tle. W\u0119ze\u0142 us\u0142ugi jest przetwarzany przez zlecenie przetwarzania. Zlecenie przetwarzania mo\u017ce by\u0107 r\u00f3wnie\u017c wybrane jako procesor w definicji dzia\u0142ania typu <em>Pojedyncze dzia\u0142anie<\/em>.<\/p>\n<p>W funkcji zamykania funkcja skryptu<em> getJobResult<\/em> mo\u017ce by\u0107 u\u017cyta do oceny wynik\u00f3w wywo\u0142anej aplikacji dzia\u0142aj\u0105cej w tle, pod warunkiem, \u017ce dzia\u0142anie oczekuje na zadanie przetwarzania, albo poprzez aktywacj\u0119 pola wyboru<em> Oczekuje na zadanie przetwarzania<\/em> na zak\u0142adce <em>Opracowanie<\/em>, albo poprzez u\u017cycie polecenia <em>setJobWaitFinish(true)<\/em> w funkcji tworzenia.<\/p>\n<p>Funkcja <em>getJobResult<\/em> przesy\u0142a tabel\u0119 hash z warto\u015bciami zmiennych, kt\u00f3re znajduj\u0105 si\u0119 za <em>CisParameterList:<\/em> na zak\u0142adce <em>Wyniki<\/em> w oknie dialogowym w\u0142a\u015bciwo\u015bci przetwarzanego zadania.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Zlecenie przetwarzania w celu wygenerowania listy inwentaryzacji dla listy pojemnik\u00f3w (aplikacja w tle <em>com.cisag.app.inventory.physical.log.PhysicalInventoryCountProcessing<\/em> i akcja <em>CreateCountLists<\/em>) ma nast\u0119puj\u0105ce wyniki wykonania:<\/p>\n<p><em>CisParameterList:<\/em><\/p>\n<p><em>{batchJobGuids:null}<\/em><\/p>\n<p><em>{com.cisag.pgm.base.CisApplicationCallResult:true}<\/em><\/p>\n<p><em>{nextAction:0}<\/em><\/p>\n<p><em>{nextParameters:null}<\/em><\/p>\n<p><em>{outQueueEntryGuids:null}<\/em><\/p>\n<p><em>{result:1}<\/em><\/p>\n<p><em>{resultParmeters:CisParameterList:<\/em><\/p>\n<p><em>{ResultNumberOfSuccessfulResults:1}<\/em><\/p>\n<p><em>{ResultPhysicalInventoryCountListGuids:[[B@22833e99]}}.<\/em><\/p>\n<p><em>{state:2}<\/em><\/p>\n<p><em>{waitingResult:0}<\/em><\/p>\n<p>Je\u015bli dzia\u0142anie oczekuje na przetworzenie zadania, w\u00f3wczas <em>getJobResult<\/em> mo\u017ce zwr\u00f3ci\u0107 nast\u0119puj\u0105c\u0105 tabel\u0119 skr\u00f3t\u00f3w:<\/p>\n<p><em>{batchJobGuids=[103=null], com.cisag.pgm.base.CisApplicationCallResult=[B=true], nextAction=[N=0], nextParameters=[103=null], outQueueEntryGuids=[103=null], result=[N=1], resultParmeters=[H={ResultNumberOfSuccessfulResults=[N=1], ResultPhysicalInventoryCountListGuids=[L=[[G=0080EED3CBFB2E10B118AD1BAABC0000]]]}], state=[N=2], waitingResult=[N=0]}<\/em><\/p>\n<p>Rzeczywiste wyniki wywo\u0142anej aplikacji dzia\u0142aj\u0105cej w tle mo\u017cna znale\u017a\u0107 w zmiennej <em>resultParmeters<\/em>. Poni\u017cszy skrypt w funkcji zamykania analizuje je, otwiera wygenerowane listy inwentaryzacji i wyprowadza ich identyfikacj\u0119 do dziennika:<\/p>\n<p><em>function close(state as Number)<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>var rp as HashMap;<\/em><\/p>\n<p><em>var cls as Number; \/* liczba wygenerowanych list zliczania *\/<\/em><\/p>\n<p><em>var clGuids as Guid[]; \/* lista identyfikator\u00f3w GUID listy zliczania *\/<\/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>cls := cast(Number, rp.ResultNumberOfSuccessfulResults);<\/em><\/p>\n<p><em>clGuids := cast(Guid[], rp.ResultPhysicalInventoryCountListGuids);<\/em><\/p>\n<p><em>echo(format(cls, &#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><\/div><\/section>\n<h5 id=\"uslugi-sieci-web-getserviceresponse\" ><span class=\"ez-toc-section\" id=\"Uslugi_sieci_Web_getServiceResponse\"><\/span>Us\u0142ugi sieci Web (getServiceResponse)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Typ dzia\u0142ania <em>W\u0119ze\u0142 us\u0142ugi sieci Web<\/em> jest u\u017cywany w definicjach proces\u00f3w do wywo\u0142ywania zewn\u0119trznej us\u0142ugi internetowej za pomoc\u0105 aplikacji w tle. Aplikacja dzia\u0142aj\u0105ca w tle korzysta z protoko\u0142u HTTP i mo\u017ce wywo\u0142ywa\u0107 zewn\u0119trzne us\u0142ugi sieciowe za po\u015brednictwem JSON\/REST i XML\/SOAP.<\/p>\n<p>W funkcji <em>close<\/em> do oceny wynik\u00f3w mo\u017cna u\u017cy\u0107 funkcji skryptu <em>getServiceResponse<\/em>. Funkcja zwraca parametr wyniku <em>responseBody<\/em> aplikacji dzia\u0142aj\u0105cej w tle jako ci\u0105g znak\u00f3w. Funkcja ta jest bardziej kompaktowym zapisem wyra\u017cenia <em>getJobResult()[&#8222;resultParmeters&#8221;][&#8222;responseBody&#8221;]<\/em>. Warunkiem wst\u0119pnym oceny jest to, \u017ce dzia\u0142anie oczekuje na zadanie przetwarzania, albo poprzez aktywacj\u0119 pola wyboru <em>Oczekuje na zadanie przetwarzania<\/em> na zak\u0142adce <em>Opracowanie<\/em>, albo poprzez u\u017cycie polecenia <em>setJobWaitFinish(true)<\/em> w funkcji tworzenia. W zale\u017cno\u015bci od wybranej akcji aplikacji dzia\u0142aj\u0105cej w tle (JSON lub XML), mo\u017cna u\u017cy\u0107 funkcji <em>parseJson<\/em> lub <em>parseXml<\/em>, aby przekonwertowa\u0107 ci\u0105g znak\u00f3w zwr\u00f3cony przez <em>getServiceResponse<\/em> na tablic\u0119 hash.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Poni\u017cszy przyk\u0142ad wyprowadza do dziennika cztery zmienne wynikowe <em>data, errors, promise<\/em> i <em>ready<\/em> definicji dzia\u0142ania typu <em>W\u0119ze\u0142 us\u0142ugi sieci Web<\/em>:<\/p>\n<p><em>function validateHeader(<\/em><\/p>\n<p><em>\u00a0persistent as<\/em><\/p>\n<p><em>DataView(com.cisag.app.purchasing.order.model.PurchaseOrder),<\/em><\/p>\n<p><em>\u00a0current as<\/em><\/p>\n<p><em>DataView(com.cisag.app.purchasing.order.model.PurchaseOrder))<\/em><\/p>\n<p><em>{<\/em><\/p>\n<p><em>\u00a0const OrderStatus as valueSet(com.cisag.app.general.OrderStatus);<\/em><\/p>\n<p><em>\u00a0if ((persistent:status=OrderStatus.ORDER_ENTERED or<\/em><\/p>\n<p><em>persistent:status=OrderStatus.ORDER_HELD or<\/em><\/p>\n<p><em>persistent:status=OrderStatus.ORDER_CANCELED or<\/em><\/p>\n<p><em>(persistent:status=OrderStatus.ORDER_INVALID and<\/em><\/p>\n<p><em>persistent:statusBackup=OrderStatus.ORDER_RELEASED)) and<\/em><\/p>\n<p><em>current:status=OrderStatus.ORDER_RELEASED) {<\/em><\/p>\n<p><em>\u00a0var authorizedUsers := resolveRole(&#8222;MANAGERS&#8221;);<\/em><\/p>\n<p><em>\u00a0if (not isNull(persistent:responsible))<\/em><\/p>\n<p><em>\u00a0authorizedUsers := union(authorizedUsers,<\/em><\/p>\n<p><em>list(persistent:responsible));<\/em><\/p>\n<p><em>\u00a0if (not contains(authorizedUsers, environment.userGuid))<\/em><\/p>\n<p><em>\u00a0sendMessage(null, &#8222;ERROR&#8221;, &#8222;No authorization to release.&#8221;);<\/em><\/p>\n<p><em>\u00a0}<\/em><\/p>\n<p><em>}<\/em><\/div><\/section>\n<p><span style=\"color: #000000;\">Nale\u017cy pami\u0119ta\u0107, \u017ce atrybut <em>statusBackup<\/em> jest u\u017cywany, je\u015bli zam\u00f3wienie zawiera wi\u0119cej pozycji ni\u017c mo\u017cna zwolni\u0107 w transakcji bazy danych. W takim przypadku status zam\u00f3wienia jest zmieniany na <em>Nieprawid\u0142owy<\/em> przy pierwszej transakcji bazy danych, a atrybut <em>statusBackup<\/em> otrzymuje przysz\u0142y status <em>Zwolniony<\/em>. Status zam\u00f3wienia jest zmieniany na <em>Zwolniony<\/em> dopiero przy ostatniej transakcji w bazie danych.<\/span><\/p>\n<h3 id=\"obsluga-bledow\" ><span class=\"ez-toc-section\" id=\"Obsluga_bledow\"><\/span>Obs\u0142uga b\u0142\u0119d\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"ograniczenie-zlozonosci-wyrazen\" ><span class=\"ez-toc-section\" id=\"Ograniczenie_zlozonosci_wyrazen\"><\/span>Ograniczenie z\u0142o\u017cono\u015bci wyra\u017ce\u0144<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">J\u0119zyk skryptowy systemu nie nadaje si\u0119 do d\u0142u\u017cszych oblicze\u0144 lub przetwarzania du\u017cych ilo\u015bci danych. Z tego powodu czas dzia\u0142ania warunk\u00f3w i polece\u0144 jest ograniczony.<\/span><\/p>\n<p><span style=\"color: #000000;\">Ustawienia domy\u015blne to:<\/span><\/p>\n<table style=\"height: 185px; width: 100%; border-style: outset; border-color: #000000; background-color: #ffffff;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"123\"><span style=\"color: #000000;\"><strong>Dzia\u0142anie<\/strong><\/span><\/td>\n<td style=\"height: 23px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"140\"><span style=\"color: #000000;\"><strong>Ograniczenie<\/strong><\/span><\/td>\n<td style=\"height: 23px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"276\"><span style=\"color: #000000;\"><strong>Wyja\u015bnienie<\/strong><\/span><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"123\"><span style=\"color: #000000;\">while<\/span><\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"140\"><span style=\"color: #000000;\">1.000.000<\/span><\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"276\"><span style=\"color: #000000;\">P\u0119tle <em>while<\/em> ko\u0144cz\u0105 si\u0119 po 1 000 000 uruchomie\u0144.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"123\">\n<p><span style=\"color: #000000;\">getResultList<\/span><\/p>\n<p><span style=\"color: #000000;\">getCisObjectList<\/span><\/p>\n<\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"140\"><span style=\"color: #000000;\">10.000<\/span><\/td>\n<td style=\"height: 46px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"276\"><span style=\"color: #000000;\"><em>getResultList<\/em> i <em>getCisObjectList<\/em> mog\u0105 wyszukiwa\u0107 do 10 000 wierszy lub obiekt\u00f3w.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"123\">\n<p><span style=\"color: #000000;\">call<\/span><\/p>\n<p><span style=\"color: #000000;\">@<\/span><\/p>\n<\/td>\n<td style=\"height: 70px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"140\"><span style=\"color: #000000;\">100<\/span><\/td>\n<td style=\"height: 70px; border-style: outset; border-color: #000000; background-color: #ffffff;\" width=\"276\"><span style=\"color: #000000;\"><em>call<\/em> i <em>@<\/em> mog\u0105 wywo\u0142ywa\u0107 definicje dzia\u0142ania rekurencyjnie maksymalnie 100 razy. Warto\u015bci domy\u015blnej nie mo\u017cna zmieni\u0107.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #000000;\">Mo\u017cna u\u017cy\u0107 w\u0142a\u015bciwo\u015bci systemowej <em>com.cisag.pgm.workflow.MaxExpressionComplexity<\/em>, aby zmieni\u0107 sprawdzanie z\u0142o\u017cono\u015bci. Domy\u015bln\u0105 warto\u015bci\u0105 jest 1000. Warto\u015bci graniczne wszystkich operacji z wyj\u0105tkiem limitu g\u0142\u0119boko\u015bci rekurencji s\u0105 liniowo zale\u017cne od warto\u015bci tej w\u0142a\u015bciwo\u015bci. Warto\u015b\u0107 0 ca\u0142kowicie wy\u0142\u0105cza sprawdzanie.<\/span><\/p>\n<h4 id=\"obsluga-bledow-uruchomieniowych\" ><span class=\"ez-toc-section\" id=\"Obsluga_bledow_uruchomieniowych\"><\/span>Obs\u0142uga b\u0142\u0119d\u00f3w uruchomieniowych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"color: #000000;\">Niekt\u00f3re b\u0142\u0119dy w wyra\u017ceniach nie mog\u0105 zosta\u0107 rozpoznane podczas sprawdzania skryptu.<\/span><\/p>\n<p><span style=\"color: #000000;\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Wyra\u017cenie &#8222;a\/b&#8221; zwraca b\u0142\u0105d, je\u015bli b=0.<\/div><\/section><\/span><\/p>\n<p><span style=\"color: #000000;\">B\u0142\u0119dy uruchomieniowe w silniku workflow maj\u0105 klas\u0119 komunikat\u00f3w <em>WFL<\/em>. B\u0142\u0119dy wyst\u0119puj\u0105ce podczas oceny wyra\u017ce\u0144 s\u0105 zapisywane w dzienniku OLTP lub repozytorium, w zale\u017cno\u015bci od definicji dzia\u0142ania. Rejestry OLTP lub rejestry repozytorium mo\u017cna przeszukiwa\u0107 za pomoc\u0105 aplikacji <em>Rejestr komunikat\u00f3w<\/em>. Je\u015bli warunek wst\u0119pny jest nieprawid\u0142owy, komunikat jest zapisywany w dzienniku OLTP lub repozytorium, w zale\u017cno\u015bci od dzia\u0142ania. Dzia\u0142anie jest jednak traktowane tak, jakby warunek wst\u0119pny zosta\u0142 spe\u0142niony.<\/span><\/p>\n<p><span style=\"color: #000000;\">Je\u015bli wyst\u0105pi\u0105 b\u0142\u0119dy w warunku przej\u015bcia, obliczeniach operator\u00f3w lub w bloku polece\u0144, nie zostanie wygenerowane \u017cadne nowe dzia\u0142anie. Komunikat jest zapisywany w rejestrze systemowym. Dziennik komunikat\u00f3w powinien by\u0107 sprawdzany pod k\u0105tem b\u0142\u0119d\u00f3w w regularnych odst\u0119pach czasu, zw\u0142aszcza je\u015bli definicje dzia\u0142a\u0144 zosta\u0142y zmienione lub nowo wprowadzone.<\/span><\/p>\n<h3 id=\"rozszerzenie-jezyka-skryptowego-systemu\" ><span class=\"ez-toc-section\" id=\"Rozszerzenie_jezyka_skryptowego_systemu\"><\/span>Rozszerzenie j\u0119zyka skryptowego systemu<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"color: #000000;\">Nowe polecenia i funkcje mo\u017cna dodawa\u0107 do j\u0119zyka skryptowego systemu za po\u015brednictwem predefiniowanego interfejsu programowania. Zw\u0142aszcza gdy sprawdzane maj\u0105 by\u0107 z\u0142o\u017cone warunki, mo\u017cna szybko osi\u0105gn\u0105\u0107 granice j\u0119zyka skryptowego pod wzgl\u0119dem ekspresyjno\u015bci lub wydajno\u015bci. W takim przypadku mo\u017cna rozwi\u0105za\u0107 problemy za pomoc\u0105 wyspecjalizowanych funkcji.<\/span><\/p>\n<p><span style=\"color: #000000;\">Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale <em>Rozszerzanie j\u0119zyka skryptowego<\/em> w dokumentacji <em>Interfejsy Workflow Management<\/em>.<\/span><\/p>\n\n\n<p><\/p>\n","protected":false},"author":27,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-10701","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\/10701","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=10701"}],"version-history":[{"count":52,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/10701\/revisions"}],"predecessor-version":[{"id":32103,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/10701\/revisions\/32103"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=10701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}