{"id":9681,"date":"2025-08-14T08:29:30","date_gmt":"2025-08-14T06:29:30","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9681"},"modified":"2025-08-14T08:29:31","modified_gmt":"2025-08-14T06:29:31","slug":"podrecznik-referencyjny-aplikacje-raportow","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/","title":{"rendered":"Podr\u0119cznik referencyjny: Aplikacje raport\u00f3w"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Definicje_terminow\" >Definicje termin\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Warunki_wstepne\" >Warunki wst\u0119pne<\/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\/podrecznik-referencyjny-aplikacje-raportow\/#Tworzenie_aplikacji_raportowych\" >Tworzenie aplikacji raportowych<\/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\/podrecznik-referencyjny-aplikacje-raportow\/#Rejestracja_obiektu_deweloperskiego_raportu\" >Rejestracja obiektu deweloperskiego raportu<\/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\/podrecznik-referencyjny-aplikacje-raportow\/#Rejestracja_obiektu_deweloperskiego_klasy_Java\" >Rejestracja obiektu deweloperskiego klasy Java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Rejestracja_obiektu_deweloperskiego_aplikacji\" >Rejestracja obiektu deweloperskiego aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Tworzenie_aplikacji_raportowej\" >Tworzenie aplikacji raportowej<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Klasa_Java_ReportOutputParameterData\" >Klasa Java ReportOutputParameterData<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Klasa_Java_ReportOutputData\" >Klasa Java ReportOutputData<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Klasa_Java_ReportOutputApplication\" >Klasa Java ReportOutputApplication<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Prosta_aplikacja_raportowa\" >Prosta aplikacja raportowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Ustawienie_wartosci_domyslnych_dla_parametrow_raportu\" >Ustawienie warto\u015bci domy\u015blnych dla parametr\u00f3w raportu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Dodatkowe_walidacje_dla_parametrow_raportu\" >Dodatkowe walidacje dla parametr\u00f3w raportu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Aplikacja_raportowa_z_wlasnymi_polami_GUI\" >Aplikacja raportowa z w\u0142asnymi polami GUI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Parametry_raportu_jako_parametry_aplikacji\" >Parametry raportu jako parametry aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Dynamiczne_okreslanie_raportu\" >Dynamiczne okre\u015blanie raportu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Metody_klasy_Java_ReportOutputApplication\" >Metody klasy Java ReportOutputApplication<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Testowanie_aplikacji_raportu\" >Testowanie aplikacji raportu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-aplikacje-raportow\/#Dokumentowanie_aplikacji_raportu\" >Dokumentowanie aplikacji raportu<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>W systemie Comarch ERP Enterprise dokumenty s\u0105 generowane za po\u015brednictwem Semiramis Output Manager (SOM) przy u\u017cyciu raport\u00f3w. Istniej\u0105 raporty do generowania dokument\u00f3w transakcyjnych oraz raporty do generowania dokument\u00f3w sprawozdawczych. Zakres parametr\u00f3w, spos\u00f3b pozyskiwania danych oraz uk\u0142ad wydruku s\u0105 definiowane przez pliki raport\u00f3w. Pliki raport\u00f3w mog\u0105 by\u0107 tworzone i modyfikowane za pomoc\u0105 Crystal Reports.<\/p>\n<p>Wraz z wprowadzeniem Comarch ERP Enterprise w wersji 4.0, znacz\u0105co wzr\u00f3s\u0142 zakres danych i uprawnie\u0144, kt\u00f3re musz\u0105 by\u0107 uwzgl\u0119dnione podczas projektowania raport\u00f3w. Mo\u017cliwo\u015bci, jakie otwieraj\u0105 wielofirmowo\u015b\u0107, kontekst wyszukiwania i wirtualne tabele, nie mog\u0105 by\u0107 ju\u017c w pe\u0142ni pokryte przez dane w plikach raport\u00f3w ani przez metadane w obiekcie deweloperskim typu <em>Raport<\/em>. Aby sprosta\u0107 temu wyzwaniu, wprowadzono specjalne zastosowanie <em>Dokument raportu<\/em> dla aplikacji dialogowych. Aplikacje z tym specjalnym zastosowaniem nazywane s\u0105 <em>Aplikacjami raportowymi<\/em>. Aplikacje raportowe mog\u0105 korzysta\u0107 z obszaru klas, kt\u00f3ry umo\u017cliwia realizacj\u0119 z\u0142o\u017conych p\u00f3l zapyta\u0144 i zwi\u0105zanych z nimi walidacji. Ten obszar zapewnia w szczeg\u00f3lno\u015bci wsparcie w kontek\u015bcie wykorzystania tabel wirtualnych.<\/p>\n<p>Fakt, \u017ce aplikacje raportowe s\u0105 oddzielnymi aplikacjami, przynosi kilka korzy\u015bci w por\u00f3wnaniu do u\u017cywania raport\u00f3w w aplikacji <em>Raport: Dokumenty raport\u00f3w<\/em>:<\/p>\n<ul>\n<li>Przyznawanie uprawnie\u0144 odbywa si\u0119 wy\u0142\u0105cznie na poziomie aplikacji<\/li>\n<li>Widoczno\u015b\u0107 aplikacji mo\u017ce by\u0107 kontrolowana na podstawie licencjonowania, konfiguracji, aktywnych baz danych oraz organizacji przypisanych do u\u017cytkownika.<\/li>\n<li>Funkcje zwi\u0105zane z aplikacj\u0105, takie jak uprawnienia do element\u00f3w interfejsu, dzia\u0142aj\u0105 poprawnie<\/li>\n<li>Bezpo\u015brednia pomoc i pomoc online s\u0105 tworzone jako normalna dokumentacja aplikacji<\/li>\n<\/ul>\n<p>Z tego powodu, pocz\u0105wszy od wersji 4.2 Comarch ERP Enterprise, aplikacje raportowe s\u0105 standardowym sposobem udost\u0119pniania raport\u00f3w.<\/p>\n<p>Niniejszy artyku\u0142 opisuje, jak tworzy\u0107 aplikacje raportowe.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Programi\u015bci<\/li>\n<li>Konsultanci techniczni<\/li>\n<\/ul>\n<h3 id=\"definicje-terminow\" ><span class=\"ez-toc-section\" id=\"Definicje_terminow\"><\/span>Definicje termin\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Dokument ko\u0144cowy<\/strong> &#8212; utworzenie dokumentu ko\u0144cowego nast\u0119puje poprzez wys\u0142anie potwierdzenia na urz\u0105dzenie wyj\u015bciowe, takie jak drukarka, lub do pliku. Dokument taki mo\u017cna zarchiwizowa\u0107 lub przes\u0142a\u0107 do partnera, przyk\u0142adowo za pomoc\u0105 maila.<\/li>\n<li><strong>Raport<\/strong> &#8212; raport pozwala na przejrzyste przedstawienie danych zgromadzonych w systemie Comarch ERP Enterprise. Raport mo\u017cna generowa\u0107 dowoln\u0105 ilo\u015b\u0107 razy, zawsze na podstawie aktualnych danych. Raporty dzieli si\u0119 na <span style=\"font-size: revert; color: initial;\">dokumenty raportowe<\/span><span style=\"font-size: revert; color: initial;\"> oraz <\/span><span style=\"font-size: revert; color: initial;\">dokumenty ko\u0144cowe<\/span><span style=\"font-size: revert; color: initial;\">. Dokumenty raportowe mog\u0105 by\u0107 tworzone na podstawie dowolnych danych z Comarch ERP Enterprise. Zazwyczaj maj\u0105 form\u0119 listy i mo\u017cna je generowa\u0107 w aplikacji <em>Raport: Dokumenty raport\u00f3w<\/em>. Dokumenty ko\u0144cowe mo\u017cna generowa\u0107 w odpowiednich aplikacjach bran\u017cowych, w kt\u00f3rych s\u0105 tworzone. Zazwyczaj zawieraj\u0105 dane dotycz\u0105ce tylko jednego potwierdzenia. <\/span>Raporty mo\u017cna tworzy\u0107 jako obiekty systemowe lub obiekty rozwojowe. Raport jako <span style=\"font-size: revert; color: initial;\">obiekt deweloperski<\/span><span style=\"font-size: revert; color: initial;\"> ma t\u0119 zalet\u0119, \u017ce mo\u017cna go zmienia\u0107 w systemie deweloperskim, zapisywa\u0107 w wersji i przenosi\u0107 do innych system\u00f3w w ramach aktualizacji oprogramowania. Aby umo\u017cliwi\u0107 tworzenie i modyfikowanie raport\u00f3w r\u00f3wnie\u017c w systemach nieb\u0119d\u0105cych systemami deweloperskimi, aplikacja <em>Raporty<\/em> oferuje mo\u017cliwo\u015b\u0107 tworzenia ich jako <\/span><span style=\"font-size: revert; color: initial;\">obiekt\u00f3w systemowych<\/span><span style=\"font-size: revert; color: initial;\">. Obiekty systemowe nie mog\u0105 by\u0107 przenoszone do innych system\u00f3w. <\/span>Raporty zawieraj\u0105 jeden lub wi\u0119cej <span style=\"font-size: revert; color: initial;\">plik\u00f3w raport\u00f3w<\/span><span style=\"font-size: revert; color: initial;\">, kt\u00f3re okre\u015blaj\u0105 ich uk\u0142ad.<\/span><\/li>\n<li><strong>Dokument raportu<\/strong> &#8212; utworzenie dokumentu raportu lub dokumentu ko\u0144cowego nast\u0119puje poprzez wys\u0142anie raportu na urz\u0105dzenie wyj\u015bciowe, takie jak drukarka, lub do pliku. Dokument raportu zawiera list\u0119 obiekt\u00f3w, na przyk\u0142ad list\u0119 adres\u00f3w. Dokument ko\u0144cowy zawsze obejmuje jeden obiekt, na przyk\u0142ad zam\u00f3wienie sprzeda\u017cy. Dokumenty mo\u017cna archiwizowa\u0107 lub przesy\u0142a\u0107 do partnera, na przyk\u0142ad faksem lub poczt\u0105 e-mail.<\/li>\n<\/ul>\n<h3 id=\"warunki-wstepne\" ><span class=\"ez-toc-section\" id=\"Warunki_wstepne\"><\/span>Warunki wst\u0119pne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Aby m\u00f3c tworzy\u0107 aplikacje raportowe, wymagana jest znajomo\u015b\u0107 tworzenia raport\u00f3w za pomoc\u0105 programu Crystal Reports.<\/p>\n<h3 id=\"tworzenie-aplikacji-raportowych\" ><span class=\"ez-toc-section\" id=\"Tworzenie_aplikacji_raportowych\"><\/span>Tworzenie aplikacji raportowych<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ten rozdzia\u0142 opisuje, w jaki spos\u00f3b tworzone s\u0105 nowe aplikacje raportowe.<\/p>\n<p>Aplikacja raportowa to aplikacja dialogowa ze specjalnym zastosowaniem <em>Dokumentu raportu<\/em>, kt\u00f3ra korzysta z opisanych poni\u017cej interfejs\u00f3w. Tworzenie aplikacji raportowej sk\u0142ada si\u0119 z sze\u015bciu krok\u00f3w:<\/p>\n<ul>\n<li>Rejestracja obiektu deweloperskiego raportu<\/li>\n<li>Dla aplikacji raportowej musi istnie\u0107 przynajmniej jeden raport. Raport musi by\u0107 utworzony w przestrzeni nazw <em>rpt<\/em>. Nazwa jednostki biznesowej powinna by\u0107 zawarta w raporcie. Nazwa raportu to nazwa jednostki biznesowej w liczbie mnogiej.<\/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<p>Jednostka biznesowa:<\/p>\n<ul>\n<li>Nazwa: com.cisag.sys.configuration.obj.UserGroup<\/li>\n<li>Oznaczenie: Grupa u\u017cytkownik\u00f3w<\/li>\n<\/ul>\n<p>Raport:<\/p>\n<ul>\n<li>Nazwa: com.cisag.sys.configuration.rpt.UserGroup<\/li>\n<li>Oznaczenie: Grupy u\u017cytkownik\u00f3w<\/li>\n<\/ul>\n<p>Raporty dla aplikacji raportowych maj\u0105 typ dokumentu <em>Dokument aplikacji<\/em>. Atrybut wy\u015bwietlania musi mie\u0107 warto\u015b\u0107 <em>Nie<\/em>, poniewa\u017c raporty te nigdy nie s\u0105 wy\u015bwietlane w aplikacji <em>Raport: Dokumenty raport\u00f3w<\/em>.<\/div><\/section>\n<ul>\n<li>Rejestracja obiektu deweloperskiego klasy Java<\/li>\n<li>Rejestracja obiektu deweloperskiego aplikacji<\/li>\n<li>Tworzenie aplikacji raportowej<\/li>\n<li>Testowanie aplikacji raportowej<\/li>\n<li>Dokumentowanie aplikacji raportowej<\/li>\n<\/ul>\n<p>Poszczeg\u00f3lne kroki zosta\u0142y opisane w kolejnych rozdzia\u0142ach.<\/p>\n<h4 id=\"rejestracja-obiektu-deweloperskiego-raportu\" ><span class=\"ez-toc-section\" id=\"Rejestracja_obiektu_deweloperskiego_raportu\"><\/span>Rejestracja obiektu deweloperskiego raportu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla aplikacji raportowej musi istnie\u0107 przynajmniej jeden raport. Raport musi by\u0107 utworzony w przestrzeni nazw <em>rpt<\/em>. Nazwa jednostki biznesowej powinna by\u0107 zawarta w raporcie. Nazwa raportu to nazwa jednostki biznesowej w liczbie mnogiej.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p>Jednostka biznesowa:<\/p>\n<ul>\n<li>Nazwa: com.cisag.sys.configuration.obj.UserGroup<\/li>\n<li>Oznaczenie: Grupa u\u017cytkownik\u00f3w<\/li>\n<\/ul>\n<p>Raport:<\/p>\n<ul>\n<li>Nazwa: com.cisag.sys.configuration.rpt.UserGroup<\/li>\n<li>Oznaczenie: Grupy u\u017cytkownik\u00f3w<\/li>\n<\/ul>\n<p>Raporty dla aplikacji raportowych maj\u0105 typ dokumentu <em>Dokument aplikacji<\/em>. Atrybut wy\u015bwietlania musi mie\u0107 warto\u015b\u0107 <em>Nie<\/em>, poniewa\u017c raporty te nigdy nie s\u0105 wy\u015bwietlane w aplikacji <em>Raport: Dokumenty raport\u00f3w<\/em>.<\/div><\/section>\n<h4 id=\"rejestracja-obiektu-deweloperskiego-klasy-java\" ><span class=\"ez-toc-section\" id=\"Rejestracja_obiektu_deweloperskiego_klasy_Java\"><\/span>Rejestracja obiektu deweloperskiego klasy Java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aby stworzy\u0107 aplikacj\u0119 raportow\u0105, potrzebna jest klasa Java. Klasa ta musi znajdowa\u0107 si\u0119 w obszarze nazw, kt\u00f3ra ko\u0144czy si\u0119 na <em>ui<\/em>. Jej nazwa powinna by\u0107 taka sama jak nazwa aplikacji. Nazwa aplikacji powinna zawiera\u0107 nazw\u0119 raportu, bez obszaru nazw, i ko\u0144czy\u0107 si\u0119 na <em>ReportOutput<\/em>. Z nazwy powinien by\u0107 rozpoznawalny obiekt biznesowy.<\/p>\n<h4 id=\"rejestracja-obiektu-deweloperskiego-aplikacji\" ><span class=\"ez-toc-section\" id=\"Rejestracja_obiektu_deweloperskiego_aplikacji\"><\/span>Rejestracja obiektu deweloperskiego aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aplikacja raportowa to aplikacja dialogowa. W zwi\u0105zku z tym musi by\u0107 zarejestrowana w obszarze nazw <em>ui<\/em>. Nazwa aplikacji zawiera nazw\u0119 jednostki biznesowej lub raportu, kt\u00f3ry jest generowany, i ko\u0144czy si\u0119 na <em>ReportOutput<\/em>.<\/p>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad dla artyku\u0142u zakupu<\/p>\n<p>Raport:<\/p>\n<ul>\n<li>Nazwa: com.cisag.app.purchasing.rpt.PurchaseItem<\/li>\n<li>Oznaczenie: Artyku\u0142 zakupu<\/li>\n<\/ul>\n<p>Aplikacja:<\/p>\n<ul>\n<li>Nazwa: com.cisag.app.general.item.ui.PurchaseItemReportOutput<\/li>\n<li>Oznaczenie: Raport: Artyku\u0142 zakupu<\/div><\/section><\/li>\n<\/ul>\n<div class=\"response-content ng-tns-c771635079-55\">\n<div id=\"model-response-message-contentr_b11cd0947a096c38\" class=\"markdown markdown-main-panel stronger enable-updated-hr-color\" dir=\"ltr\">\n<p>Aplikacje raportowe s\u0105 typu<em> Dialog<\/em> ze specjalnym przeznaczeniem <em>Dokument raportu<\/em>. Ustawienie wy\u015bwietlania i utrzymania musi by\u0107 ustawione na <em>Wy\u015bwietlanie, Utrzymanie<\/em>, aby aplikacja raportowa by\u0142a widoczna w nawigatorze. Tryb uprawnie\u0144 powinien by\u0107 ustawiony na przeprowadzanie weryfikacji. Nale\u017cy r\u00f3wnie\u017c poprawnie ustawi\u0107 wymagan\u0105 aktywn\u0105 baz\u0119 danych. Zazwyczaj jest to baza danych OLTP. W przypadku raport\u00f3w, kt\u00f3re wykorzystuj\u0105 obiekty biznesowe w bazie danych OLAP, baza danych OLAP jest r\u00f3wnie\u017c wymagan\u0105 aktywn\u0105 baz\u0105 danych.<\/p>\n<h4 id=\"tworzenie-aplikacji-raportowej\" ><span class=\"ez-toc-section\" id=\"Tworzenie_aplikacji_raportowej\"><\/span>Tworzenie aplikacji raportowej<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Podczas tworzenia aplikacji raportowej istniej\u0105 r\u00f3\u017cne scenariusze. W prostym przypadku najpierw mo\u017cna stworzy\u0107 raport, a nast\u0119pnie aplikacj\u0119 raportow\u0105. W bardziej z\u0142o\u017conych scenariuszach raport, aplikacja i wirtualna tabela musz\u0105 by\u0107 tworzone r\u00f3wnolegle. Jest r\u00f3wnie\u017c mo\u017cliwe, \u017ce ta sama aplikacja raportowa, w zale\u017cno\u015bci od parametr\u00f3w zapytania lub konfiguracji, automatycznie wybiera konkretny raport. Wszystkie raporty, kt\u00f3re mog\u0105 by\u0107 generowane przez aplikacj\u0119 raportow\u0105, musz\u0105 mie\u0107 te same parametry raportu. Przyk\u0142adem jest aplikacja <em>Raport: Dzienniki zmian<\/em>.<\/p>\n<p>Interfejs, kt\u00f3ry jest dost\u0119pny dla aplikacji raportowej, znajduje si\u0119 w obszarze nazw <em>com.cisag.pgm.services.output<\/em>. Najwa\u017cniejsz\u0105 klas\u0105 jest <em>ReportOutputApplication<\/em>. Wszystkie aplikacje raportowe musz\u0105 by\u0107 podklasami klasy <em>Java ReportOutputApplication<\/em>. Klasy Java tego interfejsu to:<\/p>\n<ul>\n<li><strong>Klasa Java ReportOutputApplication <\/strong>&#8212; klasa bazowa dla wszystkich aplikacji raportowych<\/li>\n<li><strong>Klasa Java ReportOutputData<\/strong> &#8212; kontener danych dla warto\u015bci parametr\u00f3w<\/li>\n<li><strong>Klasa Java ReportOutputParameterData<\/strong> &#8212; struktura pomocnicza do tworzenia p\u00f3l zapytania dla parametr\u00f3w raportu<\/li>\n<\/ul>\n<h5 id=\"klasa-java-reportoutputparameterdata\" ><span class=\"ez-toc-section\" id=\"Klasa_Java_ReportOutputParameterData\"><\/span>Klasa Java ReportOutputParameterData<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasa <em>ReportOutputParameterData<\/em> zawiera metadane dla parametru raportu, tzn. dane, kt\u00f3re s\u0105 zapisane w raporcie lub pliku raportu dla tych parametr\u00f3w. Klasa nie jest finalna, ale nie mo\u017ce by\u0107 dziedziczona. W wi\u0119kszo\u015bci przypadk\u00f3w dla parametru raportu tworzone jest dok\u0142adnie jedno pole zapytania w aplikacji raportowej. Jest ona u\u017cywana w opisanej poni\u017cej metodzie <em>createParameterField(ReportOutputParameterData parameterData)<\/em>.<\/p>\n<ul>\n<li><strong>Metoda createParameterData(String name,String fieldGuid,String fieldPath,boolean selectionMode)<\/strong> &#8212; tworzy now\u0105 instancj\u0119 danych parametru. Za pomoc\u0105 tej instancji w <em>ReportOutputApplication<\/em> mo\u017cna utworzy\u0107 pole GUI. Nie u\u017cywa si\u0119 tej metody bezpo\u015brednio, jest ona u\u017cywana tylko przez klas\u0119 bazow\u0105 <em>ReportOutputApplication<\/em>.<\/li>\n<li><strong>Metoda getName()<\/strong> &#8212; zwraca nazw\u0119 parametru raportu, dla kt\u00f3rego ma zosta\u0107 utworzone pole GUI<\/li>\n<li><strong>Metoda getFieldGuid()<\/strong> &#8212; zwraca GUID, za pomoc\u0105 kt\u00f3rego ma zosta\u0107 utworzone pole GUI<\/li>\n<li><strong>Metoda getFieldPath(<\/strong>) &#8212; zwraca \u015bcie\u017ck\u0119 do opisu danych logicznego typu danych, za pomoc\u0105 kt\u00f3rego ma zosta\u0107 utworzone pole GUI. W przypadku p\u00f3l GUI tworzonych automatycznie, logiczny typ danych wraz z trybem selekcji okre\u015bla, jakie pole GUI zostanie utworzone.<\/li>\n<li><strong>Metoda isSelectionMode()<\/strong> &#8212; okre\u015bla, czy pole GUI jest tworzone w trybie selekcji, czy te\u017c nie<\/li>\n<\/ul>\n<h5 id=\"klasa-java-reportoutputdata\" ><span class=\"ez-toc-section\" id=\"Klasa_Java_ReportOutputData\"><\/span>Klasa Java ReportOutputData<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasa <em>ReportOutputApplication<\/em> to kontener danych z warto\u015bciami parametr\u00f3w do wygenerowania raportu. Kontener danych jest poprawnie inicjowany przez klas\u0119 <em>ReportOutputApplication<\/em>, gdy podczas inicjalizacji raport zostanie pomy\u015blnie ustawiony przez wywo\u0142anie metody <em>initReport(String <\/em><em>reportName)<\/em>. Dla ka\u017cdego parametru raportu musi zosta\u0107 zarejestrowana \u015bcie\u017cka do opisu danych dla logicznego typu danych oraz musi zosta\u0107 zainicjowana warto\u015b\u0107. Poni\u017csze metody umo\u017cliwiaj\u0105 definiowanie lub pobieranie \u015bcie\u017cek do parametr\u00f3w:<\/p>\n<ul>\n<li><strong>Metoda setPath(String parameterName, String absPath)<\/strong> &#8212; \u00a0przypisuje \u015bcie\u017ck\u0119 do opisu danych dla parametru. Nast\u0119pnie musi zosta\u0107 jeszcze ustawiona warto\u015b\u0107, zanim parametr b\u0119dzie m\u00f3g\u0142 zosta\u0107 wykorzystany.<\/li>\n<li><strong>Metoda getPath(String parameterName) <\/strong>&#8212; zwraca \u015bcie\u017ck\u0119 do opisu danych logicznego typu danych, kt\u00f3ry jest przypisany do parametru. Kontener danych ma metody do ustawiania i pobierania typ\u00f3w danych obs\u0142ugiwanych przez raporty. Rozr\u00f3\u017cnia si\u0119 przy tym warto\u015b\u0107 konkretn\u0105 a wyb\u00f3r (<em>\u2026Selection<\/em>). Parametry dla wirtualnych tabel musz\u0105 by\u0107 w wielu przypadkach przekazywane w formacie neutralnym, tzn. niezmienione i bez walidacji przez Crystal Reports, poprzez raport do sterownika ODBC i wirtualnej tabeli. Te parametry raportu musz\u0105 by\u0107 typu <em>String<\/em>. W klasie <em>ReportOutputData<\/em> istniej\u0105 ponadto specjalne metody<em> get\u2026FromString<\/em> lub <em>set\u2026AsString<\/em>.<\/li>\n<\/ul>\n<h5 id=\"klasa-java-reportoutputapplication\" ><span class=\"ez-toc-section\" id=\"Klasa_Java_ReportOutputApplication\"><\/span>Klasa Java ReportOutputApplication<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasa Java <em>ReportOutputApplication<\/em> jest klas\u0105 bazow\u0105 dla wszystkich aplikacji raportowych. Umo\u017cliwia ona realizacj\u0119 r\u00f3\u017cnych poziom\u00f3w z\u0142o\u017cono\u015bci podczas projektowania aplikacji raportowych. W najprostszym przypadku aplikacja raportowa zachowuje si\u0119 jak aplikacja <em>Raport: Dokumenty raport\u00f3w<\/em>. Wygl\u0105d i zachowanie aplikacji s\u0105 w pe\u0142ni zdefiniowane przez raport i mog\u0105 by\u0107 zmieniane poprzez modyfikacj\u0119 raportu. Dzi\u0119ki u\u017cywaniu warto\u015bci domy\u015blnych, wprowadzaniu walidacji dla parametr\u00f3w raportu i nowych p\u00f3l GUI, a\u017c po wprowadzanie parametr\u00f3w aplikacji, kt\u00f3re osadzaj\u0105 aplikacj\u0119 raportow\u0105 w menu kontekstowym jednostek biznesowych, zakres funkcji aplikacji raportowej mo\u017ce by\u0107 stopniowo dostosowywany do wymaga\u0144 dla zwyk\u0142ej aplikacji dialogowej, opisanych w podr\u0119czniku stylu.<\/p>\n<p>Nale\u017cy przy tym ka\u017cdorazowo rozwa\u017cy\u0107, jakie modyfikacje w pliku raportu aplikacja raportowa powinna by\u0107 w stanie automatycznie rozpoznawa\u0107 i obs\u0142ugiwa\u0107. Nak\u0142ad pracy na stworzenie drugiej aplikacji raportowej z nowym raportem dla nowych wymaga\u0144 jest na og\u00f3\u0142 mniejszy ni\u017c nak\u0142ad pracy na dostosowanie aplikacji raportowej do wszystkich ewentualno\u015bci modyfikacji w pliku raportu (np. nowe parametry, usuni\u0119te parametry, zmienione typy danych). Je\u015bli aplikacja pozwala na dostosowania parametr\u00f3w raportu, powinno to by\u0107 wyra\u017anie uj\u0119te w dokumentacji aplikacji.<\/p>\n<p><strong>Proste aplikacje raportowe<\/strong><\/p>\n<p>W tej sekcji opisano sze\u015b\u0107 przyk\u0142ad\u00f3w tworzenia aplikacji raportowej:<\/p>\n<ul>\n<li>Prosta aplikacja raportowa<\/li>\n<li>Ustawianie warto\u015bci domy\u015blnych dla parametr\u00f3w raportu<\/li>\n<li>Dodatkowe walidacje dla parametr\u00f3w raportu<\/li>\n<li>Aplikacja raportowa z w\u0142asnymi polami GUI<\/li>\n<li>Parametry raportu jako parametry aplikacji<\/li>\n<li>Parametry raportu jako parametry aplikacji<\/li>\n<\/ul>\n<p>Aby obs\u0142ugiwa\u0107 parametry aplikacji, w obiekcie deweloperskim nale\u017cy zarejestrowa\u0107 i stypizowa\u0107 parametry aplikacji. Pola GUI musz\u0105 by\u0107 zarejestrowane w <em>SelectionGroup<\/em> pod nazw\u0105 parametru aplikacji. Poniewa\u017c pola GUI s\u0105 standardowo ju\u017c zarejestrowane pod nazw\u0105 parametru raportu, najpierw nale\u017cy je usun\u0105\u0107, a nast\u0119pnie zarejestrowa\u0107 pod now\u0105 nazw\u0105. Ten przyk\u0142ad rozszerza przyk\u0142ad aplikacji raportowej o w\u0142asne pola GUI i dlatego wymaga tylko jednej dodatkowej metody:<\/p>\n<ul>\n<li><strong>Metoda prepareParameterFields()<\/strong><\/li>\n<\/ul>\n<p><b><\/b><em>protected void prepareParameterFields() { <\/em><br \/>\n<em>getSelectionGroup().remove(&#8222;Number&#8221;); <\/em><br \/>\n<em>getSelectionGroup().add(&#8222;PurchaseItem&#8221;, itemField); <\/em><br \/>\n<em>}<\/em><\/p>\n<ul>\n<li><strong>Dynamiczne okre\u015blanie raportu<\/strong> &#8212; p<span style=\"font-size: revert; color: initial;\">rzyk\u0142ady mo\u017cna r\u00f3wnie\u017c ze sob\u0105 \u0142\u0105czy\u0107. Nazwy sta\u0142ych s\u0105 w przyk\u0142adach podane w formie <em>Number<\/em>. W rzeczywistych aplikacjach raportowych dla nazw parametr\u00f3w aplikacji lub parametr\u00f3w raportu nale\u017cy zadeklarowa\u0107 sta\u0142e. Po przyk\u0142adach nast\u0119puje lista metod.<\/span><\/li>\n<\/ul>\n<p><strong>Z\u0142o\u017cone aplikacje raportowe<\/strong><\/p>\n<p>Przedstawione przyk\u0142ady u\u017cywaj\u0105 kontenera danych <em>ReportOutputData<\/em> bezpo\u015brednio do przechowywania warto\u015bci z p\u00f3l zapytania. Jest to wystarczaj\u0105ce w wi\u0119kszo\u015bci prostych przypadk\u00f3w. Jednak\u017ce, kontener danych<em> ReportOutputData<\/em> jest zaprojektowany do bezpo\u015bredniego przekazywania warto\u015bci do raportu lub do wirtualnych tabel i zazwyczaj u\u017cywa typu <em>String<\/em> do reprezentacji warto\u015bci.<\/p>\n<p>W bardziej z\u0142o\u017conych przypadkach warto u\u017cywa\u0107 w aplikacji raportowej w\u0142asnych kontener\u00f3w danych, aby za ich pomoc\u0105 zrealizowa\u0107 metody <em>dataFromUi(), dataToUi()<\/em> oraz walidacje danych wej\u015bciowych, np. GUID-\u00f3w kluczy obcych i uprawnie\u0144 zwi\u0105zanych z tre\u015bci\u0105. W takich przypadkach obliczanie raportu, a tak\u017ce inicjowanie i wype\u0142nianie kontenera danych <em>ReportOutputData<\/em> odbywa si\u0119 dopiero bezpo\u015brednio przed w\u0142a\u015bciwym wygenerowaniem, po pomy\u015blnym zako\u0144czeniu walidacji na konkretnym kontenerze danych. Przyk\u0142adem tego typu aplikacji raportowej jest aplikacja <em>Raport: Dzienniki zmian<\/em>\u00a0(<em>com.cisag.app.system.modificationjournal.ui.ModificationJournalReportOutput<\/em>).<\/p>\n<p>W niniejszym artykule nie zosta\u0142y r\u00f3wnie\u017c opisane og\u00f3lne mo\u017cliwo\u015bci ograniczania widoczno\u015bci aplikacji raportowych za pomoc\u0105 funkcji, konfiguracji lub przypisa\u0144 organizacyjnych. W tym celu dla aplikacji raportowych mo\u017cna wykorzysta\u0107 te same mo\u017cliwo\u015bci, co dla wszystkich innych aplikacji dialogowych, np. rejestracj\u0119 w klasie Java <em>com.cisag.app.multiorg.log.ApplicationRegistry<\/em>.<\/p>\n<h6 id=\"prosta-aplikacja-raportowa\" ><span class=\"ez-toc-section\" id=\"Prosta_aplikacja_raportowa\"><\/span>Prosta aplikacja raportowa<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Prosta aplikacja raportowa charakteryzuje si\u0119 tym, \u017ce nale\u017cy jej tylko przypisa\u0107 raport:<\/p>\n<ul>\n<li><strong>Metoda initModel() <\/strong>&#8212; raport musi zosta\u0107 przypisany poprzez wywo\u0142anie metody <em>initReport(String<\/em><br \/>\n<em>reportName)<\/em><\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected void initModel() { <\/em><br \/>\n<em>initReport(&#8222;com.cisag.app.purchasing.rpt.PurchaseItem&#8221;); <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<h6 id=\"ustawienie-wartosci-domyslnych-dla-parametrow-raportu\" ><span class=\"ez-toc-section\" id=\"Ustawienie_wartosci_domyslnych_dla_parametrow_raportu\"><\/span>Ustawienie warto\u015bci domy\u015blnych dla parametr\u00f3w raportu<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Aplikacja raportowa, kt\u00f3ra uzupe\u0142nia warto\u015bci domy\u015blne w zale\u017cno\u015bci od kontekstu, musi zaimplementowa\u0107 nast\u0119puj\u0105ce metody:<\/p>\n<ul>\n<li><strong>Metoda initModel() <\/strong>&#8212; raport musi zosta\u0107 przypisany poprzez wywo\u0142anie metody <em>initReport(String<\/em><br \/>\n<em>reportName)<\/em><\/li>\n<li><strong>Metoda applyDefaults()<\/strong> &#8212; w <em>ReportOuputData<\/em> ustawiane s\u0105 warto\u015bci domy\u015blne dla parametr\u00f3w raportu<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected void applyDefaults(){ <\/em><br \/>\n<em>getReportOutputData().setStringSelection(&#8222;Number&#8221;, &#8222;A*&#8221;); <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<h6 id=\"dodatkowe-walidacje-dla-parametrow-raportu\" ><span class=\"ez-toc-section\" id=\"Dodatkowe_walidacje_dla_parametrow_raportu\"><\/span>Dodatkowe walidacje dla parametr\u00f3w raportu<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<ul>\n<li><strong>Metoda initModel()<\/strong> &#8212; raport musi zosta\u0107 przypisany poprzez wywo\u0142anie metody <em>initReport(String<\/em><br \/>\n<em>reportName)<\/em><\/li>\n<li><strong>Metoda initUserInterface()<\/strong> &#8212; po wywo\u0142aniu metody <em>super.initUserInterface()<\/em> nale\u017cy zarejestrowa\u0107 <em>MessageIds<\/em> w polach GUI.<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected void initUserInterface() { <\/em><br \/>\n<em>super.initUserInterface(); <\/em><br \/>\n<em>itemField.registerMessage(1); <\/em><br \/>\n<em>}<\/em><\/div><\/section>\n<ul>\n<li><strong>Metoda createParameterField(ReportOutputParameterData parameterData)<\/strong> &#8212; pole GUI jest tworzone przez wywo\u0142anie metody <em>super.createParameterField(parameterData)<\/em>. Je\u015bli jest to pole GUI, dla kt\u00f3rego ma zosta\u0107 przeprowadzona dodatkowa walidacja, jest ono przypisywane do zmiennej.<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected Field createParameterField(ReportOutputParameterData <\/em><br \/>\n<em>parameterData) { <\/em><br \/>\n<em>Field result = super.createParameterField(parameterData); <\/em><br \/>\n<em>if (parameterData.getName().equals(&#8222;Number&#8221;)){ <\/em><br \/>\n<em>itemField = result; <\/em><br \/>\n<em>} <\/em><br \/>\n<em>return result; <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<ul>\n<li><strong>Metoda validateReportParameters()<\/strong> &#8212; dodatkowe walidacje s\u0105 tworzone w tej metodzie<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected boolean validateReportParameters() { <\/em><br \/>\n<em>boolean result = true;<\/em><br \/>\n<em>ReportOutputData data = getReportOutputData(); <\/em><br \/>\n<em>if (!data.getStringSelection(&#8222;Number&#8221;).startsWith(&#8222;A&#8221;)) { <\/em><br \/>\n<em>result = false; <\/em><br \/>\n<em>mm.setProgramMessageId(1); <\/em><br \/>\n<em>mm.sendMessage\u2026 <\/em><br \/>\n<em>} <\/em><br \/>\n<em>return result; <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<h6 id=\"aplikacja-raportowa-z-wlasnymi-polami-gui\" ><span class=\"ez-toc-section\" id=\"Aplikacja_raportowa_z_wlasnymi_polami_GUI\"><\/span>Aplikacja raportowa z w\u0142asnymi polami GUI<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Je\u015bli ma by\u0107 u\u017cywane inne pole GUI ni\u017c pole GUI ze standardowej implementacji, nale\u017cy zaimplementowa\u0107 nast\u0119puj\u0105ce metody:<\/p>\n<ul>\n<li><strong>Metoda initModel()<\/strong> &#8212; nale\u017cy przypisa\u0107 raport poprzez wywo\u0142anie metody<em> initReport(String<\/em><br \/>\n<em>reportName)<\/em><\/li>\n<li><strong>Metoda applyDefaults()<\/strong> &#8212; w <em>ReportOuputData<\/em> ustawiane s\u0105 warto\u015bci domy\u015blne dla parametr\u00f3w raportu<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected void applyDefaults(){ <\/em><br \/>\n<em>getReportOutputData().setStringSelection(&#8222;Number&#8221;, &#8222;A*&#8221;); <\/em><br \/>\n<em>}<\/em><\/div><\/section>\n<ul>\n<li><strong>Metoda createParameterField(ReportOutputParameterData parameterData)<\/strong> &#8212; dla jednostki biznesowej tworzone jest w\u0142asne pole GUI. Samodzielnie utworzone pole jest przypisywane do zmiennej. Wszystkie inne pola GUI s\u0105 tworzone przez wywo\u0142anie metody <em>super.createParameterField(parameterData)<\/em>.<\/li>\n<\/ul>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><em>protected Field createParameterField(ReportOutputParameterData <\/em><br \/>\n<em>parameterData) { <\/em><br \/>\n<em>Field result =null; <\/em><br \/>\n<em>if (parameterData.getName().equals(&#8222;Number&#8221;)){ <\/em><br \/>\n<em>itemField = new ItemField( parameterData.getFieldGuid(), <\/em><br \/>\n<em>parameterData.getFieldPath() ); <\/em><\/p>\n<p><em>itemField.setSelectionMode(parameterData.isSelectionMode()); <\/em><br \/>\n<em>} <\/em><br \/>\n<em>else { <\/em><br \/>\n<em>result = super.createParameterField(parameterData); <\/em><br \/>\n<em>} <\/em><br \/>\n<em>return result; <\/em><br \/>\n<em>}<\/em> <\/div><\/section>\n<ul>\n<li><strong>Metoda dataFromUi()<\/strong> &#8212; warto\u015b\u0107 z p\u00f3l GUI musi zosta\u0107 skopiowana do kontenera danych<\/li>\n<li><strong>Metoda dataToUi()<\/strong><b> &#8212;<\/b> warto\u015b\u0107 z kontenera danych musi zosta\u0107 skopiowana do p\u00f3l GUI<\/li>\n<\/ul>\n<h6 id=\"parametry-raportu-jako-parametry-aplikacji\" ><span class=\"ez-toc-section\" id=\"Parametry_raportu_jako_parametry_aplikacji\"><\/span>Parametry raportu jako parametry aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Aby obs\u0142ugiwa\u0107 parametry aplikacji, w obiekcie deweloperskim nale\u017cy zarejestrowa\u0107 i stypizowa\u0107 parametry aplikacji. Pola GUI musz\u0105 by\u0107 zarejestrowane w <em>SelectionGroup<\/em>\u00a0pod nazw\u0105 parametru aplikacji. Poniewa\u017c pola GUI s\u0105 standardowo ju\u017c zarejestrowane pod nazw\u0105 parametru raportu, najpierw nale\u017cy je usun\u0105\u0107, a nast\u0119pnie zarejestrowa\u0107 pod now\u0105 nazw\u0105. Ten przyk\u0142ad rozszerza przyk\u0142ad aplikacji raportowej o w\u0142asne pola GUI, dlatego wymaga tylko jednej dodatkowej metody:<\/p>\n<ul>\n<li><strong>Metoda prepareParameterFields()<\/strong><\/li>\n<\/ul>\n<p><em>protected void prepareParameterFields() { <\/em><br \/>\n<em>getSelectionGroup().remove(&#8222;Number&#8221;); <\/em><br \/>\n<em>getSelectionGroup().add(&#8222;PurchaseItem&#8221;, itemField); <\/em><br \/>\n<em>}<\/em><\/p>\n<h6 id=\"dynamiczne-okreslanie-raportu\" ><span class=\"ez-toc-section\" id=\"Dynamiczne_okreslanie_raportu\"><\/span>Dynamiczne okre\u015blanie raportu<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Ten przyk\u0142ad opisuje, jak nale\u017cy stworzy\u0107 aplikacj\u0119 raportow\u0105, kt\u00f3ra okre\u015bla raport dopiero na podstawie danych wprowadzonych przez u\u017cytkownika. Wszystkie u\u017cywane raporty maj\u0105 przy tym te same parametry.<\/p>\n<ul>\n<li><strong>Metoda initModel()<\/strong> &#8212; w <em>ReportOutputData<\/em> parametry musz\u0105 by\u0107 zdefiniowane przez wywo\u0142anie metody <em>setPath(String parameterName, String absPath)<\/em>. Alternatywnie, wyr\u00f3\u017cniony raport mo\u017ce by\u0107 ustawiony jako reprezentant poprzez wywo\u0142anie metody <em>initReport(String reportName)<\/em>.<\/li>\n<li><strong>Metoda applyDefaults()<\/strong> &#8212; przypisywanie warto\u015bci domy\u015blnych<\/li>\n<li><strong>Metoda dataFromUi() <\/strong>&#8212; warto\u015b\u0107 z pola GUI musi zosta\u0107 skopiowana do kontenera danych<\/li>\n<li><strong>Metoda dataToUi()<\/strong> &#8212; warto\u015b\u0107 z kontenera danych musi zosta\u0107 skopiowana do pola GUI<\/li>\n<li><strong>Metoda validateReportParameters()<\/strong> &#8212; nale\u017cy ustawi\u0107 raport, kt\u00f3ry faktycznie ma zosta\u0107 wykonany. Dodatkowo trzeba zdefiniowa\u0107 relacje mi\u0119dzy polami GUI a parametrem raportu. Do tego celu dost\u0119pne s\u0105 metody <em>initReport(String reportName)<\/em> i <em>registerFieldMessages(String reportParameterName, VisualElement element)<\/em>.<\/li>\n<\/ul>\n<h6 id=\"metody-klasy-java-reportoutputapplication\" ><span class=\"ez-toc-section\" id=\"Metody_klasy_Java_ReportOutputApplication\"><\/span>Metody klasy Java ReportOutputApplication<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Poni\u017cej znajduje si\u0119 alfabetyczna lista metod i ich znaczenia.<\/p>\n<p><strong>Metoda applyDefaults()<\/strong><\/p>\n<p>S\u0142u\u017cy do inicjalizacji warto\u015bci parametr\u00f3w. Warto\u015bci musz\u0105 by\u0107 ustawiane w kontenerze danych, a nie w polach GUI. Dost\u0119p do standardowego kontenera danych mo\u017cna uzyska\u0107 za pomoc\u0105 metody <em>getReportOutputData()<\/em>. Je\u015bli u\u017cywany jest w\u0142asny kontener danych, warto\u015bci nale\u017cy ustawi\u0107 w nim, a nast\u0119pnie skopiowa\u0107 je do standardowego kontenera danych w metodzie <em>validateReportParameters()<\/em>.<\/p>\n<p><strong>Metoda createParameterField(ReportOutputParameterData parameterData)<\/strong><\/p>\n<p>Jest wywo\u0142ywana przez metod\u0119 <em>initUserInterface()<\/em> w celu utworzenia p\u00f3l GUI. Je\u015bli dla danego parametru ma zosta\u0107 utworzone inne pole GUI, mo\u017cna nadpisa\u0107 t\u0119 metod\u0119. Dla wszystkich p\u00f3l GUI, kt\u00f3re s\u0105 tworzone przez standardow\u0105 implementacj\u0119, kontener danych jest inicjalizowany. Do tworzenia p\u00f3l GUI mo\u017cna wzi\u0105\u0107 pod uwag\u0119 GUID, opis danych logicznego typu danych oraz prze\u0142\u0105cznik trybu selekcji z obiektu <em>ReportOutputParameterData<\/em>,\u00a0aby aplikacja automatycznie dostosowywa\u0142a si\u0119 do modyfikacji raportu. Je\u015bli tworzone s\u0105 w\u0142asne pola GUI, powinny one posiada\u0107 statyczne GUID-y w kodzie \u017ar\u00f3d\u0142owym Java, poniewa\u017c pozostan\u0105 one niezmienne podczas dostosowywania raportu, a tym samym np. ju\u017c zarejestrowane poprawki element\u00f3w interfejsu b\u0119d\u0105 nadal dzia\u0142a\u0107. Pole GUI jest polem obowi\u0105zkowym, je\u015bli parametr raportu jest parametrem obowi\u0105zkowym lub pole GUI jest oznaczone jako pole obowi\u0105zkowe.<\/p>\n<p><strong>Metoda createReportTitleField()<\/strong><\/p>\n<p>Je\u015bli nie s\u0105 u\u017cywane standardowe mechanizmy do tworzenia p\u00f3l GUI, za pomoc\u0105 tej metody mo\u017cna utworzy\u0107 pole GUI dla tytu\u0142u. Pole GUI jest automatycznie inicjowane.<\/p>\n<p><strong>Metoda dataFromUi()<\/strong><\/p>\n<p>S\u0142u\u017cy do kopiowania danych wprowadzonych przez u\u017cytkownika z p\u00f3l GUI do kontenera danych.<\/p>\n<p><strong>Metoda dataToUi()<\/strong><\/p>\n<p>Ustawia warto\u015bci z kontenera danych w polach GUI.<\/p>\n<p><strong>Metoda getReportOutputData()<\/strong><\/p>\n<p>Metoda dost\u0119pu do kontenera danych, kt\u00f3ry zawiera parametry raportu i ich warto\u015bci.<\/p>\n<p><strong>Metoda getReportParametersView()<\/strong><\/p>\n<p>Metoda dost\u0119pu do <em>View<\/em>, w kt\u00f3rym dodawane s\u0105 wszystkie pola GUI. <em>View<\/em> ma jednokolumnowy <em>StandardLayout<\/em>.<\/p>\n<p><strong>Metoda initModel()<\/strong><\/p>\n<p>Podczas inicjalizacji aplikacji mo\u017cna ustawi\u0107 raport poprzez nadpisanie tej metody. Je\u015bli raport zostanie ustawiony przez wywo\u0142anie metody <em>initReport(String reportName)<\/em>, w metodzie <em>initUserInterface()<\/em> pola GUI s\u0105 automatycznie tworzone.<\/p>\n<p><strong>Metoda initReport(String reportName)<\/strong><\/p>\n<p>Poprzez wywo\u0142anie tej metody, raport jest przypisywany do wykonania. Istniej\u0105 dwa momenty, w kt\u00f3rych raport mo\u017ce zosta\u0107 przypisany. Pierwszym momentem jest inicjalizacja aplikacji i mo\u017cna na ni\u0105 wp\u0142yn\u0105\u0107 poprzez nadpisanie metody <em>initModel().<\/em> Najp\u00f3\u017aniej po pomy\u015blnym sprawdzeniu warto\u015bci w metodzie <em>validateReportParameters()<\/em> raport musi zosta\u0107 przypisany, a nast\u0119pnie warto\u015bci musz\u0105 zosta\u0107 ustawione w kontenerze danych <em>ReportOutputData<\/em>.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Nale\u017cy pami\u0119ta\u0107, \u017ce je\u015bli istnieje dostosowany raport typu <em>Obiekt systemowy<\/em>, zostanie on u\u017cyty w czasie dzia\u0142ania zamiast przekazanego raportu. Informacja o tym, kt\u00f3ry raport faktycznie zosta\u0142 otwarty, jest zwracana przez metod\u0119 <em>initReport(String)<\/em> w formie komunikatu informacyjnego.<\/div><\/section>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Nale\u017cy pami\u0119ta\u0107, \u017ce metoda <em>initReport(String)<\/em> mo\u017ce r\u00f3wnie\u017c zwraca\u0107 komunikaty o b\u0142\u0119dach, np. w przypadku gdy raport nie istnieje lub jest b\u0142\u0119dny. W takim przypadku, je\u015bli to konieczne, aplikacja raportowa musi odpowiednio zareagowa\u0107, aby unikn\u0105\u0107 kolejnych b\u0142\u0119d\u00f3w i wyj\u0105tk\u00f3w.<\/div><\/section>\n<p><strong>Metoda initUserInterface()<\/strong><\/p>\n<p>Ta metoda jest wywo\u0142ywana w celu utworzenia graficznego interfejsu u\u017cytkownika. Standardowa implementacja tworzy pola GUI dla wszystkich parametr\u00f3w raportu, kt\u00f3ry zosta\u0142 przypisany w metodzie <em>initModel()<\/em>. Pola GUI s\u0105 tworzone w kolejno\u015bci parametr\u00f3w raportu. Tworzenie odbywa si\u0119 w trzech krokach. Najpierw wszystkie pola GUI s\u0105 tworzone przez wywo\u0142anie metody <em>createParameterField(ReportOutputParameterData parameterData)<\/em>. Wszystkie utworzone pola GUI s\u0105 dodawane do <em>SelectionGroup<\/em> aplikacji, pod nazw\u0105 parametru raportu. Dodatkowo dla ka\u017cdego pola GUI wywo\u0142ywana jest metoda <em>registerFieldMessages(StringreportParameterName, VisualElement element).<\/em> W drugim kroku wywo\u0142ywana jest metoda <em>prepareParameterFields()<\/em> w celu zainicjowania p\u00f3l GUI. Nast\u0119pnie pola GUI s\u0105 dodawane do <em>View.<\/em><\/p>\n<p>Do tej metody mo\u017cna r\u00f3wnie\u017c dodawa\u0107 w\u0142asne akcje do standardowego paska narz\u0119dzi. Istniej\u0105ce akcje na standardowym pasku narz\u0119dzi nie mog\u0105 by\u0107 zmieniane przez podklasy.<\/p>\n<p><strong>Metoda performActionInternal(Action action)<\/strong><\/p>\n<p>Ta metoda jest wywo\u0142ywana, gdy metoda<em> perfomAction(Action action)<\/em> zosta\u0142a wywo\u0142ana dla akcji, kt\u00f3ra nie jest obs\u0142ugiwana w klasach bazowych. S\u0105 to na przyk\u0142ad w\u0142asne akcje w standardowym pasku narz\u0119dzi.<\/p>\n<p><strong>Metoda prepareParameterFields()<\/strong><\/p>\n<p>Poprzez nadpisanie tej metody mo\u017cna dokona\u0107 inicjalizacji p\u00f3l GUI przed ich dodaniem do <em>View<\/em>. Mo\u017cna np. powi\u0105za\u0107 ze sob\u0105 pola GUI dla typu zlecenia i numeru zlecenia. Dodatkowo mo\u017cna zmieni\u0107 rejestracj\u0119 pola GUI w <em>SelectionGroup.<\/em><\/p>\n<p><strong>Metoda registerFieldMessages(StringreportParameterName, VisualElement element)<\/strong><\/p>\n<p>W tej metodzie parametr raportu jest powi\u0105zany z polem interfejsu graficznego (GUI). Do tego pola GUI do\u0142\u0105czane s\u0105 komunikaty o b\u0142\u0119dach podczas walidacji parametr\u00f3w raportu w metodzie <em>validateReportParameters()<\/em>. U\u017cywane przez kontrole parametr\u00f3w raportu <em>MessageIds<\/em> p\u00f3l GUI zaczynaj\u0105 si\u0119 od 4200.<\/p>\n<p><strong>Metoda setReportParameters(CisParameterList pl)<\/strong><\/p>\n<p>Ta metoda jest wywo\u0142ywana podczas otwierania aplikacji raportowej, je\u015bli aplikacja zosta\u0142a uruchomiona z parametrami. Poprzez nadpisanie tej metody mo\u017cna na przyk\u0142ad przenie\u015b\u0107 warto\u015bci z listy parametr\u00f3w do specyficznych p\u00f3l GUI aplikacji. Po wywo\u0142aniu metody <em>setReportParameters()\u00a0<\/em>wywo\u0142ywana jest metoda <em>dataFromUi()<\/em>. Standardowa implementacja ustawia warto\u015bci parametr\u00f3w za pomoc\u0105 <em>SelectionGroup<\/em>. Je\u015bli metoda jest nadpisana, nale\u017cy upewni\u0107 si\u0119, \u017ce wszystkie warto\u015bci parametr\u00f3w s\u0105 kopiowane do odpowiednich p\u00f3l GUI.<\/p>\n<p><strong>Metoda validateReportParameters()<\/strong><\/p>\n<p>W tej metodzie mo\u017cna sprawdzi\u0107 dane wprowadzone przez u\u017cytkownika. Je\u015bli w metodzie <em>initModel()<\/em> nie przypisano raportu, nale\u017cy to zrobi\u0107 w <em>validateReportParameters().<\/em> Dodatkowo, trzeba okre\u015bli\u0107, w kt\u00f3rym polu interfejsu graficznego maj\u0105 by\u0107 wy\u015bwietlane komunikaty o b\u0142\u0119dach dla parametr\u00f3w raportu. Odbywa si\u0119 to poprzez wywo\u0142anie metody <em>registerFieldMessages(StringreportParameterName, VisualElement element)<\/em>.<\/p>\n<h4 id=\"testowanie-aplikacji-raportu\" ><span class=\"ez-toc-section\" id=\"Testowanie_aplikacji_raportu\"><\/span>Testowanie aplikacji raportu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aby przetestowa\u0107 aplikacj\u0119 raportow\u0105, mo\u017cna j\u0105 otworzy\u0107 tak jak ka\u017cd\u0105 inn\u0105 aplikacj\u0119 dialogow\u0105, z poziomu nawigatora lub z aplikacji <em>Obiekty deweloperskie<\/em>. Nale\u017cy pami\u0119ta\u0107, \u017ce je\u015bli istnieje dostosowany raport typu <em>Obiekt systemowy<\/em>, zostanie on u\u017cyty w czasie dzia\u0142ania zamiast przekazanego raportu. Informacja o tym, kt\u00f3ry raport faktycznie zosta\u0142 otwarty, jest zwracana przez metod\u0119 <em>initReport(String)<\/em> w formie komunikatu informacyjnego.<\/p>\n<h4 id=\"dokumentowanie-aplikacji-raportu\" ><span class=\"ez-toc-section\" id=\"Dokumentowanie_aplikacji_raportu\"><\/span>Dokumentowanie aplikacji raportu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aby udokumentowa\u0107 aplikacj\u0119 raportow\u0105, nale\u017cy utworzy\u0107 obiekt deweloperski typu <em>Obiekt pomocy<\/em>. Obiekt pomocy powinien mie\u0107 tak\u0105 sam\u0105 nazw\u0119 jak aplikacja raportowa. Aplikacja raportowa musi by\u0107 przypisana do obiektu pomocy na zak\u0142adce <em>Obiekty deweloperskie<\/em> z wag\u0105 <em>Standard<\/em>.<\/p>\n<\/div>\n<\/div>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9681","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-podreczniki-referencji"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9681","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=9681"}],"version-history":[{"count":54,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9681\/revisions"}],"predecessor-version":[{"id":36728,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9681\/revisions\/36728"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}