{"id":9675,"date":"2025-05-13T14:29:08","date_gmt":"2025-05-13T12:29:08","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9675"},"modified":"2025-05-13T14:32:15","modified_gmt":"2025-05-13T12:32:15","slug":"widoki-obiektow","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/","title":{"rendered":"Widoki obiekt\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\/widoki-obiektow\/#Wprowadzenie\" >Wprowadzenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Opis\" >Opis<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Widoki_obiektow\" >Widoki obiekt\u00f3w<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Definicja_widoku_obiektu\" >Definicja widoku obiektu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Definicja_atrybutow\" >Definicja atrybut\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Definicja_relacji\" >Definicja relacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Rozszerzenie_poprzez_interfejsy_widokudostepu\" >Rozszerzenie poprzez interfejsy widoku\/dost\u0119pu<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Dostep_do_atrybutow_i_relacji\" >Dost\u0119p do atrybut\u00f3w i relacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Nowe_metody\" >Nowe metody<\/a><\/li><\/ul><\/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\/widoki-obiektow\/#Ograniczony_dostep\" >Ograniczony dost\u0119p<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Implementacja_obiektu_DataObject\" >Implementacja obiektu DataObject<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Atrybuty_wirtualne_w_DataObject\" >Atrybuty wirtualne w DataObject<\/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\/widoki-obiektow\/#Relacje_w_DataObject\" >Relacje w DataObject<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Atrybuty_przetlumaczalne_NLS\" >Atrybuty przet\u0142umaczalne (NLS)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Generowanie_klas_Java\" >Generowanie klas Java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#CisDataViewManager\" >CisDataViewManager<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Tworzenie_widokow_obiektow\" >Tworzenie widok\u00f3w obiekt\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Zapytanie_o_metadane_widokow_obiektow\" >Zapytanie o metadane widok\u00f3w obiekt\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Kopiowanie_atrybutow\" >Kopiowanie atrybut\u00f3w<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Sciezki\" >\u015acie\u017cki<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Rozszerzenie_widoku_obiektu\" >Rozszerzenie widoku obiektu<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Definicja_rozszerzenia_warstwy_obiektow\" >Definicja rozszerzenia warstwy obiekt\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Implementacja_rozszerzenia_DataExtension\" >Implementacja rozszerzenia DataExtension<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#DataDescriptionModification\" >DataDescriptionModification<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#DataDescriptionModification_dla_biezacego_widoku_obiektu\" >DataDescriptionModification dla bie\u017c\u0105cego widoku obiektu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#DataDescriptionModification_dla_zdalnych_widokow_obiektow\" >DataDescriptionModification dla zdalnych widok\u00f3w obiekt\u00f3w<\/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-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Dalsze_opcje\" >Dalsze opcje<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/widoki-obiektow\/#Komponenty_GUI\" >Komponenty GUI<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jednostki biznesowe s\u0105 zarz\u0105dzane w z\u0142o\u017conych kontenerach w systemie. Kontenery te umo\u017cliwiaj\u0105 odczyt i zapis wszystkich danych encji. Dost\u0119p do zapisu obejmuje r\u00f3wnie\u017c z\u0142o\u017cone operacje, takie jak dodawanie lub usuwanie nowych w\u0142a\u015bciwo\u015bci. Kontenery te okre\u015blane s\u0105 poni\u017cej jako encje APP.<\/p>\n<p>Encje APP maj\u0105 szeroki interfejs z bogatym zakresem funkcji. Istnieje tylko kilka ogranicze\u0144 dost\u0119pu w celu ochrony niekt\u00f3rych funkcji lub danych przed u\u017cytkownikiem encji APP.<\/p>\n<p>Hooki wymagaj\u0105 kontener\u00f3w danych do komunikacji z ich implementacj\u0105. Te kontenery danych powinny mie\u0107 tylko ograniczony interfejs:<\/p>\n<ul>\n<li>cz\u0119sto dozwolony jest tylko dost\u0119p do odczytu<\/li>\n<li>obliczone atrybuty s\u0105 cz\u0119sto dost\u0119pne tylko podczas zapisywania<\/li>\n<\/ul>\n<p>Encje APP reprezentuj\u0105 przej\u015bciowy stan aplikacji, kt\u00f3re maj\u0105 zosta\u0107 rozszerzone przez hooki i nie s\u0105 odpowiednie dla hook\u00f3w ze wzgl\u0119du na szeroki interfejs.<\/p>\n<p>Widoki obiekt\u00f3w reprezentuj\u0105 &#8222;widok&#8221; encji APP. Widoki obiekt\u00f3w s\u0105 otoczk\u0105 wok\u00f3\u0142 cz\u0119\u015bci encji APP. Widok obiektu sam w sobie nie przechowuje \u017cadnych danych. Og\u00f3lnie rzecz bior\u0105c, ka\u017cdy dost\u0119p do odczytu i zapisu widoku obiektu jest obs\u0142ugiwany przez powi\u0105zany obiekt biznesowy, chyba \u017ce w opisie widoku obiektu zdefiniowano specjaln\u0105 obs\u0142ug\u0119.<\/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<\/ul>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ka\u017cdy widok obiektu jest oparty na obiekcie biznesowym. Widok obiektu mo\u017ce zawiera\u0107 atrybuty i relacje z tego obiektu biznesowego, a tak\u017ce wirtualne atrybuty i relacje.<\/p>\n<p>W czasie wykonywania widok obiektu sk\u0142ada si\u0119 z nast\u0119puj\u0105cych komponent\u00f3w:<\/p>\n<ul>\n<li><strong>DataView<\/strong> &#8211; interfejs dost\u0119pu do odczytu danych widoku obiektu<\/li>\n<li><strong>DataAccess<\/strong> &#8211; rozszerza interfejs DataView o dost\u0119p do zapisu danych widoku obiektu. W przypadku DataAccess rozr\u00f3\u017cnia si\u0119 dost\u0119p <em>Ograniczony<\/em> i <em>Nieograniczony<\/em>. Dost\u0119p <em>Ograniczony<\/em> umo\u017cliwia dost\u0119p do w\u0142a\u015bciwo\u015bci widoku obiektu, kt\u00f3re zosta\u0142y dodane przez rozszerzenia obiekt\u00f3w biznesowych lub rozszerzenia widoku obiektu w tym samym systemie programowania.<\/li>\n<li><strong>DataObject<\/strong> &#8211; zapewnia dost\u0119p do obiektu biznesowego encji APP dla DataView i DataAccess.<\/li>\n<\/ul>\n<p>DataView i DataAccess tworz\u0105 interfejs dost\u0119pu do obiektu biznesowego w encji APP. Dost\u0119p do atrybut\u00f3w i relacji jest realizowany przez obiekt biznesowy, je\u015bli to mo\u017cliwe. Logika ta musi by\u0107 zakodowana w DataObject tylko wtedy, gdy r\u00f3\u017cni si\u0119 od obiektu biznesowego.<\/p>\n<p>Widok obiektu mo\u017cna utworzy\u0107 tylko w tym samym systemie programowania, co przypisany obiekt biznesowy.<\/p>\n<p>Widok obiektu mo\u017ce zosta\u0107 uzupe\u0142niony o nowe atrybuty i relacje w dalszych systemach programowania lub systemach programowania aplikacji z rozszerzeniem widoku obiektu.<\/p>\n<h4 id=\"widoki-obiektow\" ><span class=\"ez-toc-section\" id=\"Widoki_obiektow\"><\/span>Widoki obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Opis widoku obiektu jest zapisywany jako obiekt deweloperski XML. Struktura pliku XML zosta\u0142a przedstawiona na poni\u017cszym przyk\u0142adzie. Tabelaryczny opis element\u00f3w u\u017cytych w tym przyk\u0142adzie mo\u017cna znale\u017a\u0107 w kolejnych rozdzia\u0142ach.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">XML dla widoku obiektu com.cisag.app.general.item.model.Item dla elementu m\u00f3g\u0142by mie\u0107 nast\u0119puj\u0105c\u0105 zawarto\u015b\u0107:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?xml version=\u201d1.0\u2033 encoding=\u201dutf-8\u2033?&gt;\n\n&lt;dataview\u00a0xmlns:xsi=\u201dhttp:\/\/www.w3.org\/2001\/XMLSchema-instance\u201d\n\nxsi:noNamespaceSchemaLocation=\u201dDataView.xsd\u201d&gt;\n\n&lt;object&gt;\n\ncom.cisag.app.general.obj.Item\n\n&lt;\/object&gt;\n\n&lt;implementation&gt;\n\ncom.cisag.app.general.item.log.ItemObject\n\n&lt;\/implementation&gt;\n\n&lt;javadoc&gt;\n\nWidok obiektu dla obiektu biznesowego Item w aplikacji Artyku\u0142y. Widok obiektu jest zmienny tylko dla podstawowego widoku artyku\u0142u. W widokach specyficznych dla obszar\u00f3w u\u017cywany jest wy\u0142\u0105cznie niemodyfikowalny DataView.\n\n\n&lt;\/javadoc&gt;\n\n&lt;viewinterface&gt;\n\ncom.cisag.app.general.model.MasterDataView\n\n&lt;\/viewinterface&gt;\n\n&lt;viewinterfacesuffix&gt;\n\ncom.cisag.app.general.model.ItemView\n\n&lt;\/viewinterfacesuffix&gt;\n\n&lt;!-- Atrybut \"guid\" nie mo\u017ce zosta\u0107 zmieniony i --&gt;\n\n&lt;!-- powinien mie\u0107 inn\u0105 etykiet\u0119 i dokument Java. --&gt;\n\n&lt;attribute property=\"READ_ONLY\"&gt;\n\n&lt;name&gt;guid&lt;\/name&gt;\n\n&lt;datatype&gt;\n\ncom.cisag.app.general.model.ItemViewGuid\n\n&lt;\/datatype&gt;\n\n&lt;javadoc&gt;\n\n\nAtrybut \"guid\" jest cz\u0119\u015bci\u0105 klucza g\u0142\u00f3wnego pliku\n\nItem. Ten identyfikator jest cz\u0119\u015bci\u0105 klucza g\u0142\u00f3wnego danych\n\nspecyficznych dla frameworka danych elementu.\n\n&lt;\/javadoc&gt;\n\n&lt;\/atrybut&gt;\n\n&lt;!-- Relacja ProductionItems nie powinna by\u0107 wy\u015bwietlana --&gt;.\n\n&lt;!-- powinna by\u0107 wy\u015bwietlana. --&gt;\n\n&lt;relation property=\"EXCLUDED\"&gt;\n\n&lt;name&gt;ProductionItems&lt;\/name&gt;\n\n&lt;\/relation&gt;\n\n&lt;!-- Relacja DefaultVariantItem powinna by\u0107 ustawiona na --&gt;\n\n&lt;!-- widok obiektu tylko do odczytu elementu. --&gt;\n\n&lt;relation property=\"READ_ONLY\"&gt;\n\n&lt;name&gt;DefaultVariantItem&lt;\/name&gt;\n\n&lt;targetview&gt;\n\ncom.cisag.app.general.model.Item\n\n&lt;\/targetview&gt;\n\n&lt;\/relation&gt;\n\n\n&lt;!-- Wirtualna relacja 1:n dla alternatywy --&gt;\n\n&lt;!-- Artyku\u0142. -&gt;\n\n&lt;virtualrelation property=\"READ_ONLY\" cardinality=\"ONE_MANY\"&gt;\n\n&lt;name&gt;AlternativeItems&lt;\/name&gt;\n\n&lt;targetview&gt;\n\ncom.cisag.app.general.model.AlternativeItem\n\n&lt;\/targetview&gt;\n\n&lt;\/virtualrelation&gt;\n\n&lt;\/dataview&gt;<\/pre>\n<p><\/div><\/section>\n<h5 id=\"definicja-widoku-obiektu\" ><span class=\"ez-toc-section\" id=\"Definicja_widoku_obiektu\"><\/span>Definicja widoku obiektu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Widok obiektu jest opisany przez dok\u0142adnie jeden element <em>dataview<\/em>. Element ten zawiera kolejne elementy. S\u0105 one podzielone na nast\u0119puj\u0105ce grupy:<\/p>\n<ul>\n<li>dane dotycz\u0105ce widoku obiektu i jego interfejs\u00f3w<\/li>\n<li>dane dotycz\u0105ce atrybut\u00f3w widoku obiektu<\/li>\n<li>dane dotycz\u0105ce relacji widoku obiektu<\/li>\n<\/ul>\n<div>Poni\u017csza tabela wyja\u015bnia wszystkie elementy opisuj\u0105ce dane widoku obiektu i jego interfejs\u00f3w:<\/div>\n<div><\/div>\n<div>\n<table style=\"width: 100%; height: 1018px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\"><strong>Element<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 93px;\">\n<td style=\"height: 93px; border-style: outset;\"><strong>object<\/strong><\/td>\n<td style=\"height: 93px; border-style: outset;\">Pe\u0142na nazwa obiektu biznesowego wraz z przestrzeni\u0105 nazw. Ka\u017cdy widok obiektu nale\u017cy dok\u0142adnie do jednego obiektu biznesowego. Ten element jest obowi\u0105zkowy.<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"height: 93px; border-style: outset;\"><strong>implementation<\/strong><\/td>\n<td style=\"height: 93px; border-style: outset;\">Pe\u0142na nazwa klasy obiektu danych dla widoku obiektu wraz z przestrzeni\u0105 nazw. Podana klasa musi by\u0107 pochodn\u0105 klasy DataObject. Ten element jest obowi\u0105zkowy.<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"height: 93px; border-style: outset;\"><strong>javadoc<\/strong><\/td>\n<td style=\"height: 93px; border-style: outset;\">JavaDoc do komentarza klasy dla DataView powi\u0105zanego z widokiem obiektu. JavaDoc musi opisywa\u0107 zadania oraz, w razie potrzeby, ograniczenia widoku obiektu.<\/td>\n<\/tr>\n<tr style=\"height: 113px;\">\n<td style=\"height: 113px; border-style: outset;\"><strong>viewinterface<\/strong><\/td>\n<td style=\"height: 113px; border-style: outset;\">Nazwa interfejsu Java, kt\u00f3ry rozszerza DataView. Opcjonalny interfejs widoku (View Interface) mo\u017ce rozszerza\u0107 DataView o dodatkowe metody lub umo\u017cliwia\u0107 dost\u0119p do atrybut\u00f3w i relacji niezale\u017cnie od DataView.Wi\u0119cej informacji znajduje si\u0119 w rozdziale <em><a href=\"#rpiwd\">Rozszerzenie poprzez interfejsy widoku\/dost\u0119pu<\/a><\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset;\"><strong>viewinterfacesuffix<\/strong><\/td>\n<td style=\"height: 70px; border-style: outset;\">Je\u015bli interfejs widoku (View Interface) jest generyczny, mo\u017cna poda\u0107 sufiks w celu okre\u015blenia parametr\u00f3w generycznych interfejsu.Nie trzeba podawa\u0107 zewn\u0119trznych znak\u00f3w \u201e&lt;\u201d i \u201e&gt;\u201d. Je\u015bli w parametrze generycznym jest potrzeba \u201e&lt;\u201d i \u201e&gt;\u201d, nale\u017cy je zakodowa\u0107 zgodnie ze standardem XML.Zamiast \u201e&lt;A,B&gt;\u201d nale\u017cy poda\u0107 \u201eA,B\u201d, a zamiast \u201e&lt;C&gt;\u201d poda\u0107 \u201eC&lt;D&gt;\u201d.<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"height: 93px; border-style: outset;\"><strong>accessinterface<\/strong><\/td>\n<td style=\"height: 93px; border-style: outset;\">Nazwa interfejsu Java, kt\u00f3ry rozszerza DataAccess. Opcjonalny interfejs dost\u0119pu (Access Interface) jest traktowany analogicznie do interfejsu widoku (View Interface).Wi\u0119cej informacji znajduje si\u0119 w rozdziale <em><a href=\"#rpiwd\">Rozszerzenie poprzez interfejsy widoku\/dost\u0119pu<\/a><\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset;\"><strong>accessinterfacesuffix<\/strong><\/td>\n<td style=\"height: 70px; border-style: outset;\">Je\u015bli interfejs dost\u0119pu (Access Interface) jest generyczny, mo\u017cna poda\u0107 sufiks w celu okre\u015blenia parametr\u00f3w generycznych interfejsu.Nie trzeba podawa\u0107 zewn\u0119trznych znak\u00f3w \u201e&lt;\u201d i \u201e&gt;\u201d. Je\u015bli w parametrze generycznym jest potrzeba \u201e&lt;\u201d i \u201e&gt;\u201d, nale\u017cy je zakodowa\u0107 zgodnie ze standardem XML.Zamiast \u201e&lt;A,B&gt;\u201d nale\u017cy poda\u0107 \u201eA,B\u201d, a zamiast \u201e&lt;C&gt;\u201d poda\u0107 \u201eC&lt;D&gt;\u201d.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<h5 id=\"definicja-atrybutow\" ><span class=\"ez-toc-section\" id=\"Definicja_atrybutow\"><\/span><a id=\"da\"><\/a>Definicja atrybut\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p class=\"\" data-start=\"0\" data-end=\"140\">Widoki obiekt\u00f3w zawieraj\u0105 wybrane atrybuty bazowego obiektu biznesowego oraz opcjonalnie, r\u00f3wnie\u017c wirtualne, czyli obliczane, atrybuty:<\/p>\n<ul>\n<li data-start=\"0\" data-end=\"140\">za pomoc\u0105 elementu <em>attribute<\/em> mo\u017cna zmieni\u0107 w\u0142a\u015bciwo\u015bci atrybutu obiektu biznesowego. Mo\u017cna m.in. ograniczy\u0107 dost\u0119p do atrybutu obiektu biznesowego do odczytu lub zapisu.<\/li>\n<li data-start=\"0\" data-end=\"140\">za pomoc\u0105 elementu <em style=\"font-size: revert; color: initial;\">virtualattribute<\/em><span style=\"font-size: revert; color: initial;\">\u00a0mo\u017cna utworzy\u0107 obliczany atrybut. Wirtualne atrybuty musz\u0105 by\u0107 zaimplementowane w <\/span><em style=\"font-size: revert; color: initial;\">DataObject<\/em><span style=\"font-size: revert; color: initial;\"> i nie obs\u0142uguj\u0105 tablic ani z\u0142o\u017conych atrybut\u00f3w (Parts), z wyj\u0105tkiem specjalnych Parts, np. dla walut krajowych.<\/span><\/li>\n<\/ul>\n<p>Dalsze informacje na temat implementacji wirtualnych atrybut\u00f3w znajduj\u0105 si\u0119 w sekcji <em><a href=\"#awwdo\">Atrybuty wirtualne w DataObject<\/a>.<\/em><\/p>\n<p class=\"\" data-start=\"726\" data-end=\"926\">Dla ka\u017cdego atrybutu mo\u017cliwego do odczytu zostanie wygenerowana metoda <em>getter <\/em>w <em>DataView<\/em>, a dla ka\u017cdego atrybutu mo\u017cliwego do zapisu zostanie wygenerowana metoda <em>setter <\/em>w <em>DataAccess<\/em>.<\/p>\n<p class=\"\" data-start=\"928\" data-end=\"1047\">Poni\u017csza tabela obja\u015bnia elementy i atrybuty dozwolone w atrybutach obiekt\u00f3w biznesowych oraz wirtualnych atrybutach.<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 138px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><strong>Element<\/strong><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">name<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">\u015acie\u017cka atrybutu kolumny.<br data-start=\"73\" data-end=\"76\" \/>W przypadku atrybutu obiektu biznesowego musi istnie\u0107 kolumna o podanej \u015bcie\u017cce atrybutu. \u015acie\u017cka atrybutu jest z\u0142o\u017cona, je\u015bli zawiera kropki \u201e.\u201d lub nawiasy \u201e[]\u201d. Dla z\u0142o\u017conych \u015bcie\u017cek atrybut\u00f3w nie s\u0105 generowane metody w <em>DataView <\/em>ani <em>DataAccess<\/em>.<br data-start=\"331\" data-end=\"334\" \/>Nazwa wirtualnego atrybutu musi jednoznacznie identyfikowa\u0107 atrybut. Np. nie mo\u017ce istnie\u0107 wiele atrybut\u00f3w obiektu biznesowego o tej samej nazwie.Wirtualne atrybuty nie mog\u0105 by\u0107 z\u0142o\u017cone.<br data-start=\"528\" data-end=\"531\" \/>W rozszerzeniach widok\u00f3w obiekt\u00f3w nazwa musi zaczyna\u0107 si\u0119 od prefiksu deweloperskiego rozszerzenia widoku obiektu, rozpoczynaj\u0105cego si\u0119 ma\u0142\u0105 liter\u0105 i podkre\u015bleniem \u201e_\u201d.W rozszerzeniach widok\u00f3w obiekt\u00f3w w aplikacjach po tej nazwie nast\u0119puje dodatkowo nazwa aplikacji pisana ma\u0142ymi literami oraz kolejne podkre\u015blenie.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">property<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">\n<p class=\"\" data-start=\"874\" data-end=\"1053\">Atrybut <em>property\u00a0<\/em>jest okre\u015blany w elemencie\u00a0<em>attribute<\/em>\u00a0lub\u00a0<em>virtualattribute<\/em>. Zarz\u0105dza on widoczno\u015bci\u0105 i dost\u0119pem do atrybutu obiektu biznesowego lub wirtualnego:<\/p>\n<ul data-start=\"1055\" data-end=\"1949\">\n<li class=\"\" data-start=\"1055\" data-end=\"1333\">\n<p class=\"\" data-start=\"1057\" data-end=\"1333\"><strong data-start=\"1057\" data-end=\"1069\">EXCLUDED <\/strong>&#8211; atrybut jest zawarty w obiekcie biznesowym, ale w widoku obiektu nie jest ani odczytywany, ani zapisywany. W przypadku wirtualnych atrybut\u00f3w ta opcja jest niedozwolona.<br data-start=\"1264\" data-end=\"1267\" \/>W rozszerzeniach widok\u00f3w obiekt\u00f3w nie wolno ukrywa\u0107 atrybut\u00f3w.<\/p>\n<\/li>\n<li class=\"\" data-start=\"1335\" data-end=\"1599\">\n<p class=\"\" data-start=\"1337\" data-end=\"1599\"><strong data-start=\"1337\" data-end=\"1350\">READ_ONLY <\/strong>&#8211; atrybut mo\u017ce by\u0107 tylko odczytywany. Istnieje tylko <em>getter<\/em>, ale brak jest <em>settera<\/em>.<br data-start=\"1436\" data-end=\"1439\" \/>W rozszerzeniach widok\u00f3w obiekt\u00f3w tylko wirtualne atrybuty mog\u0105 by\u0107 \u201etylko do odczytu\u201d. Atrybuty z rozszerzenia obiektu biznesowego s\u0105 zawsze modyfikowalne.<\/p>\n<\/li>\n<li class=\"\" data-start=\"1601\" data-end=\"1949\">\n<p class=\"\" data-start=\"1603\" data-end=\"1949\"><strong data-start=\"1603\" data-end=\"1614\">MUTABLE<\/strong>\u00a0&#8211; atrybut mo\u017ce by\u0107 zar\u00f3wno odczytywany, jak i zmieniany. Istnieje zar\u00f3wno <em>getter<\/em>, jak i <em>setter<\/em>.<br data-start=\"1712\" data-end=\"1715\" \/>W przypadku atrybut\u00f3w obiekt\u00f3w biznesowych atrybut\u00a0<em>property<\/em> jest opcjonalny. Warto\u015b\u0107 domy\u015blna to <em>MUTABLE<\/em>\u00a0(z wyj\u0105tkiem niekt\u00f3rych atrybut\u00f3w).<br data-start=\"1869\" data-end=\"1872\" \/>Dla wirtualnych atrybut\u00f3w konieczne jest podanie atrybutu <em>property<\/em>.<\/p>\n<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">datatype<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Pe\u0142na nazwa logicznego typu danych. Je\u015bli typ danych jest powi\u0105zany z <em>Data-Description<\/em>, zostanie ona u\u017cyta w przypadku wy\u015bwietlania atrybutu w <em>DataView<\/em>.<br data-start=\"2136\" data-end=\"2139\" \/>W przypadku atrybut\u00f3w obiekt\u00f3w biznesowych typ danych jest opcjonalny i zast\u0119puje typ danych zapisany w atrybucie. Typ pierwotny musi w tym przypadku odpowiada\u0107 pierwotnemu typowi atrybutu.<br data-start=\"2330\" data-end=\"2333\" \/>Dla wirtualnych atrybut\u00f3w wymagane jest podanie typu danych, aby w pe\u0142ni zdefiniowa\u0107 wirtualny atrybut.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">javadoc<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Opcjonalny <em>JavaDoc <\/em>do opisu atrybutu. Jest on zapisywany zar\u00f3wno w getterze w <em>DataView<\/em>, jak i w setterze w <em>DataAccess<\/em>. Z\u0142o\u017cone atrybuty nie maj\u0105 JavaDoc.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">targetObject<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Pe\u0142na nazwa obiektu docelowego. Je\u015bli atrybut ma przypisany obiekt docelowy, to ten atrybut zawiera klucz obcy do obiektu docelowego. Klucz g\u0142\u00f3wny obiektu docelowego mo\u017ce sk\u0142ada\u0107 si\u0119 tylko z jednego atrybutu. Typy danych obu atrybut\u00f3w musz\u0105 by\u0107 identyczne.<br data-start=\"2931\" data-end=\"2934\" \/>Obiekt docelowy jest u\u017cywany na przyk\u0142ad do wyboru odpowiedniego <em>Entity-Field.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<p>Atrybuty niewirtualne mog\u0105 by\u0107 zapisane jako warto\u015bci domy\u015blne, z wyj\u0105tkami opisanymi poni\u017cej.<\/p>\n<p>Nast\u0119puj\u0105ce atrybuty s\u0105 tylko do odczytu (READ_ONLY):<\/p>\n<ul>\n<li>atrybuty klucza g\u0142\u00f3wnego<\/li>\n<li>atrybuty klucza biznesowego<\/li>\n<li>validFrom<\/li>\n<li>validUntil<\/li>\n<li>updateInfo<\/li>\n<li>timeZoneGuid<\/li>\n<li>_organisation<\/li>\n<li>_currencyCombo<\/li>\n<li>_conversionDate<\/li>\n<li>_clob<\/li>\n<\/ul>\n<p>Nast\u0119puj\u0105cy atrybut jest domy\u015blnie ukryty (EXCLUDED):<\/p>\n<ul>\n<li>managingSystem<\/li>\n<\/ul>\n<h5 id=\"definicja-relacji\" ><span class=\"ez-toc-section\" id=\"Definicja_relacji\"><\/span><a id=\"dr\"><\/a>Definicja relacji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<div>Widoki obiekt\u00f3w zawieraj\u0105 wyb\u00f3r relacji bazowego obiektu biznesowego i opcjonalnie tak\u017ce relacje wirtualne, tj. obliczane:<\/div>\n<ul>\n<li>za pomoc\u0105 elementu <em>relation\u00a0<\/em>mo\u017cna zmieni\u0107 w\u0142a\u015bciwo\u015bci relacji obiektu biznesowego. Mo\u017cna u\u017cy\u0107 odpowiedniego widoku obiektu jako celu relacji zamiast obiektu biznesowego.<\/li>\n<li>za pomoc\u0105 elementu <em>virtualrelation\u00a0<\/em>mo\u017cna utworzy\u0107 obliczan\u0105 relacj\u0119.<\/li>\n<\/ul>\n<div>Celem relacji mo\u017ce by\u0107 zar\u00f3wno obiekt biznesowy, jak i widok obiektu. Aby m\u00f3c u\u017cywa\u0107 atrybut\u00f3w obiektu docelowego relacji na dostosowywalnym interfejsie jako p\u00f3l, celem relacji musi by\u0107 widok obiektu.<\/div>\n<div><\/div>\n<div><span style=\"font-size: revert; color: initial;\">Aby zapyta\u0107 o relacj\u0119 o nazwie &lt;X&gt;, generowana jest metoda retrieve&lt;X&gt;() w jednym z nast\u0119puj\u0105cych komponent\u00f3w: <em>DataView<\/em>, <em>DataAccess<\/em> lub <em>DataAccess<\/em>.<em>Full<\/em>.<\/span><\/div>\n<div>\n<p>Warunki generowania metody:<\/p>\n<ul>\n<li>je\u015bli cel relacji nie jest zmienny, metoda jest tworzona wy\u0142\u0105cznie w DataView.<\/li>\n<li>je\u015bli celem relacji jest widok obiektu, metoda zwraca ograniczenie dost\u0119pu do obiektu \u017ar\u00f3d\u0142owego:\n<ul>\n<li>w DataView zwraca DataView<\/li>\n<li>w DataAccess zwraca DataAccess<\/li>\n<li>w DataAccess.Full zwraca DataAccess.Full<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Szczeg\u00f3\u0142y dotycz\u0105ce implementacji relacji znajduj\u0105 si\u0119 w rozdziale <em><a href=\"#rwdo\">Relacje w DataObject<\/a><\/em>.<\/p>\n<\/div>\n<div>Poni\u017csza tabela wyja\u015bnia elementy i atrybuty dozwolone w relacjach obiekt\u00f3w biznesowych i relacjach wirtualnych:<\/div>\n<div><\/div>\n<div>\n<table style=\"width: 100%; height: 1036px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; width: 12.8571%; border-style: outset;\"><strong>Element<\/strong><\/td>\n<td style=\"height: 23px; width: 86.1905%; border-style: outset;\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 116px;\">\n<td style=\"height: 116px; width: 12.8571%; border-style: outset;\"><strong>name<\/strong><\/td>\n<td style=\"height: 116px; width: 86.1905%; border-style: outset;\">Unikalna nazwa relacji. W przypadku relacji obiektu biznesowego musi istnie\u0107 relacja o danej nazwie. Wirtualne relacje mog\u0105 nadpisywa\u0107 w\u0142a\u015bciwo\u015bci relacji obiektu biznesowego. W rozszerzeniach widok\u00f3w obiekt\u00f3w nazwa musi zaczyna\u0107 si\u0119 od prefiksu deweloperskiego rozpoczynaj\u0105cego si\u0119 wielk\u0105 liter\u0105 i podkre\u015bleniem \u201e_\u201d. W aplikacjach dodaje si\u0119 nazw\u0119 aplikacji i kolejne podkre\u015blenie.<\/td>\n<\/tr>\n<tr style=\"height: 561px;\">\n<td style=\"height: 561px; width: 12.8571%; border-style: outset;\"><strong>property<\/strong><\/td>\n<td style=\"height: 561px; width: 86.1905%; border-style: outset;\">Atrybut <em>property<\/em> jest okre\u015blany w elemencie <em>relation<\/em> lub <em>virtualrelation<\/em>. Steruje on widoczno\u015bci\u0105 relacji oraz dost\u0119pem do celu relacji:<strong>EXCLUDED<\/strong> &#8211; relacja jest zawarta w obiekcie biznesowym, ale nie jest widoczna w widoku obiektu. Wirtualnych relacji nie mo\u017cna ukrywa\u0107.<strong>PERSISTENT <\/strong>&#8211; relacja jest zawarta w obiekcie biznesowym i powinna by\u0107 weryfkowana przez persistence service. Dla tej relacji w <em>DataObject<\/em> nie ma metody <em>retrieve<\/em>. Wirtualne relacje nie mog\u0105 by\u0107 obliczane przez persistence service. Je\u015bli celem relacji jest widok obiektu, <em>DataObject<\/em> widoku musi posiada\u0107 konstruktor z obiektem biznesowym jako jedynym parametrem.Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale <em><a href=\"#wp\">W\u0142a\u015bciwo\u015b\u0107 PERSISTENT<\/a><\/em>.<\/p>\n<p><strong>READ_ONLY <\/strong>&#8211; cel relacji jest obliczany za pomoc\u0105 <em>DataObject<\/em>. Cel relacji to obiekt biznesowy lub widok obiektu. W <em>DataAccess<\/em> widoku obiektu nie ma metody <em>retrieve\u2026Access<\/em>, wi\u0119c cel relacji nie jest modyfikowalny.<\/p>\n<p>Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale <em><a href=\"#wro\">W\u0142a\u015bciwo\u015b\u0107 READ_ONLY<\/a><\/em>.<\/p>\n<p><strong>MUTABLE <\/strong>&#8211; cel relacji jest modyfikowalny i obliczany przez <em>DataObject<\/em>. Cel relacji musi by\u0107 widokiem obiektu.<\/p>\n<p>Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdziale <em><a href=\"#wm\">W\u0142a\u015bciwo\u015b\u0107 MUTABLE<\/a><\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 151px;\">\n<td style=\"height: 151px; width: 12.8571%; border-style: outset;\"><strong>cardinality<\/strong><\/td>\n<td style=\"height: 151px; width: 86.1905%; border-style: outset;\">Atrybut <em>cardinality<\/em> jest okre\u015blany w elemencie <em>virtualrelation<\/em>. Wskazuje model relacji wirtualnej:<strong>ONE_ONE <\/strong>&#8211; relacja wskazuje na maksymalnie jeden obiekt docelowy.<strong>ONE_MANY <\/strong>&#8211; relacja wskazuje na dowoln\u0105 liczb\u0119 obiekt\u00f3w docelowych.Wi\u0119cej informacji na temat relacji 0&#8230;n mo\u017cna znale\u017a\u0107 w rozdziale <em><a href=\"#om\">One-Many dla relacji 0&#8230;n<\/a><\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 12.8571%; border-style: outset;\"><strong>targetobject<\/strong><\/td>\n<td style=\"height: 46px; width: 86.1905%; border-style: outset;\">Je\u015bli celem relacji jest obiekt biznesowy, mo\u017cna okre\u015bli\u0107 pe\u0142n\u0105 nazw\u0119 docelowego obiektu biznesowego.<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"height: 93px; width: 12.8571%; border-style: outset;\"><strong>targetview<\/strong><\/td>\n<td style=\"height: 93px; width: 86.1905%; border-style: outset;\">Je\u015bli celem relacji jest widok obiektu, mo\u017cna okre\u015bli\u0107 pe\u0142n\u0105 nazw\u0119 docelowego widoku obiektu. Je\u015bli widok obiektu, w kt\u00f3rym zapytanie o relacj\u0119 jest wykonywane, ma ograniczony dost\u0119p, wszystkie docelowe widoki obiekt\u00f3w r\u00f3wnie\u017c b\u0119d\u0105 mia\u0142y ograniczony dost\u0119p.W rozdziale <em><a href=\"#od\">Ograniczony dost\u0119p<\/a><\/em> mo\u017cna znale\u017a\u0107 szczeg\u00f3\u0142owe informacje.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 12.8571%; border-style: outset;\"><strong>javadoc<\/strong><\/td>\n<td style=\"height: 46px; width: 86.1905%; border-style: outset;\">Opcjonalny <em>JavaDoc <\/em>do opisu relacji. JavaDoc jest zapisywany zar\u00f3wno w metodzie zapytania <em>DataView<\/em>, jak i <em>DataAccess<\/em>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h5 id=\"rozszerzenie-poprzez-interfejsy-widoku-dostepu\" ><span class=\"ez-toc-section\" id=\"Rozszerzenie_poprzez_interfejsy_widokudostepu\"><\/span><a id=\"rpiwd\"><\/a>Rozszerzenie poprzez interfejsy widoku\/dost\u0119pu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasy View i Access mog\u0105 rozszerza\u0107 dowolne interfejsy. Metody interfejs\u00f3w mog\u0105 zawiera\u0107 metody dost\u0119pu do atrybut\u00f3w i relacji, jak r\u00f3wnie\u017c nowe metody bez odniesienia do atrybutu lub relacji.<\/p>\n<h6 id=\"dostep-do-atrybutow-i-relacji\" ><span class=\"ez-toc-section\" id=\"Dostep_do_atrybutow_i_relacji\"><\/span>Dost\u0119p do atrybut\u00f3w i relacji<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Kilka widok\u00f3w obiektu dla obiektu biznesowego mo\u017ce reprezentowa\u0107 r\u00f3\u017cne zastosowania obiektu biznesowego.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Dla obiektu biznesowego HashCode AddressData istniej\u0105 r\u00f3\u017cne widoki obiekt\u00f3w dla r\u00f3\u017cnych zastosowa\u0144 adresu.<\/div><\/section>\n<p>Interfejsy Java wszystkich widok\u00f3w obiekt\u00f3w dla obiektu biznesowego nie maj\u0105 wsp\u00f3lnego interfejsu. Jednak wa\u017cne metody (dost\u0119p do atrybut\u00f3w i relacji) s\u0105 wsp\u00f3lne dla wszystkich zastosowa\u0144. Te wsp\u00f3lne metody mo\u017cna podsumowa\u0107 w widoku i\/lub interfejsie dost\u0119pu. Interfejsy Java widok\u00f3w obiekt\u00f3w mog\u0105 rozszerza\u0107 te interfejsy widoku i dost\u0119pu. Algorytmy mog\u0105 zatem uzyskiwa\u0107 dost\u0119p do r\u00f3\u017cnych widok\u00f3w obiekt\u00f3w za po\u015brednictwem wsp\u00f3lnego super interfejsu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Wszystkie widoki obiekt\u00f3w dla adresu mog\u0105 mie\u0107 nast\u0119puj\u0105ce wsp\u00f3lne metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">String getCity()\n\nvoid setCity(String newValue)\n\nString getPostalCode()\n\nvoid setPostalCode(String newValue)<\/pre>\n<p>Metody <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">get <\/code>s\u0105 zawarte w interfejsie Java<i> <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AbstractAddressView<\/code><\/i><i><\/i>, a metody <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">set<\/code>\u00a0w interfejsie Java <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AbstractAddressAccess<\/code>. <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AbstractAddressAccess <\/code>rozszerza <i><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AbstractAddressView<\/code><\/i>.<\/p>\n<p>Pole do wy\u015bwietlania miasta i kodu pocztowego powinno u\u017cywa\u0107 interfejs\u00f3w Java <em>AbstractAddressView<\/em> i\/lub <em>AbstractAddressAccess<\/em> zamiast konkretnego widoku obiektu.<\/div><\/section>\n<h6 id=\"nowe-metody\" ><span class=\"ez-toc-section\" id=\"Nowe_metody\"><\/span>Nowe metody<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Interfejs widoku lub dost\u0119pu mo\u017ce zawiera\u0107 metody, kt\u00f3re nie realizuj\u0105 ani dost\u0119pu do atrybutu, ani do relacji. Takie metody s\u0105 wywo\u0142ywane z t\u0105 sam\u0105 sygnatur\u0105 na <em>DataObject<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Interfejs Java AbstractAddressView jest u\u017cywany jako interfejs widoku dla adresu zawiera metod\u0119:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">void xyz()<\/code><\/p>\n<p>DataObject nale\u017c\u0105cy do widoku obiektu musi zawiera\u0107 metod\u0119 void xyz().<\/p>\n<p>Je\u015bli metoda xyz() zostanie wywo\u0142ana na widoku obiektu, odpowiednia metoda zostanie wywo\u0142ana na DataObject.<\/p>\n<p>Metadane nie zawieraj\u0105 \u017cadnych informacji o metodach widoku i interfejsach dost\u0119pu. Nie mo\u017cna zatem uzyska\u0107 dost\u0119pu do metod za po\u015brednictwem metadanych (\u015bcie\u017cki).<\/p>\n<p>Te nowe metody mog\u0105 by\u0107 u\u017cywane do wywo\u0142ywania dowolnych z\u0142o\u017conych funkcji za po\u015brednictwem DataObject na encji APP.<\/div><\/section>\n<h5 id=\"ograniczony-dostep\" ><span class=\"ez-toc-section\" id=\"Ograniczony_dostep\"><\/span><a id=\"od\"><\/a>Ograniczony dost\u0119p<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Obiekty biznesowe mog\u0105 by\u0107 rozszerzane o nowe atrybuty za pomoc\u0105 rozszerze\u0144 obiekt\u00f3w biznesowych, m.in. w ramach dostosowywania klienta lub w systemie tworzenia aplikacji.<\/p>\n<p>W interfejsie aplikacji aplikacja cz\u0119sto mo\u017ce zmienia\u0107 tylko te atrybuty, kt\u00f3re sama utworzy\u0142a. Ograniczony dost\u0119p zapewnia, \u017ce mo\u017cna zmieni\u0107 tylko atrybuty rozszerze\u0144 obiekt\u00f3w biznesowych, kt\u00f3re zosta\u0142y utworzone w powi\u0105zanym systemie tworzenia aplikacji. Wszystkie inne atrybuty w obiekcie biznesowym nie mog\u0105 i nie mog\u0105 by\u0107 zmieniane.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">W systemie deweloperskim z prefiksem deweloperskim &#8222;xyz&#8221;, tylko atrybuty z prefiksem &#8222;xyz_&#8221; mog\u0105 by\u0107 zmieniane w widoku obiektu z ograniczonym dost\u0119pem.<\/div><\/section>\n<p>Podczas korzystania z widoku danych z ograniczonym dost\u0119pem (<strong data-start=\"61\" data-end=\"75\">DataAccess<\/strong>) w hooku lub w rozszerzeniu widoku danych, liczba dost\u0119pnych setter\u00f3w jest ograniczona do atrybut\u00f3w odpowiednich dla przestrzeni nazw deweloperskiej u\u017cytkownika. Wywo\u0142anie settera niemodyfikowalnego atrybutu prowadzi do b\u0142\u0119du runtime z DataAccess.<\/p>\n<p>DataAccess widoku obiektu zapewnia settery dla wszystkich atrybut\u00f3w, kt\u00f3re zosta\u0142y dodane przez rozszerzenie obiektu biznesowego. Setery dla atrybut\u00f3w obiektu biznesowego s\u0105 zawarte w wewn\u0119trznym interfejsie Full, kt\u00f3ry dziedziczy po DataAccess. Nale\u017cy go u\u017cy\u0107, aby utworzy\u0107 widok obiektu z pe\u0142nym dost\u0119pem.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Widok obiektu z pe\u0142nym dost\u0119pem jest u\u017cywany w interfejsie hooka tylko wtedy, gdy wszystkie atrybuty DataView mog\u0105 by\u0107 rzeczywi\u015bcie zmienione przez jego implementacj\u0119. Interfejsy hook\u00f3w do rozszerzania standardowych aplikacji cz\u0119sto zawieraj\u0105 widoki obiekt\u00f3w z ograniczonym dost\u0119pem.<\/div><\/section>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p>Tworzenie widoku obiektu dla elementu z ograniczonym dost\u0119pem:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ItemAccess restrictedAccess = dvm.create(\n\nItemAccess.class, itemDataObject);<\/pre>\n<p>Po utworzeniu widoku elementu z ograniczonym dost\u0119pem mo\u017cna zmieni\u0107 wszystkie atrybuty wszystkich rozszerze\u0144 obiekt\u00f3w biznesowych. Zmienne atrybuty s\u0105 dalej ograniczane, gdy DataAccess jest u\u017cywany w hooku lub gdy widok obiektu jest rozszerzany.<\/p>\n<p>Utworzenie widoku obiektu dla elementu z pe\u0142nym dost\u0119pem:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ItemAccess.Full fullAccess = dvm.create(\n\nItemAccess.Full.class, itemDataObject);<\/pre>\n<p>Po utworzeniu widoku elementu z pe\u0142nym dost\u0119pem wszystkie atrybuty mo\u017cna zmienia\u0107 bez ogranicze\u0144.<\/p>\n<p><\/div><\/section>\n<h5 id=\"implementacja-obiektu-dataobject\" ><span class=\"ez-toc-section\" id=\"Implementacja_obiektu_DataObject\"><\/span><a id=\"i\"><\/a>Implementacja obiektu DataObject<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>DataView reprezentuje zewn\u0119trzny interfejs obiektu biznesowego w encji APP.<\/p>\n<p>Infrastruktura DataView przekazuje wywo\u0142ania metod z DataView do bazowego obiektu biznesowego. Niekt\u00f3re metody, takie jak dost\u0119p do wirtualnych atrybut\u00f3w lub relacji, nie mog\u0105 zosta\u0107 odebrane przez infrastruktur\u0119. Wszystkie metody DataView, kt\u00f3re nie zosta\u0142y zdefiniowane przez infrastruktur\u0119, musz\u0105 zosta\u0107 zaimplementowane w obiekcie DataObject.<\/p>\n<p>DataObject mapuje dost\u0119p do DataView lub DataAccess na encj\u0119 APP. Sam obiekt DataObject jest tylko po\u015brednikiem. Niekt\u00f3re instancje obiektu DataObject s\u0105 generowane podczas dost\u0119pu do DataView. Mo\u017ce istnie\u0107 kilka obiekt\u00f3w DataObject dla obiektu biznesowego w encji APP w dowolnym momencie. Instancje DataObject s\u0105 cz\u0119sto przebudowywane i odrzucane.<\/p>\n<p>Implementacja obiektu DataObject musi spe\u0142nia\u0107 nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>powi\u0105zany obiekt biznesowy jest znany w momencie wywo\u0142ania konstruktora<\/li>\n<li>DataObject nie powinien wykonywa\u0107 \u017cadnych z\u0142o\u017conych oblicze\u0144 w konstruktorze<\/li>\n<li>DataObject nie mo\u017ce przechowywa\u0107 w\u0142asnego stanu<\/li>\n<\/ul>\n<p>Podczas definiowania widoku obiektu okre\u015blana jest klasa powi\u0105zanego obiektu DataObject. Instancja powi\u0105zanego obiektu DataObject jest wymagana do utworzenia widoku DataView lub dost\u0119pu DataAccess.<\/p>\n<p>Sekwencja wywo\u0142a\u0144 metod pobierania, getter\u00f3w i setter\u00f3w nie jest ustalona podczas przesy\u0142ania danych z i do interfejsu (dataFromUI i dataToUI). Metody atrybut\u00f3w wirtualnych i relacji nie mog\u0105 zmienia\u0107 innych atrybut\u00f3w, kt\u00f3re mog\u0105 by\u0107 zmieniane w interfejsie u\u017cytkownika.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Atrybuty a i v mog\u0105 by\u0107 zmieniane w interfejsie u\u017cytkownika. Gdy atrybut v jest ustawiony, atrybut a jest r\u00f3wnie\u017c ustawiony. W tym przypadku zawarto\u015b\u0107 a zale\u017cy od tego, czy a lub v zostanie najpierw przej\u0119te z interfejsu.<\/p>\n<p>Jednym z rozwi\u0105za\u0144 by\u0142oby uczynienie atrybutu a niezmiennym lub niewidocznym. Oznacza to, \u017ce nie mo\u017ce by\u0107 konfliktu z przeniesieniem a i v z interfejsu, poniewa\u017c a nie jest przenoszone z interfejsu.<\/div><\/section>\n<p>Ten sam problem wyst\u0119puje r\u00f3wnie\u017c, gdy na przyk\u0142ad <span style=\"color: #ff00ff;\"><span style=\"color: #000000;\">setter<\/span> <\/span>atrybutu wirtualnego zmienia obiekt docelowy relacji z atrybutami zmiennymi.<\/p>\n<p>Relacje bez zmiennych atrybut\u00f3w i atrybuty niezmienne mog\u0105 by\u0107 zmieniane przez settery, o ile sekwencja wywo\u0142a\u0144 nie jest istotna.<\/p>\n<h6 id=\"atrybuty-wirtualne-w-dataobject\" ><span class=\"ez-toc-section\" id=\"Atrybuty_wirtualne_w_DataObject\"><\/span><a id=\"awwdo\"><\/a>Atrybuty wirtualne w DataObject<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Getter i setter atrybut\u00f3w wirtualnych musz\u0105 by\u0107 zaimplementowane w DataObject z takimi samymi sygnaturami jak w DataView lub DataAccess.<\/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 DataObject nie mo\u017ce posiada\u0107 \u017cadnych w\u0142asnych stan\u00f3w. Stan atrybutu wirtualnego musi by\u0107 zapisany w encji APP.<\/div><\/section>\n<p>Nale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107, \u017ce nie mo\u017cna wp\u0142ywa\u0107 na \u017cadne inne zmienne atrybuty za pomoc\u0105 ustawiaczy atrybut\u00f3w wirtualnych.<\/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\">class ItemObject extends DataObject&lt;Item&gt; {\n\n...\n\npublic boolean isDollar() {\n\nreturn getObject().getDescription().endsWith(\"$\");\n\n}\n\n...\n\n}<\/pre>\n<p><\/div><\/section>\n<p><strong>Cechy szczeg\u00f3lne<\/strong><\/p>\n<p>Je\u015bli atrybut wirtualny X ma cz\u0119\u015b\u0107 P jako typ danych, przynajmniej metody PMutable getMutableX() i setX(PMutable v) musz\u0105 by\u0107 zaimplementowane w DataObject. Metoda P getX() nie musi by\u0107 zaimplementowana. Je\u015bli getX() nie zosta\u0142a zaimplementowana, getMutableX() jest wywo\u0142ywana zamiast getX(), gdy getX() jest wywo\u0142ywana w widoku obiektu w DataObject. Wynik funkcji getMutableX() jest konwertowany na cz\u0119\u015b\u0107 niezmienn\u0105.<\/p>\n<h6 id=\"relacje-w-dataobject\" ><span class=\"ez-toc-section\" id=\"Relacje_w_DataObject\"><\/span><a id=\"rwdo\"><\/a>Relacje w DataObject<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Widok obiektu mo\u017ce wyra\u017ca\u0107 relacje mi\u0119dzy obiektami biznesowymi lub widokami obiekt\u00f3w. Widok obiektu cz\u0119sto reprezentuje cz\u0119\u015b\u0107 encji APP. Encja APP zarz\u0105dza zestawem przej\u015bciowych obiekt\u00f3w biznesowych. Relacje mi\u0119dzy obiektami biznesowymi w ramach encji APP mog\u0105 by\u0107 analizowane tylko przez sam\u0105 encj\u0119 APP. Relacje z obiektami biznesowymi, kt\u00f3re nie s\u0105 zarz\u0105dzane przez encje APP, s\u0105 obliczane przy u\u017cyciu persistence service. Je\u015bli infrastruktura widok\u00f3w obiekt\u00f3w nie mo\u017ce og\u00f3lnie obliczy\u0107 relacji, relacja musi zosta\u0107 zaimplementowana w DataObject.<\/p>\n<p><strong><a id=\"om\"><\/a>One-Many dla relacji 0&#8230;n<\/strong><\/p>\n<p>Relacje 0&#8230;n mog\u0105 zwraca\u0107 dowoln\u0105 liczb\u0119 instancji obiekt\u00f3w docelowych. Obiekty docelowe s\u0105 obliczane w zale\u017cno\u015bci od relacji w DataObject lub w infrastrukturze widok\u00f3w obiekt\u00f3w.<\/p>\n<p>Zawarto\u015b\u0107 relacji 0&#8230;n jest zwracana przez widok obiektu jako obiekt typu one-many. Zawiera on przej\u015bciowe instancje obiekt\u00f3w docelowych, albo klucze do \u0142adowania obiekt\u00f3w docelowych z persistence service. Zestaw kluczy musi zosta\u0107 zdefiniowany podczas tworzenia obiektu one-many. Po utworzeniu obiektu klucze nie mog\u0105 ju\u017c ulec zmianie. Obiekty docelowe s\u0105 \u0142adowane tylko wtedy, gdy s\u0105 dost\u0119pne, w zale\u017cno\u015bci od obiektu one-many.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nale\u017cy unika\u0107 relacji z nieograniczon\u0105 liczb\u0105 obiekt\u00f3w docelowych w widokach obiekt\u00f3w 0&#8230;n.<\/div><\/section>\n<p>Przynajmniej klucz jest przechowywany w pami\u0119ci g\u0142\u00f3wnej dla ka\u017cdego obiektu docelowego w obiekcie typu one-many. Podczas projektowania widoku obiektu nale\u017cy pami\u0119ta\u0107, \u017ce wszystkie relacje 0&#8230;n maj\u0105 du\u017c\u0105, ale ograniczon\u0105 liczb\u0119 obiekt\u00f3w docelowych.<\/p>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce obiekty docelowe obiektu one-many mog\u0105 mie\u0107 warto\u015b\u0107 &#8222;zero&#8221;.<\/p>\n<p>Obiekt one-many umo\u017cliwia losowy dost\u0119p do obiekt\u00f3w docelowych. Obiekt one-many jest u\u017cywany przez u\u017cytkownika widoku obiektu do werbalizowania, czy obiekty docelowe s\u0105 obliczane przej\u015bciowo w encji APP, czy za po\u015brednictwem persistence service.<\/p>\n<p>R\u00f3\u017cne implementacje interfejsu one-many sprawiaj\u0105, \u017ce jest on \u0142atwiejszy w u\u017cyciu:<\/p>\n<ul>\n<li>llasa OneManyBase jest klas\u0105 bazow\u0105 dla niestandardowych implementacji interfejsu OneMany<\/li>\n<li>llasa OneManyObjectIterator implementuje obiekt one-many na wynikach ObjectIterator<\/li>\n<li>llasa OneManyCollection implementuje obiekt one-many na kolekcji CisObject<\/li>\n<\/ul>\n<p>Je\u015bli wynikiem klas one-many jest widok obiektu, powy\u017csze klasy one-many mo\u017cna utworzy\u0107 dla DataObject lub BusinessObject widoku obiektu. Je\u015bli DataObject nale\u017c\u0105cy do widoku obiektu ma tylko obiekt biznesowy jako parametr w konstruktorze, nie jest wymagana \u017cadna specjalna implementacja. Je\u015bli konstruktor obiektu DataObject ma wi\u0119cej lub inne parametry, konstruktor ten musi zosta\u0107 wywo\u0142any w implementacji wewn\u0119trznego interfejsu OneManyBase.DataObjectBuilder.<\/p>\n<p>Wi\u0119cej informacji na temat implementacji widok\u00f3w obiekt\u00f3w mo\u017cna znale\u017a\u0107 w dokumentacji Java klasy com.cisag.pgm.base.OneMany.<\/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\">public OneMany&lt;AlternativeItemObject&gt; retrieveAlternativeItems() {\n\nCisObjectIterator iter = om.getObjectIterator(\n\n\"SELECT FROM com.cisag.app.general.obj.Item o \"+\n\n\"WHERE o:alternativeItem=?\");\n\niter.setGuid(1,getObject().getGuid());\n\nreturn new OneManyCisObjectIterator(iter,\n\nnew OneManyBase.DataObjectBuilder&lt;Item&gt; {\n\nDataObject build(Item item) {\n\nreturn new AlternativeItemObject(entity,item);\n\n}\n\n});\n\n}<\/pre>\n<p><\/div><\/section>\n<p><strong><a id=\"wm\"><\/a>W\u0142a\u015bciwo\u015b\u0107 <em>MUTABLE<\/em><\/strong><\/p>\n<p>Je\u015bli cel relacji z DataAccess mo\u017ce zosta\u0107 zmieniony (w\u0142a\u015bciwo\u015b\u0107 <em>MUTABLE<\/em>), w\u00f3wczas relacja ta musi zosta\u0107 zaimplementowana w DataObject. W tym przypadku encji APP generalnie zarz\u0105dza zmienn\u0105 i przej\u015bciow\u0105 instancj\u0105 obiektu biznesowego.<\/p>\n<p>Nale\u017cy zaimplementowa\u0107 nast\u0119puj\u0105c\u0105 metod\u0119 pobierania dla zmiennej relacji o nazwie {RelationName} i obiektu biznesowego {BusinessObject}:<\/p>\n<p>0:1 Relacja<\/p>\n<p>DataObject&lt;{BusinessObject}&gt; retrieve{RelationName}()<\/p>\n<p>0:n Relacja<\/p>\n<p>OneMany&lt;DataObject&lt;{BusinesObject}&gt;&gt; retrieve{Relationname}()<\/p>\n<p>Je\u015bli DataAccess ma ograniczony dost\u0119p, wszystkie obiekty docelowe z ograniczonym dost\u0119pem s\u0105 r\u00f3wnie\u017c tworzone podczas zapytania o relacj\u0119. W widoku obiektu docelowego (element targetview) mo\u017cna okre\u015bli\u0107 dla relacji, \u017ce widok obiektu docelowego nie powinien mie\u0107 ograniczonego dost\u0119pu, niezale\u017cnie od widoku obiektu \u017ar\u00f3d\u0142owego.<\/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\">public ItemObject retrieveDefaultVariantItem() {\n\nreturn new ItemObject(entity, entity.getDefaultVariantItem());\n\n}<\/pre>\n<p><\/div><\/section>\n<p><strong><a id=\"wro\"><\/a>W\u0142a\u015bciwo\u015b\u0107 <em>READ_ONLY<\/em><\/strong><\/p>\n<p>Je\u015bli celem relacji jest widok obiektu, kt\u00f3ry nie mo\u017ce zosta\u0107 zmieniony (w\u0142a\u015bciwo\u015b\u0107 <em>READ_ONLY<\/em>) i nie mo\u017cna go okre\u015bli\u0107 za pomoc\u0105 mapowania obiekt\u00f3w biznesowych obiektu \u017ar\u00f3d\u0142owego, relacja musi zosta\u0107 zaimplementowana w obiekcie DataObject. Dzieje si\u0119 tak na przyk\u0142ad wtedy, gdy relacja jest tak z\u0142o\u017cona, \u017ce nie mo\u017cna jej wyrazi\u0107 w metadanych obiektu biznesowego.<\/p>\n<p>Implementacja w DataObject jest analogiczna do relacji z w\u0142a\u015bciwo\u015bci\u0105 <em>MUTABLE<\/em>.<\/p>\n<p><strong><a id=\"wp\"><\/a>W\u0142a\u015bciwo\u015b\u0107 <em>PERSISTENT<\/em><\/strong><\/p>\n<p>Nie mo\u017ce istnie\u0107 implementacja w obiekcie DataObject dla relacji, kt\u00f3re maj\u0105 by\u0107 oceniane za pomoc\u0105 mappera obiekt\u00f3w biznesowych (w\u0142a\u015bciwo\u015b\u0107 <em>PERSISTENT<\/em>). Je\u015bli widok obiektu zosta\u0142 okre\u015blony jako cel dla tych relacji (element &#8222;targetview&#8221;), musi by\u0107 mo\u017cliwe utworzenie tego widoku obiektu tylko z obiektem biznesowym. W takim przypadku DataObject docelowego widoku obiektu musi mie\u0107 konstruktor z powi\u0105zanym obiektem biznesowym jako jedynym parametrem. Je\u015bli taki konstruktor nie istnieje, podczas odpytywania relacji wyst\u0105pi b\u0142\u0105d wykonania.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli docelowy widok obiektu SalesOrderTypeView zosta\u0142 okre\u015blony w obiekcie biznesowym SalesOrder dla relacji Type, DataObject SalesOrderTypeObject widoku obiektu SalesOrderTypeView musi mie\u0107 nast\u0119puj\u0105cy konstruktor:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">SalesOrderTypeObject(SalesOrderType soType)<\/code><\/p>\n<p><\/div><\/section>\n<h5 id=\"atrybuty-przetlumaczalne-nls\" ><span class=\"ez-toc-section\" id=\"Atrybuty_przetlumaczalne_NLS\"><\/span>Atrybuty przet\u0142umaczalne (NLS)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Atrybuty przet\u0142umaczalne (NLS) s\u0105 traktowane inaczej ni\u017c zwyk\u0142e ci\u0105gi znak\u00f3w w widokach obiekt\u00f3w. Dane atrybutu przet\u0142umaczalnego s\u0105 zwykle zarz\u0105dzane przez encj\u0119 APP w klasie NLSData. Nale\u017cy utworzy\u0107 getter z przyrostkiem &#8222;$NLS&#8221;, aby uzyska\u0107 dost\u0119p do NLSData w encji APP.<\/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\">public NLSData getDescription$NLS() {\n\nreturn ...;\n\n}<\/pre>\n<p><\/div><\/section>\n<p>Alternatywnie do powy\u017cszego mechanizmu, NLSData mog\u0105 by\u0107 r\u00f3wnie\u017c dostarczane z interfejsem DataObject.GenericNLS.<\/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\">public NLSData getNLSData(String attributePath) {\n\nreturn entity.getNLSData(attributePath);\n\n}<\/pre>\n<p><\/div><\/section>\n<p>Niezale\u017cnie od interfejsu DataObject.GenericNLS, NLSData jest okre\u015blana za pomoc\u0105 tej metody, je\u015bli istnieje metoda $NLS.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli DataObject nie implementuje interfejsu DataObject.GenericNLS, nale\u017cy utworzy\u0107 metody $NLS dla wszystkich atrybut\u00f3w, kt\u00f3re mo\u017cna przet\u0142umaczy\u0107.<\/div><\/section>\n<h4 id=\"generowanie-klas-java\" ><span class=\"ez-toc-section\" id=\"Generowanie_klas_Java\"><\/span>Generowanie klas Java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>DataView i DataAccess s\u0105 generowane dla ka\u017cdego widoku obiektu za pomoc\u0105 narz\u0119dzia <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/tworzenie-zrodel-java-dla-widoku-obiektow\/\">crtdv<\/a><\/em>. Polecenie toolshell ma zwyk\u0142e parametry programistyczne <em>-j<\/em> dla zadania deweloperskiego i <em>-o<\/em> dla obiektu deweloperskiego.<\/p>\n<p>Je\u015bli widok obiektu ma zosta\u0107 usuni\u0119ty z zadania deweloperskiego, konieczne jest ustawienie polecenia tollshell <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/tworzenie-zrodel-java-dla-widoku-obiektow\/\">crtdv<\/a><\/em>\u00a0z parametrem <em>-resetState<\/em>.<\/p>\n<p>Gdy generowany jest bazowy obiekt biznesowy (przy u\u017cyciu <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/tworzenie-obiektu-biznesowego-crtbo\/\"><em>crtbo<\/em><\/a>), generowane s\u0105 r\u00f3wnie\u017c klasy Java dla widoku obiektu. Je\u015bli DataView zosta\u0142 automatycznie do\u0142\u0105czony do zadania deweloperskiego podczas generowania rozszerzenia obiektu biznesowego, DataView jest automatycznie usuwany w <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/usun-obiekt-biznesowy-rmvbo\/\">rmvbo<\/a><\/em>.<\/p>\n<h4 id=\"cisdataviewmanager\" ><span class=\"ez-toc-section\" id=\"CisDataViewManager\"><\/span>CisDataViewManager<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>CisDataViewManager mo\u017ce by\u0107 u\u017cywany do generowania widok\u00f3w obiekt\u00f3w i odpytywania metadanych widok\u00f3w obiekt\u00f3w. CisDataViewManager jest odpytywany przez CisEnvironment.<\/p>\n<h5 id=\"tworzenie-widokow-obiektow\" ><span class=\"ez-toc-section\" id=\"Tworzenie_widokow_obiektow\"><\/span>Tworzenie widok\u00f3w obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Widok obiektu mo\u017cna utworzy\u0107 za pomoc\u0105 \u017c\u0105danego interfejsu DataView lub DataAccess i pasuj\u0105cego obiektu DataObject.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;O extends CisObject,\n\nV extends DataView&lt;O&gt;, D extends DataObject&lt;O&gt;&gt;\n\nV create(Class&lt;V&gt; dataClass, D dataObject)<\/pre>\n<p>Je\u015bli obiekt DataObject ma konstruktor, kt\u00f3rego jedynym parametrem jest obiekt biznesowy, DataViewManager mo\u017ce u\u017cy\u0107 obiektu biznesowego do utworzenia odpowiedniego obiektu DataObject. W takim przypadku mo\u017cna r\u00f3wnie\u017c u\u017cy\u0107 nast\u0119puj\u0105cej metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;O extends CisObject, V extends DataView&lt;O&gt;&gt;\n\nV create(Class&lt;V&gt; dataClass, O object)<\/pre>\n<p>Interfejs, dla kt\u00f3rego ma zosta\u0107 utworzony widok obiektu, jest okre\u015blony w parametrze <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">dataClass<\/code>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Tworzenie widoku obiektu, kt\u00f3rego nie mo\u017cna zmieni\u0107:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ItemView view =\n\ndvm.create(ItemView.class, dataObject);<\/pre>\n<p>Tworzenie widoku obiektu z ograniczeniami:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ItemAccess access =\n\ndvm.create(ItemAccess. class, dataObject);<\/pre>\n<p>Tworzenie modyfikowalnego widoku obiektu:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ItemAccess.Full access =\n\ndvm.create(ItemAccess.Full.class, dataObject);<\/pre>\n<p><\/div><\/section>\n<h5 id=\"zapytanie-o-metadane-widokow-obiektow\" ><span class=\"ez-toc-section\" id=\"Zapytanie_o_metadane_widokow_obiektow\"><\/span>Zapytanie o metadane widok\u00f3w obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Metadane widoku obiektu mog\u0105 by\u0107 odpytywane w DataViewManager. Metadane s\u0105 wymagane do og\u00f3lnego dost\u0119pu do widok\u00f3w obiekt\u00f3w. W rozdziale <a href=\"#sciezki\"><em>\u015acie\u017cki<\/em> <\/a>znajduj\u0105 si\u0119 szczeg\u00f3\u0142owe informacje dotycz\u0105ce dost\u0119p\u00f3w.<\/p>\n<p>Zapytanie o metadane widoku obiektu mo\u017cna wykona\u0107 przy u\u017cyciu nast\u0119puj\u0105cej metody<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;O extends CisObject, V extends DataView&lt;O&gt;&gt;\n\nCisDataViewMetaData getMetaData(Class&lt;V&gt; dataClass);<\/pre>\n<p>Aby uzyska\u0107 og\u00f3lny dost\u0119p do obiekt\u00f3w biznesowych, metadane widoku obiektu mo\u017cna r\u00f3wnie\u017c okre\u015bli\u0107 dla obiektu biznesowego za pomoc\u0105 nast\u0119puj\u0105cych metod:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;O extends CisObject&gt;\n\nCisDataViewMetaData getObjectMetaData(\n\nClass&lt;O&gt; businessObjectClass);\n\nCisDataViewMetaData getObjectMetaData(byte[] classGuid);<\/pre>\n<h5 id=\"kopiowanie-atrybutow\" ><span class=\"ez-toc-section\" id=\"Kopiowanie_atrybutow\"><\/span>Kopiowanie atrybut\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>CisDataViewManager oferuje dwie pomocnicze procedury, za pomoc\u0105 kt\u00f3rych atrybuty DataView mog\u0105 by\u0107 kopiowane do DataAccess. Metody te mog\u0105 by\u0107 wywo\u0142ywane tylko z DataView i DataAccess tego samego widoku obiektu. Dost\u0119pna jest metoda kopiowania wszystkich atrybut\u00f3w. Ponadto mo\u017cna kopiowa\u0107 tylko wybrane atrybuty. Metody s\u0105 nast\u0119puj\u0105ce<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">copyTo( DataView&lt;?&gt; sourceView,\n\nDataFullAccess&lt;?&gt; targetFullAccess);\n\ncopyTo( DataView&lt;?&gt; sourceView,\n\nDataFullAccess&lt;?&gt; targetFullAccess,\n\nAttributeFilter attributeFilter);<\/pre>\n<h4 id=\"sciezki\" ><span class=\"ez-toc-section\" id=\"Sciezki\"><\/span><a id=\"sciezki\"><\/a><span style=\"background-color: #ffffff; color: #000000;\">\u015aci<\/span>e\u017cki<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u015acie\u017cka og\u00f3lnie definiuje dost\u0119p, zaczynaj\u0105c od widoku obiektu A, do atrybutu A lub innego widoku obiektu, kt\u00f3ry mo\u017cna osi\u0105gn\u0105\u0107 z A za po\u015brednictwem \u0142a\u0144cucha relacji 0\u20261. \u015acie\u017cki spe\u0142niaj\u0105 nast\u0119puj\u0105ce zadania:<\/p>\n<ul>\n<li>pole w aplikacji interaktywnej jest powi\u0105zane ze \u015bcie\u017ck\u0105:\n<ul>\n<li>komunikaty o b\u0142\u0119dach mog\u0105 by\u0107 powi\u0105zane z powi\u0105zanymi polami poprzez \u015bcie\u017ck\u0119 (czerwone naro\u017cniki)<\/li>\n<li>dane s\u0105 automatycznie wymieniane mi\u0119dzy widokiem obiektu a polem w aplikacji interaktywnej za po\u015brednictwem \u015bcie\u017cki.<\/li>\n<\/ul>\n<\/li>\n<li>og\u00f3lny dost\u0119p do danych widoku obiektu jest mo\u017cliwy przy u\u017cyciu metadanych widoku obiektu i \u015bcie\u017cki.<\/li>\n<\/ul>\n<p>\u015acie\u017cki musz\u0105 by\u0107 tworzone w programie aplikacji, np. w celu wys\u0142ania wiadomo\u015bci. Aby mog\u0142a ona zosta\u0107 utworzona w mo\u017cliwie najbezpieczniejszy spos\u00f3b, identyfikatory relacji i kolumn s\u0105 generowane jako enum w DataView.<\/p>\n<p>\u015acie\u017cki mog\u0105 by\u0107 wyszukiwane w klasie <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">com.cisag.pgm.base.Path<\/code> przy u\u017cyciu mi\u0119dzy innymi nast\u0119puj\u0105cej metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Path getInstance(Enum&lt;?&gt;... attributeOrRelation)<\/pre>\n<p>Klasa <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Path<\/code> ma dalsze metody generowania \u015bcie\u017cek z metadanych widoku obiektu lub z ci\u0105gu znak\u00f3w. Metody te s\u0105 opisane w JavaDoc klasy.<\/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\">public interface ItemView {\n\npublic static enum Attribute {\n\n$guid,\n\n$number,\n\n...\n\n}\n\npublic static enum Relation {\n\n$DefaultVariantItem,\n\n$AlternativeItems,\n\n...\n\n}\n\n}<\/pre>\n<p><\/div><\/section>\n<p>\u015acie\u017cki mog\u0105 by\u0107 tworzone za pomoc\u0105 enum w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Path numberPath = Path.getInstance(ItemView.Attribute.$number);\n\nPath variantGuidPath = Path.getInstance(\n\nItemView.Relation.$DefaultVariantItem,\n\nItemView.Attribute.$number);<\/pre>\n<p>\u015acie\u017cki mog\u0105 by\u0107 u\u017cywane w Mened\u017cerze wiadomo\u015bci do wysy\u0142ania wiadomo\u015bci w celu przypisania wiadomo\u015bci do jednego lub wi\u0119cej p\u00f3l:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">mm.setProgramMessageDataViewPaths(numberPath);\n\nmm.sendMessage(\"XYZ\",4711, \"abc\");<\/pre>\n<p>Mo\u017cna u\u017cy\u0107 \u015bcie\u017cki do og\u00f3lnego dost\u0119pu do danych widoku obiektu:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView view = ....\n\nString number = (String)view.getValue(numberPath);\n\nDataFullAccess fullAccess = ....\n\nfullAccess.setValue(variantGuidPath, variantGuid);<\/pre>\n<p>Dokument Java klas com.cisag.pgm.base.DataView, com.cisag.pgm.base.DataAccess i com.cisag.pgm.base.DataFullAccess zawiera pe\u0142ny opis wszystkich metod og\u00f3lnego dost\u0119pu do danych widoku obiektu.<\/p>\n<h4 id=\"rozszerzenie-widoku-obiektu\" ><span class=\"ez-toc-section\" id=\"Rozszerzenie_widoku_obiektu\"><\/span>Rozszerzenie widoku obiektu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>System Comarch ERP Enterprise mo\u017cna rozszerzy\u0107 o nowe funkcje w systemach deweloperskich ni\u017cszego szczebla lub systemach tworzenia aplikacji. W tym celu konieczne s\u0105 r\u00f3wnie\u017c zmiany w modelu danych. Encje APP ze standardu musz\u0105 uwzgl\u0119dnia\u0107 model danych rozszerzony o nowe funkcje. Odpowiednie definicje Hook Contract i interfejsy s\u0105 dostarczane w celu rozszerzenia encji APP.<\/p>\n<p>Je\u015bli nowe atrybuty i relacje zostan\u0105 dodane do obiektu biznesowego w encji APP z rozszerzeniem obiektu biznesowego, wszystkie te atrybuty i relacje zostan\u0105 automatycznie uwzgl\u0119dnione w powi\u0105zanych widokach obiekt\u00f3w.<\/p>\n<p>Je\u015bli w\u0142a\u015bciwo\u015bci nowych atrybut\u00f3w maj\u0105 zosta\u0107 zmienione lub encja APP zostanie rozszerzona o nowe podmioty zale\u017cne, na przyk\u0142ad wymagane s\u0105 dodatkowe metadane dla tego rozszerzenia. To rozszerzenie jest okre\u015blane jako rozszerzenie warstwy obiektu.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Poniewa\u017c wszystkie atrybuty i relacje rozszerzenia obiektu biznesowego s\u0105 automatycznie uwzgl\u0119dniane we wszystkich widokach obiekt\u00f3w nale\u017c\u0105cych do obiektu biznesowego, cz\u0119sto nie jest konieczne tworzenie rozszerzenia warstwy obiekt\u00f3w.<\/p>\n<p>Rozszerzenie warstwy obiekt\u00f3w sk\u0142ada si\u0119 z metadanych atrybut\u00f3w i metadanych relacji. Nazwy atrybut\u00f3w i relacji musz\u0105 by\u0107 zgodne z konwencj\u0105 nazewnictwa pochodz\u0105c\u0105 z przestrzeni nazw rozwoju rozszerzenia warstwy obiekt\u00f3w.<\/div><\/section>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><span style=\"color: initial;\">Wszystkie atrybuty w rozszerzeniu warstwy obiekt\u00f3w com.xyz.app.general.model.ItemView musz\u0105 zaczyna\u0107 si\u0119 od przedrostka &#8222;xyz_&#8221;.<\/span><\/p>\n<p>Wszystkie relacje w rozszerzeniu warstwy obiekt\u00f3w com.xyz.app.general.model.ItemView musz\u0105 zaczyna\u0107 si\u0119 od przedrostka &#8222;Xyz_&#8221;.<span style=\"color: initial;\"><\/div><\/section><\/span><\/p>\n<p><span style=\"font-size: revert; color: initial;\">W pewnych przypadkach w systemie tworzenia aplikacji mo\u017cna opracowa\u0107 kilka aplikacji. Rozszerzenie warstwy obiekt\u00f3w mo\u017ce zmienia\u0107 tylko atrybuty i relacje z tej samej aplikacji. Nazwy wirtualnych atrybut\u00f3w i relacji musz\u0105 by\u0107 unikalne we wszystkich aplikacjach opracowanych w tym systemie.<\/span><\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">W\u0142a\u015bciwo\u015bci atrybut\u00f3w i relacji, kt\u00f3re zosta\u0142y utworzone poza przestrzeni\u0105 nazw programowania i\/lub aplikacji, nie mog\u0105 i nie wolno ich zmienia\u0107.<\/div><\/section>\n<p>Opis rozszerzenia warstwy obiekt\u00f3w jest rejestrowany jako obiekt programistyczny XML. Struktura XML jest wprowadzana na poni\u017cszym przyk\u0142adzie. Tabelaryczny opis element\u00f3w u\u017cytych w tym przyk\u0142adzie mo\u017cna znale\u017a\u0107 w kolejnych sekcjach. Elementy atrybut\u00f3w i relacji zosta\u0142y ju\u017c opisane w widoku obiektu.<\/p>\n<div><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\">com.xyz.app.general.model.Item&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n\n&lt;dataviewextension\n\nxmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\nxsi:noNamespaceSchemaLocation=\"DataView.xsd\"&gt;\n\n&lt;dataview&gt;\n\ncom.cisag.app.general.item.model.Item\n\n&lt;\/dataview&gt;\n\n&lt;implementation&gt;\n\ncom.xyz.app.general.log.ItemExtension\n\n&lt;\/implementation&gt;\n\n&lt;virtualattribute property=\"READ_ONLY\"&gt;\n\n&lt;name&gt;xyz_derivedState&lt;\/name&gt;\n\n&lt;datatype&gt;\n\ncom.xyz.app.general.model.ItemDerivedState\n\n&lt;\/datatype&gt;\n\n&lt;javadoc&gt;\n\nStan pochodny jest obliczany na podstawie stanu\n\nelementu.\n\n&lt;\/javadoc&gt;\n\n&lt;\/virtualattribute&gt;\n\n&lt;!-- Relacja Xyz_TopSalesOrders nie powinna by\u0107 wy\u015bwietlana --&gt;\n\n&lt;!\u2013 nie b\u0119dzie wy\u015bwietlana. \u2013&gt;\n\n&lt;relation property=\"EXCLUDED\"&gt;\n\n&lt;name&gt;Xyz_TopSalesOrders&lt;\/name&gt;\n\n&lt;\/relation&gt;\n\n&lt;!-- Relacja Xyz_ItemFashionExtension wskazuje na --&gt;.\n\n&lt;!-- Zale\u017cny w encji APP elementu. --&gt;\n\n&lt;relation property=\"MUTABLE\"&gt;\n\n&lt;name&gt;Xyz_ItemFashionExtension&lt;\/name&gt;\n\n&lt;targetview&gt;\n\ncom.xyz.app.general.model.ItemFashionExtension\n\n&lt;\/targetview&gt;\n\n&lt;javadoc&gt;\n\nWszystkie rozszerzenia dla rozwi\u0105zania Fashion s\u0105 implementowane\n\npoprzez t\u0119 relacj\u0119.\n\n&lt;\/javadoc&gt;\n\n&lt;\/relation&gt;.\n\n&lt;\/dataviewextension&gt;<\/pre>\n<p><span style=\"color: initial;\"><\/div><\/section><\/span><\/p>\n<\/div>\n<h5 id=\"definicja-rozszerzenia-warstwy-obiektow\" ><span class=\"ez-toc-section\" id=\"Definicja_rozszerzenia_warstwy_obiektow\"><\/span>Definicja rozszerzenia warstwy obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Rozszerzenie warstwy obiekt\u00f3w jest opisane przez dok\u0142adnie jeden element <i><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">dataviewextension<\/code><\/i>. Element ten zawiera dalsze elementy. S\u0105 one podzielone na nast\u0119puj\u0105ce grupy:<\/p>\n<ul>\n<li>dane dotycz\u0105ce rozszerzenia warstwy obiekt\u00f3w<\/li>\n<li>dane dotycz\u0105ce atrybut\u00f3w rozszerzenia warstwy obiekt\u00f3w<\/li>\n<li>dane dotycz\u0105ce relacji rozszerzenia warstwy obiekt\u00f3w<\/li>\n<\/ul>\n<p>Poni\u017csza tabela wyja\u015bnia wszystkie elementy opisuj\u0105ce dane rozszerzenia warstwy obiekt\u00f3w:<\/p>\n<table style=\"width: 100%; height: 116px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<th style=\"height: 23px;\"><strong>Element<\/strong><\/th>\n<th style=\"height: 23px;\"><strong>Opis<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px;\"><strong>dataview<\/strong><\/td>\n<td style=\"height: 23px;\">Pe\u0142na nazwa widoku obiektu wraz z przestrzeni\u0105 nazw. Ten element jest obowi\u0105zkowy.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px;\"><strong>implementation<\/strong><\/td>\n<td style=\"height: 70px;\">Pe\u0142na nazwa klasy <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code> dla rozszerzenia widoku obiektu wraz z przestrzeni\u0105 nazw. Podana klasa musi by\u0107 pochodn\u0105 klasy <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code>. Ten element jest obowi\u0105zkowy.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Definicja atrybut\u00f3w i relacji w rozszerzeniu warstwy obiekt\u00f3w jest identyczna z definicj\u0105 w widokach obiekt\u00f3w. Nazwy wszystkich atrybut\u00f3w i relacji musz\u0105 zaczyna\u0107 si\u0119 od prefiksu deweloperskiego rozszerzenia warstwy obiekt\u00f3w, analogicznie do rozszerze\u0144 obiekt\u00f3w biznesowych.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">W rozszerzeniu widoku obiektu com.xyz.app.general.model.Item, nazwy wszystkich atrybut\u00f3w musz\u0105 zaczyna\u0107 si\u0119 od &#8222;xyz_&#8221;, a wszystkie relacje od &#8222;Xyz_&#8221;.<\/div><\/section>\n<p>Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w rozdzia\u0142ach <em><a href=\"#da\">Definicja atrybut\u00f3w<\/a><\/em>\u00a0i <em><a href=\"#dr\">Definicja relacji<\/a><\/em>.<\/p>\n<h5 id=\"implementacja-rozszerzenia-dataextension\" ><span class=\"ez-toc-section\" id=\"Implementacja_rozszerzenia_DataExtension\"><\/span>Implementacja rozszerzenia <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Rozszerzenie <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code> implementuje funkcjonalno\u015b\u0107 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code> rozszerzon\u0105 o rozszerzenie bezpiecze\u0144stwa obiekt\u00f3w.<\/p>\n<p>O ile to mo\u017cliwe, infrastruktura <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code> przekazuje wywo\u0142ania metod dla atrybut\u00f3w i relacji rozszerzenia obiektu biznesowego z <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code>do bazowego obiektu biznesowego. W poni\u017cszych przypadkach konieczne jest jednak programowanie w rozszerzeniu <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code>:<\/p>\n<ul>\n<li>dost\u0119p do atrybut\u00f3w wirtualnych<\/li>\n<li>dost\u0119p do atrybut\u00f3w podlegaj\u0105cych translacji (NLS)<\/li>\n<li>dost\u0119p do wirtualnych lub obliczanych relacji<\/li>\n<li>dost\u0119p do relacji do widoku obiektu zamiast obiektu biznesowego<\/li>\n<li>kontrola widoczno\u015bci i zmienno\u015bci p\u00f3l w dostosowywanym interfejsie<\/li>\n<\/ul>\n<p>Dost\u0119py te s\u0105 zaimplementowane w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code> w taki sam spos\u00f3b jak w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataObject<\/code>, jak opisano w rozdziale <em><a href=\"#i\">Implementacja obiektu DataObject<\/a><\/em>.<\/p>\n<p>DataExtension ma dost\u0119p do atrybut\u00f3w obiektu biznesowego, w tym atrybut\u00f3w rozszerze\u0144 obiektu biznesowego, za po\u015brednictwem <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code> lub <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataAccess<\/code> . Infrastruktura <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code> zapewnia, \u017ce dost\u0119p do zapisu jest mo\u017cliwy tylko do atrybut\u00f3w rozszerze\u0144 obiekt\u00f3w biznesowych w jego w\u0142asnej przestrzeni nazw.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">DataExtension nie ma dost\u0119pu do przej\u015bciowej instancji obiektu biznesowego.<\/div><\/section>\n<p>Je\u015bli relacje z w\u0142a\u015bciwo\u015bci\u0105 <em>READ_ONLY<\/em> lub <em>MUTABLE<\/em> lub atrybutami wirtualnymi s\u0105 zdefiniowane w rozszerzeniu warstwy obiektu, powi\u0105zane metody <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataView<\/code> lub <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataAccess<\/code> nie mog\u0105 by\u0107 u\u017cywane w implementacji rozszerzenia <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataExtension<\/code>. Je\u015bli mimo to metody te zostan\u0105 u\u017cyte, wyst\u0105pi b\u0142\u0105d uruchomienia.<\/p>\n<p>Encje APP mo\u017cna rozszerzy\u0107 o nowe funkcje za pomoc\u0105 hook\u00f3w. Na przyk\u0142ad, nowe zale\u017cno\u015bci w encji APP s\u0105 zwykle zarz\u0105dzane w hookach stanowych. Instancja tego hooka stanowego mo\u017ce by\u0107 odpytywana za pomoc\u0105 gettera dla wielu widok\u00f3w obiekt\u00f3w w DataView. Je\u015bli ten getter jest u\u017cywany w DataExtension, hook stanowy nale\u017c\u0105cy do przestrzeni nazw rozwoju DataExtension jest zwracany przez getter.<\/p>\n<p>Podobnie jak DataObject, DataExtension jest tylko po\u015brednikiem. Instancje DataExtension s\u0105 cz\u0119\u015bciowo tworzone podczas uzyskiwania dost\u0119pu do DataView. Dla obiektu biznesowego w encji APP mo\u017ce istnie\u0107 kilka DataObject z kilkoma DataExtension w tym samym czasie. Instancje DataExtension s\u0105 cz\u0119sto przebudowywane i odrzucane.<\/p>\n<p>Implementacja DataExtension musi spe\u0142nia\u0107 nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>DataExtension musi posiada\u0107 konstruktor bez parametr\u00f3w<\/li>\n<li>jawny konstruktor nie jest konieczny<\/li>\n<li>konstruktor nie mo\u017ce zawiera\u0107 z\u0142o\u017conych oblicze\u0144<\/li>\n<li>DataExtension nie mo\u017ce przechowywa\u0107 w\u0142asnego stanu<\/li>\n<li>DataExtension nie mo\u017ce wywo\u0142ywa\u0107 \u017cadnych metod na DataView, kt\u00f3re s\u0105 zaimplementowane w tym samym DataExtension<\/li>\n<\/ul>\n<div><\/div>\n<div>Podczas definiowania rozszerzenia warstwy obiekt\u00f3w okre\u015blana jest klasa powi\u0105zanego rozszerzenia DataExtension.<\/div>\n<div><\/div>\n<div>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><span style=\"color: initial;\">Przyk\u0142ad implementuje wirtualny atrybut i niewirtualn\u0105 relacj\u0119 dla rozszerzenia warstwy obiektu.<\/span><\/p>\n<p>Niewirtualna relacja wymaga implementacji w DataExtension, poniewa\u017c obiekt biznesowy ItemFashionExtension jest logicznie zale\u017cny w jednostce biznesowej.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class ItemExtension extends DataExtension&lt;ItemView, ItemAccess&gt; {\n\npublic short getXyz_derivedState() {\n\nreturn\n\ngetView().getSalesStatus()*100+\n\ngetView().getInventoryStatus();\n\n}\n\nDataObject&lt;FashionExtension&gt; retrieveXyz_ItemFashionExtension() {\n\nXyzItemEntityState state =\n\n(XyzItemEntityState)getView().getEntityState();\n\nreturn new DataObject&lt;FashionExtension&gt;\n\n(state.getFashionExtension());\n\n}\n\n}<\/pre>\n<p><span style=\"color: initial;\"><\/div><\/section><\/span><\/p>\n<\/div>\n<div><\/div>\n<h5 id=\"datadescriptionmodification\" ><span class=\"ez-toc-section\" id=\"DataDescriptionModification\"><\/span>DataDescriptionModification<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Widoczno\u015b\u0107 i zmienno\u015b\u0107 p\u00f3l dostosowywanego interfejsu jest kontrolowana w <em>DataExtension<\/em> lub w <em>DataObject<\/em> poprzez <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataDescriptionModification<\/code>. Je\u015bli kilka \u017ar\u00f3de\u0142 generuje r\u00f3\u017cne <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataDescriptionModifications<\/code> \u00a0dla tego samego pola, s\u0105 one automatycznie \u0142\u0105czone.<\/p>\n<h6 id=\"datadescriptionmodification-dla-biezacego-widoku-obiektu\" ><span class=\"ez-toc-section\" id=\"DataDescriptionModification_dla_biezacego_widoku_obiektu\"><\/span>DataDescriptionModification dla bie\u017c\u0105cego widoku obiektu<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Aby zmieni\u0107 DataDescriptionModification dla atrybut\u00f3w widoku obiektu, do kt\u00f3rego nale\u017cy <em>DataObject<\/em> lub <em>DataExtension<\/em>, nale\u017cy nadpisa\u0107 metod\u0119 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">getDataDescriptionModification(Enum)<\/code>. Metoda ta jest przeznaczona do identyfikacji <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataDescriptionModification<\/code> dla atrybutu bie\u017c\u0105cego widoku obiektu.<\/p>\n<p>W implementacji nale\u017cy upewni\u0107 si\u0119, \u017ce metoda ta jest wywo\u0142ywana dla wszystkich atrybut\u00f3w, w tym atrybut\u00f3w z rozszerze\u0144 zewn\u0119trznych.<\/p>\n<p>Je\u015bli tylko niekt\u00f3re pola maj\u0105 mie\u0107 wp\u0142yw, mo\u017cna zastosowa\u0107 nast\u0119puj\u0105cy wzorzec:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public DataDescriptionModification getDataDescriptionModification(Enum attribute) {\n\nswitch (((CountryView.Attribute) attribute)) {\n\ncase $ado_countryEuroCurrency:\n\nif (!getView().isEuMember()) {\n\nreturn DataDescriptionModification.READ_ONLY;\n\n}\n\nbreak;\n\n}\n\nreturn super.getDataDescriptionModification(attribute);\n\n}\n\nAby wp\u0142ywa\u0107 na wszystkie w\u0142asne pola, ale bez p\u00f3l zewn\u0119trznych, mo\u017cna u\u017cy\u0107 metody isAssociated(), aby sprawdzi\u0107, czy atrybut pochodzi z w\u0142asnej aplikacji lub adaptacji.\n\npublic DataDescriptionModification getDataDescriptionModification(Enum attribute) {\n\nif ( !isAssociated(attribute)) {\n\nreturn super.getDataDescriptionModification(attribute);\n\n} else if ( !isEnabled()) {\n\nreturn DataDescriptionModification.EXCLUDED;\n\n}\n\nif (attribute==Item.Attribute.$xyz &amp;&amp; isX()) {\n\nreturn DataDescriptionModification.READ_ONLY;\n\n} else {\n\nreturn DataDescriptionModification.UNMODIFIED;\n\n}\n\n}<\/pre>\n<h6 id=\"datadescriptionmodification-dla-zdalnych-widokow-obiektow\" ><span class=\"ez-toc-section\" id=\"DataDescriptionModification_dla_zdalnych_widokow_obiektow\"><\/span>DataDescriptionModification dla zdalnych widok\u00f3w obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Aby zmieni\u0107 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataDescriptionModification<\/code> dla atrybut\u00f3w widok\u00f3w obiekt\u00f3w, do kt\u00f3rych mo\u017cna dotrze\u0107 poprzez relacje 1:1, zaczynaj\u0105c od bie\u017c\u0105cego widoku obiektu, nale\u017cy zaimplementowa\u0107 interfejs <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataObject.DataDescriptionModificationProvider<\/code>z metod\u0105 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">getDataDescriptionModification(Path)<\/code>. Metoda ta ma na celu okre\u015blenie <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DataDescriptionModification<\/code>\u00a0dla \u015bcie\u017cki opartej na bie\u017c\u0105cym widoku obiektu.<\/p>\n<p>Podczas implementacji metody <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">getDataDescriptionModification(Path)<\/code> nale\u017cy pami\u0119ta\u0107, podobnie jak w przypadku metody \u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">getDataDescriptionModification(Enum)<\/code>, \u017ce mo\u017cna wp\u0142ywa\u0107 na w\u0142a\u015bciwo\u015bci atrybut\u00f3w zewn\u0119trznych.<\/p>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce \u015bcie\u017cki niekoniecznie s\u0105 unikalne. Kilka r\u00f3\u017cnych \u015bcie\u017cek mo\u017ce prowadzi\u0107 z tego samego widoku obiektu do tego samego miejsca docelowego. Dlatego, je\u015bli to mo\u017cliwe, nale\u017cy por\u00f3wnywa\u0107 tylko odpowiednie cz\u0119\u015bci \u015bcie\u017cki, ale nie ca\u0142\u0105 \u015bcie\u017ck\u0119. \u015acie\u017cka oferuje w tym celu metody <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">startsWith, endsWith<\/code>\u00a0i\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">contains<\/code>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public DataDescriptionModification getDataDescriptionModification(Path path) {\n\n\u00a0 \u00a0 if ((! isMyAddressEnabled()) &amp;&amp;\n\u00a0 \u00a0 \u00a0 \u00a0 path.contains(Relations.$MyAddress)) {\n\u00a0 \u00a0 \u00a0 \u00a0 return DataDescriptionModification.DISABLED;\n\u00a0 \u00a0 }\n\u00a0 \u00a0 return DataDescriptionModification.UNMODIFIED;\n}<\/pre>\n<p><span style=\"color: initial;\"><\/div><\/section><\/span><\/p>\n<h4 id=\"dalsze-opcje\" ><span class=\"ez-toc-section\" id=\"Dalsze_opcje\"><\/span>Dalsze opcje<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<h5 id=\"komponenty-gui\" ><span class=\"ez-toc-section\" id=\"Komponenty_GUI\"><\/span>Komponenty GUI<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Komponenty GUI mog\u0105 by\u0107 r\u00f3wnie\u017c dost\u0119pne w konfigurowalnym interfejsie. Mog\u0105 by\u0107 widokami z kilkoma polami, tabel\u0105 lub list\u0105. W trybie projektowania komponent GUI jest umieszczany jako ca\u0142o\u015b\u0107 w interfejsie u\u017cytkownika aplikacji.<\/p>\n<p>W widoku obiektu komponent GUI jest reprezentowany przez wirtualny atrybut <em>boolean<\/em>, jak w poni\u017cszym przyk\u0142adzie. Logiczny typ danych atrybutu wirtualnego musi by\u0107 oparty na typie danych <em>boolean<\/em>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;virtualattribute property=\"READ_ONLY\"&gt;\n&lt;name&gt;xyz_address&lt;\/name&gt;\n&lt;datatype&gt;com.xyz.ext.app.addon1.AddressComponent&lt;\/datatype&gt;\n&lt;\/virtualattribute&gt;<\/pre>\n<p><span style=\"font-size: revert; color: initial;\"><\/div><\/section><\/span><\/p>\n<p>Metody dost\u0119pu do atrybutu wirtualnego musz\u0105 by\u0107 zaimplementowane w DataObject lub DataExtension. Komponenty GUI nie otrzymuj\u0105 swoich danych poprzez te metody dost\u0119pu, ale poprzez widok obiektu, kt\u00f3ry jest dost\u0119pny w AttriubteContext w komponencie GUI.<\/p>\n<p>Tabele lub listy, w kt\u00f3rych maj\u0105 by\u0107 wy\u015bwietlane dane relacji 1:n, mog\u0105 by\u0107 realizowane za pomoc\u0105 klas PGM <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisObjectContainer<\/code>\u00a0(przechowywanie danych) i <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">ContainerTableEditor\u00a0<\/code>(komponent GUI).<\/p>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9675","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-interfejsy-techniczne"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9675","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=9675"}],"version-history":[{"count":21,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9675\/revisions"}],"predecessor-version":[{"id":30286,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9675\/revisions\/30286"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}