{"id":8215,"date":"2026-03-23T09:31:00","date_gmt":"2026-03-23T08:31:00","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=8215"},"modified":"2026-03-23T09:31:09","modified_gmt":"2026-03-23T08:31:09","slug":"interfejs-corba","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/","title":{"rendered":"Interfejs CORBA"},"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\/interfejs-corba\/#Wprowadzenie\" >Wprowadzenie<\/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\/interfejs-corba\/#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-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#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-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Klienci_CORBA\" >Klienci CORBA<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Obslugiwane_implementacje_CORBA\" >Obs\u0142ugiwane implementacje CORBA<\/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\/index.php\/documentation\/interfejs-corba\/#Skladniki_systemu_klienta\" >Sk\u0142adniki systemu klienta<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#JacORB\" >JacORB<\/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-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Serwer_Comarch_ERP_Enterprise_CORBA\" >Serwer Comarch ERP Enterprise CORBA<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Uruchomienie_reczne\" >Uruchomienie r\u0119czne<\/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\/index.php\/documentation\/interfejs-corba\/#Uruchomienie_automatyczne\" >Uruchomienie automatyczne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Dostepne_porty\" >Dost\u0119pne porty<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Interfejs_Comarch_ERP_Enterprise_CORBA\" >Interfejs Comarch ERP Enterprise CORBA<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Opis_interfejsu_IDL\" >Opis interfejsu IDL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Mapowanie_typow_danych\" >Mapowanie typ\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-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Znaczniki_czasu\" >Znaczniki czasu<\/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\/index.php\/documentation\/interfejs-corba\/#CisObjects_i_Parts\" >CisObjects i Parts<\/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\/index.php\/documentation\/interfejs-corba\/#Sposob_dzialania_klienta_CORBA\" >Spos\u00f3b dzia\u0142ania klienta CORBA<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Nawiazanie_polaczenia\" >Nawi\u0105zanie po\u0142\u0105czenia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Sesja_i_uwierzytelnianie\" >Sesja i uwierzytelnianie<\/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\/interfejs-corba\/#Wywolywanie_aplikacji\" >Wywo\u0142ywanie aplikacji<\/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\/index.php\/documentation\/interfejs-corba\/#Zwalnianie_obiektow_CORBA_po_stronie_serwera\" >Zwalnianie obiekt\u00f3w CORBA po stronie serwera<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Zdalny_interfejs_BIS_przez_CORBA\" >Zdalny interfejs BIS przez CORBA<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Przypadki_uzycia\" >Przypadki u\u017cycia<\/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\/index.php\/documentation\/interfejs-corba\/#Aplikacje_w_tle\" >Aplikacje w tle<\/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\/index.php\/documentation\/interfejs-corba\/#Zdalny_import_przez_CORBA\" >Zdalny import przez CORBA<\/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\/index.php\/documentation\/interfejs-corba\/#Zdalny_eksport_przez_CORBA\" >Zdalny eksport przez CORBA<\/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\/index.php\/documentation\/interfejs-corba\/#Zdalne_wyszukiwanie_przez_CORBA\" >Zdalne wyszukiwanie przez CORBA<\/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-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Przyklady\" >Przyk\u0142ady\u00a0<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Postepowanie\" >Post\u0119powanie<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Uruchomienie_serwera\" >Uruchomienie serwera<\/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\/index.php\/documentation\/interfejs-corba\/#Uruchomienie_klienta_testowego\" >Uruchomienie klienta testowego<\/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\/interfejs-corba\/#Komunikaty_bledow\" >Komunikaty b\u0142\u0119d\u00f3w<\/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\/interfejs-corba\/#CORBA_i_zapory_sieciowe_firewalle\" >CORBA i zapory sieciowe (firewalle)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-corba\/#Ochrona_przed_niedoborem_zasobow\" >Ochrona przed niedoborem zasob\u00f3w<\/a><\/li><\/ul><\/nav><\/div>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-path-to-node=\"0\">Interfejs CORBA systemu Comarch ERP Enterprise stanowi infrastruktur\u0119 dla zdalnej, bezpo\u015bredniej i synchronicznej komunikacji mi\u0119dzy systemem Comarch ERP Enterprise a klientami CORBA. Klienci CORBA mog\u0105 wywo\u0142ywa\u0107 za po\u015brednictwem tego interfejsu specjalne funkcje w systemie Comarch ERP Enterprise. Funkcje te s\u0105 zawsze implementowane w systemie Comarch ERP Enterprise jako aplikacje dzia\u0142aj\u0105ce w tle i mog\u0105 by\u0107 wywo\u0142ywane niezale\u017cnie od konkretnego kana\u0142u wej\u015bcia-wyj\u015bcia, czyli niezale\u017cnie od danej technologii interfejsu lub komunikacji. Implementuj\u0105cy aplikacj\u0119 dzia\u0142aj\u0105c\u0105 w tle jest odizolowany od konkretnej technologii wywo\u0142ania. Zapewnia to mo\u017cliwo\u015b\u0107 ponownego wykorzystania przy p\u00f3\u017aniejszej rozbudowie lub zmianach technologii komunikacyjnych. Jedn\u0105 z technologii zintegrowanych w systemie Comarch ERP Enterprise jest CORBA.<\/p>\n<p data-path-to-node=\"1\">Niniejszy artyku\u0142 zawiera opis interfejsu CORBA systemu Comarch ERP Enterprise oraz zdalnego interfejsu BIS przez CORBA.<\/p>\n<p data-path-to-node=\"2\">Za po\u015brednictwem interfejsu CORBA systemu Comarch ERP Enterprise, system Comarch ERP Enterprise jest zawsze wywo\u0142ywany z zewn\u0105trz. Kierunek odwrotny, polegaj\u0105cy na wywo\u0142ywaniu innych serwer\u00f3w CORBA z poziomu systemu Comarch ERP Enterprise, nie jest obj\u0119ty interfejsem CORBA systemu Comarch ERP Enterprise i w zwi\u0105zku z tym nie zosta\u0142 tutaj opisany. Jest on zasadniczo okre\u015blony przez serwer CORBA, kt\u00f3ry ma zosta\u0107 u\u017cyty, oraz jego interfejsy. W takich przypadkach celowe jest stosowanie implementacji ORB JacORB dostarczanej wraz z systemem Comarch ERP Enterprise.<\/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>U\u017cytkownicy interfejsu serwera CORBA, tw\u00f3rcy zdalnie wywo\u0142ywanych aplikacji dzia\u0142aj\u0105cych w tle. Zak\u0142adana jest znajomo\u015b\u0107 CORBA i jej dzia\u0142ania.<\/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<p><strong>CORBA<\/strong> &#8211; skr\u00f3t od <em><strong>C<\/strong>ommon <strong>O<\/strong>bject <strong>R<\/strong>equest <strong>B<\/strong>roker <strong>A<\/strong>rchitecture. <\/em><span data-path-to-node=\"1,5\"><span class=\"citation-294\">Umo\u017cliwia cz\u0119\u015bciom program\u00f3w (<\/span><span class=\"citation-294\">obiektom<\/span><span class=\"citation-294\">) komunikacj\u0119 z obiektami innych program\u00f3w<\/span><\/span><span data-path-to-node=\"1,7\">. <\/span><span data-path-to-node=\"1,9\"><span class=\"citation-293\">Komunikacja ta jest mo\u017cliwa nawet w przypadku, gdy programy zosta\u0142y napisane w r\u00f3\u017cnych j\u0119zykach programowania lub dzia\u0142aj\u0105 na r\u00f3\u017cnych platformach. <\/span><\/span>W tym celu zdefiniowano niezale\u017cny od platformy j\u0119zyk opisu interfejsu IDL (Interface Definition Language). Dzi\u0119ki CORBA program \u017c\u0105da obiekt\u00f3w za pomoc\u0105 ORB (Object Request Broker). Znajomo\u015b\u0107 struktur programu, z kt\u00f3rego pochodzi obiekt, nie jest wymagana. CORBA zosta\u0142a opracowana do u\u017cytku w \u015brodowiskach zorientowanych obiektowo.<\/p>\n<p data-path-to-node=\"0\"><strong>Logowanie (Sesja)<\/strong> &#8211; wykonanie aplikacji dzia\u0142aj\u0105cych w tle jest uzale\u017cnione od obecno\u015bci \u015brodowiska wykonawczego Comarch ERP Enterprise, w kt\u00f3rym dost\u0119pne s\u0105 wszystkie funkcje silnika systemowego (np. Persistence service). Przy zdalnym uruchamianiu aplikacji dzia\u0142aj\u0105cych w tle, \u015brodowisko takie musi zosta\u0107 jawnie utworzone poprzez proces logowania. Parametrami logowania s\u0105: nazwa u\u017cytkownika Comarch ERP Enterprise, jego has\u0142o oraz nazwa aktywnej bazy danych OLTP (opcjonalnie). Parametry te nie mog\u0105 by\u0107 zmieniane w czasie trwania sesji logowania.<\/p>\n<p data-path-to-node=\"2\"><strong>Wywo\u0142anie bezstanowe<\/strong> &#8211; zdalne wywo\u0142anie aplikacji dzia\u0142aj\u0105cej w tle to proces, na pocz\u0105tku kt\u00f3rego tworzona jest nowa instancja aplikacji, nast\u0119pnie wywo\u0142ywana jest metoda <i data-path-to-node=\"3\" data-index-in-node=\"149\">run()<\/i>, a po zako\u0144czeniu operacji instancja ta jest ponownie zwalniana.<\/p>\n<p data-path-to-node=\"4\"><strong>Wywo\u0142anie stanowe\u00a0<\/strong>&#8211; stanowe wywo\u0142anie aplikacji dzia\u0142aj\u0105cej w tle to sekwencja zdalnych wywo\u0142a\u0144, kt\u00f3ra rozpoczyna si\u0119 od utworzenia nowej instancji aplikacji, obejmuje wielokrotne wywo\u0142ania metody <i data-path-to-node=\"5\" data-index-in-node=\"177\">run()<\/i> i ko\u0144czy si\u0119 jawnym poleceniem zwolnienia zasob\u00f3w aplikacji.<\/p>\n<h3 id=\"klienci-corba\" ><span class=\"ez-toc-section\" id=\"Klienci_CORBA\"><\/span>Klienci CORBA<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"obslugiwane-implementacje-corba\" ><span class=\"ez-toc-section\" id=\"Obslugiwane_implementacje_CORBA\"><\/span>Obs\u0142ugiwane implementacje CORBA<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Interfejs CORBA wykorzystuje implementacj\u0119 ORB JacORB po stronie serwera. Jest to implementacja ORB typu open source dla j\u0119zyka Java, kt\u00f3ra oferuje wysok\u0105 wydajno\u015b\u0107 i stabilno\u015b\u0107 przy niskim zu\u017cyciu zasob\u00f3w. Jednak klienci CORBA nie s\u0105 ograniczeni do korzystania z JacORB; w zasadzie mo\u017cna r\u00f3wnie\u017c<br \/>u\u017cywa\u0107 innych implementacji. Poni\u017csza tabela wskazuje, kt\u00f3re implementacje CORBA s\u0105 oficjalnie<br \/>obs\u0142ugiwane dla klient\u00f3w, w zale\u017cno\u015bci od system\u00f3w operacyjnych, na kt\u00f3rych dzia\u0142a klient lub serwer\u00a0 CORBA.<br \/>JDK-ORB odnosi si\u0119 do implementacji CORBA dostarczanej wraz z JDK.<\/p>\n<table style=\"width: 100%; height: 254px;\">\n<thead>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px;\" colspan=\"3\" width=\"385\">Comarch ERP Enterprise-CORBA-Serwer<br \/>System operacyjny<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px;\" width=\"156\">CORBA-Client<br \/>Betriebssystem, CORBA-Implementierung<\/td>\n<td style=\"height: 70px;\" width=\"120\">Windows<\/td>\n<td style=\"height: 70px;\" width=\"132\">Linux<\/td>\n<td style=\"height: 70px;\" width=\"133\">iSeries<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">Windows, JacORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"132\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"133\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">Windows, JDK-ORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"132\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"133\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">Linux, JacORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"132\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"133\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">Linux, JDK-ORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"132\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"133\">jaTak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">iSeries, JacORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"132\">Tak<\/td>\n<td style=\"height: 23px;\" width=\"133\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\" width=\"156\">iSeries, JDK-ORB<\/td>\n<td style=\"height: 23px;\" width=\"120\">Nie<\/td>\n<td style=\"height: 23px;\" width=\"132\">Nie<\/td>\n<td style=\"height: 23px;\" width=\"133\">Nie<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: left;\">Inne implementacje CORBA, zw\u0142aszcza dla j\u0119zyk\u00f3w programowania innych ni\u017c Java, nie zosta\u0142y przetestowane i nie s\u0105 oficjalnie obs\u0142ugiwane.<\/p>\n<h4 id=\"skladniki-systemu-klienta\" ><span class=\"ez-toc-section\" id=\"Skladniki_systemu_klienta\"><\/span>Sk\u0142adniki systemu klienta<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Klient CORBA wymaga odpowiedniej implementacji CORBA oraz klas wygenerowanych na podstawie IDL. Wymagane komponenty zale\u017c\u0105 od zastosowanej implementacji CORBA. Poni\u017cej opisano je na przyk\u0142adzie JacORB.<\/p>\n<h5 id=\"jacorb\" ><span class=\"ez-toc-section\" id=\"JacORB\"><\/span>JacORB<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"0\" data-end=\"67\">Klient Java wykorzystuj\u0105cy JacORB wymaga nast\u0119puj\u0105cych komponent\u00f3w:<\/p>\n<ul data-start=\"69\" data-end=\"561\">\n<li data-section-id=\"1bakjxj\" data-start=\"69\" data-end=\"261\">\n<p data-start=\"71\" data-end=\"261\">Biblioteki <em data-start=\"82\" data-end=\"94\">jacorb.jar<\/em>, <em data-start=\"96\" data-end=\"118\">avalon-framework.jar<\/em> oraz <em data-start=\"124\" data-end=\"136\">logkit.jar<\/em> w \u015bcie\u017cce klas<br data-start=\"151\" data-end=\"154\" \/>(zawarte w instalacji Comarch ERP Enterprise; wymagane pliki JAR mog\u0105 si\u0119 r\u00f3\u017cni\u0107 dla wersji JacORB wy\u017cszych ni\u017c 2.2.1)<\/p>\n<\/li>\n<li data-section-id=\"1eo65bm\" data-start=\"263\" data-end=\"373\">\n<p data-start=\"265\" data-end=\"373\">Plik konfiguracyjny JacORB <em data-start=\"292\" data-end=\"311\">jacorb.properties<\/em> w \u015bcie\u017cce klas (w Comarch ERP Enterprise stanowi cz\u0119\u015b\u0107 kodu aplikacji)<\/p>\n<\/li>\n<li data-section-id=\"14l9b0f\" data-start=\"375\" data-end=\"561\">\n<p data-start=\"377\" data-end=\"561\">Klasy interfejs\u00f3w CORBA w \u015bcie\u017cce klas<br data-start=\"415\" data-end=\"418\" \/>(klasy wygenerowane z pliku IDL; dost\u0119pne w System Engine w pakiecie <em data-start=\"489\" data-end=\"519\">com.cisag.pgm.external.corba<\/em> lub mo\u017cliwe do wygenerowania z pliku IDL)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"563\" data-end=\"821\">Dla klient\u00f3w wykorzystywanych produkcyjnie zaleca si\u0119 instalacj\u0119 opisanych komponent\u00f3w niezale\u017cnie od Comarch ERP Enterprise, aby unikn\u0105\u0107 zale\u017cno\u015bci od tej instalacji. Klienci testowi mog\u0105 natomiast bezpo\u015brednio korzysta\u0107 z wersji JacORB dost\u0119pnej w instalacji Comarch ERP Enterprise.<\/p>\n<p data-start=\"823\" data-end=\"907\" data-is-last-node=\"\" data-is-only-node=\"\">Dodatkowe informacje dotycz\u0105ce JacORB dost\u0119pne s\u0105 pod adresem <a class=\"decorated-link\" href=\"http:\/\/www.jacorb.org\" target=\"_new\" rel=\"noopener\" data-start=\"885\" data-end=\"906\">http:\/\/www.jacorb.org<\/a>.<\/p>\n<h3 id=\"serwer-comarch-erp-enterprise-corba\" ><span class=\"ez-toc-section\" id=\"Serwer_Comarch_ERP_Enterprise_CORBA\"><\/span>Serwer Comarch ERP Enterprise CORBA<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:4c7d6b1f-f8ea-4eec-87d2-5c5ae9e3bfc3-4\" data-testid=\"conversation-turn-8\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"25ff7fd6-e0a4-44f4-ad67-1b2925c6bd8b\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"153\">Zgodnie ze specyfikacj\u0105 CORBA system Comarch ERP Enterprise udost\u0119pnia w\u0142asny serwer CORBA (Comarch ERP Enterprise CORBA Server), kt\u00f3ry zapewnia interfejs CORBA systemu Comarch ERP Enterprise.<\/p>\n<p data-start=\"155\" data-end=\"508\" data-is-last-node=\"\" data-is-only-node=\"\">Na jeden serwer aplikacji Comarch ERP Enterprise mo\u017ce zosta\u0107 uruchomiony maksymalnie jeden serwer CORBA. Serwer CORBA Comarch ERP Enterprise mo\u017ce obs\u0142ugiwa\u0107 \u017c\u0105dania dowolnej liczby klient\u00f3w CORBA. Uruchomienie serwera CORBA Comarch ERP Enterprise w ramach serwera aplikacji Comarch ERP Enterprisemo\u017ce nast\u0105pi\u0107 automatycznie podczas jego startu lub r\u0119cznie w dowolnym p\u00f3\u017aniejszym momencie.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:4c7d6b1f-f8ea-4eec-87d2-5c5ae9e3bfc3-5\" data-testid=\"conversation-turn-10\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"2ff7a6bd-ea1a-4321-b93a-d5b6d580808d\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<h4 data-start=\"0\" data-end=\"19\" id=\"uruchomienie-reczne\" ><span class=\"ez-toc-section\" id=\"Uruchomienie_reczne\"><\/span>Uruchomienie r\u0119czne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"z-0 flex min-h-[46px] justify-start\">\n<p data-start=\"0\" data-end=\"294\">Do r\u0119cznego uruchamiania dost\u0119pne jest polecenie Toolshell <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/uruchomienie-corba-serwer-w-comarch-erp-enterprise\/\"><em>strscs<\/em><\/a>. Serwer CORBA mo\u017cna w dowolnym momencie zatrzyma\u0107 za pomoc\u0105 polecenia Toolshell <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/zakonczenie-pracy-corba-serwer-w-comarch-erp-enterprise-endscs\/\"><em>endscs<\/em><\/a>. Sk\u0142adnia polece\u0144:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><span style=\"color: initial;\">strscs [-host:&lt;tekst&gt;] -port:&lt;int&gt; [-timeoutInterval:&lt;duration&gt;]<\/span><\/div>\n<div class=\"pe-11 pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\">-host:&lt;text&gt; host ORB\n<p>-port:&lt;int&gt; port ORB<\/p>\n<p>-timeoutInterval:&lt;<span style=\"color: initial;\">duration<\/span>&gt; interwa\u0142 timeout; Default: 30000<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"mt-3 w-full empty:hidden\">\n<div class=\"text-center\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<div class=\"pointer-events-none h-px w-px absolute bottom-0\" aria-hidden=\"true\" data-edge=\"true\">Je\u015bli parametr <em>-host<\/em> nie zostanie podany, system u\u017cyje warto\u015bci domy\u015blnej. U\u017cyty host jest w ka\u017cdym przypadku wy\u015bwietlany w komunikacie w Toolshell. W przypadku problem\u00f3w z po\u0142\u0105czeniem zaleca si\u0119 jawne podanie hosta. Warto\u015b\u0107 timeoutu podawana jest w milisekundach.<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<p>endscs [-waitForCompletion:&lt;boolean&gt;]<\/p>\n<p>-waitForCompletion:&lt;boolean&gt; oczekiwanie na zako\u0144czenie wszystkich \u017c\u0105da\u0144; domy\u015blnie: true<\/p>\n<h4 data-start=\"0\" data-end=\"29\" id=\"uruchomienie-automatyczne\" ><span class=\"ez-toc-section\" id=\"Uruchomienie_automatyczne\"><\/span><strong data-start=\"0\" data-end=\"29\">Uruchomienie automatyczne<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"31\" data-end=\"232\">Aby uruchomi\u0107 serwer CORBA razem z serwerem aplikacji Comarch ERP Enterprise, dost\u0119pne s\u0105 nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci, kt\u00f3re w razie potrzeby mo\u017cna doda\u0107 do pliku <em data-start=\"180\" data-end=\"199\">server.properties<\/em> serwera aplikacji Comarch ERP Enterprise:<\/p>\n<ul data-start=\"234\" data-end=\"877\">\n<li data-section-id=\"9ofk73\" data-start=\"234\" data-end=\"377\">\n<p data-start=\"236\" data-end=\"377\"><strong data-start=\"236\" data-end=\"313\">cisag.sys.kernel.corba.CorbaServerAutostart=true, false, domy\u015blnie: false<\/strong><br data-start=\"313\" data-end=\"316\" \/>Okre\u015bla, czy serwer CORBA ma by\u0107 uruchamiany automatycznie.<\/p>\n<\/li>\n<li data-section-id=\"18lekpl\" data-start=\"379\" data-end=\"492\">\n<p data-start=\"381\" data-end=\"492\"><strong data-start=\"381\" data-end=\"436\">cisag.sys.kernel.corba.CorbaServerHost=&lt;Host&gt;<\/strong><br data-start=\"436\" data-end=\"439\" \/>Host serwera CORBA przy uruchamianiu automatycznym.<\/p>\n<\/li>\n<li data-section-id=\"1lg8gtc\" data-start=\"494\" data-end=\"607\">\n<p data-start=\"496\" data-end=\"607\"><strong data-start=\"496\" data-end=\"551\">cisag.sys.kernel.corba.CorbaServerPort=&lt;Port&gt;<\/strong><br data-start=\"551\" data-end=\"554\" \/>Port serwera CORBA przy uruchamianiu automatycznym.<\/p>\n<\/li>\n<li data-section-id=\"10x9tow\" data-start=\"609\" data-end=\"877\">\n<p data-start=\"611\" data-end=\"877\"><strong data-start=\"611\" data-end=\"699\">cisag.sys.kernel.corba.CorbaServerTimeoutIntervalSeconds=&lt;czas&gt;, domy\u015blnie: 30<\/strong><br data-start=\"699\" data-end=\"702\" \/>Czas trwania interwa\u0142u (w sekundach), po kt\u00f3rym sprawdzana jest dost\u0119pno\u015b\u0107 klienta, kt\u00f3ry otworzy\u0142 sesj\u0119. Parametr ma zastosowanie wy\u0142\u0105cznie przy uruchamianiu automatycznym.<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"879\" data-end=\"998\" data-is-last-node=\"\" data-is-only-node=\"\">Szczeg\u00f3\u0142owe informacje dotycz\u0105ce powy\u017cszych oraz innych w\u0142a\u015bciwo\u015bci znajduj\u0105 si\u0119 w artykule <a title=\"W\u0142a\u015bciwo\u015bci ERP\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/wlasciwosci-erp\/\"><em>W\u0142a\u015bciwo\u015bci ERP.<\/em><\/a><\/p>\n<h4 data-start=\"0\" data-end=\"22\" id=\"dostepne-porty\" ><span class=\"ez-toc-section\" id=\"Dostepne_porty\"><\/span><strong data-start=\"0\" data-end=\"22\">Dost\u0119pne porty<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"24\" data-end=\"198\" data-is-last-node=\"\" data-is-only-node=\"\">Na ka\u017cdym systemie operacyjnym obowi\u0105zuj\u0105 ograniczenia dotycz\u0105ce port\u00f3w, kt\u00f3re mog\u0105 by\u0107 wykorzystywane przez serwer CORBA Comarch ERP Eneterprise. Nale\u017cy je uwzgl\u0119dni\u0107 przy wyborze port\u00f3w.<\/p>\n<h3 id=\"interfejs-comarch-erp-enterprise-corba\" ><span class=\"ez-toc-section\" id=\"Interfejs_Comarch_ERP_Enterprise_CORBA\"><\/span>Interfejs Comarch ERP Enterprise CORBA<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Klienci CORBA mog\u0105 korzysta\u0107 z interfejsu CORBA systemu Comarch ERP Eneterprise w celu wywo\u0142ywania funkcji systemu poprzez CORBA. Mo\u017cliwe jest wywo\u0142ywanie zar\u00f3wno standardowo dostarczanych aplikacji wsadowych, jak i aplikacji utworzonych w ramach dostosowa\u0144.<\/p>\n<h4 data-start=\"0\" data-end=\"27\" id=\"opis-interfejsu-idl\" ><span class=\"ez-toc-section\" id=\"Opis_interfejsu_IDL\"><\/span><strong data-start=\"0\" data-end=\"27\">Opis interfejsu IDL<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"29\" data-end=\"303\">IDL interfejsu CORBA systemu Comarch ERP Eneterprise jest przechowywany jako obiekt deweloperski typu plik pod nazw\u0105 <em data-start=\"132\" data-end=\"172\">com.cisag.pgm.external.corba.Corba-IDL<\/em>. W systemie plik\u00f3w instalacji Semiramis IDL znajduje si\u0119 w pliku: <em data-start=\"241\" data-end=\"303\">$SEMIRAMIS_HOME\/files\/com\/cisag\/pgm\/external\/corba\/Corba.idl<\/em><\/p>\n<p data-start=\"305\" data-end=\"908\">W Comarch ERP Eneterprise System Engine klasy Java wygenerowane na podstawie IDL znajduj\u0105 si\u0119 w przestrzeni nazw <em data-start=\"404\" data-end=\"434\">com.cisag.pgm.external.corba<\/em>. Klasy te mog\u0105 by\u0107 wykorzystywane przez zewn\u0119trznego klienta CORBA napisanego w j\u0119zyku Java, korzystaj\u0105cego z wersji JacORB dostarczanej wraz z Comarch ERP Eneterprise. W przypadku u\u017cycia innych implementacji ORB lub ich wersji konieczne jest ponowne wygenerowanie klas na podstawie IDL. W tym celu nale\u017cy skorzysta\u0107 z narz\u0119dzi dostarczanych przez dan\u0105 implementacj\u0119 ORB. W przypadku j\u0119zyk\u00f3w programowania innych ni\u017c Java nale\u017cy post\u0119powa\u0107 zgodnie z dokumentacj\u0105 danej implementacji ORB.<\/p>\n<p data-start=\"910\" data-end=\"1019\">IDL zawiera techniczny opis interfejsu CORBA i stanowi punkt wyj\u015bcia do tworzenia zewn\u0119trznego klienta CORBA.<\/p>\n<p data-start=\"1021\" data-end=\"1266\" data-is-last-node=\"\" data-is-only-node=\"\">IDL jest bardzo stabilny w ramach jednego wydania Comarch ERP Eneterprise. Przysz\u0142e zmiany tego interfejsu b\u0119d\u0105 dotyczy\u0107 g\u0142\u00f3wnie rozszerze\u0144 oraz optymalizacji wydajno\u015bci i nie b\u0119d\u0105 wp\u0142ywa\u0107 na podstawowy spos\u00f3b dzia\u0142ania (SessionManager, Session, Application).<\/p>\n<h4 data-start=\"0\" data-end=\"30\" id=\"mapowanie-typow-danych\" ><span class=\"ez-toc-section\" id=\"Mapowanie_typow_danych\"><\/span><strong data-start=\"0\" data-end=\"30\">Mapowanie typ\u00f3w danych<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"32\" data-end=\"163\">Interfejs CORBA obs\u0142uguje cz\u0119\u015b\u0107 typ\u00f3w danych, kt\u00f3re s\u0105 wspierane po stronie serwera Comarch ERP Eneterprise dla wywo\u0142ywanych aplikacji wsadowych.<\/p>\n<p data-start=\"165\" data-end=\"437\">Aplikacje wsadowe tworzone specjalnie na potrzeby wywo\u0142a\u0144 zewn\u0119trznych mog\u0105 wykorzystywa\u0107 wy\u0142\u0105cznie obs\u0142ugiwane typy danych. Istniej\u0105ce aplikacje wsadowe mog\u0105 by\u0107 sensownie wywo\u0142ywane z zewn\u0105trz tylko wtedy, gdy typy danych wszystkich wymaganych parametr\u00f3w s\u0105 obs\u0142ugiwane.<\/p>\n<p data-start=\"439\" data-end=\"587\" data-is-last-node=\"\" data-is-only-node=\"\">Obs\u0142ugiwane typy danych dla wywo\u0142a\u0144 aplikacji wsadowych przez CORBA oraz ich odwzorowanie w IDL oraz dla klienta CORBA w j\u0119zyku Java s\u0105 nast\u0119puj\u0105ce:<\/p>\n<table>\n<thead>\n<tr>\n<th>Comarch ERP Enterprise<\/th>\n<th>CORBA IDL \u2013 typ danych<\/th>\n<th>Klient CORBA Java<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>boolean<\/td>\n<td>boolean<\/td>\n<td>boolean<\/td>\n<\/tr>\n<tr>\n<td>short<\/td>\n<td>short<\/td>\n<td>short<\/td>\n<\/tr>\n<tr>\n<td>int<\/td>\n<td>long<\/td>\n<td>int<\/td>\n<\/tr>\n<tr>\n<td>long<\/td>\n<td>long long<\/td>\n<td>long<\/td>\n<\/tr>\n<tr>\n<td>String<\/td>\n<td>wstring<\/td>\n<td>String<\/td>\n<\/tr>\n<tr>\n<td>Binary (byte[])<\/td>\n<td>OctetSeq<\/td>\n<td>byte[]<\/td>\n<\/tr>\n<tr>\n<td>GUID (byte[])<\/td>\n<td>CorbaGuid<\/td>\n<td>byte[]<\/td>\n<\/tr>\n<tr>\n<td>Valueset (short)<\/td>\n<td>short<\/td>\n<td>short<\/td>\n<\/tr>\n<tr>\n<td>CisParameterList<\/td>\n<td>CorbaParameterList<\/td>\n<td>CorbaParameterList<\/td>\n<\/tr>\n<tr>\n<td>CisObject (tylko transient)<\/td>\n<td>CisObjectRepresentation<\/td>\n<td>CisObjectRepresentation<\/td>\n<\/tr>\n<tr>\n<td>List&lt;? extends CisObject&gt; (tylko transient)<\/td>\n<td>CisObjectRepresentationList<\/td>\n<td>CisObjectRepresentationList<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"131\">Typy danych po stronie klienta, o ile nie s\u0105 zdefiniowane w IDL lub w Java, znajduj\u0105 si\u0119 w pakiecie <em data-start=\"100\" data-end=\"130\">com.cisag.pgm.external.corba<\/em>.<\/p>\n<p data-start=\"133\" data-end=\"303\">Typy danych niewymienione nie s\u0105 obs\u0142ugiwane przez interfejs CORBA systemu Comarch ERP Eneterprise, nawet je\u015bli s\u0105 wykorzystywane po stronie serwera jako parametry aplikacji wsadowych.<\/p>\n<p data-start=\"305\" data-end=\"625\" data-is-last-node=\"\" data-is-only-node=\"\">Nale\u017cy r\u00f3wnie\u017c uwzgl\u0119dni\u0107, \u017ce warto\u015bci <em data-start=\"344\" data-end=\"350\">null<\/em> nie mog\u0105 by\u0107 stosowane (np. <em data-start=\"390\" data-end=\"396\">null<\/em> jako GUID). Przy przekazywaniu danych z Comarch ERP Eneterprise do klienta parametry o warto\u015bci <em data-start=\"479\" data-end=\"485\">null<\/em> s\u0105 usuwane, w wyniku czego nie s\u0105 dost\u0119pne po stronie klienta (wyj\u0105tek stanowi\u0105 parametry zwracane przez wywo\u0142ania aplikacji, patrz dalej).<\/p>\n<h5 data-start=\"0\" data-end=\"19\" id=\"znaczniki-czasu\" ><span class=\"ez-toc-section\" id=\"Znaczniki_czasu\"><\/span><strong data-start=\"0\" data-end=\"19\">Znaczniki czasu<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"21\" data-end=\"426\">Znaczniki czasu (prymitywny typ danych <em data-start=\"70\" data-end=\"81\">TimeStamp<\/em>) mog\u0105 by\u0107 po stronie CORBA reprezentowane jako typ IDL <em data-start=\"137\" data-end=\"148\">long long<\/em>. Po stronie serwera nie istnieje jednak automatyczne mapowanie na typ Java <em data-start=\"224\" data-end=\"240\">java.util.Date<\/em>, kt\u00f3ry jest u\u017cywany w systemie jako reprezentacja znacznika czasu. Mapowanie zgodne z metod\u0105 Java <em data-start=\"340\" data-end=\"361\">currentTimeMillis()<\/em> musi zosta\u0107 zaimplementowane indywidualnie w aplikacji wsadowej.<\/p>\n<p data-start=\"428\" data-end=\"564\" data-is-last-node=\"\" data-is-only-node=\"\">Sta\u0142e odpowiadaj\u0105ce warto\u015bciom +\u221e, -\u221e oraz nieprawid\u0142owemu znacznikowi czasu s\u0105 zdefiniowane w interfejsie IDL <em data-start=\"539\" data-end=\"563\">CorbaDatatypeConstants<\/em>.<\/p>\n<h5 id=\"cisobjects-i-parts\" ><span class=\"ez-toc-section\" id=\"CisObjects_i_Parts\"><\/span>CisObjects i Parts<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"24\" data-end=\"445\"><em data-start=\"24\" data-end=\"49\">CisObjectRepresentation<\/em> oraz <em data-start=\"55\" data-end=\"84\">CisObjectRepresentationList<\/em> s\u0142u\u017c\u0105 do wywo\u0142ywania aplikacji wsadowych wykorzystuj\u0105cych transjentne obiekty <em data-start=\"206\" data-end=\"217\">CisObject<\/em> oraz <em data-start=\"223\" data-end=\"230\">Parts<\/em> jako parametry. <em data-start=\"247\" data-end=\"272\">CisObjectRepresentation<\/em> s\u0142u\u017cy do przekazywania pojedynczego obiektu <em data-start=\"317\" data-end=\"328\">CisObject<\/em> lub <em data-start=\"333\" data-end=\"339\">Part<\/em>, natomiast <em data-start=\"351\" data-end=\"380\">CisObjectRepresentationList<\/em> umo\u017cliwia przekazywanie uporz\u0105dkowanej kolekcji takich obiekt\u00f3w.<\/p>\n<p data-start=\"580\" data-end=\"721\">W wyniku przesy\u0142ania obiekt\u00f3w <em data-start=\"610\" data-end=\"621\">CisObject<\/em> i <em data-start=\"624\" data-end=\"631\">Parts<\/em> przez CORBA tworzona jest ich kopia, zawieraj\u0105ca warto\u015bci atrybut\u00f3w z momentu transmisji.<\/p>\n<p data-start=\"723\" data-end=\"841\">Instancja <em data-start=\"733\" data-end=\"758\">CisObjectRepresentation<\/em> sk\u0142ada si\u0119 z nazwy odpowiedniego obiektu deweloperskiego oraz atrybut\u00f3w instancji:<\/p>\n<ul data-start=\"843\" data-end=\"998\">\n<li data-section-id=\"1wlenni\" data-start=\"843\" data-end=\"924\">\n<p data-start=\"845\" data-end=\"924\"><strong data-start=\"845\" data-end=\"858\">className<\/strong>: pe\u0142na nazwa obiektu deweloperskiego (Business Object lub Part)<\/p>\n<\/li>\n<li data-section-id=\"ylslz1\" data-start=\"925\" data-end=\"998\">\n<p data-start=\"927\" data-end=\"998\"><strong data-start=\"927\" data-end=\"937\">values<\/strong>: nazwy i warto\u015bci atrybut\u00f3w w postaci <em data-start=\"976\" data-end=\"996\">CorbaParameterList<\/em><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"1000\" data-end=\"1192\">W przypadku obiekt\u00f3w <em data-start=\"1021\" data-end=\"1032\">CisObject<\/em> zawieraj\u0105cych <em data-start=\"1047\" data-end=\"1054\">Parts<\/em>, odpowiednia warto\u015b\u0107 atrybutu w <em data-start=\"1087\" data-end=\"1114\">CorbaParameterList values<\/em> jest r\u00f3wnie\u017c instancj\u0105 <em data-start=\"1138\" data-end=\"1163\">CisObjectRepresentation<\/em>, reprezentuj\u0105c\u0105 dany <em data-start=\"1185\" data-end=\"1191\">Part<\/em>.<\/p>\n<p data-start=\"1194\" data-end=\"1518\">Podczas transmisji z klienta do Comarch ERP Enterprise przekazywane s\u0105 tylko wskazane atrybuty. Atrybuty nieprzekazane s\u0105 w Comarch ERP Enterprise uzupe\u0142niane warto\u015bciami domy\u015blnymi (technicznymi) i w takiej postaci przekazywane do aplikacji wsadowej. Przy transmisji do klienta zakres przekazywanych atrybut\u00f3w zale\u017cy wy\u0142\u0105cznie od aplikacji wsadowej.<\/p>\n<p data-start=\"1520\" data-end=\"1660\">Typy danych nieobs\u0142ugiwane przez interfejs CORBA nie mog\u0105 by\u0107 przekazywane r\u00f3wnie\u017c jako warto\u015bci atrybut\u00f3w obiekt\u00f3w <em data-start=\"1636\" data-end=\"1647\">CisObject<\/em> lub <em data-start=\"1652\" data-end=\"1659\">Parts<\/em>.<\/p>\n<p data-start=\"1662\" data-end=\"1857\">Nale\u017cy tak\u017ce uwzgl\u0119dni\u0107, \u017ce identyfikatory GUID zawarte w obiektach <em data-start=\"1730\" data-end=\"1741\">CisObject<\/em> i <em data-start=\"1744\" data-end=\"1751\">Parts<\/em> nie s\u0105 automatycznie konwertowane do czytelnej postaci podczas transmisji jako <em data-start=\"1831\" data-end=\"1856\">CisObjectRepresentation<\/em>.<\/p>\n<p data-start=\"1859\" data-end=\"2066\" data-is-last-node=\"\" data-is-only-node=\"\">Interfejs nowo tworzonej aplikacji wsadowej mo\u017ce zosta\u0107 uproszczony poprzez wykorzystanie wyspecjalizowanych <em data-start=\"1968\" data-end=\"1975\">Parts<\/em> zamiast pe\u0142nych instancji obiekt\u00f3w biznesowych, zawieraj\u0105cych wy\u0142\u0105cznie wymagane atrybuty.<\/p>\n<h4 id=\"sposob-dzialania-klienta-corba\" ><span class=\"ez-toc-section\" id=\"Sposob_dzialania_klienta_CORBA\"><\/span>Spos\u00f3b dzia\u0142ania klienta CORBA<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Przy implementacji klienta CORBA mo\u017cna wykorzysta\u0107 przyk\u0142adowe klienty dostarczane wraz z systemem jako materia\u0142 referencyjny. Poni\u017cej opisano kroki niezb\u0119dne do ustanowienia po\u0142\u0105czenia CORBA oraz wywo\u0142ywania aplikacji wsadowych.<\/p>\n<h5 id=\"nawiazanie-polaczenia\" ><span class=\"ez-toc-section\" id=\"Nawiazanie_polaczenia\"><\/span>Nawi\u0105zanie po\u0142\u0105czenia<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"33\" data-end=\"318\">Przed nawi\u0105zaniem po\u0142\u0105czenia z serwerem CORBA Comarch ERP Enterprise nale\u017cy najpierw zainicjalizowa\u0107 ORB. Nast\u0119pnie po\u0142\u0105czenie jest ustanawiane poprzez uzyskanie referencji do obiektu <em data-start=\"204\" data-end=\"225\">CorbaSessionManager<\/em>. W tym celu nale\u017cy u\u017cy\u0107 adresu \u201ecorbaloc:\u201d, b\u0119d\u0105cego ci\u0105giem znak\u00f3w w nast\u0119puj\u0105cym formacie:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\">\u00a0<\/div>\n<div class=\"pe-11 pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\">corbaloc::&lt;host&gt;:&lt;port&gt;&lt;SEMIRAMIS_CORBA_SESSION_MANAGER&gt;<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"386\" data-end=\"551\">Elementy <em data-start=\"395\" data-end=\"401\">host<\/em> oraz <em data-start=\"407\" data-end=\"413\">port<\/em> oznaczaj\u0105 nazw\u0119 hosta i port serwera CORBA systemu, z kt\u00f3rym ma zosta\u0107 nawi\u0105zane po\u0142\u0105czenie. Trzeci parametr odpowiada warto\u015bci sta\u0142ej:<\/p>\n<p data-start=\"553\" data-end=\"601\"><em data-start=\"553\" data-end=\"601\">CorbaConstants.SEMIRAMIS_CORBA_SESSION_MANAGER<\/em><\/p>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:4c7d6b1f-f8ea-4eec-87d2-5c5ae9e3bfc3-17\" data-testid=\"conversation-turn-34\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"da9ee273-4c9b-4bb0-b48c-5a10aea5a51d\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"603\" data-end=\"623\" data-is-last-node=\"\" data-is-only-node=\"\">zdefiniowanej w IDL.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"z-0 flex min-h-[46px] justify-start\">\n<h5 data-start=\"0\" data-end=\"34\" id=\"sesja-i-uwierzytelnianie\" ><span class=\"ez-toc-section\" id=\"Sesja_i_uwierzytelnianie\"><\/span><strong data-start=\"0\" data-end=\"34\">Sesja i uwierzytelnianie<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"36\" data-end=\"190\">Logowanie do systemu Comarch ERP Enterprise odbywa si\u0119 za po\u015brednictwem obiektu <em data-start=\"103\" data-end=\"124\">CorbaSessionManager<\/em>. W jego wyniku w systemie tworzona jest sesja. Sygnatura metody:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\">\u00a0<\/div>\n<div class=\"pe-11 pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>CorbaSessionManager::createSession(client, sessionParameters)<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"263\" data-end=\"709\">Parametr <em data-start=\"272\" data-end=\"280\">client<\/em> jest obiektem tworzonym po stronie klienta CORBA, kt\u00f3ry implementuje interfejs <em data-start=\"360\" data-end=\"373\">CorbaClient<\/em> zdefiniowany w IDL. Obiekt ten jest wywo\u0142ywany przez system po stronie klienta CORBA w celu sprawdzenia, czy po\u0142\u0105czenie CORBA nadal istnieje. Aby mechanizm ten dzia\u0142a\u0142 poprawnie, nale\u017cy w szczeg\u00f3lno\u015bci zapewni\u0107, \u017ce serwer CORBA ma mo\u017cliwo\u015b\u0107 ponownego po\u0142\u0105czenia si\u0119 z klientem CORBA przy u\u017cyciu adresu IP przekazanego przez klienta.<\/p>\n<p data-start=\"711\" data-end=\"1014\">W parametrze <em data-start=\"724\" data-end=\"743\">sessionParameters<\/em> nale\u017cy przekaza\u0107 nazw\u0119 u\u017cytkownika, has\u0142o oraz baz\u0119 danych OLTP, do kt\u00f3rej ma nast\u0105pi\u0107 logowanie. Nazwa u\u017cytkownika i has\u0142o s\u0105 weryfikowane tak jak przy logowaniu interaktywnym. Oznacza to, \u017ce u\u017cytkownik musi by\u0107 przypisany do systemu i posiada\u0107 odpowiednie uprawnienia.<\/p>\n<p data-start=\"1016\" data-end=\"1129\">W wyniku wywo\u0142ania zwracany jest obiekt <em data-start=\"1056\" data-end=\"1070\">CorbaSession<\/em>, reprezentuj\u0105cy sesj\u0119 klienta, oraz ewentualne komunikaty.<\/p>\n<p data-start=\"1131\" data-end=\"1177\">Wylogowanie sesji odbywa si\u0119 za pomoc\u0105 metody:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\">\u00a0<\/div>\n<div class=\"pe-11 pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>CorbaSessionManager::logoutSession()<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1225\" data-end=\"1327\" data-is-last-node=\"\" data-is-only-node=\"\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Aktywne sesje CORBA zalogowane do systemu mo\u017cna przegl\u0105da\u0107 w aplikacji <em>Panel System<\/em>.<\/div><\/section><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<h5 id=\"wywolywanie-aplikacji\" ><span class=\"ez-toc-section\" id=\"Wywolywanie_aplikacji\"><\/span>Wywo\u0142ywanie aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"33\" data-end=\"190\">Z obiektu <em data-start=\"43\" data-end=\"57\">CorbaSession<\/em> mo\u017cna uzyska\u0107 obiekt <em data-start=\"79\" data-end=\"104\">CorbaApplicationManager<\/em>, za pomoc\u0105 kt\u00f3rego mo\u017cliwe jest wywo\u0142ywanie aplikacji wsadowych w systemie Comarch ERP Enterprise.<\/p>\n<p data-start=\"192\" data-end=\"333\">Parametry s\u0105 przekazywane przy u\u017cyciu obiekt\u00f3w <em data-start=\"239\" data-end=\"259\">CorbaParameterList<\/em>. Aby przekaza\u0107 parametry wywo\u0142ania, nale\u017cy najpierw utworzy\u0107 nowy obiekt:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em style=\"color: initial;\">CorbaSession::createParameterList()<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"380\" data-end=\"428\">a nast\u0119pnie ustawi\u0107 w nim odpowiednie parametry.<\/p>\n<p data-start=\"430\" data-end=\"522\">W przypadku bezstanowego wywo\u0142ania aplikacji wsadowej wystarczy pojedyncze wywo\u0142anie metody:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em style=\"color: initial;\">CorbaApplicationManager::callApplication()<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"576\" data-end=\"1017\">Metoda zwraca list\u0119 parametr\u00f3w zawieraj\u0105c\u0105 warto\u015bci zwracane oraz komunikaty. Je\u015bli lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"688\" data-end=\"694\">null<\/em>, zgodnie z konwencj\u0105 oznacza to, \u017ce wywo\u0142anie zako\u0144czy\u0142o si\u0119 niepowodzeniem. Przyczyny mo\u017cna ustali\u0107 na podstawie komunikat\u00f3w. Je\u015bli lista parametr\u00f3w nie jest <em data-start=\"854\" data-end=\"860\">null<\/em>, jej znaczenie zale\u017cy od wywo\u0142anej aplikacji wsadowej \u2014 mo\u017ce to r\u00f3wnie\u017c oznacza\u0107 brak powodzenia, np. gdy aplikacja zwraca szczeg\u00f3\u0142owe informacje o b\u0142\u0119dzie.<\/p>\n<p data-start=\"1019\" data-end=\"1094\">W przypadku wywo\u0142a\u0144 stanowych nale\u017cy najpierw utworzy\u0107 instancj\u0119 aplikacji:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em><span style=\"color: initial;\">CorbaApplicationManager::createApplication()<\/span><\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1150\" data-end=\"1216\">a nast\u0119pnie mo\u017cna j\u0105 wielokrotnie wywo\u0142ywa\u0107 z r\u00f3\u017cnymi parametrami:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em><span style=\"color: initial;\">CorbaApplicationManager::runApplication()<\/span><\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><span style=\"font-size: revert; color: initial;\">Wywo\u0142ania stanowe, podobnie jak bezstanowe, zwracaj\u0105 list\u0119 parametr\u00f3w z wynikami. Interpretacja warto\u015bci <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"1374\" data-end=\"1380\">null<\/em><span style=\"font-size: revert; color: initial;\"> oraz komunikat\u00f3w jest analogiczna.<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1417\" data-end=\"1493\">Po zako\u0144czeniu pracy z aplikacj\u0105 stanow\u0105 nale\u017cy j\u0105 zwolni\u0107 za pomoc\u0105 metody:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em><span style=\"color: initial;\">CorbaApplicationManager::releaseApplication()<\/span><\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1550\" data-end=\"1642\">Dok\u0142adne sygnatury oraz spos\u00f3b u\u017cycia metod s\u0105 opisane w IDL oraz w przyk\u0142adowych klientach.<\/p>\n<p data-start=\"1644\" data-end=\"1937\">To, czy dana aplikacja wsadowa powinna by\u0107 wywo\u0142ywana w trybie bezstanowym czy stanowym, zale\u017cy od jej implementacji. W prostych przypadkach, wymagaj\u0105cych niewielkiej liczby parametr\u00f3w i zasob\u00f3w (np. sprawdzenie klucza obcego lub zapis prostego obiektu), wystarczaj\u0105ce s\u0105 wywo\u0142ania bezstanowe.<\/p>\n<p data-start=\"1939\" data-end=\"2178\" data-is-last-node=\"\" data-is-only-node=\"\">W przypadku przesy\u0142ania du\u017cych ilo\u015bci danych mo\u017cna wykorzysta\u0107 aplikacje stanowe, kt\u00f3re umo\u017cliwiaj\u0105 podzia\u0142 operacji na wiele wywo\u0142a\u0144 (np. przetwarzanie danych w blokach). Podej\u015bcie to jest stosowane m.in. w aplikacjach eksportu i importu.<\/p>\n<h5 id=\"zwalnianie-obiektow-corba-po-stronie-serwera\" ><span class=\"ez-toc-section\" id=\"Zwalnianie_obiektow_CORBA_po_stronie_serwera\"><\/span>Zwalnianie obiekt\u00f3w CORBA po stronie serwera<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"56\" data-end=\"212\">W CORBA czas \u017cycia obiekt\u00f3w dost\u0119pnych przez CORBA nie jest zarz\u0105dzany przez implementacj\u0119 CORBA, lecz w spos\u00f3b zale\u017cny od aplikacji w danym serwerze CORBA.<\/p>\n<p data-start=\"214\" data-end=\"417\" data-is-last-node=\"\" data-is-only-node=\"\">W interfejsie CORBA systemu Comarch ERP Enterprise przewidziano w tym celu jawne zwalnianie niepotrzebnych ju\u017c obiekt\u00f3w CORBA, kt\u00f3re musi zosta\u0107 wykonane po stronie klienta. W tym celu dost\u0119pne s\u0105 nast\u0119puj\u0105ce metody:<\/p>\n<ul>\n<li data-section-id=\"1gcpblr\" data-start=\"0\" data-end=\"422\"><strong data-start=\"2\" data-end=\"35\" data-is-only-node=\"\">CorbaParameterList::release()<\/strong><br data-start=\"35\" data-end=\"38\" \/>Zwalnia obiekt <em data-start=\"55\" data-end=\"75\">CorbaParameterList<\/em> oraz wszystkie zawarte w nim obiekty <em data-start=\"113\" data-end=\"133\">CorbaParameterList<\/em>.<br data-start=\"134\" data-end=\"137\" \/>Zwolnienie jest wymagane dla wszystkich obiekt\u00f3w <em data-start=\"188\" data-end=\"208\">CorbaParameterList<\/em> utworzonych przez klienta oraz zwr\u00f3conych przez interfejs CORBA, o ile nie s\u0105 one zawarte w innych obiektach <em data-start=\"318\" data-end=\"338\">CorbaParameterList<\/em>.<br data-start=\"339\" data-end=\"342\" \/>Po wywo\u0142aniu metody dost\u0119p do ca\u0142ej <em data-start=\"380\" data-end=\"400\">CorbaParameterList<\/em> nie jest ju\u017c mo\u017cliwy.<\/li>\n<li data-section-id=\"a97hnf\" data-start=\"424\" data-end=\"726\"><strong data-start=\"426\" data-end=\"458\" data-is-only-node=\"\">CorbaMessageQueue::release()<\/strong><br data-start=\"458\" data-end=\"461\" \/>Zwalnia obiekt <em data-start=\"478\" data-end=\"497\">CorbaMessageQueue<\/em>.<br data-start=\"498\" data-end=\"501\" \/>Zwolnienie jest wymagane dla wszystkich obiekt\u00f3w <em data-start=\"552\" data-end=\"571\">CorbaMessageQueue<\/em> zwr\u00f3conych przez interfejs CORBA.<br data-start=\"605\" data-end=\"608\" \/>Po wywo\u0142aniu metody dost\u0119p do <em data-start=\"640\" data-end=\"659\">CorbaMessageQueue<\/em> oraz wszystkich zawartych w niej komunikat\u00f3w nie jest ju\u017c mo\u017cliwy.<\/li>\n<li data-section-id=\"cljxek\" data-start=\"728\" data-end=\"811\" data-is-last-node=\"\"><strong data-start=\"730\" data-end=\"779\" data-is-only-node=\"\">CorbaApplicationManager::releaseApplication()<\/strong><br data-start=\"779\" data-end=\"782\" \/>Zwalnia wskazan\u0105 aplikacj\u0119.<\/li>\n<\/ul>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-(--header-height)\" dir=\"auto\" data-turn-id=\"d3f610b3-0473-4055-be26-bef6bd4a154a\" data-testid=\"conversation-turn-47\" data-scroll-anchor=\"false\" data-turn=\"user\"><\/section>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-69bd3b0d-ee98-832f-83f4-9826725e29b4-4\" data-testid=\"conversation-turn-48\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"dc3f4a84-d6a6-4070-9077-36b31dd9b16d\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"94\">Obiekty mog\u0105 zosta\u0107 zwolnione dopiero w momencie, gdy nie s\u0105 ju\u017c potrzebne po stronie klienta.<\/p>\n<p data-start=\"96\" data-end=\"451\" data-is-last-node=\"\" data-is-only-node=\"\">Dodatkowo, przy zamkni\u0119ciu sesji CORBA wszystkie obiekty CORBA nale\u017c\u0105ce do tej sesji s\u0105 automatycznie zwalniane. Jest to wystarczaj\u0105ce w przypadku sesji CORBA utrzymywanych przez kr\u00f3tki czas. W przypadku klient\u00f3w, kt\u00f3rzy utrzymuj\u0105 sesje przez d\u0142u\u017cszy okres, konieczne jest jednak jawne zwalnianie obiekt\u00f3w po stronie serwera, aby unikn\u0105\u0107 wyciek\u00f3w pami\u0119ci.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<h4 data-start=\"0\" data-end=\"40\" id=\"zdalny-interfejs-bis-przez-corba\" ><span class=\"ez-toc-section\" id=\"Zdalny_interfejs_BIS_przez_CORBA\"><\/span><strong data-start=\"0\" data-end=\"40\">Zdalny interfejs BIS przez CORBA<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"42\" data-end=\"215\" data-is-last-node=\"\" data-is-only-node=\"\">Zdalny interfejs BIS sk\u0142ada si\u0119 z trzech aplikacji wsadowych, kt\u00f3re mog\u0105 by\u0107 wywo\u0142ywane za po\u015brednictwem interfejsu CORBA. Do ich wywo\u0142ywania nale\u017cy u\u017cywa\u0107 interfejsu CORBA.<\/p>\n<h5 data-start=\"0\" data-end=\"26\" id=\"przypadki-uzycia\" ><span class=\"ez-toc-section\" id=\"Przypadki_uzycia\"><\/span><strong data-start=\"0\" data-end=\"26\">Przypadki u\u017cycia<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"28\" data-end=\"325\">Aplikacje wsadowe zdalnego BIS s\u0105 zoptymalizowane do scenariuszy, w kt\u00f3rych zar\u00f3wno wyzwolenie operacji, jak i transmisja danych odbywaj\u0105 si\u0119 wy\u0142\u0105cznie przez CORBA. Jest to konieczne w sytuacjach, gdy dane u\u017cytkownika nie mog\u0105 by\u0107 przekazywane mi\u0119dzy klientem CORBA a serwerem CORBA w inny spos\u00f3b.<\/p>\n<p data-start=\"327\" data-end=\"382\">Aplikacje wsadowe zosta\u0142y opisane w kolejnych rozdzia\u0142ach.<\/p>\n<p data-start=\"384\" data-end=\"595\">Je\u017celi jednak klient CORBA i serwer CORBA maj\u0105 dost\u0119p np. do wsp\u00f3lnego systemu plik\u00f3w lub Knowledge Store, korzystne mo\u017ce by\u0107 bezpo\u015brednie zapisywanie i odczytywanie danych w\u0142a\u015bnie tam. Zalety takiego podej\u015bcia:<\/p>\n<ul data-start=\"597\" data-end=\"838\">\n<li data-section-id=\"1uqmfiw\" data-start=\"597\" data-end=\"676\">odci\u0105\u017cenie po\u0142\u0105czenia CORBA poprzez ograniczenie ilo\u015bci przesy\u0142anych danych<\/li>\n<li data-section-id=\"7coo82\" data-start=\"677\" data-end=\"762\">mo\u017cliwo\u015b\u0107 asynchronicznego przesy\u0142ania danych u\u017cytkownika wzgl\u0119dem samej operacji<\/li>\n<li data-section-id=\"1aa22c6\" data-start=\"763\" data-end=\"838\">mo\u017cliwo\u015b\u0107 importu powi\u0105zanych plik\u00f3w (np. plik\u00f3w dla atrybut\u00f3w typu BLOB)<\/li>\n<\/ul>\n<p data-start=\"840\" data-end=\"1100\" data-is-last-node=\"\" data-is-only-node=\"\">Aby zastosowa\u0107 ten spos\u00f3b wywo\u0142ania, mo\u017cna korzysta\u0107 z aplikacji wsadowych opisanych w dokumentacji <em data-start=\"940\" data-end=\"978\">Programowe interfejsy wymiany danych<\/em> i wywo\u0142ywa\u0107 je bezstanowo przez CORBA, bezpo\u015brednio za pomoc\u0105 metody <em data-start=\"1048\" data-end=\"1065\">callApplication<\/em> obiektu <em data-start=\"1074\" data-end=\"1099\">CorbaApplicationManager<\/em>.<\/p>\n<h5 id=\"aplikacje-w-tle\" ><span class=\"ez-toc-section\" id=\"Aplikacje_w_tle\"><\/span>Aplikacje w tle<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"29\" data-end=\"123\">Poni\u017cej opisano akcje, parametry oraz parametry zwracane dla aplikacji wsadowych zdalnego BIS.<\/p>\n<p data-start=\"125\" data-end=\"517\">Operacja w zdalnym BIS \u2014 niezale\u017cnie od tego, czy dotyczy importu, eksportu czy wyszukiwania \u2014 sk\u0142ada si\u0119 z wielu wywo\u0142a\u0144 aplikacji kierowanych do tej samej instancji aplikacji (wywo\u0142ania stanowe). W przypadku przesy\u0142ania danych w blokach, przy pierwszym wywo\u0142aniu okre\u015blane s\u0105 parametry wej\u015bciowe oraz zwracany jest pierwszy blok wynik\u00f3w. Ka\u017cde kolejne wywo\u0142anie zwraca nast\u0119pny blok danych.<\/p>\n<p data-start=\"519\" data-end=\"613\">Instancja aplikacji musi zosta\u0107 wcze\u015bniej utworzona. W IDL CORBA dost\u0119pne s\u0105 w tym celu sta\u0142e:<\/p>\n<ul data-start=\"615\" data-end=\"683\">\n<li data-section-id=\"cmn8y2\" data-start=\"615\" data-end=\"637\"><em data-start=\"617\" data-end=\"635\">APPLICATION_NAME<\/em><\/li>\n<li data-section-id=\"cmn8y2\" data-start=\"638\" data-end=\"660\"><em data-start=\"640\" data-end=\"658\">APPLICATION_NAME<\/em><\/li>\n<li data-section-id=\"cmn8y2\" data-start=\"661\" data-end=\"683\"><em data-start=\"663\" data-end=\"681\">APPLICATION_NAME<\/em><\/li>\n<\/ul>\n<p data-start=\"685\" data-end=\"754\">kt\u00f3re nale\u017cy poda\u0107 jako nazw\u0119 aplikacji przy tworzeniu jej instancji.<\/p>\n<p data-start=\"756\" data-end=\"891\">Akcje, nazwy parametr\u00f3w oraz sta\u0142e typu <em data-start=\"796\" data-end=\"806\">Valueset<\/em> s\u0105 r\u00f3wnie\u017c zdefiniowane w IDL CORBA jako sta\u0142e. Znajduj\u0105 si\u0119 one w interfejsach IDL:<\/p>\n<ul data-start=\"893\" data-end=\"940\">\n<li data-section-id=\"11g7bt8\" data-start=\"893\" data-end=\"916\"><em data-start=\"895\" data-end=\"914\">CorbaRemoteImport<\/em><\/li>\n<li data-section-id=\"1pn5mut\" data-start=\"917\" data-end=\"940\"><em data-start=\"919\" data-end=\"938\">CorbaRemoteExport<\/em><\/li>\n<\/ul>\n<p data-start=\"942\" data-end=\"1010\">Przy tworzeniu klient\u00f3w CORBA zaleca si\u0119 korzystanie z tych sta\u0142ych.<\/p>\n<p data-start=\"1012\" data-end=\"1298\">W poni\u017cszym opisie interfejs\u00f3w typy parametr\u00f3w podano jako typy Java lub Comarch ERP Enterprise. W przypadku klienta CORBA nale\u017cy stosowa\u0107 odpowiednie typy po stronie klienta. Oznacza to, \u017ce dla klienta CORBA napisanego w Java zamiast typu <em data-start=\"1239\" data-end=\"1257\">CisParameterList<\/em> nale\u017cy u\u017cywa\u0107 typu <em data-start=\"1277\" data-end=\"1297\">CorbaParameterList<\/em>.<\/p>\n<p data-start=\"1300\" data-end=\"1551\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u017celi wynikiem wywo\u0142ania aplikacji jest warto\u015b\u0107 <em data-start=\"1362\" data-end=\"1368\">null<\/em> zamiast listy parametr\u00f3w, oznacza to wyst\u0105pienie b\u0142\u0119du og\u00f3lnego (np. nieprawid\u0142owa akcja lub nieznane parametry). W takim przypadku nale\u017cy r\u00f3wnie\u017c przeanalizowa\u0107 zwr\u00f3cone komunikaty.<\/div><\/section><\/p>\n<p data-start=\"1553\" data-end=\"1758\" data-is-last-node=\"\" data-is-only-node=\"\">Po zako\u0144czeniu lub przerwaniu operacji mo\u017cliwe jest rozpocz\u0119cie kolejnych operacji przy u\u017cyciu tej samej instancji aplikacji. Wywo\u0142ania dotycz\u0105ce r\u00f3\u017cnych operacji nie mog\u0105 jednak by\u0107 wykonywane r\u00f3wnolegle.<\/p>\n<h5 data-start=\"0\" data-end=\"35\" id=\"zdalny-import-przez-corba\" ><span class=\"ez-toc-section\" id=\"Zdalny_import_przez_CORBA\"><\/span><strong data-start=\"0\" data-end=\"35\">Zdalny import przez CORBA<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"37\" data-end=\"552\">W procesie importu dane s\u0105 przekazywane do systemu w postaci dokumentu XML, przesy\u0142anego blokami. Wielko\u015b\u0107 blok\u00f3w danych importowych jest okre\u015blana przez klienta CORBA. Zalecane warto\u015bci mieszcz\u0105 si\u0119 w zakresie od 250 kB do 1000 kB. Rozmiar bloku nie powinien by\u0107 zbyt du\u017cy, aby nie obci\u0105\u017ca\u0107 nadmiernie pami\u0119ci operacyjnej serwera aplikacji Comarch ERP Enterprise. Z kolei zbyt ma\u0142y rozmiar blok\u00f3w powoduje du\u017c\u0105 liczb\u0119 wywo\u0142a\u0144 (roundtrip\u00f3w), co ze wzgl\u0119du na op\u00f3\u017anienia (latencj\u0119) znacz\u0105co wyd\u0142u\u017ca czas transmisji.<\/p>\n<p data-start=\"554\" data-end=\"875\">W przypadku wyst\u0105pienia b\u0142\u0119d\u00f3w importu mo\u017cna okre\u015bli\u0107, czy korekta danych ma zosta\u0107 przeprowadzona w systemie, czy te\u017c plik b\u0142\u0119d\u00f3w ma zosta\u0107 odes\u0142any do klienta. W przypadku korekty w Comarch ERP Enterprise wykorzystywane s\u0105 powiadomienia w ramach zarz\u0105dzania workflow, opisane w dokumentacji <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/wprowadzenie-wymiana-danych\/\"><em data-start=\"844\" data-end=\"874\">Wprowadzenie: wymiana danych<\/em><\/a>.<\/p>\n<p data-start=\"877\" data-end=\"1194\">Je\u017celi korekta odbywa si\u0119 w plik b\u0142\u0119d\u00f3w jest zapisywany w Knowledge Store w katalogu:<br data-start=\"973\" data-end=\"976\" \/><em data-start=\"976\" data-end=\"1033\">kstore:\/\/&lt;obszar roboczy&gt;\/Import\/RemoteErrorFiles<\/em><br data-start=\"1033\" data-end=\"1036\" \/>Jako obszar roboczy wykorzystywany jest domy\u015blny obszar roboczy bazy danych, do kt\u00f3rej importowano dane. Katalog ten nie powinien by\u0107 u\u017cywany do innych cel\u00f3w.<\/p>\n<p data-start=\"1196\" data-end=\"1395\" data-is-last-node=\"\" data-is-only-node=\"\">Filtr u\u017cywany w procesie importu musi zosta\u0107 wcze\u015bniej utworzony i zapisany w aplikacji I<em>mport danych<\/em>. Nale\u017cy poda\u0107 nazw\u0119 filtra. Szczeg\u00f3\u0142owe informacje znajduj\u0105 si\u0119 w artykule <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/import-danych\/\"><em data-start=\"1379\" data-end=\"1394\">Import danych<\/em><\/a>.<\/p>\n<h6 data-start=\"0\" data-end=\"29\" id=\"akcje-i-parametry\" ><strong data-start=\"0\" data-end=\"29\">Akcje i parametry<\/strong><\/h6>\n<p data-start=\"31\" data-end=\"110\" data-is-last-node=\"\" data-is-only-node=\"\">Aplikacja w tle do importu mo\u017ce by\u0107 wywo\u0142ywana z u\u017cyciem nast\u0119puj\u0105cych akcji:<\/p>\n<table>\n<thead>\n<tr>\n<th>Akcja<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>PROCESS<\/td>\n<td>Przekazywane s\u0105 dane importowe pierwszego bloku oraz pozosta\u0142e parametry.<\/td>\n<\/tr>\n<tr>\n<td>PROCESS_NEXT_BLOCK<\/td>\n<td>Przekazywane s\u0105 dane importowe kolejnych blok\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td>PROCESS_LAST_BLOCK<\/td>\n<td>Informuje o zako\u0144czeniu przekazywania danych importowych. Ostatni blok mo\u017ce zosta\u0107 przekazany w tym wywo\u0142aniu, je\u015bli nie zosta\u0142 przekazany wcze\u015bniej. Za pomoc\u0105 tej akcji mo\u017cna r\u00f3wnie\u017c sprawdzi\u0107, czy podczas importu wyst\u0105pi\u0142y b\u0142\u0119dy.<\/td>\n<\/tr>\n<tr>\n<td>GET_ERROR_FILE_NEXT_BLOCK<\/td>\n<td>Po zako\u0144czeniu importu zwracany jest plik b\u0142\u0119d\u00f3w. Zwrot odbywa si\u0119 blokami, dlatego akcj\u0119 nale\u017cy wywo\u0142ywa\u0107 wielokrotnie.<\/td>\n<\/tr>\n<tr>\n<td>CLOSE<\/td>\n<td>Przerywa proces importu przed jego zako\u0144czeniem lub ko\u0144czy import bez pobierania pliku b\u0142\u0119d\u00f3w.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"60\">Przebieg importu z zwrotem pliku b\u0142\u0119d\u00f3w wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<ul data-start=\"62\" data-end=\"603\">\n<li data-section-id=\"1efujmj\" data-start=\"62\" data-end=\"125\">Proces importu rozpoczyna si\u0119 od wywo\u0142ania akcji <em data-start=\"113\" data-end=\"122\">PROCESS<\/em>.<\/li>\n<li data-section-id=\"i9je63\" data-start=\"126\" data-end=\"222\">Dla kolejnych blok\u00f3w nale\u017cy wielokrotnie wywo\u0142ywa\u0107 <em data-start=\"179\" data-end=\"199\">PROCESS_NEXT_BLOCK<\/em>, zgodnie z potrzeb\u0105.<\/li>\n<li data-section-id=\"169dsmi\" data-start=\"223\" data-end=\"366\">Zako\u0144czenie importu nast\u0119puje poprzez wywo\u0142anie <em data-start=\"273\" data-end=\"293\">PROCESS_LAST_BLOCK<\/em>. Je\u015bli podczas importu nie wyst\u0105pi\u0142y b\u0142\u0119dy, proces zostaje zako\u0144czony.<\/li>\n<li data-section-id=\"9ix7dw\" data-start=\"367\" data-end=\"603\">Je\u015bli podczas importu wyst\u0105pi\u0142y b\u0142\u0119dy i dost\u0119pny jest plik b\u0142\u0119d\u00f3w, jest on zwracany blokami za pomoc\u0105 akcji <em data-start=\"477\" data-end=\"504\">GET_ERROR_FILE_NEXT_BLOCK<\/em>. Je\u017celi plik b\u0142\u0119d\u00f3w nie ma by\u0107 pobierany, nale\u017cy zamiast tego jednorazowo wywo\u0142a\u0107 akcj\u0119 <em data-start=\"593\" data-end=\"600\">CLOSE<\/em>.<\/li>\n<\/ul>\n<p data-start=\"605\" data-end=\"652\" data-is-last-node=\"\" data-is-only-node=\"\">Poni\u017cej opisano parametry poszczeg\u00f3lnych akcji.<\/p>\n<h6 data-start=\"0\" data-end=\"25\" id=\"akcja-process\" ><strong data-start=\"0\" data-end=\"25\">Akcja PROCESS<\/strong><\/h6>\n<p data-start=\"27\" data-end=\"61\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ObjectType (String)<\/td>\n<td>Pe\u0142na nazwa importowanego obiektu biznesowego (Business Entity).<\/td>\n<\/tr>\n<tr>\n<td>Database (String)<\/td>\n<td>Alias bazy danych. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaTransactionManager<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>FilterName (String)<\/td>\n<td>Nazwa trwa\u0142ego filtra u\u017cywanego podczas importu, zapisanego w aplikacji <em>Import danych<\/em> (opcjonalnie). Je\u015bli filtr nie zostanie podany, dost\u0119pne s\u0105 wszystkie atrybuty i asocjacje obiektu biznesowego.<\/td>\n<\/tr>\n<tr>\n<td>FilterXML<\/td>\n<td>Nieobs\u0142ugiwany.<\/td>\n<\/tr>\n<tr>\n<td>NLSMode (short\/Valueset)<\/td>\n<td>Ustawienie j\u0119zyka dla importu bez okre\u015blonego filtra (opcjonalne). Mo\u017cliwe warto\u015bci: <em>NLS_MODE_SINGLE_LANGUAGE<\/em> (jednoj\u0119zyczny \u2013 warto\u015b\u0107 domy\u015blna) oraz <em>NLS_MODE_MULTI_LANGUAGE<\/em> (wieloj\u0119zyczny). Parametru nie nale\u017cy stosowa\u0107 razem z <em>FilterName<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Dane.<\/td>\n<\/tr>\n<tr>\n<td>WarningsMode (short\/Valueset)<\/td>\n<td>Okre\u015bla spos\u00f3b obs\u0142ugi ostrze\u017ce\u0144 podczas importu. Warto\u015b\u0107 <em>WARNINGS_MODE_CONFIRM_NONE<\/em> powoduje traktowanie ostrze\u017ce\u0144 jako b\u0142\u0119d\u00f3w i zapisanie ich w pliku b\u0142\u0119d\u00f3w. Warto\u015b\u0107 <em>WARNINGS_MODE_CONFIRM_ALL<\/em> powoduje ignorowanie wszystkich ostrze\u017ce\u0144.<\/td>\n<\/tr>\n<tr>\n<td>CorrectionMode (short\/Valueset)<\/td>\n<td>Okre\u015bla, czy korekta b\u0142\u0119dnych danych ma by\u0107 wykonywana w systemie. Warto\u015b\u0107 <em>CORRECTION_MODE_NONE<\/em> oznacza brak korekty \u2014 plik b\u0142\u0119d\u00f3w mo\u017ce zosta\u0107 opcjonalnie pobrany przez CORBA. Warto\u015b\u0107 <em>CORRECTION_MODE_WORKFLOW <\/em>oznacza korekt\u0119 w systemie po powiadomieniu przez workflow. Plik b\u0142\u0119d\u00f3w nie jest wtedy przekazywany do klienta. Przy wy\u0142\u0105czonym logowaniu (<em>ProcessLogLevel<\/em>) plik zapisywany jest w Knowledge Store w katalogu <em>kstore:\/\/&lt;obszar roboczy&gt;\/Import\/RemoteErrorFiles<\/em> (domy\u015blny obszar roboczy bazy danych). Przy w\u0142\u0105czonym logowaniu zapisywany jest w logu. Nale\u017cy uwzgl\u0119dni\u0107, \u017ce powiadomienie workflow mo\u017ce wyst\u0105pi\u0107 niezale\u017cnie od tego parametru.<\/td>\n<\/tr>\n<tr>\n<td>ProcessLogLevel<\/td>\n<td>Okre\u015bla, czy import ma by\u0107 logowany. Warto\u015b\u0107 <em>PROCESS_LOG_LEVEL_DISABLED<\/em> (domy\u015blna) wy\u0142\u0105cza logowanie. Warto\u015b\u0107 <em>PROCESS_LOG_LEVEL_ENABLED<\/em> w\u0142\u0105cza logowanie.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"44\"><strong data-start=\"0\" data-end=\"21\">Zwracana warto\u015b\u0107:<\/strong> pusta lista parametr\u00f3w<\/p>\n<p data-start=\"46\" data-end=\"291\" data-is-last-node=\"\" data-is-only-node=\"\">Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"131\" data-end=\"137\">null<\/em> lub gdy metoda <em data-start=\"153\" data-end=\"174\">requiresAttention()<\/em> obiektu <em data-start=\"183\" data-end=\"202\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"218\" data-end=\"224\">true<\/em>. W takim przypadku proces importu nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<h6 data-start=\"0\" data-end=\"36\" id=\"akcja-process_next_block\" ><strong data-start=\"0\" data-end=\"36\">Akcja PROCESS_NEXT_BLOCK<\/strong><\/h6>\n<p data-start=\"38\" data-end=\"73\">Dost\u0119pny jest nast\u0119puj\u0105cy parametr:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Dane<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"142\" data-end=\"186\"><strong data-start=\"142\" data-end=\"163\">Zwracana warto\u015b\u0107:<\/strong> pusta lista parametr\u00f3w<\/p>\n<p data-start=\"188\" data-end=\"433\" data-is-last-node=\"\" data-is-only-node=\"\">Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"273\" data-end=\"279\">null<\/em> lub gdy metoda <em data-start=\"295\" data-end=\"316\">requiresAttention()<\/em> obiektu <em data-start=\"325\" data-end=\"344\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"360\" data-end=\"366\">true<\/em>. W takim przypadku proces importu nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<h6 id=\"akcja-process_last_block\" >Akcja PROCESS_LAST_BLOCK<\/h6>\n<p>Dost\u0119pny jest nast\u0119puj\u0105cy parametr:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Dane (opcjonalnie)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"22\"><strong data-start=\"0\" data-end=\"22\">Zwracane warto\u015bci:<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex flex-col-reverse w-fit\" tabindex=\"-1\">\u00a0<\/div>\n<\/div>\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ImportedObjectCount (int)<\/td>\n<td>Liczba obiekt\u00f3w pomy\u015blnie zaimportowanych.<\/td>\n<\/tr>\n<tr>\n<td>InvalidObjectCount (int)<\/td>\n<td>Liczba obiekt\u00f3w b\u0142\u0119dnych, kt\u00f3re nie zosta\u0142y zaimportowane.<\/td>\n<\/tr>\n<tr>\n<td>NotCorrigibleObjectCount (int)<\/td>\n<td>Liczba b\u0142\u0119dnych obiekt\u00f3w, kt\u00f3re nie mog\u0105 zosta\u0107 poprawione w aplikacji korekcyjnej.<\/td>\n<\/tr>\n<tr>\n<td>HasErrorFile (boolean)<\/td>\n<td>Warto\u015b\u0107 <em>true<\/em>, je\u015bli dost\u0119pny jest plik b\u0142\u0119d\u00f3w do przekazania klientowi.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"209\">Powodzenie procesu importu mo\u017cna ustali\u0107 poprzez wywo\u0142anie metody <em data-start=\"66\" data-end=\"87\">requiresAttention()<\/em> na obiekcie <em data-start=\"100\" data-end=\"119\">CorbaMessageQueue<\/em>. Obiekt <em data-start=\"128\" data-end=\"147\">CorbaMessageQueue<\/em> zawiera komunikaty b\u0119d\u0105ce cz\u0119\u015bci\u0105 wyniku wywo\u0142ania aplikacji.<\/p>\n<ul data-start=\"211\" data-end=\"501\">\n<li data-section-id=\"6f5v3z\" data-start=\"211\" data-end=\"352\">Je\u015bli metoda <em data-start=\"226\" data-end=\"247\">requiresAttention()<\/em> zwraca warto\u015b\u0107 <em data-start=\"263\" data-end=\"270\">false<\/em>, oznacza to, \u017ce import zako\u0144czy\u0142 si\u0119 pomy\u015blnie. Proces importu jest zako\u0144czony.<\/li>\n<li data-section-id=\"15kpgx3\" data-start=\"353\" data-end=\"501\">Je\u015bli metoda <em data-start=\"368\" data-end=\"389\">requiresAttention()<\/em> zwraca warto\u015b\u0107 <em data-start=\"405\" data-end=\"411\">true<\/em>, oznacza to, \u017ce podczas importu wyst\u0105pi\u0142 b\u0142\u0105d. Nale\u017cy przeanalizowa\u0107 zwr\u00f3cone komunikaty.<\/li>\n<\/ul>\n<p data-start=\"503\" data-end=\"634\">Na podstawie zwr\u00f3conych licznik\u00f3w mo\u017cna rozr\u00f3\u017cni\u0107 r\u00f3\u017cne przypadki b\u0142\u0119d\u00f3w (szczeg\u00f3\u0142y w artykule <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/wprowadzenie-wymiana-danych\/\"><em data-start=\"602\" data-end=\"632\">Wprowadzenie: wymiana danych<\/em><\/a>).<\/p>\n<p data-start=\"636\" data-end=\"848\">Na podstawie parametr\u00f3w zwracanych mo\u017cna r\u00f3wnie\u017c okre\u015bli\u0107, czy dost\u0119pny jest plik b\u0142\u0119d\u00f3w do przekazania klientowi. Plik ten mo\u017ce zosta\u0107 pobrany w kolejnych wywo\u0142aniach z u\u017cyciem akcji <em data-start=\"820\" data-end=\"847\">GET_ERROR_FILE_NEXT_BLOCK<\/em>.<\/p>\n<p data-start=\"850\" data-end=\"1014\" data-is-last-node=\"\" data-is-only-node=\"\">Nale\u017cy uwzgl\u0119dni\u0107, \u017ce zwracane warto\u015bci licznik\u00f3w mog\u0105 w pewnych sytuacjach nie by\u0107 dok\u0142adne, co opisano w artykule <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/wprowadzenie-wymiana-danych\/\"><em data-start=\"602\" data-end=\"632\">Wprowadzenie: wymiana danych<\/em><\/a>.<\/p>\n<h6 data-start=\"0\" data-end=\"43\" id=\"akcja-get_error_file_next_block\" ><strong data-start=\"0\" data-end=\"43\">Akcja GET_ERROR_FILE_NEXT_BLOCK<\/strong><\/h6>\n<p data-start=\"45\" data-end=\"91\">Wywo\u0142anie odbywa si\u0119 z pust\u0105 list\u0105 parametr\u00f3w.<\/p>\n<p data-start=\"93\" data-end=\"114\" data-is-last-node=\"\" data-is-only-node=\"\"><strong data-start=\"93\" data-end=\"114\" data-is-last-node=\"\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[])<\/td>\n<td>Dane \u2013 bie\u017c\u0105cy blok (opcjonalnie, je\u015bli dost\u0119pny).<\/td>\n<\/tr>\n<tr>\n<td>ContentLength (int)<\/td>\n<td>D\u0142ugo\u015b\u0107 danych tego bloku w bajtach (opcjonalnie, je\u015bli dane s\u0105 dost\u0119pne).<\/td>\n<\/tr>\n<tr>\n<td>HasNextBlock (boolean)<\/td>\n<td>Je\u015bli <em>true<\/em>, nale\u017cy ponownie wywo\u0142a\u0107 metod\u0119 w celu pobrania kolejnego bloku.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"92\">Je\u017celi plik b\u0142\u0119d\u00f3w nie jest dost\u0119pny, zamiast listy parametr\u00f3w zwracana jest warto\u015b\u0107 <em data-start=\"85\" data-end=\"91\">null<\/em>.<\/p>\n<p data-start=\"94\" data-end=\"276\" data-is-last-node=\"\" data-is-only-node=\"\">Mo\u017ce si\u0119 zdarzy\u0107, \u017ce ostatni blok pliku b\u0142\u0119d\u00f3w nie zawiera danych. Dlatego parametr <em data-start=\"178\" data-end=\"187\">Content<\/em> jest opcjonalny i klient musi sprawdzi\u0107, czy wyst\u0119puje on w zwr\u00f3conej li\u015bcie parametr\u00f3w.<\/p>\n<h6 data-start=\"0\" data-end=\"23\" id=\"akcja-close\" ><strong data-start=\"0\" data-end=\"23\">Akcja CLOSE<\/strong><\/h6>\n<p data-start=\"25\" data-end=\"81\" data-is-last-node=\"\" data-is-only-node=\"\">Wywo\u0142anie oraz zwracana warto\u015b\u0107: pusta lista parametr\u00f3w.<\/p>\n<h5 data-start=\"0\" data-end=\"36\" id=\"zdalny-eksport-przez-corba\" ><span class=\"ez-toc-section\" id=\"Zdalny_eksport_przez_CORBA\"><\/span><strong data-start=\"0\" data-end=\"36\">Zdalny eksport przez CORBA<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"38\" data-end=\"465\">W procesie eksportu nale\u017cy okre\u015bli\u0107 nazw\u0119 eksportowanego obiektu biznesowego (Business Entity), baz\u0119 danych, z kt\u00f3rej maj\u0105 zosta\u0107 pobrane dane, opcjonalnie filtr oraz parametry zaw\u0119\u017caj\u0105ce zakres danych. Wyb\u00f3r danych okre\u015bla liczb\u0119 eksportowanych instancji obiekt\u00f3w biznesowych i mo\u017ce by\u0107 zdefiniowany poprzez zapytanie OQL z parametrami selekcji i sortowania lub za pomoc\u0105 dynamicznego ci\u0105gu OQL, kt\u00f3ry spe\u0142nia t\u0119 sam\u0105 funkcj\u0119.<\/p>\n<p data-start=\"467\" data-end=\"719\">Filtr wykorzystywany w procesie eksportu musi zosta\u0107 wcze\u015bniej utworzony i zapisany w aplikacji <em>Eksport danych<\/em> (lub <em>Import danych<\/em>).\u00a0<\/p>\n<p data-start=\"721\" data-end=\"862\" data-is-last-node=\"\" data-is-only-node=\"\">Dokument XML zawieraj\u0105cy eksportowane instancje obiekt\u00f3w biznesowych jest przekazywany do klienta blokami. Rozmiar bloku wynosi oko\u0142o 500 kB.<\/p>\n<h6 data-start=\"0\" data-end=\"29\" id=\"akcje-i-parametry\" ><strong data-start=\"0\" data-end=\"29\">Akcje i parametry<\/strong><\/h6>\n<p data-start=\"31\" data-end=\"111\">Aplikacja wsadowa do eksportu mo\u017ce by\u0107 wywo\u0142ywana z u\u017cyciem nast\u0119puj\u0105cych akcji:<\/p>\n<table>\n<thead>\n<tr>\n<th>Action<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>EXPORT<\/td>\n<td>Eksportuje pierwszy blok danych.<\/td>\n<\/tr>\n<tr>\n<td>EXPORT_NEXT_BLOCK<\/td>\n<td>Eksportuje drugi oraz wszystkie kolejne bloki danych.<\/td>\n<\/tr>\n<tr>\n<td>GET_SCHEMA<\/td>\n<td>Zwraca schemat XML. Schemat jest przekazywany w jednym bloku.<\/td>\n<\/tr>\n<tr>\n<td>GET_FILTER_XML<\/td>\n<td>Nieobs\u0142ugiwane.<\/td>\n<\/tr>\n<tr>\n<td>CLOSE<\/td>\n<td>Przerywa proces eksportu.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"38\">Przebieg eksportu wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<ul data-start=\"40\" data-end=\"382\" data-is-last-node=\"\" data-is-only-node=\"\">\n<li data-section-id=\"1a8947g\" data-start=\"40\" data-end=\"140\">Za pomoc\u0105 akcji <em data-start=\"58\" data-end=\"66\">EXPORT<\/em> przekazywane s\u0105 parametry eksportu. Wynikiem jest pierwszy blok danych.<\/li>\n<li data-section-id=\"huw7dc\" data-start=\"141\" data-end=\"304\">Dop\u00f3ki dost\u0119pne s\u0105 kolejne bloki, s\u0105 one pobierane poprzez wywo\u0142ania akcji <em data-start=\"218\" data-end=\"237\">EXPORT_NEXT_BLOCK<\/em>. Je\u015bli nie ma wi\u0119cej blok\u00f3w, proces eksportu zostaje zako\u0144czony.<\/li>\n<li data-section-id=\"adc1y1\" data-start=\"305\" data-end=\"382\" data-is-last-node=\"\">Aby pobra\u0107 schemat XML, wystarczy jednokrotne wywo\u0142anie akcji <em data-start=\"369\" data-end=\"381\">GET_SCHEMA<\/em>.<\/li>\n<\/ul>\n<h6 data-start=\"0\" data-end=\"24\" id=\"akcja-export\" ><strong data-start=\"0\" data-end=\"24\">Akcja EXPORT<\/strong><\/h6>\n<p data-start=\"26\" data-end=\"60\" data-is-last-node=\"\" data-is-only-node=\"\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ObjectType (String)<\/td>\n<td>Pe\u0142na nazwa eksportowanego obiektu biznesowego (Business Entity).<\/td>\n<\/tr>\n<tr>\n<td>Database (String)<\/td>\n<td>Alias bazy danych. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaTransactionManager<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>FilterName (String)<\/td>\n<td>Nazwa filtra u\u017cywanego podczas eksportu, zapisanego w aplikacji <em>Import danych<\/em>. Parametr opcjonalny. Je\u015bli filtr nie zostanie podany, dost\u0119pne s\u0105 wszystkie atrybuty i asocjacje obiektu biznesowego. W przypadku du\u017cych obiekt\u00f3w zaleca si\u0119 u\u017cycie filtra w celu ograniczenia ilo\u015bci danych.<\/td>\n<\/tr>\n<tr>\n<td>FilterXML<\/td>\n<td>Nieobs\u0142ugiwany.<\/td>\n<\/tr>\n<tr>\n<td>NLSMode (short\/Valueset)<\/td>\n<td>Ustawienie j\u0119zyka dla eksportu bez okre\u015blonego filtra (opcjonalne). Mo\u017cliwe warto\u015bci: <em>NLS_MODE_SINGLE_LANGUAGE<\/em> (jednoj\u0119zyczny \u2013 warto\u015b\u0107 domy\u015blna) oraz <em>NLS_MODE_MULTI_LANGUAGE<\/em> (wieloj\u0119zyczny). Parametru nie nale\u017cy stosowa\u0107 razem z <em>FilterName<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>SearchName (String)<\/td>\n<td>Pe\u0142na nazwa zapytania OQL. Je\u015bli u\u017cywany jest dynamiczny ci\u0105g OQL, parametr pozostaje pusty.<\/td>\n<\/tr>\n<tr>\n<td>SearchParameters (CisParameterList)<\/td>\n<td>Parametry wyszukiwania dla zapytania OQL (opcjonalne). Domy\u015blnie brak parametr\u00f3w. Warto\u015b\u0107 stanowi lista parametr\u00f3w, gdzie nazwa parametru odpowiada nazwie pola wyszukiwania z OQL, a warto\u015b\u0107 parametru jest tzw. <em>selection string<\/em>. Parametr nie jest u\u017cywany przy dynamicznym OQL.<\/td>\n<\/tr>\n<tr>\n<td>SearchSortOrder (String)<\/td>\n<td>Sortowanie wynik\u00f3w dla zapytania OQL (opcjonalne). Domy\u015blnie stosowane jest sortowanie zdefiniowane w zapytaniu OQL. Parametr nie jest u\u017cywany przy dynamicznym OQL.<\/td>\n<\/tr>\n<tr>\n<td>DynamicOQLSearch (String)<\/td>\n<td>Dynamiczny ci\u0105g OQL (alternatywa dla zapytania OQL).<\/td>\n<\/tr>\n<tr>\n<td>MaxObjects<\/td>\n<td>Nieobs\u0142ugiwany.<\/td>\n<\/tr>\n<tr>\n<td>ProcessLogLevel<\/td>\n<td>Okre\u015bla, czy eksport ma by\u0107 logowany. Warto\u015b\u0107 <em>PROCESS_LOG_LEVEL_DISABLED<\/em> (domy\u015blna) wy\u0142\u0105cza logowanie. Warto\u015b\u0107 <em>PROCESS_LOG_LEVEL_ENABLED<\/em> w\u0142\u0105cza logowanie.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-69bd3b0d-ee98-832f-83f4-9826725e29b4-27\" data-testid=\"conversation-turn-94\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"03d0492d-f301-4d70-9bce-710a2afa12d0\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"21\" data-is-last-node=\"\" data-is-only-node=\"\"><strong data-start=\"0\" data-end=\"21\" data-is-last-node=\"\" data-is-only-node=\"\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"z-0 flex min-h-[46px] justify-start\">\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[])<\/td>\n<td>Dane pierwszego bloku (opcjonalnie).<\/td>\n<\/tr>\n<tr>\n<td>ContentLength (int)<\/td>\n<td>D\u0142ugo\u015b\u0107 danych tego bloku w bajtach (opcjonalnie).<\/td>\n<\/tr>\n<tr>\n<td>HasNextBlock (boolean)<\/td>\n<td>Je\u015bli <em>true<\/em>, dost\u0119pne s\u0105 kolejne bloki, kt\u00f3re mo\u017cna pobra\u0107 poprzez kolejne wywo\u0142ania akcji <em>EXPORT_NEXT_BLOCK<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>ExportedObjectCount (int)<\/td>\n<td>\u0141\u0105czna liczba wyeksportowanych obiekt\u00f3w (dla wszystkich blok\u00f3w tego eksportu). Zwracana tylko przy ostatnim bloku.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<p data-start=\"0\" data-end=\"246\">Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"85\" data-end=\"91\">null<\/em> lub gdy metoda <em data-start=\"107\" data-end=\"128\">requiresAttention()<\/em> obiektu <em data-start=\"137\" data-end=\"156\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"172\" data-end=\"178\">true<\/em>. W takim przypadku proces eksportu nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<p data-start=\"248\" data-end=\"463\" data-is-last-node=\"\" data-is-only-node=\"\">Je\u017celi nie uda\u0142o si\u0119 wyeksportowa\u0107 \u017cadnej instancji obiektu biznesowego, np. poniewa\u017c \u017cadna instancja nie odpowiada\u0142a zadanym parametrom wyszukiwania, parametry zwracane <em data-start=\"418\" data-end=\"427\">Content<\/em> oraz <em data-start=\"433\" data-end=\"448\">ContentLength<\/em> nie wyst\u0119puj\u0105.<\/p>\n<h6 data-start=\"0\" data-end=\"35\" id=\"akcja-export_next_block\" ><strong data-start=\"0\" data-end=\"35\"> Akcja EXPORT_NEXT_BLOCK<\/strong><\/h6>\n<p data-start=\"37\" data-end=\"72\">Wywo\u0142anie: pusta lista parametr\u00f3w<\/p>\n<p data-start=\"74\" data-end=\"95\" data-is-last-node=\"\" data-is-only-node=\"\"><strong data-start=\"74\" data-end=\"95\" data-is-last-node=\"\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<table style=\"width: 100%; height: 161px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<th style=\"height: 23px;\">Warto\u015b\u0107<\/th>\n<th style=\"height: 23px;\">Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\">Content (byte[]\/Binary)<\/td>\n<td style=\"height: 23px;\">Dane \u2013 bie\u017c\u0105cy blok (opcjonalnie, je\u015bli dost\u0119pny).<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\">ContentLength (int)<\/td>\n<td style=\"height: 23px;\">D\u0142ugo\u015b\u0107 danych bie\u017c\u0105cego bloku w bajtach (opcjonalnie).<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px;\">HasNextBlock (boolean)<\/td>\n<td style=\"height: 46px;\">Je\u015bli <em>true<\/em>, dost\u0119pne s\u0105 kolejne bloki, kt\u00f3re mo\u017cna pobra\u0107 poprzez kolejne wywo\u0142ania akcji <em>EXPORT_NEXT_BLOCK<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px;\">ExportedObjectCount (int)<\/td>\n<td style=\"height: 46px;\">\u0141\u0105czna liczba wyeksportowanych obiekt\u00f3w (dla wszystkich blok\u00f3w tego eksportu). Zwracana tylko przy ostatnim bloku.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"169\">Mo\u017ce si\u0119 zdarzy\u0107, \u017ce ostatni blok nie zawiera danych. Dlatego parametr <em data-start=\"71\" data-end=\"80\">Content<\/em> jest opcjonalny i klient musi sprawdzi\u0107, czy wyst\u0119puje on w zwr\u00f3conej li\u015bcie parametr\u00f3w.<\/p>\n<p data-start=\"171\" data-end=\"298\" data-is-last-node=\"\" data-is-only-node=\"\">Wszystkie mo\u017cliwe przypadki b\u0142\u0119d\u00f3w nale\u017cy obs\u0142ugiwa\u0107 analogicznie jak w przypadku akcji <em data-start=\"259\" data-end=\"267\">EXPORT.<\/em><\/p>\n<h6 data-start=\"0\" data-end=\"20\" id=\"akcja-get_schema\" ><strong data-start=\"0\" data-end=\"20\">Akcja GET_SCHEMA<\/strong><\/h6>\n<p data-start=\"22\" data-end=\"56\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ObjectType (String)<\/td>\n<td>Pe\u0142na nazwa obiektu biznesowego (Business Entity).<\/td>\n<\/tr>\n<tr>\n<td>FilterName (String)<\/td>\n<td>Nazwa filtra, na podstawie kt\u00f3rego generowany jest schemat (opcjonalnie). Warto\u015b\u0107 domy\u015blna: schemat zawieraj\u0105cy wszystkie atrybuty i relacje.<\/td>\n<\/tr>\n<tr>\n<td>NLSMode (short\/Valueset)<\/td>\n<td>Ustawienie j\u0119zyka dla schematu bez okre\u015blonego filtra (opcjonalne). Mo\u017cliwe warto\u015bci: <em>NLS_MODE_SINGLE_LANGUAGE<\/em> (jednoj\u0119zyczny \u2013 warto\u015b\u0107 domy\u015blna) oraz <em>NLS_MODE_MULTI_LANGUAGE<\/em> (wieloj\u0119zyczny). Parametru nie nale\u017cy stosowa\u0107 razem z <em>FilterName<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"610\" data-end=\"631\"><strong data-start=\"610\" data-end=\"631\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex flex-col-reverse w-fit\" tabindex=\"-1\">\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Dane.<\/td>\n<\/tr>\n<tr>\n<td>ContentLength (int)<\/td>\n<td>D\u0142ugo\u015b\u0107 danych w bajtach.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"833\" data-end=\"839\">null<\/em> lub gdy metoda <em data-start=\"855\" data-end=\"876\">requiresAttention()<\/em> obiektu <em data-start=\"885\" data-end=\"904\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"920\" data-end=\"926\">true<\/em>. W takim przypadku operacja nie mo\u017ce by\u0107 dalej kontynuowana.<\/p>\n<h6 data-start=\"0\" data-end=\"23\" id=\"akcja-close\" ><strong data-start=\"0\" data-end=\"23\">Akcja CLOSE<\/strong><\/h6>\n<p data-start=\"25\" data-end=\"81\" data-is-last-node=\"\" data-is-only-node=\"\">Wywo\u0142anie oraz zwracana warto\u015b\u0107: pusta lista parametr\u00f3w.<\/p>\n<h5 data-start=\"0\" data-end=\"41\" id=\"zdalne-wyszukiwanie-przez-corba\" ><span class=\"ez-toc-section\" id=\"Zdalne_wyszukiwanie_przez_CORBA\"><\/span><strong data-start=\"0\" data-end=\"41\">Zdalne wyszukiwanie przez CORBA<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"43\" data-end=\"315\">Funkcja wyszukiwania opiera si\u0119 na zapytaniu OQL. W celu zaw\u0119\u017cenia wynik\u00f3w mo\u017cna wykorzysta\u0107 pola selekcyjne zdefiniowane w zapytaniu OQL. Mo\u017cliwe jest r\u00f3wnie\u017c okre\u015blenie sortowania wynik\u00f3w. Wynik wyszukiwania dla ka\u017cdego wiersza zawiera pola zwracane przez zapytanie OQL.<\/p>\n<p data-start=\"317\" data-end=\"440\">Wyniki wyszukiwania s\u0105 przekazywane stronicowo, przy czym ka\u017cda strona jest zwracana w ramach osobnego wywo\u0142ania aplikacji.<\/p>\n<p data-start=\"442\" data-end=\"602\" data-is-last-node=\"\" data-is-only-node=\"\">W odr\u00f3\u017cnieniu od importu i eksportu, wyszukiwanie oferuje zar\u00f3wno format u\u017cytkownika, jak i format techniczny dla parametr\u00f3w selekcji oraz wynik\u00f3w wyszukiwania.<\/p>\n<h6 data-start=\"0\" data-end=\"29\" id=\"akcje-i-parametry\" ><strong data-start=\"0\" data-end=\"29\">Akcje i parametry<\/strong><\/h6>\n<p data-start=\"31\" data-end=\"61\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce akcje:<\/p>\n<table>\n<thead>\n<tr>\n<th>Action<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SEARCH<\/td>\n<td>Wyszukiwanie pasuj\u0105cych rekord\u00f3w, wynik zwracany w formacie XML.<\/td>\n<\/tr>\n<tr>\n<td>SEARCH_NEXT_PAGE<\/td>\n<td>Kontynuacja wyszukiwania, pobranie kolejnej strony wynik\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td>EXISTS<\/td>\n<td>Sprawdzenie, czy istnieje co najmniej jeden rekord spe\u0142niaj\u0105cy kryteria (sprawdzenie istnienia). Je\u015bli tak, zwracane s\u0105 atrybuty tego rekordu.<\/td>\n<\/tr>\n<tr>\n<td>CLOSE<\/td>\n<td>Zamyka wyszukiwanie przed osi\u0105gni\u0119ciem ostatniej strony wynik\u00f3w.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"481\" data-end=\"544\"><strong data-start=\"481\" data-end=\"544\">Przebieg wyszukiwania z pobraniem wszystkich stron wynik\u00f3w:<\/strong><\/p>\n<ul data-start=\"546\" data-end=\"731\" data-is-last-node=\"\" data-is-only-node=\"\">\n<li data-section-id=\"1w6wh1\" data-start=\"546\" data-end=\"649\">Wywo\u0142anie akcji <em data-start=\"564\" data-end=\"572\">SEARCH<\/em> z podaniem parametr\u00f3w wyszukiwania. Zwracana jest pierwsza strona wynik\u00f3w.<\/li>\n<li data-section-id=\"fqnesl\" data-start=\"650\" data-end=\"731\" data-is-last-node=\"\">Kolejne strony wynik\u00f3w pobierane s\u0105 poprzez wywo\u0142ania akcji <em data-start=\"712\" data-end=\"730\">SEARCH_NEXT_PAGE<\/em>.<\/li>\n<\/ul>\n<h6 data-start=\"0\" data-end=\"24\" id=\"akcja-search\" ><strong data-start=\"0\" data-end=\"24\">Akcja SEARCH<\/strong><\/h6>\n<p data-start=\"26\" data-end=\"60\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parametr<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SearchName (String)<\/td>\n<td>Pe\u0142na nazwa zapytania OQL.<\/td>\n<\/tr>\n<tr>\n<td>SearchParameters (CisParameterList)<\/td>\n<td>Parametry wyszukiwania dla zapytania OQL (opcjonalne). Domy\u015blnie brak parametr\u00f3w. Warto\u015b\u0107 stanowi lista parametr\u00f3w, gdzie nazwa parametru odpowiada nazwie pola wyszukiwania z OQL, a warto\u015b\u0107 parametru jest tzw. <em>selection string<\/em>. Nale\u017cy poda\u0107 tylko te parametry, kt\u00f3re maj\u0105 by\u0107 u\u017cyte do zaw\u0119\u017cenia wynik\u00f3w. Mo\u017cliwe warto\u015bci <em>selection string<\/em> zale\u017c\u0105 od typu danych pola.<\/td>\n<\/tr>\n<tr>\n<td>SearchSortOrder (String)<\/td>\n<td>Sortowanie wynik\u00f3w dla zapytania OQL (opcjonalne). Domy\u015blnie stosowane jest sortowanie zdefiniowane w zapytaniu OQL.\u00a0<\/td>\n<\/tr>\n<tr>\n<td>Database (String)<\/td>\n<td>Alias bazy danych. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaTransactionManager<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>SearchParametersFormat (int)<\/td>\n<td>Okre\u015bla format parametr\u00f3w wyszukiwania. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaRemoteSearch<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>SearchResultFormat (int)<\/td>\n<td>Okre\u015bla format atrybut\u00f3w zwracanych w wynikach wyszukiwania. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaRemoteSearch<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>PageSize (int)<\/td>\n<td>Liczba wierszy na stron\u0119 wynik\u00f3w (opcjonalnie, domy\u015blnie: 10).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"1343\" data-end=\"1401\">Dla parametr\u00f3w formatowania dost\u0119pne s\u0105 nast\u0119puj\u0105ce sta\u0142e:<\/p>\n<ul data-start=\"1403\" data-end=\"1505\">\n<li data-section-id=\"1xffkn7\" data-start=\"1403\" data-end=\"1462\"><em data-start=\"1405\" data-end=\"1428\">FORMAT_USER_DEPENDENT<\/em> \u2013 format zale\u017cny od u\u017cytkownika<\/li>\n<li data-section-id=\"12vueo4\" data-start=\"1463\" data-end=\"1505\"><em data-start=\"1465\" data-end=\"1483\">FORMAT_TECHNICAL<\/em> \u2013 format techniczny<\/li>\n<\/ul>\n<p data-start=\"1507\" data-end=\"1528\"><strong data-start=\"1507\" data-end=\"1528\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Wynik wyszukiwania (pierwsza strona) w postaci dokumentu XML.<\/td>\n<\/tr>\n<tr>\n<td>HasNextPage (boolean)<\/td>\n<td>Warto\u015b\u0107 <em>true<\/em>, je\u015bli dost\u0119pne s\u0105 kolejne strony wynik\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td>CurrentPageNumber (int)<\/td>\n<td>Numer aktualnie zwr\u00f3conej strony.<\/td>\n<\/tr>\n<tr>\n<td>CurrentObjectCount (int)<\/td>\n<td>\u0141\u0105czna liczba dotychczas zwr\u00f3conych rekord\u00f3w.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"1959\" data-end=\"1965\">null<\/em> lub gdy metoda <em data-start=\"1981\" data-end=\"2002\">requiresAttention()<\/em> obiektu <em data-start=\"2011\" data-end=\"2030\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"2046\" data-end=\"2052\">true<\/em>. W takim przypadku proces wyszukiwania nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<h6 data-start=\"0\" data-end=\"34\" id=\"akcja-search_next_page\" ><strong data-start=\"0\" data-end=\"34\">Akcja SEARCH_NEXT_PAGE<\/strong><\/h6>\n<p data-start=\"36\" data-end=\"71\">Wywo\u0142anie: pusta lista parametr\u00f3w<\/p>\n<p data-start=\"73\" data-end=\"94\"><strong data-start=\"73\" data-end=\"94\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Content (byte[]\/Binary)<\/td>\n<td>Wynik wyszukiwania (bie\u017c\u0105ca strona) w postaci dokumentu XML.<\/td>\n<\/tr>\n<tr>\n<td>HasNextPage (boolean)<\/td>\n<td>Warto\u015b\u0107 <em>true<\/em>, je\u015bli dost\u0119pne s\u0105 kolejne strony wynik\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td>CurrentPageCount (int)<\/td>\n<td>Numer aktualnie zwr\u00f3conej strony.<\/td>\n<\/tr>\n<tr>\n<td>CurrentObjectCount (int)<\/td>\n<td>\u0141\u0105czna liczba dotychczas zwr\u00f3conych rekord\u00f3w.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"523\" data-end=\"529\">null<\/em> lub gdy metoda <em data-start=\"545\" data-end=\"566\">requiresAttention()<\/em> obiektu <em data-start=\"575\" data-end=\"594\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"610\" data-end=\"616\">true<\/em>. W takim przypadku proces wyszukiwania nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<h6 data-start=\"0\" data-end=\"24\" id=\"akcja-exists\" ><strong data-start=\"0\" data-end=\"24\">Akcja EXISTS<\/strong><\/h6>\n<p data-start=\"26\" data-end=\"60\">Dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<table style=\"width: 100%; height: 278px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<th style=\"height: 23px;\">Parametr<\/th>\n<th style=\"height: 23px;\">Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\">SearchName (String)<\/td>\n<td style=\"height: 23px;\">Pe\u0142na nazwa zapytania OQL.<\/td>\n<\/tr>\n<tr style=\"height: 140px;\">\n<td style=\"height: 140px;\">SearchParameters (CisParameterList)<\/td>\n<td style=\"height: 140px;\">Parametry wyszukiwania dla zapytania OQL (opcjonalne). Domy\u015blnie brak parametr\u00f3w. Warto\u015b\u0107 stanowi lista parametr\u00f3w, gdzie nazwa parametru odpowiada nazwie pola wyszukiwania z OQL, a warto\u015b\u0107 parametru jest tzw. <em>selection string<\/em>. Nale\u017cy poda\u0107 tylko te parametry, kt\u00f3re maj\u0105 by\u0107 u\u017cyte do zaw\u0119\u017cenia wynik\u00f3w. Mo\u017cliwe warto\u015bci <em>selection string<\/em> zale\u017c\u0105 od typu danych pola<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px;\">Database (String)<\/td>\n<td style=\"height: 46px;\">Alias bazy danych. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaTransactionManager<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px;\">SearchParametersFormat (int)<\/td>\n<td style=\"height: 46px;\">Okre\u015bla format parametr\u00f3w wyszukiwania. Nale\u017cy u\u017cywa\u0107 sta\u0142ych z interfejsu IDL <em>CorbaRemoteSearch<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"850\" data-end=\"871\"><strong data-start=\"850\" data-end=\"871\">Zwracana warto\u015b\u0107:<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex flex-col-reverse w-fit\" tabindex=\"-1\">\n<table>\n<thead>\n<tr>\n<th>Warto\u015b\u0107<\/th>\n<th>Znaczenie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ResultObject (CisParameterList)<\/td>\n<td>Znaleziony obiekt w postaci listy parametr\u00f3w zawieraj\u0105cej jego atrybuty. Atrybuty przekazywane s\u0105 jako natywne typy danych. Z\u0142o\u017cone typy danych nie s\u0105 obs\u0142ugiwane.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p data-start=\"1106\" data-end=\"1230\">Je\u017celi nie znaleziono \u017cadnego obiektu, parametr ten nie jest zwracany (metoda <em data-start=\"1184\" data-end=\"1205\">containsParameter()<\/em> zwraca warto\u015b\u0107 <em data-start=\"1221\" data-end=\"1228\">false<\/em>).<\/p>\n<p data-start=\"1232\" data-end=\"1482\" data-is-last-node=\"\" data-is-only-node=\"\">Wyst\u0105pienie b\u0142\u0119du sygnalizowane jest wtedy, gdy zwr\u00f3cona lista parametr\u00f3w ma warto\u015b\u0107 <em data-start=\"1317\" data-end=\"1323\">null<\/em> lub gdy metoda <em data-start=\"1339\" data-end=\"1360\">requiresAttention()<\/em> obiektu <em data-start=\"1369\" data-end=\"1388\">CorbaMessageQueue<\/em> zwraca warto\u015b\u0107 <em data-start=\"1404\" data-end=\"1410\">true<\/em>. W takim przypadku proces wyszukiwania nie mo\u017ce by\u0107 dalej kontynuowany.<\/p>\n<h6 data-start=\"0\" data-end=\"23\" id=\"akcja-close\" ><strong data-start=\"0\" data-end=\"23\">Akcja CLOSE<\/strong><\/h6>\n<p data-start=\"25\" data-end=\"89\" data-is-last-node=\"\" data-is-only-node=\"\">Wywo\u0142anie oraz zwracana warto\u015b\u0107: pusta lista <em data-start=\"70\" data-end=\"88\">CisParameterList<\/em>.<\/p>\n<h3 data-start=\"25\" data-end=\"89\" id=\"przyklady\" ><span class=\"ez-toc-section\" id=\"Przyklady\"><\/span>Przyk\u0142ady\u00a0<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"27\" data-end=\"307\">Wraz z systemem Comarch ERP Enterprise dostarczane s\u0105 klienty testowe, kt\u00f3re demonstruj\u0105 wykorzystanie zdalnych interfejs\u00f3w BIS. Klienci testowi stanowi\u0105 cz\u0119\u015b\u0107 kodu aplikacji systemu. Kod \u017ar\u00f3d\u0142owy jest r\u00f3wnie\u017c dost\u0119pny, je\u015bli licencjonowany jest Software Development Kit (SDK).<\/p>\n<p data-start=\"309\" data-end=\"621\">Klienci testowi mog\u0105 by\u0107 uruchamiani zar\u00f3wno z poziomu Toolshell, jak i niezale\u017cnie od serwera aplikacji systemu. W tym celu nale\u017cy post\u0119powa\u0107 zgodnie z instrukcjami zawartymi w rozdziale dotycz\u0105cym uruchamiania klienta testowego, zast\u0119puj\u0105c nazw\u0119 narz\u0119dzia lub klasy odpowiednimi nazwami podanymi poni\u017cej.<\/p>\n<p data-start=\"623\" data-end=\"806\">Niekt\u00f3rzy klienci testowi posiadaj\u0105 dodatkowe parametry wykraczaj\u0105ce poza te opisane w dokumentacji <em>Interfejs CORBA<\/em>. Parametry te s\u0105 udokumentowane w kodzie \u017ar\u00f3d\u0142owym oraz w JavaDoc.<\/p>\n<p data-start=\"808\" data-end=\"848\" data-is-last-node=\"\" data-is-only-node=\"\">Dost\u0119pni s\u0105 nast\u0119puj\u0105cy klienci testowi:<\/p>\n<ul>\n<li data-start=\"0\" data-end=\"130\"><strong data-start=\"0\" data-end=\"11\">Eksport<\/strong><br data-start=\"11\" data-end=\"14\" \/>Toolname: <em data-start=\"24\" data-end=\"53\">CorbaRemoteExportTestClient<\/em><br data-start=\"53\" data-end=\"56\" \/>Klasa Java: <em data-start=\"68\" data-end=\"128\">com.cisag.app.system.corba.log.CorbaRemoteExportTestClient<\/em><\/li>\n<li data-start=\"132\" data-end=\"283\"><strong data-start=\"132\" data-end=\"152\">Eksport schematu<\/strong><br data-start=\"152\" data-end=\"155\" \/>Toolname: <em data-start=\"165\" data-end=\"200\">CorbaRemoteSchemaExportTestClient<\/em><br data-start=\"200\" data-end=\"203\" \/>Klasa Java: <em data-start=\"215\" data-end=\"281\">com.cisag.app.system.corba.log.CorbaRemoteSchemaExportTestClient<\/em><\/li>\n<li data-start=\"285\" data-end=\"414\"><strong data-start=\"285\" data-end=\"295\">Import<\/strong><br data-start=\"295\" data-end=\"298\" \/>Toolname: <em data-start=\"308\" data-end=\"337\">CorbaRemoteImportTestClient<\/em><br data-start=\"337\" data-end=\"340\" \/>Klasa Java: <em data-start=\"352\" data-end=\"412\">com.cisag.app.system.corba.log.CorbaRemoteImportTestClient<\/em><\/li>\n<\/ul>\n<p data-start=\"416\" data-end=\"652\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Ten klient testowy zapisuje dane w bazie OLTP, do kt\u00f3rej jest zalogowany za pomoc\u0105 przekazanych parametr\u00f3w. Nie nale\u017cy go u\u017cywa\u0107 dla produkcyjnych baz danych OLTP. Spos\u00f3b dzia\u0142ania klienta jest opisany w kodzie \u017ar\u00f3d\u0142owym.<\/div><\/section><\/p>\n<ul>\n<li data-start=\"654\" data-end=\"789\"><strong data-start=\"654\" data-end=\"670\">Wyszukiwanie<\/strong><br data-start=\"670\" data-end=\"673\" \/>Toolname: <em data-start=\"683\" data-end=\"712\">CorbaRemoteSearchTestClient<\/em><br data-start=\"712\" data-end=\"715\" \/>Klasa Java: <em data-start=\"727\" data-end=\"787\">com.cisag.app.system.corba.log.CorbaRemoteSearchTestClient<\/em><\/li>\n<\/ul>\n<p data-start=\"791\" data-end=\"903\">Kod \u017ar\u00f3d\u0142owy klienta testowego CORBA napisanego w j\u0119zyku Java jest dost\u0119pny w aplikacji <em>Obiekty deweloperskie<\/em>.<\/p>\n<p data-start=\"905\" data-end=\"1267\" data-is-last-node=\"\" data-is-only-node=\"\">Klasy s\u0105 szczeg\u00f3\u0142owo udokumentowane w kodzie \u017ar\u00f3d\u0142owym. Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119, \u017ce przyk\u0142adowe implementacje wykorzystuj\u0105 klasy wygenerowane w System Engine oraz niekt\u00f3re klasy interfejsu PGM, aby umo\u017cliwi\u0107 ich \u0142atwe uruchamianie zar\u00f3wno z poziomu Toolshell, jak i bez jego u\u017cycia. Przy tworzeniu niezale\u017cnego klienta CORBA komponenty te nie s\u0105 wymagane.<\/p>\n<h4 data-start=\"0\" data-end=\"20\" id=\"postepowanie\" ><span class=\"ez-toc-section\" id=\"Postepowanie\"><\/span><strong data-start=\"0\" data-end=\"20\">Post\u0119powanie<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"22\" data-end=\"103\">Aby uruchomi\u0107 klienta testowego, nale\u017cy post\u0119powa\u0107 zgodnie z poni\u017csz\u0105 instrukcj\u0105.<\/p>\n<h5 data-start=\"105\" data-end=\"135\" id=\"uruchomienie-serwera\" ><span class=\"ez-toc-section\" id=\"Uruchomienie_serwera\"><\/span><strong data-start=\"105\" data-end=\"135\">Uruchomienie serwera<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"137\" data-end=\"159\">W Toolshell:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em><span style=\"color: initial;\">strscs \u2013host:localhost \u2013port:2000<\/span><\/em><\/div>\n<div>\n<h5 data-start=\"204\" data-end=\"244\" id=\"uruchomienie-klienta-testowego\" ><span class=\"ez-toc-section\" id=\"Uruchomienie_klienta_testowego\"><\/span><strong data-start=\"204\" data-end=\"244\">Uruchomienie klienta testowego<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"246\" data-end=\"483\">Klient testowy jest dostarczany jako zestaw obiekt\u00f3w deweloperskich w standardowej instalacji. Opr\u00f3cz klas Java zdefiniowana jest dla niego aplikacja typu <em>Tool<\/em>. Uruchomienie klienta testowego w Toolshell odbywa si\u0119 za pomoc\u0105 polecenia:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><em style=\"color: initial;\">CorbaTestClient -host:localhost -port:2000 -userName:&lt;u\u017cytkownik&gt; -password:&lt;has\u0142o&gt; -oltpDatabaseName:&lt;baza OLTP&gt;<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"608\" data-end=\"859\">Aplikacja wsadowa wywo\u0142ywana zdalnie przez klienta testowego przekazuje otrzymane parametry wej\u015bciowe jako warto\u015bci zwracane w wyniku wywo\u0142ania. Dodatkowo generowany jest komunikat typu b\u0142\u0105d. Warto\u015bci zwracane oraz komunikaty s\u0105 wy\u015bwietlane w konsoli.<\/p>\n<p data-start=\"861\" data-end=\"1124\">Klienta testowego mo\u017cna r\u00f3wnie\u017c uruchomi\u0107 poza Toolshell. W tym celu nale\u017cy doda\u0107 do \u015bcie\u017cki klas biblioteki JacORB (<em data-start=\"978\" data-end=\"1024\">jacorb.jar, avalon-framework.jar, logkit.jar<\/em>), System Engine oraz kod aplikacji. Uruchomienie odbywa si\u0119 wtedy w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><span style=\"color: initial;\">java com.cisag.app.system.corba.log.CorbaTestClient<\/span><\/div>\n<div class=\"pe-11 pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\">-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB<br \/>-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton<br \/>-cp &lt;\u015bcie\u017cka klas&gt;<br \/>-host:&lt;host&gt;<br \/>-port:&lt;port&gt;-userName:&lt;u\u017cytkownik&gt;<br \/>-password:&lt;has\u0142o&gt;<br \/>-oltpDatabaseName:&lt;baza OLTP&gt;<\/div>\n<div>\n<h5 data-start=\"1409\" data-end=\"1436\" id=\"komunikaty-bledow\" ><span class=\"ez-toc-section\" id=\"Komunikaty_bledow\"><\/span><strong data-start=\"1409\" data-end=\"1436\">Komunikaty b\u0142\u0119d\u00f3w<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"1438\" data-end=\"1649\">W przypadku wyst\u0105pienia komunikatu b\u0142\u0119du w formie<br data-start=\"1487\" data-end=\"1490\" \/><em>org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No<\/em><br data-start=\"1560\" data-end=\"1563\" \/>nale\u017cy sprawdzi\u0107 parametry serwera CORBA i klienta CORBA oraz komunikacj\u0119 mi\u0119dzy nimi.<\/p>\n<p data-start=\"1651\" data-end=\"1866\">B\u0142\u0119dy wyst\u0119puj\u0105ce podczas logowania klienta CORBA lub podczas wykonywania aplikacji wsadowych na serwerze aplikacji systemu s\u0105 \u2014 w zale\u017cno\u015bci od ich wagi \u2014 zapisywane w logach i mog\u0105 zosta\u0107 tam przeanalizowane.<\/p>\n<p data-start=\"1868\" data-end=\"2224\" data-is-last-node=\"\" data-is-only-node=\"\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Microsoft Word podczas operacji kopiowania i wklejania (Ctrl+C \/ Ctrl+V) mo\u017ce zamienia\u0107 znak \u201e-\u201d (minus) na \u201e\u2013\u201d (my\u015blnik). Poniewa\u017c niekt\u00f3re programy nie waliduj\u0105 parametr\u00f3w wej\u015bciowych, mo\u017ce to prowadzi\u0107 do nieprawid\u0142owego dzia\u0142ania (np. braku komunikacji z ORB). W takim przypadku nale\u017cy zweryfikowa\u0107 parametry wprowadzone w wierszu polece\u0144.<\/div><\/section><\/p>\n<h3 data-start=\"1868\" data-end=\"2224\" id=\"corba-i-zapory-sieciowe-firewalle\" ><span class=\"ez-toc-section\" id=\"CORBA_i_zapory_sieciowe_firewalle\"><\/span>CORBA i zapory sieciowe (firewalle)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"41\" data-end=\"301\">CORBA realizuje architektur\u0119 obiektow\u0105, a tym samym stanow\u0105. Jedn\u0105 z jej podstawowych cech jest niezale\u017cno\u015b\u0107 obiektu od miejsca, w kt\u00f3rym jest on udost\u0119pniany. Z tego wynikaj\u0105 dwa kluczowe wymagania dotycz\u0105ce komunikacji mi\u0119dzy serwerem CORBA a klientem CORBA:<\/p>\n<ul data-start=\"303\" data-end=\"676\">\n<li data-section-id=\"1motooa\" data-start=\"303\" data-end=\"547\">Poniewa\u017c klient i serwer wymieniaj\u0105 referencje do obiekt\u00f3w, klient musi mie\u0107 mo\u017cliwo\u015b\u0107 aktywnego wywo\u0142ywania operacji na serwerze, a serwer \u2014 na kliencie. W praktyce role \u201eklienta\u201d i \u201eserwera\u201d po nawi\u0105zaniu po\u0142\u0105czenia trac\u0105 swoje znaczenie.<\/li>\n<li data-section-id=\"c94wwv\" data-start=\"548\" data-end=\"676\">Referencje do obiekt\u00f3w oraz same obiekty reprezentuj\u0105 stan, co wymaga stosowania protoko\u0142u komunikacyjnego obs\u0142uguj\u0105cego stan.<\/li>\n<\/ul>\n<p data-start=\"678\" data-end=\"1037\">Problemy w komunikacji mi\u0119dzy klientami i serwerami CORBA cz\u0119sto wynikaj\u0105 z dzia\u0142ania zap\u00f3r sieciowych znajduj\u0105cych si\u0119 pomi\u0119dzy nimi. Firewalle cz\u0119sto przepuszczaj\u0105 tylko wybrane protoko\u0142y sieciowe, co mo\u017ce skutkowa\u0107 sytuacj\u0105, w kt\u00f3rej logowanie do systemu przez \u201ehttps:\/\/\u201d dzia\u0142a poprawnie, natomiast klient CORBA nie mo\u017ce uzyska\u0107 dost\u0119pu przez \u201eiiop:\/\/\u201d.<\/p>\n<p data-start=\"1039\" data-end=\"1189\">Przechodzenie przez zapory sieciowe jest w przypadku CORBA bardziej problematyczne ni\u017c w wielu innych protoko\u0142ach, co wynika z nast\u0119puj\u0105cych przyczyn:<\/p>\n<ul data-start=\"1191\" data-end=\"1942\">\n<li data-section-id=\"wicsd2\" data-start=\"1191\" data-end=\"1386\">Implementacje CORBA dynamicznie przydzielaj\u0105 numery port\u00f3w w czasie dzia\u0142ania. Poniewa\u017c nie s\u0105 one przewidywalne, nie mo\u017cna ich wcze\u015bniej skonfigurowa\u0107 w zaporach opartych na regu\u0142ach port\u00f3w.<\/li>\n<li data-section-id=\"1ds171e\" data-start=\"1387\" data-end=\"1762\">Referencje do obiekt\u00f3w zawieraj\u0105 adres IP i numer portu, aby implementacja ORB po stronie odbiorcy mog\u0142a bezpo\u015brednio odwo\u0142a\u0107 si\u0119 do obiektu. Zastosowanie NAT (Network Address Translation) powoduje jednak, \u017ce host mo\u017ce by\u0107 dost\u0119pny pod r\u00f3\u017cnymi adresami w r\u00f3\u017cnych segmentach sieci, co sprawia, \u017ce adres IP przekazany w protokole mo\u017ce by\u0107 nieprawid\u0142owy po stronie odbiorcy.<\/li>\n<li data-section-id=\"1db4m82\" data-start=\"1763\" data-end=\"1942\">CORBA cz\u0119sto wykorzystuje mechanizm wywo\u0142a\u0144 zwrotnych (callback\u00f3w) z serwera do klienta. Wymaga to, aby klient by\u0142 dost\u0119pny dla serwera, co bywa blokowane przez zapory sieciowe.<\/li>\n<\/ul>\n<p data-start=\"1944\" data-end=\"2297\" data-is-last-node=\"\" data-is-only-node=\"\">Ze wzgl\u0119d\u00f3w bezpiecze\u0144stwa nie nale\u017cy rezygnowa\u0107 z u\u017cycia zap\u00f3r sieciowych. Aby rozwi\u0105za\u0107 powy\u017csze problemy, producenci oferuj\u0105 tzw. <em data-start=\"2077\" data-end=\"2108\">Application Security Gateways<\/em> \u2014 rozwi\u0105zania dostosowane do CORBA, kt\u00f3re zamiast na poziomie adres\u00f3w IP dzia\u0142aj\u0105 na poziomie referencji obiekt\u00f3w CORBA, zapewniaj\u0105c mechanizmy uwierzytelniania, bezpiecze\u0144stwa i routingu.<\/p>\n<h3 data-start=\"0\" data-end=\"38\" id=\"ochrona-przed-niedoborem-zasobow\" ><span class=\"ez-toc-section\" id=\"Ochrona_przed_niedoborem_zasobow\"><\/span><strong data-start=\"0\" data-end=\"38\">Ochrona przed niedoborem zasob\u00f3w<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"40\" data-end=\"835\">Ka\u017cda sesja otwierana przez klienta poprzez CORBA w systemie zu\u017cywa zasoby serwera aplikacji, takie jak pami\u0119\u0107, czas procesora oraz po\u0142\u0105czenia z baz\u0105 danych. W scenariuszach, w kt\u00f3rych bardzo du\u017ca liczba klient\u00f3w utrzymuje sta\u0142e po\u0142\u0105czenie z serwerem CORBA, mo\u017ce doj\u015b\u0107 do niedobor\u00f3w zasob\u00f3w. Szczeg\u00f3lnie krytyczne s\u0105 w tym przypadku sesje CORBA (oraz po\u0142\u0105czenia z baz\u0105 danych). Ka\u017cda sesja CORBA od momentu utworzenia zajmuje jeden w\u0105tek, a tym samym pami\u0119\u0107 sterty dla stosu w\u0105tku oraz zasoby natywne zale\u017cne od systemu operacyjnego. Podczas przetwarzania \u017c\u0105dania CORBA ORB wykorzystuje w\u0105tek ze swojej puli do jego obs\u0142ugi, a nast\u0119pnie przekazuje je do w\u0105tku. Je\u017celi przetwarzanie wymaga dost\u0119pu do danych, dodatkowo wykorzystywane s\u0105 po\u0142\u0105czenia z baz\u0105 danych.<\/p>\n<p data-start=\"837\" data-end=\"1089\">Pami\u0119\u0107, w\u0105tki oraz po\u0142\u0105czenia z baz\u0105 danych s\u0105 zasobami ograniczonymi na serwerze aplikacyjnym. Niedob\u00f3r zasob\u00f3w prowadzi do wyd\u0142u\u017cenia czasu przetwarzania wywo\u0142a\u0144 CORBA, a w skrajnych przypadkach mo\u017ce zagrozi\u0107 stabilno\u015bci ca\u0142ego serwera aplikacji.<\/p>\n<p data-start=\"1091\" data-end=\"1272\">Aby zapobiec niedoborom zasob\u00f3w, dost\u0119pnych jest kilka rozwi\u0105za\u0144. Ich wsp\u00f3ln\u0105 ide\u0105 jest koordynacja dost\u0119pu do zasob\u00f3w krytycznych w celu ograniczenia liczby r\u00f3wnoczesnych operacji.<\/p>\n<figure id=\"attachment_43364\" aria-describedby=\"caption-attachment-43364\" style=\"width: 475px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-43364\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1.jpg\" alt=\"\" width=\"475\" height=\"255\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1.jpg 475w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1-300x161.jpg 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1-50x27.jpg 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut1-320x172.jpg 320w\" sizes=\"auto, (max-width: 475px) 100vw, 475px\" \/><\/a><figcaption id=\"caption-attachment-43364\" class=\"wp-caption-text\">Wiele serwer\u00f3w CORBA<\/figcaption><\/figure>\n<p data-start=\"1274\" data-end=\"1674\" data-is-last-node=\"\" data-is-only-node=\"\">W pierwszym rozwi\u0105zaniu (rysunek 1) wykorzystywanych jest wiele serwer\u00f3w CORBA (tj. serwer\u00f3w aplikacji systemu), na kt\u00f3re rozdzielany jest ruch klient\u00f3w. Pozwala to zmniejszy\u0107 zu\u017cycie pami\u0119ci na pojedynczym serwerze aplikacyjnym. Nale\u017cy jednak uwzgl\u0119dni\u0107, \u017ce takie podej\u015bcie mo\u017ce prowadzi\u0107 do zwi\u0119kszonego obci\u0105\u017cenia bazy danych, je\u015bli wiele \u017c\u0105da\u0144 trafia jednocze\u015bnie do serwer\u00f3w aplikacji.<\/p>\n<\/div>\n<p data-start=\"0\" data-end=\"363\">W drugim rozwi\u0105zaniu (rysunek 2) wykorzystywany jest niezale\u017cny proces, dzia\u0142aj\u0105cy poza systemem (<em>CORBA Proxy Queue<\/em>). \u017b\u0105dania klient\u00f3w trafiaj\u0105 najpierw do tego procesu, gdzie s\u0105 umieszczane w kolejce, a nast\u0119pnie w ograniczonej liczbie przekazywane do systemu. W ten spos\u00f3b ograniczana jest liczba sesji CORBA oraz liczba po\u0142\u0105cze\u0144 z baz\u0105 danych w systemie.<\/p>\n<p data-start=\"365\" data-end=\"556\" data-is-last-node=\"\" data-is-only-node=\"\"><em>CORBA Proxy Queu<\/em>e dzia\u0142a jednocze\u015bnie jako serwer i klient CORBA. Implementacja takiej kolejki mo\u017ce zosta\u0107 wykonana w dowolnym j\u0119zyku programowania, dostosowanym do danego przypadku u\u017cycia.<\/p>\n<\/div>\n<figure id=\"attachment_43366\" aria-describedby=\"caption-attachment-43366\" style=\"width: 467px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-43366\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2.jpg\" alt=\"\" width=\"467\" height=\"182\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2.jpg 467w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2-300x117.jpg 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2-50x19.jpg 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/Zrzut2-320x125.jpg 320w\" sizes=\"auto, (max-width: 467px) 100vw, 467px\" \/><\/a><figcaption id=\"caption-attachment-43366\" class=\"wp-caption-text\">CORBA Proxy Queue<\/figcaption><\/figure>\n<p data-start=\"0\" data-end=\"218\">W obu przedstawionych rozwi\u0105zaniach zak\u0142ada si\u0119, \u017ce ka\u017cdy proces dzia\u0142a na osobnym serwerze i ma do dyspozycji jego zasoby w spos\u00f3b wy\u0142\u0105czny. R\u00f3wnie\u017c <em>CORBA Proxy Queue<\/em> powinna by\u0107 uruchamiana na dedykowanym serwerze.<\/p>\n<p data-start=\"220\" data-end=\"451\" data-is-last-node=\"\" data-is-only-node=\"\">Ju\u017c na etapie tworzenia integracji z systemu przez CORBA nale\u017cy przeprowadzi\u0107 testy z uwzgl\u0119dnieniem przewidywanej liczby klient\u00f3w. Pozwala to oceni\u0107, czy w danym przypadku konieczne jest zastosowanie mechanizm\u00f3w ochrony zasob\u00f3w.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-8215","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-zewnetrzne-interfejsy"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8215","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=8215"}],"version-history":[{"count":20,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8215\/revisions"}],"predecessor-version":[{"id":43370,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8215\/revisions\/43370"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=8215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}