{"id":7854,"date":"2024-01-19T09:49:10","date_gmt":"2024-01-19T08:49:10","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=7854"},"modified":"2024-01-19T09:49:17","modified_gmt":"2024-01-19T08:49:17","slug":"interfejs-uslug-sieciowych","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-uslug-sieciowych\/","title":{"rendered":"Interfejs us\u0142ug sieciowych"},"content":{"rendered":"<p>Us\u0142ugi sieciowe to interfejsy do zdalnego wywo\u0142ywania funkcji. Nale\u017c\u0105 one do tej samej kategorii interfejs\u00f3w co CORBA.<\/p>\n<p>Comarch ERP Enterprise oferuje interfejs us\u0142ug sieciowych z \u0142\u0105czem do Business Integration Service (BIS) na potrzeby funkcji eksportu i importu danych. Dzi\u0119ki temu jednostki biznesowe (Business Entitys) mog\u0105 by\u0107 eksportowane do aplikacji klienckiej lub importowane z niej za pomoc\u0105 us\u0142ug sieciowych. Ponadto istnieje mo\u017cliwo\u015b\u0107 wywo\u0142ywania aplikacji w tle poprzez interfejs us\u0142ug sieciowych. Niniejszy dokument zawiera opis us\u0142ug sieciowych.<\/p>\n<p>U\u017cytkownik mo\u017ce programowa\u0107 w\u0142asne us\u0142ugi sieciowe, kt\u00f3re do zdalnych wywo\u0142a\u0144 funkcji wykorzystuj\u0105 protok\u00f3\u0142 SOAP lub realizuj\u0105 regu\u0142y REST. Szczeg\u00f3\u0142owe informacje znajduj\u0105 si\u0119 w dokumencie <em>Interfejs dla programowalnych us\u0142ug sieciowych<\/em>.<\/p>\n<p>W przeciwie\u0144stwie do interfejsu CORBA, interfejs us\u0142ug sieciowych nie zosta\u0142 stworzony do przesy\u0142ania du\u017cych ilo\u015bci danych lub do kr\u00f3tkich czas\u00f3w reakcji, ale z my\u015bl\u0105 o mo\u017cliwie jak najprostszej obs\u0142udze dla klient\u00f3w, kt\u00f3rzy nie znaj\u0105 skomplikowanych logik lub protoko\u0142\u00f3w.<\/p>\n<p>Interfejs us\u0142ug sieciowych wykorzystuje og\u00f3lnie dost\u0119pn\u0105 bibliotek\u0119 us\u0142ug sieciowych Apache Axis dla us\u0142ug sieciowych, kt\u00f3re nie s\u0105 programowalne. Axis mo\u017cna r\u00f3wnie\u017c wykorzysta\u0107 do implementacji klient\u00f3w w Java. Szczeg\u00f3\u0142owe informacje o Axis dost\u0119pne s\u0105 na stronie:<\/p>\n<p><a href=\"https:\/\/axis.apache.org\/axis\/\"><em>http:\/\/ws.apache.org\/axis\/<\/em><\/a><\/p>\n<p>Comarch ERP Enterprise posiada klient\u00f3w przyk\u0142adowych zar\u00f3wno dla Java, jak r\u00f3wnie\u017c dla \u201eMicrosoft.Net\u201d. Obs\u0142uga dla klient\u00f3w Java oparta jest na Axis, natomiast klienci \u201eMicrosoft.Net\u201d realizowani s\u0105 w formie arkusza Microsoft Excel z przynale\u017cnym kodem C#. Opis klient\u00f3w przyk\u0142adowych znajduje si\u0119 w rozdziale 6.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Interfejs us\u0142ug sieciowych nie jest przeznaczony do przesy\u0142ania du\u017cych zbior\u00f3w danych. Otrzymane lub wys\u0142ane dane mog\u0105 wymaga\u0107 ca\u0142kowitego przetworzenia w pami\u0119ci g\u0142\u00f3wnej serwera aplikacji. Mo\u017ce to prowadzi\u0107 do znacznego obci\u0105\u017cenia serwera aplikacji i zmniejszenia wydajno\u015bci.<\/div><\/section>\n<p>Z uwagi na z\u0142o\u017cono\u015b\u0107 funkcjonalno\u015bci zaleca si\u0119 u\u017cywanie us\u0142ug sieciowych przez programist\u00f3w lub doradc\u00f3w technicznych.<\/p>\n<h3 id=\"definicje-pojec\" >Definicje poj\u0119\u0107<\/h3>\n<p><strong>WSDL<\/strong> &#8211; web Services Description Language, j\u0119zyk opisu dla interfejsu us\u0142ugi sieciowej.<\/p>\n<p><strong>SOAP<\/strong> \u2013 simple Object Access Protocol. Protok\u00f3\u0142 oparty na XML przeznaczony do wymiany wiadomo\u015bci w systemach rozproszonych. SOAP jest wykorzystywana do komunikacji pomi\u0119dzy klientami a serwerami serwis\u00f3w sieciowych.<\/p>\n<h3 id=\"opis\" >Opis<\/h3>\n<h4 id=\"nieprogramowalne-uslugi-sieciowe\" >Nieprogramowalne us\u0142ugi sieciowe<\/h4>\n<p>Comarch ERP Enterprise oferuje cztery us\u0142ugi sieciowe, kt\u00f3rych nie mo\u017cna programowa\u0107. Us\u0142ugi te wykorzystuj\u0105 do po\u0142\u0105cze\u0144 zdalnych protok\u00f3\u0142 SOAP. Z jednej strony s\u0105 to specjalistyczne us\u0142ugi sieciowe: eksport i import danych oraz zdalne wyszukiwanie. Z drugiej strony istnieje mo\u017cliwo\u015b\u0107 uruchomienia dowolnych aplikacji w tle.<\/p>\n<h5 id=\"wywolanie-aplikacji-w-tle\" >Wywo\u0142anie aplikacji w tle<\/h5>\n<p>Ka\u017cd\u0105 z aplikacji w tle mo\u017cna wywo\u0142a\u0107 za pomoc\u0105 tej us\u0142ugi sieciowej. Aplikacje mog\u0105 by\u0107 jednak wywo\u0142ane tylko bez statusu (<em>CallApplication<\/em>). Inaczej ni\u017c w przypadku COBRA, gdzie mo\u017cliwe jest wywo\u0142anie aplikacji w konkretnym stanie (<em>RunApplication<\/em>).<\/p>\n<h5 id=\"eksport-danych\" >Eksport danych<\/h5>\n<p>Ta us\u0142uga sieciowa mo\u017ce by\u0107 wykorzystywana do eksportu danych jednostki biznesowej (dost\u0119pna w aplikacji <em>Eksport danych<\/em>). Filtr ustawiony w Comarch ERP Enterprise okre\u015bla liczb\u0119 eksportowanych atrybut\u00f3w i rekord\u00f3w danych. Klient zewn\u0119trzny mo\u017ce wtedy wywo\u0142a\u0107 ten eksport i jako odpowied\u017a otrzyma atrybuty ustawione w filtrze.<\/p>\n<h5 id=\"import-danych\" >Import danych<\/h5>\n<p>Ta us\u0142uga sieciowa mo\u017ce by\u0107 wykorzystywana do importu danych dla jednostki biznesowej (dost\u0119pna w aplikacji <em>Import danych<\/em>). Filtr ustawiony w Comarch ERP Enterprise okre\u015bla liczb\u0119 importowanych atrybut\u00f3w. Klient zewn\u0119trzny mo\u017ce wywo\u0142a\u0107 ten import, po czym zwracany jest wynik procesu importu oraz wszelkie nieprawid\u0142owe rekordy danych.<\/p>\n<h5 id=\"zdalne-wyszukiwanie\" >Zdalne wyszukiwanie<\/h5>\n<p>Ta us\u0142uga sieciowa mo\u017ce by\u0107 wykorzystywana do wyszukiwania poszczeg\u00f3lnych rekord\u00f3w danych jednostki biznesowej. W zale\u017cno\u015bci od wyszukiwania OQL zapisanego w Comarch ERP Enterprise parametry wysy\u0142ane s\u0105 do serwera, kt\u00f3ry nast\u0119pnie zwraca znalezione rekordy danych.<\/p>\n<h4 id=\"wywolanie-uslugi-sieciowej\" >Wywo\u0142anie us\u0142ugi sieciowej<\/h4>\n<p>Wywo\u0142anie us\u0142ugi sieciowej odbywa si\u0119 poprzez API, kt\u00f3re musi by\u0107 wygenerowane specjalnie dla wybranej us\u0142ugi sieciowej. Aby by\u0142a mo\u017cliwo\u015b\u0107 wygenerowania API, ka\u017cda us\u0142uga sieciowa udost\u0119pnia opis swoich parametr\u00f3w i warto\u015bci wynikowych w formie WSDL. WSDL musi nast\u0119pnie zosta\u0107 przekszta\u0142cone w odpowiednie API. S\u0142u\u017cy do tego narz\u0119dzie dost\u0119pne w Comarch ERP Enterprise. To API jest nast\u0119pnie wykorzystywane przez klienta do wywo\u0142anie us\u0142ugi sieciowej.<\/p>\n<p>Us\u0142ugi sieciowe mog\u0105 by\u0107 wywo\u0142ane przez dowolnego klienta w dowolnym j\u0119zyku programowania. Comarch ERP Enterprise wspiera tylko klient\u00f3w utworzonych w Java i .NET. Wszystkie inne formy klient\u00f3w mog\u0105 wymaga\u0107 dodatkowych instrument\u00f3w. Poni\u017cej jako przyk\u0142ad przedstawiono API klienta Axis 1 dla j\u0119zyka Java.<\/p>\n<h4 id=\"api-klienta\" >API klienta<\/h4>\n<p>Ka\u017cda us\u0142uga sieciowa sk\u0142ada si\u0119 z dw\u00f3ch interfejs\u00f3w: interfejs lokalizatora (<em>Locator<\/em>) i interfejs us\u0142ugi sieciowej (<em>Web<\/em> <em>Service<\/em>). Interfejs <em>Locator<\/em> odpowiada <em>Factory<\/em>, a interfejs us\u0142ugi sieciowej <em>Proxy<\/em>.<\/p>\n<p><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2024\/01\/Api-klienta.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-7857\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2024\/01\/Api-klienta.png\" alt=\"\" width=\"796\" height=\"414\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta.png 796w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta-300x156.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta-768x399.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta-50x26.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta-600x312.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2024\/01\/Api-klienta-320x166.png 320w\" sizes=\"auto, (max-width: 796px) 100vw, 796px\" \/><\/a><\/p>\n<p>Interfejs <em>Locator<\/em> jest wykorzystywany na kliencie w formie klasy implementuj\u0105cej. Klasa ta nosi nazw\u0119 us\u0142ugi sieciowej plus dodatek <em>Locator<\/em>. Najwa\u017cniejsze metody interfejsu <em>Locator<\/em> s\u0105 trzy metody GET, kt\u00f3re mo\u017cna wykorzysta\u0107 do uzyskania dost\u0119pu do adresu us\u0142ugi sieciowej i proxy dla us\u0142ugi sieciowej.<\/p>\n<p>Obiekt proxy zawiera jedn\u0105 metod\u0119 dla ka\u017cdej operacji us\u0142ugi sieciowej. Ka\u017cda metoda otrzymuje jako parametr obiekt typu Request. Jest on charakterystyczny dla wybranej us\u0142ugi sieciowej, wybranej operacji oraz ew. dla wybranej bazy danych OLTP i wybranego filtra. To samo dotyczy warto\u015bci wynikowej typu <em>Response<\/em>. Obiekt typu <em>Response<\/em>\u00a0otrzyma nast\u0119pnie dane wygenerowane przez aplikacj\u0119 w tle.<\/p>\n<p>W tabeli poni\u017cej znajduje si\u0119 zestawienie metod:<\/p>\n<table style=\"width: 100%; height: 425px;\">\n<thead>\n<tr style=\"height: 50px;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 50px;\" width=\"132\"><strong>Interfejs<\/strong><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 50px;\" width=\"180\"><strong>Metoda<\/strong><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 50px;\" width=\"228\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 75px;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 75px;\" width=\"132\">&lt;service&gt;Locator<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 75px;\" width=\"180\">get&lt;Service&gt;Address()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 75px;\" width=\"228\">Zwraca adres, pod kt\u00f3rym dost\u0119pna jest us\u0142uga sieciowa.<\/td>\n<\/tr>\n<tr style=\"height: 100px;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"132\">&lt;service&gt;Locator<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"180\">get&lt;service&gt;()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"228\">Zwraca obiekt &lt;service&gt;<em>Service<\/em> (proxy) z zastosowaniem URL zarejestrowanego w WSDL<\/td>\n<\/tr>\n<tr style=\"height: 100px;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"132\">&lt;service&gt;Locator<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"180\">get&lt;service&gt;(URL)<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"228\">Zwraca obiekt &lt;service&gt;<em>Service<\/em> (proxy) z zastosowaniem podanego URL<\/td>\n<\/tr>\n<tr style=\"height: 100px;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"132\">&lt;service&gt;Service<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"180\">&lt;operation&gt;<br \/>\n(&lt;service&gt;Request)<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top; height: 100px;\" width=\"228\">Zwraca obiekt &lt;service&gt;<em>Response<\/em> obiekt w zale\u017cnosci od danych obiektu <em>Request<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"obsluga-bledow-przy-wywolywaniu-uslugi-sieciowej\" >Obs\u0142uga b\u0142\u0119d\u00f3w przy wywo\u0142ywaniu us\u0142ugi sieciowej<\/h4>\n<p>W przypadku wywo\u0142ywania us\u0142ug sieciowych wymagana jest stopniowana obs\u0142uga b\u0142\u0119d\u00f3w. Typowe wywo\u0142anie us\u0142ugi sieciowej przebiega nast\u0119puj\u0105co:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">try {\r\n    Response response= service.process(request);\r\n    Result result = response.getResult();\r\n    if(result != null) {\r\n        \/\/ application specific interpretation of results.\r\n    }\r\n    MessageQueue mQueue = response.getMessageQueue();\r\n    \/\/ interpret or print messages from queue\r\n}\r\ncatch (RemoteException ex) {\r\n    \/\/ technical problem with the service\r\n}\r\n<\/pre>\n<p>Wyst\u0105pienie wyj\u0105tku podczas wywo\u0142ywania us\u0142ugi sieciowej ma przyczyn\u0119 techniczn\u0105. W\u015br\u00f3d mo\u017cliwych przyczyn s\u0105 b\u0142\u0119dy przesy\u0142u danych lub b\u0142\u0119dy w sk\u0142adni danych XML. Je\u015bli nie wyst\u0105pi\u0105 \u017cadne b\u0142\u0119dy techniczne, w\u00f3wczas zostanie zwr\u00f3cony obiekt <em>Response<\/em>. W przypadku wyst\u0105pienia b\u0142\u0119d\u00f3w w wywo\u0142ywanej us\u0142udze sieciowej, obiekt Response nie b\u0119dzie zawiera\u0142 \u017cadnego obiektu <em>Result<\/em>. Je\u015bli wi\u0119c response.getResult() zwraca warto\u015b\u0107 zero, oznacza to b\u0142\u0105d w wywo\u0142anej us\u0142udze sieciowej. Je\u015bli istnieje obiekt <em>Result<\/em>, konieczna jest dalsza interpretacja wynik\u00f3w, w celu wykrycia ewentualnych b\u0142\u0119d\u00f3w podczas opracowywania danych. Na przyk\u0142ad wywo\u0142anie us\u0142ugi importu mo\u017ce zwr\u00f3ci\u0107 rekordy danych, kt\u00f3re nie spe\u0142niaj\u0105 wymog\u00f3w weryfikacji w\u0142a\u015bciwych dla jednostek biznesowych. W ka\u017cdym z przypadk\u00f3w obiekt <em>Response<\/em> otrzyma obiekt <em>MessageQueue<\/em>. Dlatego nie jest mo\u017cliwe, aby wywo\u0142anie metody response.getMessageQueue() zwr\u00f3ci\u0142o warto\u015b\u0107 zero. Samo <em>MessageQueue<\/em> mo\u017ce by\u0107 jednak puste, to znaczy, mo\u017ce nie zawiera\u0107 \u017cadnych obiekt\u00f3w <em>Message<\/em>. Je\u015bli obiekt <em>Response<\/em> ma warto\u015b\u0107 zero, to obiekt <em>MessageQueue<\/em> zawsze zawiera przynajmniej jeden obiekt <em>Message<\/em>.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">WSDL dla us\u0142ug sieciowych Import i Eksport zale\u017cy od filtra okre\u015blonego podczas generowania WSDL. Dlatego klienci wygenerowani w ten spos\u00f3b nie mog\u0105 by\u0107 u\u017cywani dla innego filtra. Mo\u017ce to spowodowa\u0107 wy\u015bwietlenie komunikatu o b\u0142\u0119dzie lub nieoczekiwane dzia\u0142anie.<\/div><\/section>\n<h4 id=\"parametry-api-uslug-sieciowych\" >Parametry API us\u0142ug sieciowych<\/h4>\n<p>Poni\u017cej opisane zosta\u0142y parametry us\u0142ug sieciowych okre\u015blanych za pomoc\u0105 API. Inne parametry s\u0105 okre\u015blane nie poprzez API, ale za pomoc\u0105 URI zapytania (patrz rozdzia\u0142 <em>Zapytanie URI dla us\u0142ug sieciowych<\/em>)<\/p>\n<h5 id=\"callapplication\" >CallApplication<\/h5>\n<p>Us\u0142uga sieciowa <em>CallApplication<\/em> wywo\u0142uje metod\u0119 <em>RUN<\/em> dla aplikacji w tle. Mo\u017cliwe jest okre\u015blenie przez klienta parametr\u00f3w metody <em>RUN<\/em> podczas wywo\u0142ywania us\u0142ugi sieciowej. Po stronie klienta przekazywana jest nazwa kwalifikowana aplikacji w tle, akcja do wywo\u0142ania oraz tablic\u0119 (<em>Array<\/em>) obiekt\u00f3w <em>ParameterListEntry<\/em>. Przy czym obiekty <em>ParameterListEntry<\/em> odpowiadaj\u0105 parametrom aplikacjom w tle.<\/p>\n<p>Wynik wywo\u0142anej aplikacji w tle jest zwracany do us\u0142ugi sieciowej <em>CallApplication<\/em>. R\u00f3wnie\u017c w formie tablicy obiekt\u00f3w <em>ParameterListEntry<\/em>.<\/p>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce us\u0142uga sieciowa <em>CallApplication<\/em> obs\u0142uguje tylko typy danych, kt\u00f3re zosta\u0142y wymienione poni\u017cej. Dotyczy to parametr\u00f3w wywo\u0142ania u warto\u015bci wynikowych. Nie mo\u017cna poprawnie wywo\u0142a\u0107 aplikacji w tle, kt\u00f3re wykorzystuj\u0105 inne typy danych.<\/p>\n<h6 id=\"klasa-parameterlistentry\" >Klasa ParameterListEntry<\/h6>\n<p>Ka\u017cdy <em>ParameterListEntry <\/em>posiada nazw\u0119, typ i warto\u015b\u0107. Przy czym warto\u015b\u0107 musi odpowiada\u0107 typowi. Typ jest definiowany jako sta\u0142a z klasy <em>ParameterListEntryType<\/em>.<\/p>\n<p>Podczas tworzenia obiektu <em>ParameterListEntry<\/em> zawsze nale\u017cy poda\u0107 nazw\u0119, typ i warto\u015b\u0107. Mo\u017cna stosowa\u0107 jeden z dw\u00f3ch konstruktor\u00f3w. Najprostsze jest zastosowanie domy\u015blnego konstruktora (bez parametr\u00f3w), wtedy jednak nale\u017cy ustawi\u0107 nazw\u0119, typ i warto\u015b\u0107 za pomoc\u0105 odpowiedniej metody <em>set<\/em>.<\/p>\n<h6 id=\"klassa-parameterlistentrytype\" >Klassa ParameterListEntryType<\/h6>\n<p>Dla tego typu danych dost\u0119pne s\u0105 nast\u0119puj\u0105ce sta\u0142e:<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\"><strong>Sta\u0142a<\/strong><\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\"><strong>Typ danych Java (klient)<\/strong><\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\"><strong>Typ danych XML<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">STRING<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">String<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:string<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">PARAMETER_LIST<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">ParameterListEntry []<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">ParameterList<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">BOOLEAN<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">Boolean<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">S<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">BYTE<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">Byte<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:byte<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">SHORT<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">Short<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:short<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">INT<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">Int<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:int<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">LONG<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">Long<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:long<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"170\">BYTE_ARRAY_STRING<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"190\">String<\/td>\n<td style=\"width: 100px; background-color: #ffffff; border-style: outset; text-align: left; vertical-align: top;\" width=\"180\">xsd:string<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>BYTE_ARRAY_STRING mo\u017ce by\u0107 zastosowane dla parametr\u00f3w aplikacji w tle GUID i Binary. Jako warto\u015b\u0107 na kliencie us\u0142ugi sieciowej podawany jest szesnastkowy ci\u0105g numeru GUID lub byte[].<\/p>\n<p>W rozdziale <em><u>CallApplication<\/u><\/em> znajduje si\u0119 przyk\u0142ad zastosowania r\u00f3\u017cnych typ\u00f3w danych.<\/p>\n<h5 id=\"import\" >Import<\/h5>\n<p>Istniej\u0105 dwie specjalne klasy parametr\u00f3w dla importu. S\u0105 one generowane na podstawie WSDL. W celu uruchomienia procesu importu nale\u017cy wygenerowa\u0107 obiekt <em>ImportRequest<\/em>, odpowied\u017a importu jest zawarta w obiekcie <em>ImportResponse<\/em>.<\/p>\n<h6 id=\"filtr\" >Filtr<\/h6>\n<p>Dla importu nale\u017cy zastosowa\u0107 filtr dodany w systemie Comarch ERP Enterprise. Jest on okre\u015blany w adresie URI dla \u017c\u0105dania us\u0142ugi.<\/p>\n<p>WSDL us\u0142ugi zale\u017cy od zastosowanego filtra. Dlatego filtr nale\u017cy wskaza\u0107 r\u00f3wnie\u017c podczas wywo\u0142ywania WSDL. Ka\u017cdorazowo po zmianie filtra nale\u017cy ponownie pobra\u0107 WSDL i ew. wygenerowa\u0107 nowe klasy po stronie klienta.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">\u00a0W filtrze nie mo\u017cna aktywowa\u0107 \u017cadnych atrybut\u00f3w ani relacji, gdzie part i relacja r\u00f3\u017cni\u0105 si\u0119 tylko pisowni\u0105 wielkich i ma\u0142ych liter oraz znajduj\u0105 si\u0119 w tym samym obiekcie modelu danych BIS. Dlatego w przypadku z\u0142o\u017conych jednostek biznesowych nie nale\u017cy stosowa\u0107 filtra opartego na ustawieniu &#8222;Wszystkie atrybuty\u201d.<\/p>\n<p>Przyk\u0142ad z importu artyku\u0142\u00f3w: warehouse jest artybutem w part storageArea, code jest atrybutem w relacji StorageArea.<\/p>\n<p>InventoryItems.ItemStorageData.storageArea.warehouse<\/p>\n<p>InventoryItems.ItemStorageData.StorageArea.code<\/p>\n<p>Nie mo\u017cna r\u00f3wnocze\u015bnie stosowa\u0107 tych obu atrybut\u00f3w. W przypadku wielu bibliotek klient\u00f3w us\u0142ug sieciowych spowodowa\u0142oby to utworzenie klas Java, kt\u00f3rych nazwy r\u00f3\u017cni\u0105 si\u0119 tylko pisowni\u0105 wielkimi\/ma\u0142ymi literami.<\/div><\/section>\n<h6 id=\"struktura-wywolywania-dla-importu\" >Struktura wywo\u0142ywania dla importu<\/h6>\n<p>Podczas generowania obiektu <em>Request<\/em> nale\u017cy okre\u015bli\u0107 wszystkie parametry importu.<\/p>\n<h5 id=\"konstruktor-importrequest\" >Konstruktor ImportRequest(&#8230;)<\/h5>\n<p>S\u0142u\u017cy do generowania obiektu ImportRequest z odpowiednimi parametrami:<\/p>\n<ul>\n<li><em>WarningsMode warningsMode<\/em> \u2013 okre\u015bla obs\u0142ug\u0119 ostrze\u017ce\u0144 pojawiaj\u0105cych si\u0119 podczas importu\n<ul>\n<li>Ostrze\u017cenia z warto\u015bci\u0105 CONFIRM_NONE powoduj\u0105 b\u0142\u0119dy importu i s\u0105 zapisywane do pliku b\u0142\u0119d\u00f3w<\/li>\n<li>Ostrze\u017cenia z warto\u015bci\u0105 CONFIRM_ALL s\u0105 ignorowane<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><em>CorrectionMode correctionMode<\/em> &#8211; okre\u015bla, czy w Comarch ERP Enterprise maj\u0105 zosta\u0107 poprawione nieprawid\u0142owe dane.<\/li>\n<\/ul>\n<p>Warto\u015b\u0107 NONE oznacza brak korekty w Comarch ERP Enterprise. Nieprawid\u0142owe dane zostan\u0105 przekazane do klienta w obiekcie Reponse-Object.<\/p>\n<p>Warto\u015b\u0107 WORKFLOW oznacza, \u017ce korekta ma zosta\u0107 wykonana w Comarch ERP Enterprise po powiadomieniu poprzez workflow. Nieprawid\u0142owe dane nie zostan\u0105 przekazane do klienta, ale zapisane w formie pliku b\u0142\u0119d\u00f3w w systemowym repozytorium wiedzy w folderze <em>kstore:\/\/&lt;Arbeitsbereich&gt;\/Import\/ RemoteErrorFiles<\/em>. Jako obszar roboczy stosowany jest domy\u015blny obszar roboczy bazy danych, do kt\u00f3rej dane zosta\u0142y zaimportowane.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nale\u017cy pami\u0119ta\u0107, \u017ce ten parametr nie wp\u0142ywa na powiadomienie poprzez workflow. <\/div><\/section>\n<ul>\n<li><em>EntityWrapper importData<\/em> \u2013 obiekt Wrapper zawiera dane do zaimportowania.<\/li>\n<\/ul>\n<h5 id=\"konstruktor-entitywrapper\" >Konstruktor EntityWrapper( \u2026 )<\/h5>\n<ul>\n<li>Title[] title &#8211; tablica rekord\u00f3w danych do zaimportowania<\/li>\n<li>Message[] _message \u2013 nieu\u017cywane. Zaleca si\u0119 przeniesienie warto\u015bci <em>null<\/em>.<\/li>\n<\/ul>\n<h6 id=\"struktura-wartosci-zwracanych-dla-importu\" >Struktura warto\u015bci zwracanych dla importu<\/h6>\n<p>Po skutecznym wywo\u0142aniu importu zwracany jest obiekt <em>ImportResponse<\/em>, z kt\u00f3rego mo\u017cna odczyta\u0107 odpowiednie warto\u015bci za pomoc\u0105 metod <em>get<\/em>.<\/p>\n<h6 id=\"klasa-importresponse\" >Klasa ImportResponse<\/h6>\n<p>Dost\u0119pne metody:<\/p>\n<ul>\n<li>ImportResult getResult() &#8211; zwraca obiekt <em>Result<\/em>, mo\u017ce mie\u0107 warto\u015b\u0107 <em>null<\/em><\/li>\n<li>MessageQueue getMessageQueue() &#8211; zwraca <em>MessageQueue<\/em><\/li>\n<\/ul>\n<h6 id=\"klasa-importresult\" >Klasa ImportResult<\/h6>\n<p>Dost\u0119pne metody:<\/p>\n<ul>\n<li>int getImportedObjectCount() &#8211; zwraca liczb\u0119 poprawnie zaimportowanych rekord\u00f3w danych<\/li>\n<li>int getInvalidObjectCount() &#8211; zwraca liczb\u0119 niezaimportowanych rekord\u00f3w danych, kt\u00f3re mog\u0105 by\u0107 poprawione<\/li>\n<li>int getNotCorrigibleObjectCount() &#8211; zwraca liczb\u0119 niezaimportowanych rekord\u00f3w danych, kt\u00f3rych nie mo\u017cna poprawi\u0107<\/li>\n<li>boolean isHasErrorFile() &#8211; je\u015bli metoda zwraca warto\u015b\u0107 <em>true<\/em>, w\u00f3wczas zwracane s\u0105 b\u0142\u0119dne rekordy danych<\/li>\n<li>EntityWrapper getErrorData() &#8211; zwraca obiekt <em>EntityWrapper<\/em><\/li>\n<\/ul>\n<h6 id=\"klasa-entitywrapper\" >Klasa EntityWrapper<\/h6>\n<ul>\n<li>Title[] getTitle() &#8211; zwraca nieprawid\u0142owe rekordy danych, kt\u00f3rych nie mo\u017cna zaimportowa\u0107. W przypadku braku nieprawid\u0142owych danych metoda zwraca warto\u015b\u0107 <em>null<\/em>.<\/li>\n<li>MessageQueue getMessageQueue() &#8211; zwraca <em>MessageQueue<\/em>, w kt\u00f3rej mog\u0105 znajdowa\u0107 si\u0119 komunikaty<\/li>\n<\/ul>\n<h5 id=\"eksport\" >Eksport<\/h5>\n<p>Istniej\u0105 dwie specjalne klasy parametr\u00f3w dla importu. S\u0105 one generowane na podstawie WSDL. W celu uruchomienia procesu eksportu nale\u017cy wygenerowa\u0107 obiekt <em>Request<\/em>, odpowied\u017a eksportu zawarta jest w obiekcie <em>Response<\/em>.<\/p>\n<h6 id=\"filtr\" >Filtr<\/h6>\n<p>Dla eksportu nale\u017cy zastosowa\u0107 filtr dodany w systemie Comarch ERP Enterprise. Jest on okre\u015blany w adresie URI dla \u017c\u0105dania us\u0142ugi.<\/p>\n<p>Wskaz\u00f3wki odnosz\u0105ce si\u0119 do filtr\u00f3w importu maj\u0105 r\u00f3wnie\u017c zastosowanie dla eksportu.<\/p>\n<h6 id=\"struktura-wywolywania-dla-eksportu\" >Struktura wywo\u0142ywania dla eksportu<\/h6>\n<p>Podczas generowania obiektu <em>ExportRequest<\/em> nale\u017cy okre\u015bli\u0107 wszystkie parametry eksportu.<\/p>\n<h6 id=\"konstruktor-exportrequest\" >Konstruktor ExportRequest(\u2026)<\/h6>\n<p>Generuje obiekt <em>ExportRequest<\/em> z odpowiednimi parametrami:<\/p>\n<p>Parametry-Opis<\/p>\n<ul>\n<li>String dynamicOQLSearch &#8211; instrukcja OQL pozwalaj\u0105ca ograniczy\u0107 eksportowane rekordy danych. Szczeg\u00f3\u0142owe informacje o strukturze aplikacji OQL znajduj\u0105 si\u0119 w dokumencie <em>Eksport danych<\/em> Je\u015bli zamiast instrukcji OQL b\u0119dzie zastosowane wyszukiwanie OQL, nale\u017cy wprowadzi\u0107 w tym miejscu pusty ci\u0105g.<\/li>\n<li>String searchName &#8211; pe\u0142na nazwa wyszukiwania OQL. Je\u015bli zamiast wyszukiwania OQL b\u0119dzie zastosowana instrukcja OQL, nale\u017cy wprowadzi\u0107 w tym miejscu pusty ci\u0105g.<\/li>\n<li>ParameterListEntry[] searchParameters &#8211; parametry wyszukiwania do ograniczania wynik\u00f3w za pomoc\u0105 wyszukiwania OQL. Warto\u015b\u0107 to tablica z wpisami, kt\u00f3re zawieraj\u0105 po jednym parametrze wyszukiwania. Nazwa parametru odpowiada nazwie pola wyszukiwania z wyszukiwania OQL, warto\u015bci\u0105 parametru jest natomiast <em>Selection String<\/em>. Nale\u017cy okre\u015bli\u0107 te parametry wyszukiwania, kt\u00f3re maj\u0105 by\u0107 zastosowane do ograniczania wynik\u00f3w wyszukiwania.<\/li>\n<\/ul>\n<p>W przypadku ograniczania za pomoc\u0105 instrukcji OQL ten parametr nie jest wykorzystywany.<\/p>\n<ul>\n<li>String searchSortOrder &#8211; sortowanie eksportowanych instancji dla ograniczenia za pomoc\u0105 wyszukiwania OQL. Warto\u015bci\u0105 domy\u015bln\u0105 jest sortowanie domy\u015blne wprowadzone dla wyszukiwania QOL. Sk\u0142adnia sortowania zosta\u0142a opisana w dokumencie <em>Interfejsy programistyczne do wymiany danych<\/em>, w rozdziale <em>Format funkcji sortowania<\/em>. W przypadku ograniczania za pomoc\u0105 instrukcji OQL ten parametr nie jest wykorzystywany.<\/li>\n<\/ul>\n<h6 id=\"struktura-wartosci-zwracanych-dla-eksportu\" >Struktura warto\u015bci zwracanych dla eksportu<\/h6>\n<p>Po skutecznym wywo\u0142aniu eksportu zwracany jest obiekt <em>ExportResponse<\/em>, z kt\u00f3rego mo\u017cna odczyta\u0107 odpowiednie warto\u015bci za pomoc\u0105 metod <em>get<\/em>.<\/p>\n<h6 id=\"klasa-exportresponse\" >Klasa ExportResponse<\/h6>\n<p>Dost\u0119pne metody:<\/p>\n<ul>\n<li>int getExportedObjectCount() &#8211; zwraca liczb\u0119 wyeksportowanych rekord\u00f3w danych<\/li>\n<li>Title[] getExportData() &#8211; zwraca tablic\u0119 wszystkich wyeksportowanych rekord\u00f3w danych<\/li>\n<li>MessageQueue getMessageQueue() &#8211; zwraca <em>MessageQueue<\/em>, w kt\u00f3rej mog\u0105 znajdowa\u0107 si\u0119 komunikaty<\/li>\n<\/ul>\n<h5 id=\"search\" >Search<\/h5>\n<p>Us\u0142uga sieciowa <em>Search<\/em> zawiera obie operacje <em>Wyszukaj<\/em> i <em>Sprawd\u017a wyst\u0119powanie<\/em>. O ile podczas wyszukiwania w zbiorze wynik\u00f3w mo\u017cna znale\u017a\u0107 szereg rekord\u00f3w danych, operacja <em>Sprawd\u017a wyst\u0119powanie<\/em> b\u0119dzie zawiera\u0107 jedynie rekord danych, kt\u00f3ry ma zosta\u0107 sprawdzony. Je\u015bli parametry okre\u015blone w operacji <em>Sprawd\u017a wyst\u0119powanie<\/em> odpowiadaj\u0105 wielu rekordom danych w bazie, to mimo to zwr\u00f3cony zostanie tylko jeden rekord danych.<\/p>\n<p>Dla us\u0142ugi sieciowej <em>Search<\/em> dost\u0119pne s\u0105 trzy specjalne klasy parametr\u00f3w. S\u0105 one generowane na podstawie WSDL. W celu uruchomienia wyszukiwania nale\u017cy wygenerowa\u0107 obiekt <em>SearchRequest<\/em> lub <em>SearchExist<\/em>, odpowied\u017a us\u0142ugi jest zawarta w obiekcie <em>SearchResponse<\/em>.<\/p>\n<h6 id=\"struktury-wywolywania-dla-wyszukiwania\" >Struktury wywo\u0142ywania dla wyszukiwania<\/h6>\n<p>Podczas generowania obiektu <em>SearchRequest<\/em> lub <em>SearchExistRequest<\/em> nale\u017cy okre\u015bli\u0107 wszystkie parametry wyszukiwania.<\/p>\n<h6 id=\"klasa-searchrequest\" >Klasa SearchRequest(&#8230;)<\/h6>\n<p>Generuje obiekt <em>SearchRequest<\/em> z odpowiednimi parametrami:<\/p>\n<ul>\n<li>String searchName &#8211; w pe\u0142ni kwalifikowana nazwa wyszukiwania OQL, kt\u00f3re ma by\u0107 wykonane na wskazanej bazie danych<\/li>\n<li>ParameterListEntry[] searchParameters &#8211; warto\u015bci parametr\u00f3w dla wskazanego wyszukiwania OQL (opcjonalne)<\/li>\n<li>String searchSortOrder &#8211; sortowanie eksportowanych instancji dla ograniczenia za pomoc\u0105 wyszukiwania OQL. Warto\u015bci\u0105 domy\u015bln\u0105 jest sortowanie domy\u015blne wprowadzone dla wyszukiwania QOL. Sk\u0142adnia sortowania zosta\u0142a opisana w dokumencie <em>Interfejsy programistyczne do wymiany danych<\/em>, w rozdziale <em>Format funkcji sortowania<\/em>.<\/li>\n<li>String database &#8211; alias bazy danych Nale\u017cy zastosowa\u0107 dane z wygenerowanej klasy <em>Database<\/em><\/li>\n<li>pageSize &#8211; okre\u015bla maksymaln\u0105 liczb\u0119 rekord\u00f3w danych, kt\u00f3re maj\u0105 zosta\u0107 przekazane do klienta<\/li>\n<li>SearchFormat searchParametersFormat &#8211; okre\u015bla format, w kt\u00f3rym maj\u0105 by\u0107 podawane parametry wyszukiwania. Nale\u017cy zastosowa\u0107 dane z wygenerowanej klasy <em>SearchFormat<\/em>.<\/li>\n<li>SearchFormat searchResultFormat &#8211; Okre\u015bla format atrybut\u00f3w zwracanych w wynikach wyszukiwania. Nale\u017cy zastosowa\u0107 dane z wygenerowanej klasy <em>SearchFormat<\/em>.<\/li>\n<\/ul>\n<h6 id=\"klasa-searchexistrequest\" >Klasa SearchExistRequest(&#8230;)<\/h6>\n<p>Dost\u0119pne parametry:<\/p>\n<p>Parametry-Opis<\/p>\n<ul>\n<li>String searchName &#8211; w pe\u0142ni kwalifikowana nazwa wyszukiwania OQL, kt\u00f3re ma by\u0107 wykonane na wskazanej bazie danych<\/li>\n<li>ParameterListEntry[] searchParameters &#8211; warto\u015bci parametr\u00f3w dla wskazanego wyszukiwania OQL (opcjonalne)<\/li>\n<li>String database &#8211; alias bazy danych Nale\u017cy zastosowa\u0107 dane z wygenerowanej klasy <em>Database<\/em>.<\/li>\n<li>SearchFormat searchParametersFormat &#8211; okre\u015bla format, w kt\u00f3rym maj\u0105 by\u0107 podawane parametry wyszukiwania. Nale\u017cy zastosowa\u0107 dane z wygenerowanej klasy <em>SearchFormat<\/em>.<\/li>\n<\/ul>\n<h6 id=\"struktury-zwracanych-wartosci-dla-wyszukiwania\" >Struktury zwracanych warto\u015bci dla wyszukiwania<\/h6>\n<p>Po skutecznym wywo\u0142aniu wyszukiwania zwracany jest obiekt <em>SearchResponse<\/em>, z kt\u00f3rego mo\u017cna odczyta\u0107 odpowiednie warto\u015bci za pomoc\u0105 metod <em>get<\/em>.<\/p>\n<h6 id=\"klasa-searchresponse\" >Klasa SearchResponse<\/h6>\n<p>Dost\u0119pne metody:<\/p>\n<ul>\n<li>SearchResult getResult() &#8211; zwraca obiekt <em>SearchResult<\/em> zawieraj\u0105cy wyniki wyszukiwania. Mo\u017ce mie\u0107 warto\u015b\u0107 <em>null<\/em>.<\/li>\n<li>MessageQueue getMessageQueue() &#8211; zwraca <em>MessageQueue<\/em>, kt\u00f3re mo\u017ce zawiera\u0107 komunikaty<\/li>\n<\/ul>\n<h6 id=\"klasa-searchresult\" >Klasa SearchResult<\/h6>\n<p>Dost\u0119pne metody:<\/p>\n<ul>\n<li>int getCurrentObjectCount() &#8211; wskazuje liczb\u0119 zwracanych rekord\u00f3w danych.<\/li>\n<li>String getContent() &#8211; zwraca rekordy danych w formie ci\u0105gu zawieraj\u0105cego plik XML zakodowany w UTF8<\/li>\n<\/ul>\n<h4 id=\"komunikaty-dla-zwracanych-wartosci\" >Komunikaty dla zwracanych warto\u015bci<\/h4>\n<p>Klient us\u0142ugi sieciowej otrzymuje z serwera us\u0142ug sieciowych nie tylko wyniki wywo\u0142ywania, ale mo\u017ce r\u00f3wnie\u017c otrzymywa\u0107 szereg komunikat\u00f3w, np. o wyst\u0105pieniu b\u0142\u0119d\u00f3w. S\u0105 one dostarczane do klienta w formie specjalnej struktury danych sk\u0142adaj\u0105cej si\u0119 z klas <em>MessageQueue<\/em> i <em>Message<\/em>.<\/p>\n<p>Wszystkie obiekty <em>Message<\/em> wysy\u0142ane przez serwer do klienta s\u0105 zestawione w obiekcie <em>MessageQueue<\/em>. Ka\u017cdy obiekt <em>Message<\/em> zawiera z kolei obiekt <em>MessageSeverity<\/em> opisuj\u0105cy typ komunikatu (b\u0142\u0105d, ostrze\u017cenie, informacja itd.).<\/p>\n<table>\n<thead>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"144\"><strong>Klasa<\/strong><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\"><strong>Metoda<\/strong><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" rowspan=\"2\" width=\"144\"><em>MessageQueue<\/em><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">isRequiresAttention()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\"><em>true<\/em>, je\u015bli <em>MessageQueue<\/em> zawiera komunikaty o b\u0142\u0119dach lub niezatwierdzone ostrze\u017cenia.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getMessage()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca tablic\u0119 obiekt\u00f3w <em>Message<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" rowspan=\"6\" width=\"144\"><em>Message<\/em><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getSeverityLevel()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca obiekt <em>MessageSeverity<\/em> opisuj\u0105cy typ komunikatu.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getIdentifier()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca identyfikator komunikatu stanowi\u0105cy kombinacj\u0119 klasy i numeru komunikatu.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getMessageClass()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca klas\u0119 komunikatu.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getMessageNumber()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca numer komunikatu.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getMessageText()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca tekst komunikatu.<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 8; mso-prop-change: Unknown 20060324T1158;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getMessageLongText()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca d\u0142ugi tekst komunikatu.<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 9; mso-yfti-lastrow: yes; mso-prop-change: Unknown 20060324T1158;\">\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"144\"><em>MessageSeverity<\/em><\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"168\">getValue()<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"228\">Zwraca tekstow\u0105 prezentacj\u0119 typu komunikatu.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"uwierzytelnienie\" >Uwierzytelnienie<\/h4>\n<p>Zar\u00f3wno klient us\u0142ug sieciowych musi zosta\u0107 uwierzytelniony dla serwera us\u0142ug sieciowych, jak i serwer us\u0142ug sieciowych dla klienta us\u0142ug sieciowych.<\/p>\n<p>Axis wspiera tylko uwierzytelnianie <em>BASIC<\/em> i uwierzytelnianie przy u\u017cyciu certyfikat\u00f3w. Comarch ERP Enterprise obs\u0142uguje tylko uwierzytelnianie <em>DIGEST<\/em> oraz uwierzytelnianie przy u\u017cyciu certyfikat\u00f3w. Dlatego klient us\u0142ugi sieciowej mo\u017ce komunikowa\u0107 si\u0119 z serwerem Comarch ERP Enterprise dla us\u0142ug sieciowych tylko za pomoc\u0105 uwierzytelniania przez certyfikaty.<\/p>\n<p>Klient us\u0142ugi sieciowej potrzebuje certyfikatu serwera do weryfikacji serwera us\u0142ug internetowych oraz certyfikatu u\u017cytkownika na potrzeby w\u0142asnej identyfikacji. Certyfikat u\u017cytkownika musi zawiera\u0107 klucz prywatny i dlatego najcz\u0119\u015bciej jest zapisywany w postaci pliku &#8222;.pfx&#8221; lub &#8222;.jks&#8221;, chronionym has\u0142em (Java 1.5 obs\u0142uguje tylko pliki &#8222;.jks&#8221; bez dodatkowych bibliotek.)<\/p>\n<p>Przyk\u0142ady programowania klienta us\u0142ugi sieciowej znajduj\u0105 si\u0119 w rozdziale <em>Programowanie klienta us\u0142ugi sieciowej.<\/em><\/p>\n<h4 id=\"obszary-nazw-xml\" >Obszary nazw XML<\/h4>\n<p>Klient us\u0142ugi sieciowej jest tworzony na podstawie WSDL danej us\u0142ugi sieciowej. To WSDL definiuje jeden lub wiele obszar\u00f3w nazw. Definiowany jest przynajmniej obszar nazw XML dla samego wywo\u0142ania us\u0142ugi sieciowej razem z domy\u015blnymi parametrami. Je\u015bli wymagane s\u0105 jeszcze dodatkowe dane, np. w przypadku zdalnej us\u0142ugi sieciowej, w\u00f3wczas definiowany jest jeszcze obszar nazw dla typ\u00f3w danych dodatkowych oraz obszar nazw XML danych.<\/p>\n<p>Te obszary nazw XML s\u0105 r\u00f3wnie\u017c odwzorowane w klasach Java wygenerowanych z WSDL. Zasadniczo obszary nazw XML j\u0119zyka WSDL skutkuj\u0105 powstaniem obszar\u00f3w nazw klasy Java, kt\u00f3re niekoniecznie s\u0105 oczekiwane. Dlatego istnieje te\u017c mo\u017cliwo\u015b\u0107 odwzorowania tych obszar\u00f3w nazw w dowolnych obszarach nazw Java podczas generowania klas Java. Szczeg\u00f3\u0142owe parametry tego odwzorowania mo\u017cna znale\u017a\u0107 w rozdziale <em>Generowanie plik\u00f3w \u017ar\u00f3d\u0142owych Java z WSDL<\/em>.<\/p>\n<p>Obszarom nazw XML nadawane s\u0105 nast\u0119puj\u0105ce klasy:<\/p>\n<ul>\n<li>obszar nazw XML <em>common<\/em><\/li>\n<\/ul>\n<p>Klasy nale\u017c\u0105ce do obszaru nazw XML <em>common<\/em> s\u0105 stosowana przez us\u0142ug\u0119 sieciow\u0105 <em>CallApplication<\/em> oraz wsp\u00f3lnie przez wszystkie us\u0142ugi sieciowe. Klasy wygenerowane dla tego obszaru nazw XML:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CallApplication\r\nCallApplicationLocator\r\nCallApplicationRequest\r\nCallApplicationResponse\r\nCallApplicationService\r\nCallApplicationSoapBindingStub\r\nMessage\r\nMessageQueue\r\nMessageSeverity\r\nParameterListEntry\r\nParameterListEntryType\r\n<\/pre>\n<ul>\n<li>obszary nazw XML <em>Eksport\/Baza danych\/Filtry<\/em>, <em>Import\/Baza danych\/&lt;Filtry&gt;<\/em>, <em>Search<\/em><\/li>\n<\/ul>\n<p>Wszystkie opisy klas dla danych u\u017cytkowych us\u0142ugi sieciowej <em>Export<\/em>, <em>Import<\/em> i <em>Search<\/em> znajduj\u0105 si\u0119 w ich odpowiednim oddzielnym obszarze nazw XML.<\/p>\n<ul>\n<li>obszary nazw XML <em>Eksport\/&lt;Baza danych&gt;\/&lt;Filtry&gt;\/data<\/em> oraz <em>Import\/&lt;Baza danych&gt;\/&lt;Filtry&gt;\/data<\/em>.<\/li>\n<\/ul>\n<p>Wszystkie opisy klas dla danych u\u017cytkowych us\u0142ugi sieciowej <em>Export<\/em> lub <em>Import<\/em> znajduj\u0105 si\u0119 w oddzielnym obszarze nazw XML. To, jakie klasy b\u0119d\u0105 generowane, zale\u017cy m.in. od wybranej jednostki biznesowej (business entity), bazy danych OLTP oraz ustawie\u0144 filtra.<\/p>\n<h3 id=\"instrukcje\" >Instrukcje<\/h3>\n<p>W tym rozdziale opisano spos\u00f3b tworzenie klienta us\u0142ug sieciowych w j\u0119zyku Java przy u\u017cyciu biblioteki klienta Axis 1. Zastosowano us\u0142ug\u0119 eksportu.<\/p>\n<h4 id=\"generowanie-wsdl\" >Generowanie WSDL<\/h4>\n<p>Dla ka\u017cdej us\u0142ugi sieciowej mo\u017cna wykona\u0107 zapytanie o przynale\u017cne WSDL. Wystarczy wpisa\u0107 w przegl\u0105darce URI w nast\u0119puj\u0105cej formie:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">https:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/&lt;service&gt;?wsdl;oltp=&lt;oltp&gt;;filter=&lt;filter&gt;;oltpMode=&lt;oltpMode&gt;<\/pre>\n<p>Wymagane parametry:<\/p>\n<p>Parametry-Opis<\/p>\n<ul>\n<li>server &#8211; adres serwera aplikacji systemu ERP, do kt\u00f3rego jest wysy\u0142ane zapytanie<\/li>\n<li>port &#8211; port us\u0142ugi sieciowej zapytania. Warto\u015b\u0107 domy\u015blna to 443.<\/li>\n<li>service &#8211; identyfikator us\u0142ugi sieciowej zapytania. Dost\u0119pne warto\u015bci:\n<ul>\n<li><em>CallApplication<\/em><\/li>\n<li><em>Import<\/em><\/li>\n<li><em>Export<\/em><\/li>\n<li><em>Search<\/em><\/li>\n<\/ul>\n<\/li>\n<li>Oltp &#8211; identyfikator bazy danych OLPT, na kt\u00f3rej loguje si\u0119 klient (browser), aby wykona\u0107 zapytanie o WSDL<\/li>\n<li>Filter &#8211; identyfikator filtra, kt\u00f3ry ma by\u0107 zastosowany do okre\u015blenia WSDL<\/li>\n<li>oltpMode &#8211; tryb OLPT. Okre\u015bla, czy nazwa bazy danych OLTP powinna by\u0107 zawarta w obszarze nazw us\u0142ugi sieciowej. Dost\u0119pne warto\u015bci:\n<ul>\n<li>oltp &#8211; po wybraniu tej warto\u015bci w obszarze nazw pojawi si\u0119 nazwa bazy danych OLTP, a wygenerowane WSDL mo\u017ce zosta\u0107 zastosowane na aktualnym systemie i dla podanej bazy OLTP.<\/li>\n<li>extended &#8211; po wybraniu tej warto\u015bci WSDL mo\u017ce by\u0107 wykorzystywane na dowolnym systemie lub bazie danych OLTP. Nale\u017cy jednak upewni\u0107 si\u0119, \u017ce u\u017cywany filtr istnieje w odpowiednich bazach danych OLTP i ma te same ustawienia.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Warto\u015b\u0107 domy\u015blna: oltp.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">https:\/\/rXYZ.semiramis.com\/webservices\/Export?wsdl;oltp= OLTPDB00;filter=TITLE<\/pre>\n<p><\/div><\/section>\n<h4 id=\"generowanie-klas-java\" >Generowanie klas Java<\/h4>\n<p>W kolejnym kroku nale\u017cy przet\u0142umaczy\u0107 WSDL na klasy Java. Mo\u017cna w tym celu u\u017cy\u0107 narz\u0119dzi z pakietu AXIS, ale \u0142atwiej jest to zrobi\u0107 za pomoc\u0105 polecenia <em>CreateWSDLJavaSources<\/em>.<\/p>\n<p>Ta komenda nie tylko t\u0142umaczy WSDL na klasy Java, ale mo\u017ce r\u00f3wnie\u017c automatycznie wykona\u0107 zapytanie o WSDL z serwera us\u0142ugi sieciowej. Szczeg\u00f3\u0142owy opis wszystkich parametr\u00f3w znajduje si\u0119 w rozdziale <em>Generowanie plik\u00f3w \u017ar\u00f3d\u0142owych Java z WSDL<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CreateWSDLJavaSources \t\r\n    -server:rXYZ.semiramis.com \t\r\n    -service:Export\t\r\n    -oltp:DATABASE00\t\r\n    -filter:TITLE \t\r\n    -userCertificateFileName:C:\\temp\\XYZ.jks \t\r\n    -userCertificateFilePassword:1234567  \t\r\n    -serverCertificateFileName:C:\\temp\\XYZ.jks \t\r\n    -outputDirectory:C:\\semiramis\\work\\job0xxxx\\usrXYZ\\source \t\r\n    -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Export\/extended\/TITLE\r\n        =com.cisag.app.system.webservices.log.export.generated\r\n-outputNameSpace:http:\/\/cisag.com\/pgm\/external\/webservices\/2006-01\r\n    -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common\r\n        =com.cisag.app.system.webservices.log.export.generated \t\r\n    -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Export\/extended\/TITLE\/data\r\n        =com.cisag.app.system.webservices.log.export.generated\r\n<\/pre>\n<p>Teraz nale\u017cy przet\u0142umaczy\u0107 utworzone klasy Java.<\/p>\n<h4 id=\"programowanie-klienta-uslugi-sieciowej\" >Programowanie klienta us\u0142ugi sieciowej<\/h4>\n<p>Klient Java mo\u017ce zastosowa\u0107 wygenerowane klasy w celu wywo\u0142ania \u017c\u0105danej us\u0142ugi sieciowej. W tym celu nale\u017cy wykona\u0107 nast\u0119puj\u0105ce kroki:<\/p>\n<ol>\n<li>Ustawi\u0107 \u015bcie\u017cki pliku zawieraj\u0105cego certyfikat u\u017cytkownika oraz has\u0142a do otwarcia tego pliku.<\/li>\n<li>Ustawi\u0107 \u015bcie\u017cki pliku zawieraj\u0105cego certyfikat serwera. Mo\u017cna to zrobi\u0107 poprzez ustawienia odpowiednich w\u0142a\u015bciwo\u015bci (properties).<\/li>\n<\/ol>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">System.setProperty(\"javax.net.ssl.keyStore\", userCertificate);\r\nSystem.setProperty(\"javax.net.ssl.keyStorePassword\",password);\r\nSystem.setProperty(\"javax.net.ssl.trustStore\", serverCertificate); \r\n<\/pre>\n<p><\/div><\/section>\n<p>3. Utworzy\u0107 obiekt locator i wykona\u0107 zapytania dla obiektu service.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ExportLocator loc= new ExportLocator();\r\nURL url= new URL(\u201chttps:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/&lt;service&gt;? oltp=&lt;oltp&gt;;filter=&lt;filter&gt;\u201c);\r\nservice = loc.getExport( url );<\/pre>\n<p>4. Wygenerowa\u0107 obiekt request i ustawi\u0107 parametry.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ExportRequest request= new ExportRequest();\r\nrequest.setSearchName(\"com.cisag.app.general.obj.Title\");\r\n\/\/ ustawienie innych parametr\u00f3w \u2026\r\n<\/pre>\n<p>5. Wywo\u0142a\u0107 us\u0142ug\u0119 sieciow\u0105:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ExportResponse response= service.export(request);<\/pre>\n<p>6. Przeanalizowa\u0107 zwracane dane:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ExportResult result = response.getResult();\r\nif (result != null) {\r\nTitle[] instances = result.getExportData();\r\n}<\/pre>\n<h4 id=\"wymagane-biblioteki\" >Wymagane biblioteki<\/h4>\n<p>W celu uruchomienia klienta Java wymagane s\u0105 nast\u0119puj\u0105ce biblioteki:<\/p>\n<table>\n<thead>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">Biblioteka<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">Wersja (najni\u017csza mo\u017cliwa)<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">axis.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.3<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">saaj.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.2<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">jaxrpc.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.1<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">commons-logging.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.0.4<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">commons-discovery.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">0.2-dev<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">wsdl4j.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.5.1<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">log4j.jar<br \/>\n(w Comarch ERP Enterprise: log4j-core.jar)<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.2.8<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">activation.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.0.2<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"227\">mail.jar<\/td>\n<td style=\"width: 100px; border-style: outset; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"180\">1.3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Biblioteki mo\u017cna pobra\u0107 ze strony projektu Apache.<\/p>\n<h4 id=\"zapytanie-uri-dla-uslug-sieciowych\" >Zapytanie URI dla us\u0142ug sieciowych<\/h4>\n<p>Aby uruchomi\u0107 us\u0142ugi sieciowe, nale\u017cy wywo\u0142a\u0107 odpowiedni identyfikator URI specyficzny dla danej us\u0142ugi sieciowej.<\/p>\n<ul>\n<li>CallApplication<br \/>\nhttps:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/CallApplication?oltp=&lt;oltp&gt;<\/li>\n<li>Export<br \/>\nhttps:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/Export?oltp=&lt;oltp&gt;;filter=&lt;filter&gt;;oltpMode=&lt;mode&gt;<\/li>\n<li>Import<br \/>\nhttps:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/Import?oltp=&lt;oltp&gt;;filter=&lt;filter&gt;;oltpMode=&lt;mode&gt;<\/li>\n<li>Search<br \/>\nhttps:\/\/&lt;server&gt;:&lt;port&gt;\/webservices\/Search?oltp=&lt;oltp&gt;<\/li>\n<\/ul>\n<p>Dost\u0119pne parametry:<\/p>\n<ul>\n<li>server &#8211; adres serwera aplikacji systemu ERP<\/li>\n<li>port &#8211; port serwera aplikacji systemu ERP<\/li>\n<li>oltp &#8211; identyfikator bazy danych OLPT, na kt\u00f3rej loguje si\u0119 us\u0142uga sieciowa, w celu uzyskania wyniku zapytania<\/li>\n<li>filter &#8211; identyfikator filtra dost\u0119pnego w podanej bazie danych OLTP, kt\u00f3ry okre\u015bla atrybuty jednostki biznesowej i inne ustawienia, np. format czasu\/ Ten parametr jest wymagany tylko dla us\u0142ug sieciowych <em>Import<\/em> i <em>Export<\/em>.<\/li>\n<li>oltpMode &#8211; tryb OLPT. Okre\u015bla, czy nazwa bazy danych OLTP powinna by\u0107 zawarta w obszarze nazw us\u0142ugi sieciowej. Dost\u0119pne warto\u015bci:\n<ul>\n<li>oltp &#8211; po wybraniu tej warto\u015bci w obszarze nazw pojawi si\u0119 nazwa bazy danych OLTP, a wygenerowane WSDL mo\u017ce zosta\u0107 zastosowane na aktualnym systemie i dla podanej bazy OLTP.<\/li>\n<li>extended &#8211; po wybraniu tej warto\u015bci WSDL mo\u017ce by\u0107 wykorzystywane na dowolnym systemie lub bazie danych OLTP. Nale\u017cy jednak upewni\u0107 si\u0119, \u017ce u\u017cywany filtr istnieje w odpowiednich bazach danych OLTP i ma te same ustawienia.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Warto\u015b\u0107 domy\u015blna: <em>oltp<\/em>. Ten parametr jest wymagany tylko dla us\u0142ug sieciowych <em>Import<\/em> i <em>Export<\/em>.<\/p>\n<h3 id=\"klienci-testowi\" >Klienci testowi<\/h3>\n<p>Comarch ERP Enterprise oferuje pi\u0119ciu klient\u00f3w testowych s\u0142u\u017c\u0105cych jako szablony dla indywidualnych rozwi\u0105za\u0144. S\u0105 oni dost\u0119pni w klasie Java w obszarze nazw <em>com.cisag.app.system.webservices<\/em> i mog\u0105 by\u0107 wywo\u0142ani z poziomu Toolshell za pomoc\u0105 opisanych poni\u017cej komed.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">\u00a0 Us\u0142ugi sieciowe <em>Import<\/em> i <em>Eksport<\/em> wymagaj\u0105 filtra na bazie danych, w kt\u00f3rej b\u0119dzie przeprowadzony proces importu lub eksportu. W przypadku udost\u0119pnionych klient\u00f3w testowych jest to filtr o nazwie <em>TITLE<\/em> na jednostce biznesowej <em>Title<\/em> (<em>com.cisag.app.general.obj.Title<\/em>) w jednej z baz danych OLTP. Ten filtr nie jest udost\u0119pniany, ale musi zosta\u0107 utworzony przez u\u017cytkownika importu lub eksportu. Klienci testowi b\u0119d\u0105 dzia\u0142a\u0107 tylko wtedy, gdy wybrane zostan\u0105 tylko atrybuty <em>name<\/em> i <em>description<\/em>. Filtr musi ponadto posiada\u0107 warto\u015b\u0107 <em>Jeden j\u0119zyk<\/em> w polu <em>Ustawienie j\u0119zyka<\/em>. <\/div><\/section>\n<p>W przypadku wszystkich klient\u00f3w testowych nale\u017cy pami\u0119ta\u0107, \u017ce wielokrotne wywo\u0142ywanie klienta testowego w tym samym procesie mo\u017ce prowadzi\u0107 do problem\u00f3w z po\u0142\u0105czeniem, je\u015bli u\u017cywane s\u0105 r\u00f3\u017cne certyfikaty serwera. Je\u015bli podczas uruchamiania klient\u00f3w testowych z poziomu Toolshell wyst\u0105pi\u0105 b\u0142\u0119dy po\u0142\u0105czenia, nale\u017cy spr\u00f3bowa\u0107 ponownie uruchomi\u0107 serwer aplikacji.<\/p>\n<h4 id=\"generowanie-plikow-zrodlowych-java-z-wsdl\" >Generowanie plik\u00f3w \u017ar\u00f3d\u0142owych Java z WSDL<\/h4>\n<p>Na przyk\u0142ad dla klienta <em>CreateWSDLJavaSources<\/em> dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<ul>\n<li>userCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat u\u017cytkownika.<\/li>\n<li>userCertificateFilePassword &#8211; has\u0142o do otwarcia pliku zawieraj\u0105cego certyfikat u\u017cytkownika.<\/li>\n<li>serverCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat serwera.<\/li>\n<li>uri &#8211; adres URI dla WSDL, kt\u00f3re ma zosta\u0107 przet\u0142umaczone. Ten parametr mo\u017ce zosta\u0107 zastosowany do otwarcia WSDL z dowolnego adresu internetowego (<em>https:\/\/&#8230;<\/em>) lub w systemie pliku (<em>file:\/\/\/\u2026<\/em>). Parametr nie mo\u017ce by\u0107 stosowany razem z parametrami <em>server<\/em><em>, <\/em><em>port<\/em><em>, <\/em><em>service<\/em><em>, <\/em><em>oltp<\/em><em> i <\/em><em>filter<\/em>.<\/li>\n<li>server &#8211; Adres serwera us\u0142ugi sieciowej. Parametr nie mo\u017ce by\u0107 stosowany razem z parametrem <em>uri<\/em>.<\/li>\n<li>port &#8211; Port serwera us\u0142ugi sieciowej. Parametr nie mo\u017ce by\u0107 stosowany razem z parametrem <em>uri<\/em>.<\/li>\n<li>service &#8211; \u017c\u0105dana us\u0142uga sieciowa serwera. Parametr nie mo\u017ce by\u0107 stosowany razem z parametrem <em>uri<\/em>.<\/li>\n<li>oltp &#8211; identyfikator bazy danych OLPT serwera, na kt\u00f3rej loguje si\u0119 us\u0142uga sieciowa. Parametr nie mo\u017ce by\u0107 stosowany razem z parametrem <em>uri<\/em>.<\/li>\n<li>filter &#8211; identyfikator filtra serwera us\u0142ugi sieciowej, kt\u00f3ry ma by\u0107 u\u017cywany podczas wyboru atrybut\u00f3w jednostki biznesowej. W tym miejscu nale\u017cy wybra\u0107 ten sam filtr, kt\u00f3ry zosta\u0142 wybrany podczas generowania WSDL. W przypadku udost\u0119pnionych klient\u00f3w testowych jest to filtr o nazwie <em>TITLE<\/em>. Parametr nie mo\u017ce by\u0107 stosowany razem z parametrem <em>uri<\/em>.<\/li>\n<li>outputNameSpace &#8211; nazwa obszaru nazw, w kt\u00f3rym maj\u0105 si\u0119 zawiera\u0107 wygenerowane klasy Java. Dla ka\u017cdego obszaru XML w WSDL mo\u017cna okre\u015bli\u0107 jeden obszar nazw Java w formie<br \/>\n<em>http:\/\/cisag&#8230;=com.example.app&#8230;.<\/em><\/li>\n<li>outputDirectory &#8211; folder w lokalnym systemie plik\u00f3w, do kt\u00f3rego s\u0105 zapisywane wygenerowane pliki \u017ar\u00f3d\u0142owe Java<\/li>\n<li>oltpMode &#8211; format obszar\u00f3w nazw w \u017c\u0105danym WSDL. Dost\u0119pne warto\u015bci: <em>extended<\/em> lub <em>oltp<\/em>. Opcjonalnie, warto\u015b\u0107 domy\u015blna to oltp.<\/li>\n<li>help &#8211; dostarcza kr\u00f3tki opis wszystkich parametr\u00f3w. Opcjonalnie<\/li>\n<li>verbose &#8211; dostarcza informacje podczas generowania plik\u00f3w \u017ar\u00f3d\u0142owych Java. Opcjonalnie.<\/li>\n<li>debug &#8211; dostarcza informacje dotycz\u0105ce debugowania podczas generowania plik\u00f3w \u017ar\u00f3d\u0142owych Java. Opcjonalnie.<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CreateWSDLJavaSources -server:rXYZ.cisag.com -service:CallApplication -userCertificateFileName:C:\\temp\\XYZ.jks -userCertificateFilePassword:1234567 -serverCertificateFileName:C:\\temp\\XYZ.jks -outputDirectory: C:\\semiramis\\work\\jobxxxxx\\usrXYZ\\source -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common=com.cisag.app.system.webservices.log.generated<\/pre>\n<p>Klasy Java klienta testowego:<\/p>\n<ul>\n<li>Obszar nazw com.cisag.app.system.webservices.log\n<ul>\n<li>CreateWSDLJavaSources<\/li>\n<li>WebServicesClientBase<\/li>\n<li>WebServicesClientDebugHelper<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw com.cisag.app.system.webservices.tools\n<ul>\n<li>CreateWSDLJavaSources<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw com.cisag.pgm.external.webservices\n<ul>\n<li>Message<\/li>\n<li>MessageQueue<\/li>\n<li>MessageSeverity<\/li>\n<li>ParameterListEntry<\/li>\n<li>ParameterListEntryType<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/div><\/section>\n<h4 id=\"eksport\" >Eksport<\/h4>\n<p>Dla klienta testowego <em>WebServicesRemoteExportTestClient<\/em> dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<ul>\n<li>userCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>userCertificateFilePassword &#8211; has\u0142o do otwarcia pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>serverCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat serwer<\/li>\n<li>server &#8211; adres serwera us\u0142ugi sieciowej<\/li>\n<li>port &#8211; port serwera us\u0142ugi sieciowej<\/li>\n<li>oltp &#8211; identyfikator bazy danych OLPT serwera, na kt\u00f3rej loguje si\u0119 us\u0142uga sieciowa<\/li>\n<li>filter &#8211; identyfikator filtra serwera us\u0142ugi sieciowej, kt\u00f3ry ma by\u0107 u\u017cywany podczas wyboru atrybut\u00f3w jednostki biznesowej. W tym miejscu nale\u017cy wybra\u0107 ten sam filtr, kt\u00f3ry zosta\u0142 wybrany podczas generowania WSDL. W przypadku udost\u0119pnionych klient\u00f3w testowych jest to filtr o nazwie <em>TITLE<\/em>.<\/li>\n<li>select &#8211; wzorzec wyszukiwania pozwalaj\u0105cy ograniczy\u0107 eksportowane rekordy danych. Podana warto\u015b\u0107 jest por\u00f3wnywana z nazw\u0105 rekord\u00f3w danych. Domy\u015bln\u0105 warto\u015bci\u0105 jest <em>*<\/em>, co oznacza, \u017ce wybierane s\u0105 wszystkie obiekty.<\/li>\n<li>help &#8211; dostarcza kr\u00f3tki opis wszystkich parametr\u00f3w<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">WebServicesRemoteExportTestClient -server:rXYZ.cisag.com -oltp:DATABASE00 -filter:TITLE -userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks<\/pre>\n<p><\/div><\/section>\n<p>Klasy Java klienta testowego:<\/p>\n<ul>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.log<\/em>\n<ul>\n<li>WebServicesClientBase<\/li>\n<li>WebServicesClientDebugHelper<\/li>\n<li>WebServicesRemoteExportTestClient<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservice.log..generated.exp<\/em>\n<ul>\n<li>Export<\/li>\n<li>ExportLocator<\/li>\n<li>ExportService<\/li>\n<li>ExportSoapBindingStub<\/li>\n<li>ExportRequest<\/li>\n<li>S<\/li>\n<li>java<\/li>\n<li>Title<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.tools<\/em>\n<ul>\n<li>ExportService<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.log.generated<\/em>\n<ul>\n<li>Message<\/li>\n<li>MessageQueue<\/li>\n<li>MessageSeverity<\/li>\n<li>ParameterListEntry<\/li>\n<li>ParameterListEntryType<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4 id=\"import\" >Import<\/h4>\n<p>Dla klienta testowego <em>WebServicesRemoteImportTestClient<\/em> dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<ul>\n<li>userCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>userCertificateFilePassword &#8211; has\u0142o do otwarcia pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>serverCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat serwera<\/li>\n<li>Server &#8211; adres serwera us\u0142ugi sieciowej<\/li>\n<li>Port &#8211; port serwera us\u0142ugi sieciowej<\/li>\n<li>Oltp &#8211; identyfikator bazy danych OLPT serwera, na kt\u00f3rej loguje si\u0119 us\u0142uga sieciowa<\/li>\n<li>Filter &#8211; identyfikator filtra serwera us\u0142ugi sieciowej, kt\u00f3ry ma by\u0107 u\u017cywany podczas wyboru atrybut\u00f3w jednostki biznesowej. W tym miejscu nale\u017cy wybra\u0107 ten sam filtr, kt\u00f3ry zosta\u0142 wybrany podczas generowania WSDL. W przypadku udost\u0119pnionych klient\u00f3w testowych jest to filtr o nazwie <em>TITLE<\/em>.<\/li>\n<li>Help &#8211; dostarcza kr\u00f3tki opis wszystkich parametr\u00f3w<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">WebServicesRemoteImportTestClient -server:rXYZ.cisag.com -oltp:DATABSE00 -filter:TITLE -userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks<\/pre>\n<p><\/div><\/section>\n<p>Klasy Java klienta testowego:<\/p>\n<ul>\n<li>Obszar nazw com.cisag.app.system.webservices.log\n<ul>\n<li>WebServicesClientBase<\/li>\n<li>WebServicesClientDebugHelper<\/li>\n<li>WebServicesRemoteImportTestClient<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw com.cisag.app.system.webservice.log..generated.imp\n<ul>\n<li>Import<\/li>\n<li>ImportLocator<\/li>\n<li>ImportService<\/li>\n<li>ImportSoapBindingStub<\/li>\n<li>ImportRequest<\/li>\n<li>ImportResponse<\/li>\n<li>ImportResult<\/li>\n<li>EntityWrapper<\/li>\n<li>Title<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw com.cisag.app.system.webservices.tools\n<ul>\n<li>ImportService<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw com.cisag.app.system.webservices.log.generated\n<ul>\n<li>Message<\/li>\n<li>MessageQueue<\/li>\n<li>MessageSeverity<\/li>\n<li>ImportMode<\/li>\n<li>ImportCorrectionMode<\/li>\n<li>ImportWarningsMode<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\"><br \/>\nW przypadku samodzielnego generowania klas Java z WSDL, nale\u017cy pami\u0119ta\u0107, \u017ce nast\u0119puj\u0105ce klasy s\u0105 generowane inaczej:<\/p>\n<ul>\n<li>java jest poprzedzone znakiem podkre\u015blenia. Tak samo jak w WSDL.<\/li>\n<li>Ze wzgl\u0119du na w\u0142a\u015bciwo\u015b\u0107 udost\u0119pnionej wersji Axis 1.3. Import.java i ImportLocator.java s\u0105 r\u00f3wnie\u017c generowane ze znakiem podkre\u015blenia z przodu.<\/li>\n<\/ul>\n<p>U\u017cytkownik ma jednak mo\u017cliwo\u015b\u0107 zmiany nazw tych klas.<\/p>\n<p><\/div><\/section>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\"><br \/>\nKlasy Java reprezentuj\u0105ce zestawy warto\u015bci z Comarch ERP Enterprise s\u0105 generowane w udost\u0119pnionej wersji Axis 1.3 w niekt\u00f3rych przypadkach ze sta\u0142ymi w postaci valueX zamiast nazw sta\u0142ych zestawu warto\u015bci. W takim przypadku nie nale\u017cy u\u017cywa\u0107 tych sta\u0142ych, ale generowa\u0107 obiekty za pomoc\u0105 metody statycznej fromString, samodzielnie okre\u015blaj\u0105c nazw\u0119 sta\u0142ej. Dzi\u0119ki temu zwi\u0119ksza si\u0119 czytelno\u015b\u0107 kodu \u017ar\u00f3d\u0142owego Java i elastyczno\u015b\u0107 w przypadku przysz\u0142ych rozszerze\u0144 zestawu warto\u015bci. Dost\u0119pne nazwy sta\u0142ych mo\u017cna sprawdzi\u0107 mi\u0119dzy innymi w \u017ar\u00f3dle wygenerowanej klasy.<\/p>\n<p><\/div><\/section>\n<h4 id=\"wyszukiwanie\" >Wyszukiwanie<\/h4>\n<p>Dla klienta testowego <em>WebServicesRemoteSearchTestClient<\/em> dost\u0119pne s\u0105 nast\u0119puj\u0105ce parametry:<\/p>\n<ul>\n<li>userCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>userCertificateFilePassword &#8211; has\u0142o do otwarcia pliku zawieraj\u0105cego certyfikat u\u017cytkownika<\/li>\n<li>serverCertificateFileName &#8211; pe\u0142na nazwa pliku zawieraj\u0105cego certyfikat serwera<\/li>\n<li>server &#8211; adres serwera us\u0142ugi sieciowej<\/li>\n<li>port &#8211; port serwera us\u0142ugi sieciowej<\/li>\n<li>oltp &#8211; identyfikator bazy danych OLPT serwera, na kt\u00f3rej loguje si\u0119 us\u0142uga sieciowa<\/li>\n<li>searchName &#8211; w pe\u0142ni kwalifikowana nazwa wyszukiwania OQL<\/li>\n<li>searchParameter &#8211; parametr wyszukiwania OQL (opcjonalne). Parametr musi mie\u0107 format &lt;name&gt;=&lt;wert&gt;. Nazwa odpowiada nazwie pola wyszukiwania z wyszukiwania OQL, warto\u015bci\u0105 parametru jest natomiast <em>Selection String<\/em>.<\/li>\n<\/ul>\n<p>Mo\u017cliwe ci\u0105gi selection zale\u017c\u0105 od typu danych pola wyszukiwania i s\u0105 opisane w dokumencie <em>Zdalne interfejsy BIS<\/em>, sekcja <em>Typy danych w wyszukiwaniu<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">WebServicesRemoteSearchTestClient\r\n-server:rXYZ.semiramis.com\r\n-oltp:OLTPDB00\r\n-searchName: com.cisag.app.general.obj.TitleSearch\r\n-userCertificateFileName:C:\\temp\\XYZ.jks\r\n-userCertificateFilePassword:1234567\r\n-serverCertificateFileName:C:\\temp\\XYZ.jks\r\n<\/pre>\n<p><\/div><\/section>\n<p>Klasy Java klienta testowego:<\/p>\n<ul>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.log<\/em>\n<ul>\n<li>WebServicesClientBase<\/li>\n<li>WebServicesClientDebugHelper<\/li>\n<li>WebServicesRemoteSearchTestClient<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservice.log..generated.search<\/em>\n<ul>\n<li>Search<\/li>\n<li>SearchLocator<\/li>\n<li>SearchService<\/li>\n<li>SearchSoapBindingStub<\/li>\n<li>SearchRequest<\/li>\n<li>SearchExistsRequest<\/li>\n<li>SearchResponse<\/li>\n<li>SearchExistsResponse<\/li>\n<li>SearchResult<\/li>\n<li>SearchExistsResult<\/li>\n<li>SearchFormat<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.tools<\/em>\n<ul>\n<li>SearchService<\/li>\n<\/ul>\n<\/li>\n<li>Obszar nazw <em>com.cisag.app.system.webservices.log.generated<\/em>\n<ul>\n<li>Message<\/li>\n<li>MessageQueue<\/li>\n<li>MessageSeverity<\/li>\n<li>ParameterListEntry<\/li>\n<li>ParameterListEntryType<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4 id=\"klient-excel-microsoft-net-client\" >Klient Excel (Microsoft.Net-Client)<\/h4>\n<p>Comarch ERP Enterprise oferuje r\u00f3wnie\u017c klienta us\u0142ug sieciowych dla programu Microsoft Excel. Sk\u0142ada si\u0119 on ze skoroszytu programu Excel i dodatkowej biblioteki. Na tym kliencie mog\u0105 by\u0107 eksportowane, edytowane i ponownie importowane wszystkie rekordy danych obiektu biznesowego <em>Title<\/em> (<em>com.cisag.app.general.obj.Title<\/em>). Klient Excel jest wi\u0119c jednocze\u015bnie klientem eksportu i klientem importu.<\/p>\n<p>Klient Excel sk\u0142ada si\u0119 z dw\u00f3ch arkuszy: <em>Logowanie<\/em> i <em>Dane<\/em>. W arkuszu <em>Logowanie<\/em> u\u017cytkownik musi wprowadzi\u0107 wszystkie dane wymagane dla loginu eksportu. Wyeksportowane dane s\u0105 wy\u015bwietlane w arkuszu <em>Dane<\/em> i mog\u0105 by\u0107 edytowane przez u\u017cytkownika.<\/p>\n<h5 id=\"wymagania\" >Wymagania<\/h5>\n<p>Do samodzielnego rozwoju klienta Excel wymagane s\u0105 nast\u0119puj\u0105ce pakiety oprogramowania:<\/p>\n<ul>\n<li>.NET 2.0<\/li>\n<li>MS Visual Studio 2005 Professional Edition<\/li>\n<li>MS Office 2003 Professional<\/li>\n<li>MS Visual Studio 2005 Tools for the Microsoft Office System (Na DVD MSDN jest to dodatek do Visual Studio; w innych przypadkach jest to osobna edycja)<\/li>\n<\/ul>\n<h5 id=\"instalacja-klienta\" >Instalacja klienta<\/h5>\n<p>Klient testowy Excel jest udost\u0119pniany i aktualizowany jako plik wydania\u00a0 \u201ecom.cisag.sys.delivery.Install-Web-Services-Clients\u201c w postaci &#8222;.zip&#8221;. Za pomoc\u0105 odpowiedniego programu archiwizuj\u0105cego nale\u017cy rozpakowa\u0107 plik <em>files\/install\/webservices\/web-services-clients.zip<\/em> z folderu serwera plik\u00f3w systemu Comarch ERP Enterprise do folderu g\u0142\u00f3wnego dysku &#8222;C:&#8221;. Powstaje nast\u0119puj\u0105ca struktura folderu:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">C:\\\r\n    semiramis\\\r\n          webservices\\\r\n                   ExcelImportExportTestClient\\<\/pre>\n<p>Folder <em>ExcelImportExportTestClient<\/em> zawiera wszystkie pliki niezb\u0119dne do rozwoju i korzystania z klienta Excel.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\"><br \/>\nPoniewa\u017c projekty Microsoft Visual Studio zawieraj\u0105 bezwzgl\u0119dne \u015bcie\u017cki plik\u00f3w, klient Excel musi zosta\u0107 rozpakowany do dok\u0142adnej lokalizacji opisanej w systemie plik\u00f3w, aby mo\u017cna go by\u0142o uruchomi\u0107 bez \u017cadnych korekt. <\/div><\/section>\n<p>Klient Excel wykorzystuje uwierzytelnianie has\u0142em. Dlatego, aby m\u00f3c korzysta\u0107 z klienta Excel, w przegl\u0105darce Internet Explorer musi by\u0107 zainstalowany tylko certyfikat serwera lub certyfikat z nadrz\u0119dnego urz\u0119du certyfikacji (plik .cer).<\/p>\n<h5 id=\"uruchomienie-klienta\" >Uruchomienie klienta<\/h5>\n<p>Nale\u017cy otworzy\u0107 folder <em>C:\\semiramis\\webservices\\ExcelRemoteImportExportClient<\/em> w Windows Explorer. Dwukrotnie klikn\u0105\u0107 na plik <em>ExcelRemoteImportExportClient.sln<\/em>. Spowoduje to otwarcie klienta w Visual Studio. Nast\u0119pne nale\u017cy uruchomi\u0107 klienta wybieraj\u0105c z menu opcj\u0119 <em>Debug\/Run without Debugging<\/em>. Klient pojawi si\u0119 w Microsoft Excel. Poni\u017cej znajduje si\u0119 opis obs\u0142ugi klienta.<\/p>\n<h5 id=\"arkusz-logowanie\" >Arkusz <em>Logowanie<\/em><\/h5>\n<p>W arkuszu <em>Logowanie<\/em> nale\u017cy wprowadzi\u0107 nast\u0119puj\u0105ce warto\u015bci:<\/p>\n<ul>\n<li>Serwer &#8211; adres serwera aplikacji systemu ERP, na kt\u00f3rym udost\u0119pniane s\u0105 us\u0142ugi sieciowe<\/li>\n<li>Port &#8211; port, na kt\u00f3rym udost\u0119pniane s\u0105 us\u0142ugi sieciowe (warto\u015b\u0107 domy\u015blna 443)<\/li>\n<li>OLTP &#8211; identyfikator bazy OLAP, z kt\u00f3rej ma by\u0107 wykonany eksport<\/li>\n<li>Filtr &#8211; identyfikator filtra na podanej bazie OLAP. Nale\u017cy wprowadzi\u0107 filtr dla jednostki biznesowej <em>cisag.app.general.obj.Title<\/em>. Dla udost\u0119pnionego klienta testowego filtr musi mie\u0107 nazw\u0119 <em>TITLE<\/em>. T\u0119 nazw\u0119 r\u00f3wnie\u017c nale\u017cy wprowadzi\u0107 w tym polu. Atrybuty <em>name<\/em> i <em>description<\/em> musz\u0105 by\u0107 wybrane w samym filtrze, a ustawienie j\u0119zyka filtra musi mie\u015b warto\u015b\u0107 <em>Jeden j\u0119zyk<\/em>.<\/li>\n<li>U\u017cytkownik &#8211; identyfikator u\u017cytkownika, na kt\u00f3rego ma nast\u0105pi\u0107 logowanie. U\u017cytkownik musi by\u0107 przyporz\u0105dkowany do systemu i posiada\u0107 uprawnienia do logowania na podanej bazie OLAP.<\/li>\n<li>Has\u0142o &#8211; has\u0142o dla podanego u\u017cytkownika<\/li>\n<\/ul>\n<p>Opr\u00f3cz p\u00f3l wprowadzania danych w arkuszu znajduj\u0105 si\u0119 dwa przyciski: <em>Importuj<\/em> i <em>Eksportuj<\/em>. S\u0142u\u017c\u0105 one do uruchamiania importu lub eksportu po uzupe\u0142nieniu wymaganych danych logowania. Po uruchomieniu przycisku nast\u0119puje komunikacja z serwerem. Po zako\u0144czeniu komunikacji pojawia si\u0119 okno dialogowe z komunikatem.<\/p>\n<h5 id=\"arkusz-dane\" >Arkusz <em>Dane<\/em><\/h5>\n<p>Wyeksportowane dane s\u0105 wy\u015bwietlane w arkuszu <em>Dane<\/em> i mog\u0105 by\u0107 edytowane przez u\u017cytkownika. Dost\u0119pne s\u0105 dwa przyciski <em>Dodaj<\/em> i <em>Usu\u0144<\/em>. Za pomoc\u0105 przycisku <em>Dodaj<\/em> u\u017cytkownik dodaje nowy, pusty wiersz na ko\u0144cu tabeli, w kt\u00f3rym mo\u017cna wprowadzi\u0107 nowy rekord danych. Przycisk <em>Usu\u0144<\/em> usuwa rekord danych z aktualnie aktywnej kom\u00f3rki arkusza. Nie powoduje to jednak usuni\u0119cia tego rekordu danych w bazie danych OLTP w przypadku p\u00f3\u017aniejszego importu. Zasadniczo \u017caden rekord danych nie mo\u017ce zosta\u0107 usuni\u0119ty z bazy danych przez tego klienta testowego.<\/p>\n<h3 id=\"obsluga-bledow\" >Obs\u0142uga b\u0142\u0119d\u00f3w<\/h3>\n<p>Serwer us\u0142ugi sieciowej Comarch ERP Enterprise umo\u017cliwia wydanie informacji o \u017c\u0105daniach klient\u00f3w. Dotyczy to zar\u00f3wno programowalnych, jak i nieprogramowalnych us\u0142ug sieciowych.<\/p>\n<p>W tym celu nale\u017cy aktywowa\u0107 debugowanie klasy Java <em>com.cisag.sys.kernel.webservices.CisWebServicesResource<\/em> na serwerze aplikacji systemu ERP, kt\u00f3ry jest wywo\u0142ywany przez klient\u00f3w. W zale\u017cno\u015bci od poziomu debugowania, w Toolshell pojawiaj\u0105 si\u0119 nast\u0119puj\u0105ce dane wyj\u015bciowe:<\/p>\n<ul>\n<li>INFO &#8211; podczas ka\u017cdego wywo\u0142ania us\u0142ugi sieciowej wydania s\u0105 generowane na pocz\u0105tku i na ko\u0144cu przetwarzania w SAS. Utworzone wydania: Numer sesji, Metoda HTTP, URI zapytania, czas przetwarzania.<\/li>\n<li>FINEST &#8211; opr\u00f3cz wyda\u0144 na poziomie INFO, poziom FINEST podaje zawarto\u015b\u0107 (tre\u015b\u0107 HTTP) \u017c\u0105dania klienta i odpowied\u017a us\u0142ugi. Wydania mo\u017cna aktywowa\u0107 i dezaktywowa\u0107 dla aktualnego SAS za pomoc\u0105 komendy Toolshell <a href=\"..\/..\/..\/help\/systemmanagement\/toolsreference\/sas\/DebugClass_DebugClass.pdf\">dbgcls<\/a>.<\/li>\n<\/ul>\n<h3 id=\"zalacznik\" >Za\u0142\u0105cznik<\/h3>\n<p>Zastawienie wszystkich komend Toolshell wymaganych do utworzenia plik\u00f3w \u017ar\u00f3d\u0142owych Java dla klient\u00f3w testowych lub do uruchomienia klient\u00f3w testowych.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#\r\n# CallApplication\r\n#\r\n# Abfragen der WSDL:\r\n# https:\/\/rXYZ.semiramis.com\/webservices\/CallApplication?wsdl\r\n\r\nCreateWSDLJavaSources -server:rXYZ.cisag.com -service:CallApplication -userCertificateFileName:C:\\temp\\XYZ.jks -userCertificateFilePassword:1234567 -serverCertificateFileName:C:\\temp\\XYZ.jks -outputDirectory: C:\\semiramis\\work\\jobxxxxx\\usrXYZ\\source -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common=com.cisag.app.system.webservices.log.generated\r\n\r\n\r\nWebServicesTestClient -server:rXYZ.semiramis.com -oltp:OLTPDB00-userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks \t\r\n\r\n\r\n#\r\n# Export\r\n#\r\n# Zapytania WSDL:\r\n# https:\/\/rXYZ.semiramis.com\/webservices\/Export?wsdl;oltp=OLTPDB00;filter=TITLE\r\n\r\nCreateWSDLJavaSources -server:rXYZ.cisag.com -service:Export -oltp:OLTPDB00 -filter:TITLE -oltpMode:extended -userCertificateFileName:C:\\temp\\XYZ.jks -userCertificateFilePassword:1234567 -serverCertificateFileName:C:\\temp\\XYZ.jks -outputDirectory: C:\\semiramis\\work\\jobxxxxx\\usrXYZ\\source -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Export\/extended\/TITLE=com.cisag.app.system.webservices.log.generated.exp -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common=com.cisag.app.system.webservices.log.generated -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Export\/extended\/TITLE\/data=com.cisag.app.system.webservices.log.generated.exp\r\n\r\n\r\nWebServicesRemoteExportTestClient -server:rXYZ.semiramis.com -oltp:OLTPDB00 -filter:TITLE -userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks \t\r\n\r\n\r\n#\r\n# Import\r\n#\r\n# Zapytania WSDL:\r\n# https:\/\/rXYZ.semiramis.com\/webservices\/Import?wsdl;oltp=OLTPDB00;\r\n\r\nCreateWSDLJavaSources \t-server:rXYZ.semiramis.com \t-service:Import\t-oltp: OLTPDB00 -filter:TITLE -oltpMode:extended -userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks \t-outputDirectory:C:\\semiramis\\work\\jobxxxxx\\usrXYZ\\source \t-outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common=com.cisag.app.system.webservices.log.generated -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Import\/extended\/TITLE=com.cisag.app.system.webservices.log.generated.imp -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Import\/extended\/TITLE\/data=com.cisag.app.system.webservices.log.generated.imp\t\r\n\r\nWebServicesRemoteImportTestClient -server:rXYZ.semiramis.com -oltp:OLTPDB00 -filter:TITLE -userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks\r\n\r\n\r\n#\r\n# Search\r\n#\r\n# Zapytania WSDL:\r\n# https:\/\/rXYZ.semiramis.com\/webservices\/Search?wsdl;oltp=OLTPDB00;\r\n\r\nCreateWSDLJavaSources \t-server:rXYZ.semiramis.com \t-service:Search\t-oltp:OLTPDB00 \t-userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks \t-outputDirectory:C:\\semiramis\\work\\jobxxxxx\\usrXYZ\\source \t-outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/common=com.cisag.app.system.webservices.log.generated -outputNameSpace:http:\/\/webservices.semiramis.com\/2006-01\/Search=com.cisag.app.system.webservices.log.generated.search\r\n\r\nWebServicesRemoteSearchTestClient -server:rXYZ.semiramis.com -oltp:OLTPDB00 -searchName:com.cisag.app.general.obj.TitleSearch \t-userCertificateFileName:C:\\temp\\XYZ.jks \t-userCertificateFilePassword:1234567  \t-serverCertificateFileName:C:\\temp\\XYZ.jks \r\n\r\n<\/pre>\n","protected":false},"author":18,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-7854","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-zewnetrzne-interfejsy"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=7854"}],"version-history":[{"count":2,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7854\/revisions"}],"predecessor-version":[{"id":7860,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7854\/revisions\/7860"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=7854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}