{"id":9683,"date":"2025-08-14T11:11:08","date_gmt":"2025-08-14T09:11:08","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9683"},"modified":"2025-08-14T11:11:09","modified_gmt":"2025-08-14T09:11:09","slug":"podrecznik-referencyjny-konfiguracja","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/","title":{"rendered":"Podr\u0119cznik referencyjny: Konfiguracja"},"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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Definicje_terminow\" >Definicje termin\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Konwencje\" >Konwencje<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Hierarchie\" >Hierarchie<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Dzialanie_aplikacji_Konfiguracja\" >Dzia\u0142anie aplikacji Konfiguracja<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Aplikacje_lub_obszary_ktore_mozna_dezaktywowac_za_pomoca_funkcji\" >Aplikacje lub obszary, kt\u00f3re mo\u017cna dezaktywowa\u0107 za pomoc\u0105 funkcji<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Aplikacje_ktore_mozna_parametryzowac_za_pomoca_funkcji\" >Aplikacje, kt\u00f3re mo\u017cna parametryzowa\u0107 za pomoc\u0105 funkcji<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Obiekt_deweloperski_Function\" >Obiekt deweloperski Function<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Aplikacja_Konfiguracja\" >Aplikacja Konfiguracja<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Naglowek\" >Nag\u0142\u00f3wek<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Obszar_roboczy\" >Obszar roboczy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Zakladka_Ustawienia\" >Zak\u0142adka Ustawienia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Zakladka_Informacje\" >Zak\u0142adka Informacje<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Uprawnienia\" >Uprawnienia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Rozwoj\" >Rozw\u00f3j<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Rejestracja_obiektu_deweloperskiego_typu_Function\" >Rejestracja obiektu deweloperskiego typu Function<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Rejestracja_obiektu_deweloperskiego_typu_Part\" >Rejestracja obiektu deweloperskiego typu Part<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Tworzenie_edytora_konfiguracji\" >Tworzenie edytora konfiguracji<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Klasa_CisCustomizingEditor\" >Klasa CisCustomizingEditor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Tworzenie_edytora_konfiguracji-2\" >Tworzenie edytora konfiguracji<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_init\" >Metoda init<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_initUserInterface\" >Metoda initUserInterface<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_dataToUi\" >Metoda dataToUi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_dataFromUi\" >Metoda dataFromUi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_validate\" >Metoda validate<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Metoda_validateDeactivate\" >Metoda validateDeactivate<\/a><\/li><\/ul><\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Edytor_konfiguracji_z_dodatkowymi_danymi_konfiguracji\" >Edytor konfiguracji z dodatkowymi danymi konfiguracji<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Rejestrowanie_powiazania_z_organizacja\" >Rejestrowanie powi\u0105zania z organizacj\u0105<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Funkcje_sterowane_zewnetrznie\" >Funkcje sterowane zewn\u0119trznie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Pobieranie_danych_konfiguracyjnych\" >Pobieranie danych konfiguracyjnych<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Interfejsy_PGM\" >Interfejsy PGM<\/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\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Klasa_Customizing\" >Klasa Customizing<\/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-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Specjalne_scenariusze_i_ich_rozwiazania\" >Specjalne scenariusze i ich rozwi\u0105zania<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Aplikacje_z_wieloma_kluczami_licencyjnymi_i_funkcjami\" >Aplikacje z wieloma kluczami licencyjnymi i funkcjami<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-konfiguracja\/#Zlozone_warunki_dla_logiki_dostepnosci_funkcji\" >Z\u0142o\u017cone warunki dla logiki dost\u0119pno\u015bci funkcji<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>W ramach<em> Konfiguracji<\/em> funkcje s\u0105 aktywowane lub dezaktywowane w odniesieniu do systemu, typu organizacji, organizacji lub typu bazy danych, a tak\u017ce ustawiane s\u0105 parametry specyficzne dla funkcji. Ten artyku\u0142 opisuje dzia\u0142anie i wykorzystanie interfejs\u00f3w systemowych do danych, kt\u00f3re mo\u017cna wprowadzi\u0107 w aplikacji <em>Konfiguracja<\/em>.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Programi\u015bci<\/li>\n<li>Konsultanci techniczni<\/li>\n<\/ul>\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<ul>\n<li><strong>Konfiguracja<\/strong> &#8212; przed uruchomieniem systemu Comarch ERP Enterprise jego funkcjonalno\u015bci musz\u0105 zosta\u0107 dostosowane do specyficznych wymaga\u0144 biznesowych przedsi\u0119biorstwa. Proces ten nazywa si\u0119 konfiguracj\u0105 i odbywa si\u0119 w systemie konfiguracyjnym klienta.<\/li>\n<li><strong>Dane konfiguracyjne<\/strong> &#8212; w ramach konfiguracji ustawienia i warto\u015bci funkcji s\u0105 zmieniane lub wprowadzane po raz pierwszy. Dane te nazywane s\u0105 danymi konfiguracyjnymi i mog\u0105 mie\u0107 wp\u0142yw na aplikacje. Niekt\u00f3re aplikacje odczytuj\u0105 dane konfiguracji jednej lub kilku funkcji i zmieniaj\u0105 swoje zachowanie lub wygl\u0105d w zale\u017cno\u015bci od wprowadzonych warto\u015bci w danych konfiguracyjnych.<\/li>\n<li><strong>Dodatkowe dane konfiguracyjne<\/strong> &#8212; je\u015bli dla danej funkcji maj\u0105 by\u0107 przechowywane z\u0142o\u017cone dane, kt\u00f3rych nie da si\u0119 odwzorowa\u0107 w jednym obiekcie (np. dane w formie tabeli), edytor konfiguracji mo\u017ce zapisa\u0107 te tak zwane dodatkowe dane konfiguracyjne w osobnych obiektach biznesowych. Edycja danych odbywa si\u0119 w tym przypadku zintegrowanie w aplikacji <em>Konfiguracja<\/em>. Dost\u0119p do danych nie odbywa si\u0119 za po\u015brednictwem standardowych interfejs\u00f3w PGM, lecz musi by\u0107 udost\u0119pniony w postaci oddzielnych klas.<\/li>\n<li><strong>Edytor konfiguracji<\/strong> &#8212; edytor konfiguracji to klasa Java, kt\u00f3ra dziedziczy po klasie <em>com.cisag.pgm.base.CisCustomizingEditor<\/em> i jest przypisana do sparametryzowanej funkcji jako edytor<\/li>\n<li><strong>Funkcja<\/strong> &#8212; funkcja w systemie Comarch ERP Enterprise to zestaw funkcjonalno\u015bci, kt\u00f3re s\u0105 udost\u0119pniane u\u017cytkownikom (lub nie) za pomoc\u0105 ustawie\u0144 w aplikacji <em>Konfiguracja<\/em>. Funkcja mo\u017ce by\u0107 zatem aktywna lub nieaktywna w danym systemie. Nie wszystkie funkcje mo\u017cna dezaktywowa\u0107, niekt\u00f3re s\u0105 zawsze dost\u0119pne. To, czy funkcja mo\u017ce zosta\u0107 aktywowana, mo\u017ce dodatkowo zale\u017ce\u0107 od posiadanych licencji. Niekt\u00f3re funkcje mo\u017cna sparametryzowa\u0107. Dzi\u0119ki temu mo\u017cliwe jest wprowadzenie ustawie\u0144 na poziomie ca\u0142ego systemu lub specyficznych dla danego typu organizacji.<\/li>\n<li><strong>Funkcja sterowana zewn\u0119trznie<\/strong> &#8212; funkcja sterowana zewn\u0119trznie to funkcja, kt\u00f3ra nie jest bezpo\u015brednio wy\u015bwietlana w aplikacji <em>Konfiguracja<\/em> i kt\u00f3rej wska\u017anik <em>Aktywna<\/em> jest sterowany przez edytor konfiguracji innej funkcji. Funkcje sterowane zewn\u0119trznie s\u0105 niewidocznymi, dezaktywowalnymi i niesparametryzowanymi funkcjami. Dzi\u0119ki ich u\u017cyciu mo\u017cliwe jest na przyk\u0142ad zaimplementowanie dezaktywacji aplikacji na podstawie z\u0142o\u017conych oblicze\u0144 w ramach istniej\u0105cego edytora konfiguracji.<\/li>\n<li><strong>Organizacje<\/strong> &#8212; organizacja to typ partnera, za pomoc\u0105 kt\u00f3rego rejestrowane s\u0105 na przyk\u0142ad przedsi\u0119biorstwa, oddzia\u0142y, dzia\u0142y itp. Do rejestrowania os\u00f3b istnieje osobny typ partnera.<br \/>\nOrganizacja mo\u017ce by\u0107 cz\u0119\u015bci\u0105 struktury organizacyjnej w obszarach zada\u0144: <em>Zakup, Logistyka magazynowa, Rachunkowo\u015b\u0107<\/em> lub <em>Sprzeda\u017c<\/em>. Jako element takiej struktury organizacyjnej, organizacja jest r\u00f3wnie\u017c nazywana organizacj\u0105 zakupow\u0105, logistyczn\u0105, sprzeda\u017cow\u0105 lub firm\u0105, w zale\u017cno\u015bci od obszaru zada\u0144.<\/li>\n<li><strong>Struktury organizacyjne<\/strong> &#8212; struktura organizacyjna odzwierciedla w zasadzie organizacj\u0119 proces\u00f3w w grupie przedsi\u0119biorstw. Cz\u0119\u015bciowo odwzorowuje r\u00f3wnie\u017c struktur\u0119. Do korzystania z uprawnie\u0144 zwi\u0105zanych z tre\u015bci\u0105 i do odwzorowywania proces\u00f3w biznesowych grupy przedsi\u0119biorstw potrzebne s\u0105 struktury organizacyjne, kt\u00f3re mo\u017cna tworzy\u0107 dla nast\u0119puj\u0105cych typ\u00f3w: <em>Zakup, Logistyka magazynowa, Rachunkowo\u015b\u0107<\/em> lub <em>Sprzeda\u017c<\/em>.<\/li>\n<\/ul>\n<h3 id=\"konwencje\" ><span class=\"ez-toc-section\" id=\"Konwencje\"><\/span>Konwencje<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"hierarchie\" ><span class=\"ez-toc-section\" id=\"Hierarchie\"><\/span>Hierarchie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wewn\u0119trzne organizacje, kt\u00f3re nale\u017c\u0105 do struktury organizacyjnej, mog\u0105 by\u0107 w ramach tej struktury uporz\u0105dkowane w hierarchiczn\u0105 struktur\u0119 o dowolnej g\u0142\u0119boko\u015bci zagnie\u017cd\u017cenia. Wyj\u0105tek stanowi struktura organizacyjna <em>Rachunkowo\u015b\u0107<\/em>, w kt\u00f3rej wszystkie uczestnicz\u0105ce organizacje s\u0105 bezpo\u015brednio podrz\u0119dne wobec klienta albo s\u0105 samym klientem.<\/p>\n<p>Struktura organizacyjna jednego typu nie musi by\u0107 identyczna ze struktur\u0105 organizacyjn\u0105 innego typu. <em>Organizacja A<\/em> mo\u017ce by\u0107 nadrz\u0119dna wobec <em>Organizacji B<\/em> w logistyce magazynowej, podczas gdy w sprzeda\u017cy mo\u017ce by\u0107 dok\u0142adnie odwrotnie.<\/p>\n<p>Mo\u017cliwe warto\u015bci dla typ\u00f3w struktur organizacyjnych mo\u017cna znale\u017a\u0107 w klasie <em>com.cisag.pgm.base.OrganizationHierarchyType<\/em>. Lista wszystkich organizacji w bazie danych OLTP jest udost\u0119pniana silnikowi systemowemu przez klas\u0119 <em>com.cisag.app.multiorg.logOrganizationInfoProvider<\/em> w postaci listy obiekt\u00f3w klasy <em>com.cisag.pgm.base.OrganizationInfo<\/em>. W instancji tej klasy zawarta jest informacja, do jakich typ\u00f3w struktur organizacyjnych nale\u017cy dana organizacja. Jest ca\u0142kowicie mo\u017cliwe, \u017ce jedna organizacja nale\u017cy do kilku typ\u00f3w struktur organizacyjnych.<\/p>\n<p>Wszystkie organizacje, kt\u00f3re znajduj\u0105 si\u0119 na li\u015bcie instancji <em>CisOrganizationInfo<\/em>, b\u0119d\u0105 p\u00f3\u017aniej wy\u015bwietlane w aplikacji <em>Konfiguracja<\/em> w li\u015bcie wyboru organizacji. W tym przypadku dane dla funkcji i organizacji mog\u0105 by\u0107 wprowadzone tylko wtedy, gdy obie zawieraj\u0105 te same typy struktur organizacyjnych. Przyk\u0142adowo, je\u015bli funkcja jest istotna dla logistyki magazynowej i zakupu, pola wprowadzania b\u0119d\u0105 aktywne tylko dla tych organizacji, kt\u00f3re posiadaj\u0105 typ logistyki magazynowej lub zakupu.<\/p>\n<p>Hierarchia organizacji w aplikacji <em>Konfiguracja<\/em> r\u00f3\u017cni si\u0119 od hierarchii ustalonych w strukturach organizacyjnych. W aplikacji <em>Konfiguracja<\/em> ka\u017cda organizacja ma klienta jako organizacj\u0119 nadrz\u0119dn\u0105 lub jest samym klientem. Rozwi\u0105zanie odbywa si\u0119 wi\u0119c dwupoziomowo. Dla funkcji specyficznych dla organizacji najpierw sprawdzane jest, czy istniej\u0105 dane dla wskazanej organizacji. Je\u015bli nie, u\u017cywane s\u0105 dane klienta (organizacji g\u0142\u00f3wnej).<\/p>\n<h3 id=\"dzialanie-aplikacji-konfiguracja\" ><span class=\"ez-toc-section\" id=\"Dzialanie_aplikacji_Konfiguracja\"><\/span>Dzia\u0142anie aplikacji Konfiguracja<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W aplikacji<em> Konfiguracja<\/em> tak zwane funkcje s\u0105 aktywowane lub dezaktywowane w odniesieniu do systemu lub organizacji, a tak\u017ce ustawiane s\u0105 parametry specyficzne dla funkcji. W przeciwie\u0144stwie do innych aplikacji, poszczeg\u00f3lne obiekty (tutaj: funkcje) nie s\u0105 wybierane w nag\u0142\u00f3wku, a nast\u0119pnie \u0142adowane, lecz wybiera si\u0119 je z listy w nag\u0142\u00f3wku. Inn\u0105 istotn\u0105 r\u00f3\u017cnic\u0105 jest to, \u017ce zawsze wszystkie obiekty s\u0105 zapisywane jednocze\u015bnie. Oznacza to, \u017ce mo\u017cna zmodyfikowa\u0107 kilka obiekt\u00f3w, a nast\u0119pnie zapisa\u0107 wszystkie zmiany jednocze\u015bnie, naciskaj\u0105c przycisk <strong>[Zapisz]<\/strong> na standardowym pasku narz\u0119dzi.<\/p>\n<h4 id=\"aplikacje-lub-obszary-ktore-mozna-dezaktywowac-za-pomoca-funkcji\" ><span class=\"ez-toc-section\" id=\"Aplikacje_lub_obszary_ktore_mozna_dezaktywowac_za_pomoca_funkcji\"><\/span>Aplikacje lub obszary, kt\u00f3re mo\u017cna dezaktywowa\u0107 za pomoc\u0105 funkcji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Zar\u00f3wno w obiekcie deweloperskim <em>Framework<\/em>, jak i w obiekcie deweloperskim <em>Application<\/em>, mo\u017cna wprowadzi\u0107 funkcj\u0119. Je\u015bli ta funkcja jest dezaktywowana w aplikacji <em>Konfiguracja<\/em> lub brakuje licencji niezb\u0119dnej dla tej funkcji dla zarejestrowanego klucza licencyjnego, odpowiednia aplikacja lub obszar zostaje dezaktywowany, co oznacza, \u017ce przestaje by\u0107 widoczny. Je\u015bli obszar nie jest dezaktywowany, ale wszystkie znajduj\u0105ce si\u0119 w nim aplikacje s\u0105 dezaktywowane, obszar r\u00f3wnie\u017c przestaje by\u0107 widoczny.<\/p>\n<h4 id=\"aplikacje-ktore-mozna-parametryzowac-za-pomoca-funkcji\" ><span class=\"ez-toc-section\" id=\"Aplikacje_ktore_mozna_parametryzowac_za_pomoca_funkcji\"><\/span>Aplikacje, kt\u00f3re mo\u017cna parametryzowa\u0107 za pomoc\u0105 funkcji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Funkcje mog\u0105 posiada\u0107 parametry, kt\u00f3re mo\u017cna odpytywa\u0107 w aplikacjach. Dzi\u0119ki temu zachowanie aplikacji lub liczba widocznych i aktywnych element\u00f3w mo\u017ce by\u0107 sterowana za pomoc\u0105 parametr\u00f3w zapisanych w funkcjach w formie ustawie\u0144 i warto\u015bci lub poprzez aktywacj\u0119 i dezaktywacj\u0119 samej funkcji.<\/p>\n<h4 id=\"obiekt-deweloperski-function\" ><span class=\"ez-toc-section\" id=\"Obiekt_deweloperski_Function\"><\/span>Obiekt deweloperski Function<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Szczeg\u00f3\u0142owy opis obiektu deweloperskiego <em>Function<\/em> mo\u017cna znale\u017a\u0107 w artykule <em>Obiekty deweloperskie<\/em>. W tym artykule przedstawiono jedynie najwa\u017cniejsze w\u0142a\u015bciwo\u015bci dotycz\u0105ce tworzenia nowych funkcji w aplikacji <em>Konfiguracja<\/em>. W aplikacji<em> Obiekty deweloperskie<\/em> rejestrowane s\u0105 obiekty typu<em> Funkcja<\/em>. Poszczeg\u00f3lne pola obiektu s\u0105 nast\u0119puj\u0105ce:<\/p>\n<ul>\n<li><strong>Oznaczenie<\/strong> &#8212; w pe\u0142ni kwalifikowana nazwa funkcji<\/li>\n<li><strong>Poziom<\/strong> &#8211;poziom funkcji definiuje jednostk\u0119, dla kt\u00f3rej mo\u017cna ustawi\u0107 warto\u015bci konfiguracji dla danej funkcji.\n<ul>\n<li><em>Funkcja systemowa<\/em> &#8212; warto\u015bci konfiguracji dla funkcji mog\u0105 by\u0107 ustawione raz dla ca\u0142ego systemu Comarch ERP Enterprise. Odpytywanie o warto\u015bci mo\u017ce odbywa\u0107 si\u0119 niezale\u017cnie od aktywnej bazy danych OLTP.<\/li>\n<li><em>Funkcja OLTP<\/em> &#8212; warto\u015bci konfiguracji dla funkcji mog\u0105 by\u0107 r\u00f3\u017cne dla ka\u017cdej bazy danych OLTP. Podczas kopiowania bazy danych OLTP, warto\u015bci konfiguracji s\u0105 r\u00f3wnie\u017c kopiowane. Aby odpyta\u0107 o warto\u015bci, baza danych OLTP musi by\u0107 aktywna.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Widok<\/strong> &#8212; okre\u015bla, czy funkcja jest wy\u015bwietlana w specyficznej dla aplikacji zak\u0142adce aplikacji <em>Konfiguracja<\/em>. Zazwyczaj funkcje s\u0105 wy\u015bwietlane, gdy s\u0105 sparametryzowane lub dezaktywowalne, jednak istniej\u0105 sytuacje, w kt\u00f3rych nie jest to po\u017c\u0105dane (np. gdy funkcja s\u0142u\u017cy jedynie do \u0142\u0105czenia r\u00f3\u017cnych kluczy licencyjnych, wi\u0119cej informacji znajduje si\u0119 w rozdziale <em>Specjalne scenariusze i ich rozwi\u0105zania<\/em>).<\/li>\n<li><strong>Mo\u017cliwa dezaktywacja<\/strong> &#8212; je\u015bli funkcja jest dezaktywowalna, mo\u017cna j\u0105 r\u0119cznie aktywowa\u0107 i dezaktywowa\u0107 w aplikacji <em>Konfiguracja<\/em>. Funkcje niedezaktywowalne s\u0105 zawsze aktywne. Je\u015bli funkcja zostanie p\u00f3\u017aniej ustawiona jako dezaktywowalna, w wyniku aktualizacji danych wska\u017anik Aktywna musi zosta\u0107 ustawiony na \u017c\u0105dan\u0105 warto\u015b\u0107 we wszystkich bazach danych.<\/li>\n<li><strong>Sparametryzowany<\/strong> &#8212; je\u015bli funkcja jest sparametryzowana, opr\u00f3cz wska\u017anika <em>Aktywna<\/em>, mo\u017cna r\u00f3wnie\u017c zapisywa\u0107 warto\u015bci w aplikacji<em> Konfiguracja<\/em>. Do wprowadzania i zmiany tych warto\u015bci potrzebna jest klasa Java, kt\u00f3ra realizuje edytor i powi\u0105zane z nim walidacje. Je\u015bli funkcja ma parametry, nale\u017cy wybra\u0107 warto\u015b\u0107 <em>Tak<\/em>.<\/li>\n<li><strong>Klucz licencyjny<\/strong> &#8212; klucz licencyjny, kt\u00f3ry udost\u0119pnia funkcje. Je\u015bli klucz licencyjny jest okre\u015blony, funkcja nie mo\u017ce by\u0107 u\u017cywana w aplikacji<em> Konfiguracja<\/em>, je\u015bli klucz licencyjny nie jest licencjonowany. Je\u015bli klucz licencyjny nie jest okre\u015blony, licencjonowanie nie ma bezpo\u015bredniego wp\u0142ywu na to, czy funkcja <em>Konfiguracja<\/em> mo\u017ce by\u0107 u\u017cywana.<\/li>\n<li><strong>Wymagana funkcja<\/strong> &#8212; funkcja logicznie nadrz\u0119dna wobec danej funkcji. W aplikacji <em>Konfiguracja<\/em> funkcja jest wy\u015bwietlana hierarchicznie pod funkcj\u0105 wymagan\u0105. Je\u015bli funkcja wymagana jest dezaktywowana lub nie mo\u017ce by\u0107 u\u017cywana z powodu braku licencji, wszystkie podrz\u0119dne funkcje r\u00f3wnie\u017c s\u0105 dezaktywowane lub nie mog\u0105 by\u0107 u\u017cywane.<\/li>\n<li><strong>Klasa Java<\/strong> &#8212; klasa, kt\u00f3ra realizuje edytor sparametryzowanych funkcji. Klasa Java musi dziedziczy\u0107 z klasy <em>com.cisag.pgm.base.CisCustomizingEditor<\/em>. W przypadku funkcji niesparametryzowanych to pole nie ma znaczenia.<\/li>\n<\/ul>\n<h4 id=\"aplikacja-konfiguracja\" ><span class=\"ez-toc-section\" id=\"Aplikacja_Konfiguracja\"><\/span>Aplikacja Konfiguracja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Szczeg\u00f3\u0142owy opis aplikacji <em>Konfiguracja<\/em> znajduje si\u0119 w artykule <em>Konfiguracja.<\/em> Poni\u017cej opisano jedynie szczeg\u00f3\u0142y techniczne, kt\u00f3rych znajomo\u015b\u0107 jest niezb\u0119dna w procesie tworzenia oprogramowania.<\/p>\n<h5 id=\"naglowek\" ><span class=\"ez-toc-section\" id=\"Naglowek\"><\/span>Nag\u0142\u00f3wek<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W nag\u0142\u00f3wku aplikacji znajduj\u0105 si\u0119 nast\u0119puj\u0105ce pola:<\/p>\n<ul>\n<li><strong>Funkcja<\/strong> &#8212; jest to nazwa wy\u015bwietlana wybranej funkcji. Nazwa ta jest ustalana podczas tworzenia obiektu deweloperskiego <em>Function<\/em>. Warto\u015b\u0107 w aplikacji <em>Konfiguracja <\/em>jest tylko do odczytu i nie mo\u017cna jej zmieni\u0107.<\/li>\n<li><strong>Istotny dla<\/strong> &#8212; oznacza typy organizacji, dla kt\u00f3rych mo\u017cliwe jest utrzymanie danych konfiguracyjnych. Mo\u017cliwe warto\u015bci to: <em>System, OLTP<\/em> lub <em>Klient, Rachunkowo\u015b\u0107, Zakup, Logistyka magazynowa, Sprzeda\u017c<\/em> (mo\u017cliwe jest jednoczesne zaznaczenie kilku z nich). Warto\u015bci te s\u0105 ustawiane w obiekcie deweloperskim <em>Function. <\/em>W\u00a0aplikacji <em>Konfiguracja<\/em> s\u0105 tylko do odczytu i nie mo\u017cna ich zmieni\u0107.<\/li>\n<li><strong>Zastosuj dane firmy g\u0142\u00f3wnej<\/strong> &#8212; ten prze\u0142\u0105cznik pozwala okre\u015bli\u0107, \u017ce dla danej organizacji nie nale\u017cy przechowywa\u0107 oddzielnych danych, r\u00f3\u017cni\u0105cych si\u0119 od danych organizacji g\u0142\u00f3wnej (jest to warto\u015b\u0107 standardowa). Po pierwszym wy\u0142\u0105czeniu prze\u0142\u0105cznika dane konfiguracyjne organizacji g\u0142\u00f3wnej s\u0105 kopiowane dla danej organizacji i mo\u017cna je dostosowa\u0107 oraz zapisa\u0107. T\u0119 warto\u015b\u0107 mo\u017cna zmieni\u0107 w aplikacji <em>Konfiguracja<\/em>.<\/li>\n<li><strong>Aktywne<\/strong> &#8212; wska\u017anik do aktywacji funkcji konfiguracyjnej. W\u0142\u0105cza lub wy\u0142\u0105cza funkcj\u0119. T\u0119 warto\u015b\u0107 mo\u017cna zmieni\u0107 nie we wszystkich funkcjach, poniewa\u017c istniej\u0105 funkcje, bez kt\u00f3rych system nie mo\u017ce dzia\u0142a\u0107. To, czy funkcja jest dezaktywowalna, czy nie, jest definiowane w powi\u0105zanym obiekcie deweloperskim.<\/li>\n<\/ul>\n<h5 id=\"obszar-roboczy\" ><span class=\"ez-toc-section\" id=\"Obszar_roboczy\"><\/span>Obszar roboczy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Obszar roboczy jest podzielony na dwie zak\u0142adki:<\/p>\n<ul>\n<li><strong>Ustawienia<\/strong><\/li>\n<li><strong>Informacje<\/strong><\/li>\n<\/ul>\n<p>Zak\u0142adka<em> Ustawienia\u00a0<\/em>zawiera pola wprowadzania parametr\u00f3w funkcji, kt\u00f3ra jest aktualnie edytowana. Zak\u0142adka <em>Informacje<\/em>\u00a0zawiera og\u00f3lne, niezmienialne dane o funkcji. Zawarto\u015b\u0107 zak\u0142adek oraz p\u00f3l zostanie szczeg\u00f3\u0142owo opisana poni\u017cej.<\/p>\n<h5 id=\"zakladka-ustawienia\" ><span class=\"ez-toc-section\" id=\"Zakladka_Ustawienia\"><\/span>Zak\u0142adka Ustawienia<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Pola na zak\u0142adce <em>Ustawienia<\/em> s\u0105 specyficzne dla ka\u017cdej funkcji i s\u0105 definiowane za pomoc\u0105 specjalnego obiektu deweloperskiego <em>Part<\/em> oraz specyficznego edytora konfiguracji, kt\u00f3ry dziedziczy po klasie <em>com.cisag.pgm.base.CisCustomizingEditor<\/em>. W szczeg\u00f3lnych przypadkach mog\u0105 pojawi\u0107 si\u0119 dodatkowe dane konfiguracyjne, kt\u00f3rych nie da si\u0119 przedstawi\u0107 w obiekcie <em>Part<\/em>.<\/p>\n<h5 id=\"zakladka-informacje\" ><span class=\"ez-toc-section\" id=\"Zakladka_Informacje\"><\/span>Zak\u0142adka Informacje<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Poni\u017csze pola s\u0105 dost\u0119pne na zak\u0142adce <em>Informacje<\/em>:<\/p>\n<ul>\n<li><strong>Obiekt deweloperski<\/strong> &#8212; w pe\u0142ni kwalifikowalna nazwa funkcji (tylko do odczytu)<\/li>\n<li><strong>Klucz licencyjny<\/strong> &#8212; klucz licencyjny, od kt\u00f3rego funkcja jest bezpo\u015brednio zale\u017cna. Funkcja mo\u017ce by\u0107 jednak zale\u017cna od innych kluczy licencyjnych, je\u015bli logicznie nadrz\u0119dna funkcja r\u00f3wnie\u017c zale\u017cy od kluczy licencyjnych.<\/li>\n<li><strong>Zmienione przez<\/strong> &#8212; u\u017cytkownik, kt\u00f3ry wprowadzi\u0142 ostatnie zmiany w danych funkcji dla aktualnie wybranej organizacji<\/li>\n<li><strong>Zmienione dnia<\/strong> &#8212; data ostatniej zmiany<\/li>\n<li><strong>Pomoc kontekstowa<\/strong> &#8212; bezpo\u015brednia pomoc na podstawie obiektu deweloperskiego funkcji.<\/li>\n<\/ul>\n<p>Te informacje s\u0105 dost\u0119pne dla ka\u017cdej funkcji i w aplikacji<em> Konfiguracja<\/em> s\u0105 nieedytowalne.<\/p>\n<h4 id=\"uprawnienia\" ><span class=\"ez-toc-section\" id=\"Uprawnienia\"><\/span>Uprawnienia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla aplikacji<em> Konfiguracja<\/em> istotne s\u0105 uprawnienia zwi\u0105zane z aplikacj\u0105. Ponadto, nast\u0119puj\u0105cy obiekt biznesowy jest istotny dla okre\u015blania uprawnie\u0144 do aplikacji <em>Konfiguracja<\/em>:<\/p>\n<p><em>com.cisag.sys.kernel.obj.FunctionConfiguration<\/em><\/p>\n<p>Nie istniej\u0105 \u017cadne specjalne uprawnienia ani uprawnienia zwi\u0105zane z konkretnymi funkcjami dla aplikacji <em>Konfiguracja<\/em>.<\/p>\n<h3 id=\"rozwoj\" ><span class=\"ez-toc-section\" id=\"Rozwoj\"><\/span>Rozw\u00f3j<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ten rozdzia\u0142 opisuje tworzenie i w\u0142\u0105czanie nowych funkcji do aplikacji <em>Konfiguracja<\/em>.<\/p>\n<p>Aby doda\u0107 now\u0105 funkcj\u0119 do aplikacji <em>Konfiguracja<\/em>, nale\u017cy wykona\u0107 cztery kroki:<\/p>\n<ul>\n<li>Zarejestrowa\u0107 obiekt deweloperski typu <em>Function<\/em><\/li>\n<li>Zarejestrowa\u0107 obiekt deweloperski typu <em>Part<\/em><\/li>\n<li>Zarejestrowa\u0107 i zaimplementowa\u0107 obiekt deweloperski typu Klasa Java dla edytora konfiguracji<\/li>\n<\/ul>\n<p>Kroki <em>Zarejestrowa\u0107 obiekt deweloperski typu Part <\/em>oraz <em>Utworzy\u0107 edytor konfiguracji<\/em> mo\u017cna pomin\u0105\u0107, je\u015bli funkcja nie jest sparametryzowana. Poszczeg\u00f3lne kroki zostan\u0105 szczeg\u00f3\u0142owo opisane w kolejnych rozdzia\u0142ach.<\/p>\n<h4 id=\"rejestracja-obiektu-deweloperskiego-typu-function\" ><span class=\"ez-toc-section\" id=\"Rejestracja_obiektu_deweloperskiego_typu_Function\"><\/span>Rejestracja obiektu deweloperskiego typu Function<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Podstawowym warunkiem nowej funkcji jest obiekt rozwojowy <em>Function<\/em>. Musi on zosta\u0107 utworzony jako pierwszy.<\/p>\n<h4 id=\"rejestracja-obiektu-deweloperskiego-typu-part\" ><span class=\"ez-toc-section\" id=\"Rejestracja_obiektu_deweloperskiego_typu_Part\"><\/span>Rejestracja obiektu deweloperskiego typu Part<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli funkcja ma by\u0107 sparametryzowana, nale\u017cy utworzy\u0107 obiekt <em>Part<\/em>, kt\u00f3ry b\u0119dzie m\u00f3g\u0142 przechowywa\u0107 parametry. Jest to konieczne r\u00f3wnie\u017c wtedy, gdy wszystkie dane maj\u0105 by\u0107 przechowywane jako dodatkowe dane konfiguracyjne.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Z utworzonego obiektu deweloperskiego nale\u017cy wygenerowa\u0107 powi\u0105zane klasy Java za pomoc\u0105 narz\u0119dzia <em>crtjob<\/em>.<\/div><\/section>\n<p>Dla generycznej kontroli usuwania, czyli sprawdzania, czy dany obiekt jest nadal u\u017cywany w danych konfiguracyjnych, relacje w obiekcie<em> Part<\/em> musz\u0105 by\u0107 poprawnie okre\u015blone.<\/p>\n<h4 id=\"tworzenie-edytora-konfiguracji\" ><span class=\"ez-toc-section\" id=\"Tworzenie_edytora_konfiguracji\"><\/span>Tworzenie edytora konfiguracji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<h5 id=\"klasa-ciscustomizingeditor\" ><span class=\"ez-toc-section\" id=\"Klasa_CisCustomizingEditor\"><\/span>Klasa CisCustomizingEditor<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby rejestrowa\u0107 dane dla funkcji konfiguracyjnej, nale\u017cy utworzy\u0107 edytor konfiguracji, dla kt\u00f3rego istnieje dedykowana klasa bazowa <em>com.cisag.pgm.base.CisCustomizingEditor<\/em>. Aby utrzyma\u0107 ma\u0142\u0105 liczb\u0119 instancji tej klasy i ograniczy\u0107 czas uruchamiania aplikacji, aplikacja <em>Konfiguracja<\/em> zarz\u0105dza wszystkimi danymi wewn\u0119trznie. Edytor konfiguracji s\u0142u\u017cy wy\u0142\u0105cznie do walidacji i wy\u015bwietlania danych dla danej funkcji i organizacji. Edytor konfiguracji jest bezstanowy, co oznacza, \u017ce ta sama instancja mo\u017ce by\u0107 wywo\u0142ywana kolejno dla r\u00f3\u017cnych organizacji. Z tego powodu tymczasowe przechowywanie danych mi\u0119dzy wywo\u0142aniami metod edytora konfiguracji w zmiennych instancji nie jest mo\u017cliwe i mo\u017ce prowadzi\u0107 do niesp\u00f3jno\u015bci danych. Wszystkie dane musz\u0105 by\u0107 przechowywane w obiekcie <em>Part<\/em> lub ewentualnie w dodatkowych danych konfiguracyjnych. Edytor konfiguracji mo\u017ce by\u0107 tworzony w dw\u00f3ch wariantach:<\/p>\n<ul>\n<li>Zarz\u0105dzanie danymi obiektu <em>Part<\/em><\/li>\n<li>Zarz\u0105dzanie dodatkowymi danymi konfiguracyjnymi<\/li>\n<\/ul>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Je\u015bli maj\u0105 by\u0107 zarz\u0105dzane dodatkowe dane konfiguracyjne, funkcja musi by\u0107 co najmniej sparametryzowana, a obiekt <em>Part<\/em> musi zosta\u0107 zarejestrowany, nawet je\u015bli nie zawiera \u017cadnych danych. W takim przypadku <em>Part<\/em> musi zawiera\u0107 co najmniej jeden atrybut.<\/div><\/section>\n<p>Wszystkie wywo\u0142ania metod edytora konfiguracji z poziomu aplikacji <em>Konfiguracja<\/em> odbywaj\u0105 si\u0119 w ramach prawid\u0142owej transakcji. Transakcja ta jest finalizowana za pomoc\u0105 <em>commit<\/em> lub <em>rollback<\/em>, w zale\u017cno\u015bci od dzia\u0142ania u\u017cytkownika i wyniku walidacji.<\/p>\n<h5 id=\"tworzenie-edytora-konfiguracji\" ><span class=\"ez-toc-section\" id=\"Tworzenie_edytora_konfiguracji-2\"><\/span>Tworzenie edytora konfiguracji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby zaimplementowa\u0107 edytor konfiguracji, zazwyczaj nadpisuje si\u0119 nast\u0119puj\u0105ce metody klasy bazowej:<\/p>\n<ul>\n<li>init<\/li>\n<li>initUserInterface<\/li>\n<li>dataToUi<\/li>\n<li>dataFromUi<\/li>\n<li>validate<\/li>\n<li>validateDeactivate<\/li>\n<\/ul>\n<h6 id=\"metoda-init\" ><span class=\"ez-toc-section\" id=\"Metoda_init\"><\/span>Metoda init<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Metoda<em> init<\/em> s\u0142u\u017cy do og\u00f3lnej inicjalizacji. Zazwyczaj w metodzie <em>init<\/em> <span style=\"font-size: revert; color: initial;\">powinny by\u0107 tworzone obiekty logiczne i walidacyjne, kt\u00f3rych edytor konfiguracji potrzebuje. Po inicjalizacji edytora konfiguracji musi mie\u0107 mo\u017cliwo\u015b\u0107 wywo\u0142ania metod <em>validate <\/em><\/span><span style=\"font-size: revert; color: initial;\">i <em>validateDeactivate<\/em>.<\/span><\/p>\n<h6 id=\"metoda-inituserinterface\" ><span class=\"ez-toc-section\" id=\"Metoda_initUserInterface\"><\/span>Metoda initUserInterface<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Elementy interfejsu edytora konfiguracji w aplikacji <em>Konfiguracja<\/em> s\u0105 inicjowane przez wywo\u0142anie metody <em>initUserInterface<\/em> tylko w razie potrzeby, w szczeg\u00f3lno\u015bci tylko wtedy, gdy edytor konfiguracji musi wy\u015bwietli\u0107 dane. Dzi\u0119ki temu mo\u017cliwe jest, \u017ce kontrole danych konfiguracyjnych s\u0105 dost\u0119pne r\u00f3wnie\u017c w przypadku dost\u0119pu, kt\u00f3ry nast\u0119puje poza logowaniami dialogowymi, np. podczas aktualizacji danych lub w programach aktualizuj\u0105cych. Dlatego podczas implementacji nale\u017cy wzi\u0105\u0107 pod uwag\u0119, \u017ce elementy interfejsu mog\u0142y nie zosta\u0107 utworzone. W tej metodzie tworzone s\u0105 wszystkie elementy interfejsu i przechowywane jako referencje w zmiennych instancji. Wymagany kontener mo\u017cna pobra\u0107 za pomoc\u0105 <em>View view = getView();<\/em>. Standardowo ustawiony jest dwukolumnowy uk\u0142ad standardowy. Zazwyczaj ustawia si\u0119 r\u00f3wnie\u017c wci\u0119cia za pomoc\u0105 <em>view.setDefaultMargin(VisualElementContainer.INSETS_ALL);<\/em>. Pola GUI s\u0105 dodawane do <em>View<\/em> po ich utworzeniu za pomoc\u0105 metody <em>add<\/em>. Nast\u0119pnie ustawiane s\u0105 identyfikatory komunikat\u00f3w dla komunikat\u00f3w o b\u0142\u0119dach walidacji. Podobnie jak w innych aplikacjach, odbywa si\u0119 to poprzez wywo\u0142anie <em>registerMessage(\u2026)<\/em> na polach GUI.<\/p>\n<h6 id=\"metoda-datatoui\" ><span class=\"ez-toc-section\" id=\"Metoda_dataToUi\"><\/span>Metoda dataToUi<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Ta metoda jest wywo\u0142ywana przez aplikacj\u0119 <em>Konfiguracja<\/em>, gdy dane musz\u0105 zosta\u0107 przeniesione do element\u00f3w interfejsu. Je\u015bli wywo\u0142anie metody<em> isEnabled()<\/em> zwraca warto\u015b\u0107 <em>false<\/em>, pola GUI musz\u0105 zosta\u0107 wyczyszczone. We wszystkich innych przypadkach warto\u015bci mog\u0105 by\u0107 wy\u015bwietlane w polach GUI. Kontener danych z danymi do przeniesienia mo\u017cna uzyska\u0107 przez wywo\u0142anie <em>&lt;Part&gt;Mutable part = (Mutable) getData()<\/em>;. Po wype\u0142nieniu danymi, pola GUI musz\u0105 by\u0107 jeszcze ustawione na aktywne\/nieaktywne (<em>enabled<\/em>) oraz edytowalne\/nieedytowalne (<em>editable<\/em>), w zale\u017cno\u015bci od wyniku wywo\u0142ania metod <em>isEnabled<\/em> i <em>isEditable<\/em>. Najpro\u015bciej mo\u017cna to zrobi\u0107 za pomoc\u0105 wywo\u0142ania <em>setVisualElementProperties(VisualElement[]);<\/em>, \u00a0gdzie przekazywana jest tablica wszystkich p\u00f3l GUI.<\/p>\n<h6 id=\"metoda-datafromui\" ><span class=\"ez-toc-section\" id=\"Metoda_dataFromUi\"><\/span>Metoda dataFromUi<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>W tej metodzie nale\u017cy odczyta\u0107 warto\u015bci z p\u00f3l GUI i umie\u015bci\u0107 je w obiekcie <em>Part.<\/em><\/p>\n<h6 id=\"metoda-validate\" ><span class=\"ez-toc-section\" id=\"Metoda_validate\"><\/span>Metoda validate<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Metoda <em>validate<\/em> s\u0142u\u017cy do sprawdzania sp\u00f3jno\u015bci danych. Jest ona wywo\u0142ywana dla ka\u017cdej kombinacji funkcji i organizacji, dla kt\u00f3rej mog\u0105 istnie\u0107 dane i kt\u00f3ra jest aktywna. Grupa komunikat\u00f3w u\u017cywana do walidacji musi by\u0107 okre\u015blona z klasy bazowej poprzez wywo\u0142anie metody <em>getMessageGroup()<\/em>, aby pozycjonowanie b\u0142\u0119du dzia\u0142a\u0142o poprawnie. Je\u015bli walidacja zale\u017cno\u015bci nie jest konieczna, walidacja dla danych odziedziczonych z organizacji g\u0142\u00f3wnej mo\u017ce zosta\u0107 pomini\u0119ta. To, czy dane pochodz\u0105 wy\u0142\u0105cznie z dziedziczenia od organizacji g\u0142\u00f3wnej, mo\u017cna sprawdzi\u0107, wywo\u0142uj\u0105c metod\u0119 <em>isDataInherited()<\/em>. Poprawno\u015b\u0107 danych zale\u017cy od obecno\u015bci komunikat\u00f3w o b\u0142\u0119dach.<\/p>\n<h6 id=\"metoda-validatedeactivate\" ><span class=\"ez-toc-section\" id=\"Metoda_validateDeactivate\"><\/span>Metoda validateDeactivate<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Ta walidacja jest wywo\u0142ywana, gdy funkcja dla odpowiedniej organizacji ma zosta\u0107 dezaktywowana lub jest ju\u017c dezaktywowana. Je\u015bli funkcja w danym kontek\u015bcie nie mo\u017ce lub nie powinna by\u0107 ju\u017c dezaktywowana, w tej metodzie nale\u017cy wys\u0142a\u0107 odpowiedni komunikat o b\u0142\u0119dzie.<\/p>\n<h5 id=\"edytor-konfiguracji-z-dodatkowymi-danymi-konfiguracji\" ><span class=\"ez-toc-section\" id=\"Edytor_konfiguracji_z_dodatkowymi_danymi_konfiguracji\"><\/span>Edytor konfiguracji z dodatkowymi danymi konfiguracji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli edytor konfiguracji potrzebuje wi\u0119cej danych, ni\u017c mo\u017cna przechowywa\u0107 w obiekcie<em> Part<\/em>, mo\u017cna to zrealizowa\u0107 za pomoc\u0105 dodatkowych danych konfiguracyjnych. Te dane mog\u0105 zawiera\u0107 informacje o stanie lub dane z innych tabel.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nawet je\u015bli potrzebne s\u0105 tylko dodatkowe dane, funkcja musi by\u0107 co najmniej sparametryzowana, a obiekt <em>Part <\/em>musi zosta\u0107 zarejestrowany, nawet je\u015bli nie zawiera \u017cadnych danych.<\/div><\/section>\n<p>Je\u015bli edytor konfiguracji ma pracowa\u0107 z dodatkowymi danymi konfiguracyjnymi, zazwyczaj nadpisuje si\u0119 dodatkowo nast\u0119puj\u0105ce metody klasy <em>CisCustomizingEditor<\/em>:<\/p>\n<ul>\n<li><strong>Metoda loadAdditionalData<\/strong> &#8212;\u00a0 metoda jest wywo\u0142ywana podczas \u0142adowania danych dla ka\u017cdej mo\u017cliwej kombinacji. Je\u015bli na przyk\u0142ad funkcja jest zarejestrowana dla wszystkich organizacji typu struktury organizacyjnej <em>Logistyka magazynowa<\/em>, metoda zostanie wywo\u0142ana dla ka\u017cdej z nich. Je\u015bli dodatkowe dane konfiguracyjne s\u0105 potrzebne dla danej kombinacji, nale\u017cy wywo\u0142a\u0107 metod\u0119 <em>setAdditionalData<\/em>. <span style=\"font-size: revert; color: initial;\">Rejestruje ona kontener danych i jego kopi\u0119 zapasow\u0105. Tylko po wywo\u0142aniu <\/span><em>setAdditionalData <\/em><span style=\"font-size: revert; color: initial;\">inne metody dla dodatkowych danych konfiguracyjnych zostan\u0105 wywo\u0142ane w dalszej kolejno\u015bci.<\/span><\/li>\n<li><strong>Metoda duplicateAdditionalData<\/strong> &#8212; metoda jest wywo\u0142ywana, gdy po raz pierwszy dezaktywowany jest parametr <em>Zastosuj dane firmy g\u0142\u00f3wnej<\/em>. Dane firmy g\u0142\u00f3wnej s\u0105 przekazywane jako szablon.<\/li>\n<li><strong>Metoda clearAdditionalData<\/strong> &#8212; edytor konfiguracji musi przywr\u00f3ci\u0107 dodatkowe dane konfiguracyjne do stanu pocz\u0105tkowego<\/li>\n<li><strong>Metoda isAdditionalDataChanged<\/strong> &#8212; pozwala aplikacji <em>Konfiguracja<\/em> na okre\u015blenie, czy dodatkowe dane konfiguracyjne zosta\u0142y zmienione. Zapisywane s\u0105 tylko zmienione dane.<\/li>\n<li><strong>Metoda updateAdditionalData <\/strong>&#8212;\u00a0 w tej metodzie mo\u017cna zapisa\u0107 dodatkowe dane konfiguracyjne<\/li>\n<li><strong>Metoda deleteAdditionalData<\/strong> &#8212; je\u015bli funkcja jest dezaktywowana, zawarto\u015b\u0107 dodatkowych danych konfiguracyjnych w bazie danych musi zosta\u0107 usuni\u0119ta. W tej metodzie nale\u017cy zaimplementowa\u0107 to usuni\u0119cie.<\/li>\n<li><strong>Metoda boolean isSupportedOrganization(CisOrganizationInfoinfo)<\/strong> &#8211;metoda zwraca warto\u015b\u0107 <em>true<\/em><span style=\"font-size: revert; color: initial;\">, je\u015bli wybrana organizacja ma typ struktury organizacyjnej, kt\u00f3ry jest dost\u0119pny dla danej funkcji. <\/span>Je\u015bli typ struktury organizacyjnej nie jest dost\u0119pny dla danej funkcji, danych dla tej funkcji nie mo\u017cna wprowadzi\u0107 dla wybranej organizacji. Je\u015bli istniej\u0105 inne lub bardziej z\u0142o\u017cone kryteria ni\u017c typ struktury organizacyjnej, odpowiedni\u0105 logik\u0119 mo\u017cna zaimplementowa\u0107 tutaj.<\/li>\n<li><strong>Metoda boolean isDataInherited(CisOrganizationInfo ouInfo)<\/strong> &#8212; je\u015bli dodatkowe dane dla firmy g\u0142\u00f3wnej s\u0105 zmieniane, musz\u0105 one by\u0107 replikowane dla wszystkich organizacji, kt\u00f3re dziedzicz\u0105 swoje dodatkowe dane z organizacji g\u0142\u00f3wnej. Ta metoda umo\u017cliwia sprawdzenie, czy dana organizacja dziedziczy swoje dane konfiguracyjne, czy te\u017c nie.<\/li>\n<\/ul>\n<h4 id=\"rejestrowanie-powiazania-z-organizacja\" ><span class=\"ez-toc-section\" id=\"Rejestrowanie_powiazania_z_organizacja\"><\/span>Rejestrowanie powi\u0105zania z organizacj\u0105<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla funkcji, kt\u00f3re maj\u0105 mie\u0107 edytora konfiguracji lub s\u0105 sparametryzowane, nale\u017cy zarejestrowa\u0107 powi\u0105zania z organizacj\u0105 w sekcji <em>Powi\u0105zanie z organizacj\u0105<\/em>. Je\u015bli funkcja ma dotyczy\u0107 tylko ca\u0142ej bazy danych OLTP, nie ma potrzeby rejestrowania powi\u0105zania z organizacj\u0105, poniewa\u017c taka funkcja domy\u015blnie dotyczy ca\u0142ej bazy danych OLTP.<\/p>\n<h4 id=\"funkcje-sterowane-zewnetrznie\" ><span class=\"ez-toc-section\" id=\"Funkcje_sterowane_zewnetrznie\"><\/span>Funkcje sterowane zewn\u0119trznie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Edytor konfiguracji ma mo\u017cliwo\u015b\u0107 sterowania wska\u017anikiem aktywno\u015bci innych funkcji. Te funkcje sterowane zewn\u0119trznie nie mog\u0105 by\u0107 sparametryzowane, musz\u0105 by\u0107 dezaktywowalne, nie mog\u0105 by\u0107 wy\u015bwietlane, musz\u0105 obs\u0142ugiwa\u0107 te same typy struktur organizacyjnych co funkcja edytora konfiguracji i nie mog\u0105 by\u0107 sterowane zewn\u0119trznie przez \u017cadn\u0105 inn\u0105 funkcj\u0119.<\/p>\n<p>Warto\u015bci wska\u017anika <em>Aktywne<\/em> funkcji sterowanej zewn\u0119trznie edytor konfiguracji nie mo\u017ce zapisywa\u0107 samodzielnie, w szczeg\u00f3lno\u015bci nie mo\u017ce jej przechowywa\u0107 w swoim obiekcie <em>Part<\/em>.<\/p>\n<ul>\n<li><strong>Metoda String [] getManagedFunctionNames()<\/strong> &#8212; metoda musi zosta\u0107 nadpisana, je\u015bli edytor konfiguracji ma przej\u0105\u0107 kontrol\u0119 nad innymi funkcjami. Nazwy funkcji s\u0105 pobierane przez aplikacj\u0119 <em>Konfiguracja<\/em> podczas inicjalizacji. Nale\u017cy zwr\u00f3ci\u0107 w pe\u0142ni kwalifikowane nazwy funkcji, kt\u00f3rymi ma zarz\u0105dza\u0107.<\/li>\n<li><strong>Metoda boolean isManagedFunctionActivated( String name )<\/strong> &#8212; metoda zwraca<em> true<\/em>, je\u015bli funkcja o podanej nazwie jest aktywna. Ta metoda jest zazwyczaj wywo\u0142ywana w metodzie <em>dataToUi<\/em>.<\/li>\n<li><strong>Metoda setManagedFunctionActivated( String name, boolean activated)<\/strong> &#8212; metoda ustawia status odpowiedniej funkcji na warto\u015b\u0107 parametru<em> activated<\/em>. Ta metoda jest zazwyczaj wywo\u0142ywana w metodzie <em>dataFromUi()<\/em>.<\/li>\n<\/ul>\n<h4 id=\"pobieranie-danych-konfiguracyjnych\" ><span class=\"ez-toc-section\" id=\"Pobieranie_danych_konfiguracyjnych\"><\/span>Pobieranie danych konfiguracyjnych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W niekt\u00f3rych aplikacjach nale\u017cy sprawdzi\u0107 istnienie okre\u015blonych funkcji, zanim pewne dzia\u0142ania w aplikacji b\u0119d\u0105 mo\u017cliwe lub dozwolone. Do pobierania funkcji systemowych i funkcji OLTP dost\u0119pne s\u0105 metody w trzech interfejsach PGM. Ponadto, do dost\u0119pu do interfejsu PGM <em>com.cisag.pgm.appserver.CisSystemManager<\/em> istnieje klasa <em>com.cisag.app.customizing.Customizing<\/em>, kt\u00f3ra udost\u0119pnia bezpo\u015brednie metody dost\u0119pu dla wi\u0119kszo\u015bci funkcji, aby upro\u015bci\u0107 dost\u0119p.<\/p>\n<h5 id=\"interfejsy-pgm\" ><span class=\"ez-toc-section\" id=\"Interfejsy_PGM\"><\/span>Interfejsy PGM<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li><strong> com.cisag.pgm.appserver.CisSystemManager<\/strong> &#8212; dla dost\u0119pu z poziomu zwyk\u0142ych aplikacji i klas logicznych<\/li>\n<li><strong>com.cisag.pgm.base.CisUpdateBase<\/strong> &#8212; w przypadku, gdy klasa aktualizacyjna dla obiektu biznesowego musi odpyta\u0107 o dane konfiguracyjne, metody musz\u0105 by\u0107 wywo\u0142ywane bezpo\u015brednio na klasie <em>com.cisag.pgm.base.CisUpdateBase<\/em>. Klasy aktualizacyjne rozszerzaj\u0105 klas\u0119 <em>CisUpdateBase<\/em> specyficznie dla danego obiektu biznesowego.<\/li>\n<li><strong>com.cisag.pgm.base.UpdateApplication<\/strong> &#8212; w przypadku, gdy aktualizacja danych musi odpyta\u0107 o dane konfiguracyjne aplikacji <em>Konfiguracja<\/em>, metody musz\u0105 by\u0107 wywo\u0142ywane bezpo\u015brednio na klasie <em>com.cisag.pgm.base.UpdateApplication<\/em>. Aktualizacje danych rozszerzaj\u0105 klas\u0119 <em>UpdateApplication<\/em>.<\/li>\n<\/ul>\n<p>W og\u00f3lnym przypadku aplikacji (dzia\u0142aj\u0105cej w tle lub dialogowej) metody nale\u017cy wywo\u0142ywa\u0107 na klasie <em>CisSystemManager<\/em>. Instancj\u0119 interfejsu <em>CisSystemManager<\/em> mo\u017cna uzyska\u0107 poprzez wywo\u0142anie: <em>CisEnvironment.getInstance().getSystemManager();.<\/em><\/p>\n<p>Dla konkretnej funkcji mo\u017cna odpyta\u0107 o dwie rzeczy. Po pierwsze, czy \u017c\u0105dana funkcja w og\u00f3le jest dost\u0119pna, poprzez wywo\u0142anie<em> isAvailable()<\/em>, a po drugie, powi\u0105zany obiekt konfiguracyjny poprzez wywo\u0142anie metody <em>getConfiguredValues()<\/em>.<\/p>\n<p>W zale\u017cno\u015bci od poziomu funkcji (<em>System, OLTP<\/em> lub <em>Organizacja)<\/em> przy wywo\u0142ywaniu metod nale\u017cy poda\u0107 organizacj\u0119 jako drugi parametr w przypadku utrzymania specyficznego dla organizacji, lub pomin\u0105\u0107 go w przypadku funkcji na poziomie systemu lub bazy danych OLTP. Je\u015bli podana zostanie GUID organizacji, mimo \u017ce funkcja jest zarz\u0105dzana na poziomie systemu (lub OLTP), zostanie zg\u0142oszony wyj\u0105tek. Podobnie, je\u015bli nie zostanie podana GUID, mimo \u017ce funkcja jest zarz\u0105dzana na poziomie organizacji, r\u00f3wnie\u017c zostanie zg\u0142oszony wyj\u0105tek.<\/p>\n<p>Zanim dane konfiguracyjne dla funkcji zostan\u0105 odpytane, zawsze nale\u017cy sprawdzi\u0107, czy funkcja w og\u00f3le jest dost\u0119pna. Je\u015bli funkcja jest dezaktywowana, nieposiadaj\u0105ca licencji lub nieskonfigurowana, zostanie zg\u0142oszony wyj\u0105tek, je\u015bli mimo to nast\u0105pi pr\u00f3ba odpytania o dane.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>CisSystemManager sm; <\/em><br \/>\n<em>sm = CisEnvironment.getInstance().getSystemManager(); <\/em><br \/>\n<em>if (sm.isAvailable(&#8222;com.cisag.app.Example&#8221;){ <\/em><br \/>\n<em>Values values; <\/em><br \/>\n<em>values = (Values) <\/em><br \/>\n<em>sm.getConfiguredValues((&#8222;com.cisag.app.Example&#8221;); <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<p>Do odpytywania o dane konfiguracyjne s\u0142u\u017c\u0105 nast\u0119puj\u0105ce metody w ka\u017cdej z wymienionych wy\u017cej klas:<\/p>\n<ul>\n<li><strong> isAvailable(String function)<\/strong> &#8212; zapytanie o dost\u0119pno\u015b\u0107 dla funkcji systemowej lub funkcji OLTP niezale\u017cnej od organizacji<\/li>\n<li><strong> isAvailable(String function, byte[]organizationGuid)<\/strong> &#8212; zapytanie o dost\u0119pno\u015b\u0107 dla funkcji OLTP zale\u017cnej od organizacji<\/li>\n<li><strong>getConfiguredValues(String function)<\/strong> &#8212; zapytanie o dane konfiguracyjne dla funkcji systemowej lub funkcji OLTP niezale\u017cnej od organizacji<\/li>\n<li><strong> getConfiguredValues(String function, byte[]organizationGuid)<\/strong> &#8212; zapytanie o dane konfiguracyjne dla funkcji OLTP zale\u017cnej od organizacji<\/li>\n<\/ul>\n<h5 id=\"klasa-customizing\" ><span class=\"ez-toc-section\" id=\"Klasa_Customizing\"><\/span>Klasa Customizing<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasa <em>com.cisag.app.customizing.Customizing<\/em>\u00a0to zbi\u00f3r metod, kt\u00f3re hermetyzuj\u0105 dost\u0119p do interfejs\u00f3w PGM opisanych w poprzedniej sekcji, przeznaczonych dla poszczeg\u00f3lnych funkcji.<\/p>\n<p>Korzy\u015bci z u\u017cywania tej klasy to:<\/p>\n<ul>\n<li>Uproszczenie u\u017cycia dzi\u0119ki konkretnie stypizowanym interfejsom dla ka\u017cdej funkcji<\/li>\n<li>Mniejsza podatno\u015b\u0107 na b\u0142\u0119dy podczas u\u017cytkowania dzi\u0119ki kontrolom w czasie kompilacji. Nazwy funkcji znajduj\u0105 si\u0119 tylko w jednym miejscu w kodzie \u017ar\u00f3d\u0142owym Java.<\/li>\n<li>Po\u015bredni dow\u00f3d u\u017cycia funkcji, oparty na wykorzystaniu metod dost\u0119pu<\/li>\n<\/ul>\n<p>Dlatego te\u017c, w kodzie aplikacji zaleca si\u0119 preferencyjne u\u017cywanie tej klasy do uzyskiwania dost\u0119pu do danych konfiguracyjnych.<\/p>\n<p>Poni\u017cej znajduje si\u0119 fragment implementacji tej klasy:<\/p>\n<p><em>\/** <\/em><\/p>\n<p><em>* Returns the configured value of &lt;tt&gt;<tt>com.cisag.app.General<\/tt>.&lt;\/tt&gt;<\/em><\/p>\n<p><em>*<\/em><\/p>\n<p><em>* @return The value, not &lt;code&gt;null&lt;\/code&gt;<\/em><\/p>\n<p><em>\/*<\/em><\/p>\n<p><em>public static com.cisag.app.customizing.obj.GeneralMutable <\/em><\/p>\n<p><em>getGeneral() { <\/em><\/p>\n<p><em>return (com.cisag.app.customizing.obj.GeneralMutable)<\/em><\/p>\n<p><em>getConfiguredValues(&#8222;com.cisag.app.General&#8221;); <\/em><br \/>\n<em>}<\/em><\/p>\n<p><em>\/**<\/em><\/p>\n<p><em>* Returns whether or not &lt;tt&gt;<tt>com.cisag.app.Sales&lt;\/tt&gt;<\/tt><\/em><\/p>\n<p><em>* is available for specified sales organization. <\/em><\/p>\n<p><em>*<\/em><\/p>\n<p><em>* @return &lt;code&gt;true&lt;\/true&gt; if the function is available.<\/em><\/p>\n<p><em>\u00a0*\/ <\/em><br \/>\n<em>public static boolean isSalesAvailable(byte[] salesOrganization) {<\/em><\/p>\n<p><em>return isAvailable(&#8222;com.cisag.app.Sales&#8221;,<\/em><\/p>\n<p><em>maintainingSales(salesOrganization));<\/em><\/p>\n<p><em>}<\/em><\/p>\n<h3 id=\"specjalne-scenariusze-i-ich-rozwiazania\" ><span class=\"ez-toc-section\" id=\"Specjalne_scenariusze_i_ich_rozwiazania\"><\/span>Specjalne scenariusze i ich rozwi\u0105zania<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"aplikacje-z-wieloma-kluczami-licencyjnymi-i-funkcjami\" ><span class=\"ez-toc-section\" id=\"Aplikacje_z_wieloma_kluczami_licencyjnymi_i_funkcjami\"><\/span>Aplikacje z wieloma kluczami licencyjnymi i funkcjami<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Istniej\u0105 aplikacje, kt\u00f3re maj\u0105 zale\u017ce\u0107 od dost\u0119pno\u015bci kilku kluczy licencyjnych. Je\u015bli aplikacja jest aktywowana (lub dezaktywowana) za pomoc\u0105 funkcji <em>jeden<\/em>, mo\u017cna poda\u0107 tylko jeden klucz licencyjny. Aby zamodelowa\u0107 zale\u017cno\u015b\u0107 od kolejnego klucza licencyjnego, definiuje si\u0119 zale\u017cno\u015b\u0107 funkcji <em>jeden<\/em> od innej funkcji <em>dwa<\/em>. Funkcja <em>dwa<\/em> jest wtedy zale\u017cna od drugiego klucza licencyjnego. Obie funkcje s\u0105 zdefiniowane jako niewidoczne, niesparametryzowane i niedezaktywowalne. Dzi\u0119ki temu aplikacja jest automatycznie aktywowana tylko wtedy, gdy oba klucze licencyjne s\u0105 w\u0142\u0105czone w licencji.<\/p>\n<h4 id=\"zlozone-warunki-dla-logiki-dostepnosci-funkcji\" ><span class=\"ez-toc-section\" id=\"Zlozone_warunki_dla_logiki_dostepnosci_funkcji\"><\/span>Z\u0142o\u017cone warunki dla logiki dost\u0119pno\u015bci funkcji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Istniej\u0105 aplikacje, w kt\u00f3rych kryterium ich dost\u0119pno\u015bci nie zale\u017cy jedynie od istnienia innych funkcji lub kluczy licencyjnych. Je\u015bli logika, kiedy aplikacja ma by\u0107 dost\u0119pna, jest bardziej z\u0142o\u017cona, ni\u017c mo\u017cna to odwzorowa\u0107 za pomoc\u0105 metadanych, nale\u017cy u\u017cy\u0107 funkcji sterowanej zewn\u0119trznie. Funkcja <em>jeden<\/em> ma edytor konfiguracji, w kt\u00f3rym wprowadzane s\u0105 wszystkie istotne dane, niezb\u0119dne do podj\u0119cia decyzji o dost\u0119pno\u015bci. Funkcja <em>dwa<\/em> jest funkcj\u0105 sterowan\u0105 zewn\u0119trznie, kt\u00f3rej parametr <em>Aktywne<\/em> jest kontrolowany przez edytor konfiguracji funkcji <em>jeden<\/em>. Dla samej aplikacji funkcja <em>dwa<\/em> jest nast\u0119pnie wprowadzana jako wymagana. Z perspektywy u\u017cytkownika aplikacji <em>Konfiguracja<\/em> funkcja <em>dwa<\/em> jest niewidoczna.<\/p>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9683","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-podreczniki-referencji"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9683"}],"version-history":[{"count":31,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9683\/revisions"}],"predecessor-version":[{"id":36792,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9683\/revisions\/36792"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}