{"id":9262,"date":"2026-03-20T18:10:00","date_gmt":"2026-03-20T17:10:00","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9262"},"modified":"2026-03-23T11:19:18","modified_gmt":"2026-03-23T10:19:18","slug":"jpmodyfikacje-baz-danych","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/","title":{"rendered":"Modyfikacje baz danych"},"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\/jpmodyfikacje-baz-danych\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Wymagania_wstepne\" >Wymagania wst\u0119pne<\/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\/jpmodyfikacje-baz-danych\/#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\/jpmodyfikacje-baz-danych\/#Przyklad_klas_aktualizacji\" >Przyk\u0142ad klas aktualizacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Przyklad_rozwoju_partnera\" >Przyk\u0142ad rozwoju partnera<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Przyklad_rozwoju_klienta\" >Przyk\u0142ad rozwoju klienta<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Zmiana_modelu_danych\" >Zmiana modelu danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Ogolny_dostep_do_obiektow_biznesowych\" >Og\u00f3lny dost\u0119p do obiekt\u00f3w biznesowych<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Schemat_obiektu\" >Schemat obiektu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Dostep_ogolny\" >Dost\u0119p og\u00f3lny<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Korzystanie_z_transakcji\" >Korzystanie z transakcji<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Klasy_aktualizacji\" >Klasy aktualizacji<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Metoda_Init\" >Metoda Init<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Metoda_Init_przy_ponownym_utworzeniu\" >Metoda Init przy ponownym utworzeniu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Metody_Init_dla_atrybutow_czesci\" >Metody Init dla atrybut\u00f3w cz\u0119\u015bci<\/a><\/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\/jpmodyfikacje-baz-danych\/#Metoda_ChangeDatatype\" >Metoda ChangeDatatype<\/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\/jpmodyfikacje-baz-danych\/#Usuwanie_instancji\" >Usuwanie instancji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Typy_danych\" >Typy danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Inicjalizacja\" >Inicjalizacja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Dostep_do_danych_aplikacji_Konfiguracja\" >Dost\u0119p do danych aplikacji Konfiguracja<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Konwersja\" >Konwersja<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Konwersja_przez_baze_danych\" >Konwersja przez baz\u0119 danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Konwersja_za_posrednictwem_serwera_aplikacji\" >Konwersja za po\u015brednictwem serwera aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Widoki\" >Widoki<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Narzedzia_generowania\" >Narz\u0119dzia generowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Rozszerzenia\" >Rozszerzenia<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Rozszerzenia_dla_czesci\" >Rozszerzenia dla cz\u0119\u015bci<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Rozszerzanie_atrybutu_string\" >Rozszerzanie atrybutu string<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Metody_inicjowania\" >Metody inicjowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Normalny_transport\" >Normalny transport<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Konserwacja_rownolegla\" >Konserwacja r\u00f3wnoleg\u0142a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Aplikacje\" >Aplikacje<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Funkcje_specjalne\" >Funkcje specjalne<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Atrybuty_mozliwe_do_zlokalizowania\" >Atrybuty mo\u017cliwe do zlokalizowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Tworzenie_nowych_elementow\" >Tworzenie nowych element\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Zmiany_klucza_glownego\" >Zmiany klucza g\u0142\u00f3wnego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/jpmodyfikacje-baz-danych\/#Referencje_obiektow\" >Referencje obiekt\u00f3w<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ka\u017cdy deweloper wprowadzaj\u0105cy zmiany w schemacie bazy danych powinien by\u0107 zaznajomiony z podstawow\u0105 zasad\u0105 dzia\u0142ania narz\u0119dzi generuj\u0105cych.<\/p>\n<h3 id=\"wymagania-wstepne\" ><span class=\"ez-toc-section\" id=\"Wymagania_wstepne\"><\/span>Wymagania wst\u0119pne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Do zrozumienia niniejszego artyku\u0142u wymagana jest znajomo\u015b\u0107 podstaw dzia\u0142ania us\u0142ugi persystencji. Szczeg\u00f3\u0142owe informacje dotycz\u0105ce us\u0142ugi persystencji znajduj\u0105 si\u0119 w artykule<em><a title=\"Persistence service\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/persistence-service\/\">\u00a0Persistence service.<\/a><\/em><\/p>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zmiany modelu danych w obiektach biznesowych (Business Object) musz\u0105 by\u0107 starannie zaplanowane, poniewa\u017c nieprawid\u0142owo przeprowadzone modyfikacje mog\u0105 prowadzi\u0107 do utraty danych u klienta. Zmiany modelu danych powinny by\u0107 wykonywane w systemie produkcyjnym mo\u017cliwie jak najszybciej.<\/p>\n<p>Klasa aktualizacji zawiera regu\u0142y oraz algorytmy umo\u017cliwiaj\u0105ce realizacj\u0119 zada\u0144 zwi\u0105zanych ze zmianami modelu danych. Zakres klasy aktualizacji ogranicza si\u0119 do zada\u0144 podstawowych, czyli operacji wykonywanych na kolumnach obiektu biznesowego, takich jak inicjalizacje oraz modyfikacje. Dla ka\u017cdej zmienionej kolumny obiektu biznesowego klasa aktualizacji zawiera informacj\u0119 okre\u015blaj\u0105c\u0105 spos\u00f3b obs\u0142ugi danej zmiany.<\/p>\n<p>Klasa aktualizacji jest tworzona podczas pierwszej zmiany lub nowego utworzenia obiektu biznesowego. Przy kolejnych zmianach dodawane s\u0105 odpowiednie metody, kt\u00f3re mog\u0105 lub musz\u0105 zosta\u0107 zmodyfikowane przez programist\u0119. Proces generowania nigdy nie usuwa metod ani zmiennych z klas aktualizacji \u2013 w razie potrzeby dodawane s\u0105 wy\u0142\u0105cznie nowe metody.<\/p>\n<p>Klasa aktualizacji mo\u017ce by\u0107 modyfikowana wy\u0142\u0105cznie w tym systemie, w kt\u00f3rym powsta\u0142 lub zosta\u0142 zmieniony powi\u0105zany obiekt biznesowy albo rozszerzenie. Takie podej\u015bcie zapobiega powstawaniu konflikt\u00f3w w tej klasie podczas instalowania aktualizacji oprogramowania, kt\u00f3ra j\u0105 zawiera, oraz sytuacji, w kt\u00f3rej powi\u0105zany obiekt biznesowy zosta\u0142by skonwertowany z u\u017cyciem zmodyfikowanej klasy zamiast klasy pochodz\u0105cej z aktualizacji oprogramowania.<\/p>\n<p>Dla ka\u017cdego obiektu biznesowego oraz ka\u017cdego rozszerzenia istniej\u0105 oddzielne klasy aktualizacji. Ka\u017cda z tych klas odpowiada za atrybuty przypisanego obiektu. Dzi\u0119ki temu nie powstaj\u0105 konflikty wymagaj\u0105ce r\u0119cznej ingerencji, na przyk\u0142ad w sytuacji, gdy standardowy obiekt biznesowy jest rozszerzany za pomoc\u0105 rozszerzenia. Klasy aktualizacji s\u0105 zapisywane w przestrzeni nazw <em data-start=\"1858\" data-end=\"1893\">com.&lt;prefiks_deweloperski&gt;.upd<\/em>, na przyk\u0142ad <em data-start=\"1907\" data-end=\"1927\">com.cisag.upd.app\u2026<\/em> lub <em data-start=\"1932\" data-end=\"1952\">com.cisag.upd.sys\u2026<\/em>.<\/p>\n<p>Klasy aktualizacji implementuj\u0105 logik\u0119 umo\u017cliwiaj\u0105c\u0105 transformacj\u0119 trwa\u0142ych danych obiektu biznesowego lub rozszerzenia z dowolnej wersji \u017ar\u00f3d\u0142owej do aktualnej wersji docelowej.<\/p>\n<p data-start=\"2135\" data-end=\"2462\">Zmiany modelu danych s\u0105 analizowane osobno dla ka\u017cdej kolumny. W standardowym trybie przetwarzania wszystkie zmiany kolumn s\u0105 rejestrowane z u\u017cyciem domy\u015blnego zachowania, kt\u00f3re mo\u017ce zosta\u0107 nadpisane przez programist\u0119. R\u00f3\u017cnice pomi\u0119dzy schematem \u017ar\u00f3d\u0142owym a schematem docelowym decyduj\u0105 o tym, kt\u00f3re metody zostan\u0105 zastosowane.<\/p>\n<p data-start=\"2464\" data-end=\"2514\">Klasy aktualizacji obs\u0142uguj\u0105 nast\u0119puj\u0105ce operacje:<\/p>\n<ul>\n<li>Inicjalizacja nowych kolumn (metoda <em>Init<\/em>)<\/li>\n<li>Sta\u0142e warto\u015bci pocz\u0105tkowe<\/li>\n<li>Zmiana typu danych istniej\u0105cych kolumn (metoda <em>ChangeDatatype<\/em>)<\/li>\n<li>Niezgodna zmiana typu danych<\/li>\n<\/ul>\n<h4 id=\"przyklad-klas-aktualizacji\" ><span class=\"ez-toc-section\" id=\"Przyklad_klas_aktualizacji\"><\/span>Przyk\u0142ad klas aktualizacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Ten przyk\u0142ad ma na celu wyja\u015bnienie dzia\u0142ania klas aktualizacji. Zmiany w obiekcie biznesowym i zastosowane metody klasy aktualizacji zapisano pogrubion\u0105 czcionk\u0105.<\/p>\n<p>Przyk\u0142ad standardowy<\/p>\n<figure id=\"attachment_43246\" aria-describedby=\"caption-attachment-43246\" style=\"width: 1042px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43246 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed.png\" alt=\"\" width=\"1042\" height=\"222\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed.png 1042w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-300x64.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-1024x218.png 1024w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-768x164.png 768w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-50x11.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-920x196.png 920w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-600x128.png 600w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/diagram_update_classes_fixed-320x68.png 320w\" sizes=\"auto, (max-width: 1042px) 100vw, 1042px\" \/><\/a><figcaption id=\"caption-attachment-43246\" class=\"wp-caption-text\">Przyk\u0142ad klas aktualizacji dla zmian w standardzie<\/figcaption><\/figure>\n<p data-start=\"0\" data-end=\"187\">W powy\u017cszym przyk\u0142adzie <em>Business Object Item<\/em> jest zmieniany dwukrotnie. Najpierw atrybut <em data-start=\"93\" data-end=\"106\">description<\/em> zostaje skr\u00f3cony ze 100 do 80 znak\u00f3w, a nast\u0119pnie dodany zostaje atrybut <em data-start=\"180\" data-end=\"186\">unit<\/em>.<\/p>\n<ul data-start=\"189\" data-end=\"398\">\n<li data-section-id=\"8e0pc\" data-start=\"189\" data-end=\"325\">\n<p data-start=\"191\" data-end=\"325\"><strong data-start=\"191\" data-end=\"234\">Metoda <em>changeDatatype\u20acdescription\u20acstr100_str80<\/em><\/strong> \u2013 oblicza niekompatybiln\u0105 zmian\u0119 typu danych atrybutu <em data-start=\"289\" data-end=\"302\">description<\/em> ze 100 do 80 znak\u00f3w<\/p>\n<\/li>\n<li data-section-id=\"1dffrl7\" data-start=\"326\" data-end=\"398\">\n<p data-start=\"328\" data-end=\"398\"><strong data-start=\"328\" data-end=\"341\">Metoda <em>init\u20acunit<\/em><\/strong> \u2013 oblicza warto\u015b\u0107 pocz\u0105tkow\u0105 dla nowego atrybutu <em data-start=\"391\" data-end=\"397\">unit<\/em><\/p>\n<\/li>\n<\/ul>\n<p>Metody s\u0105 wywo\u0142ywane podczas wykonywania zmiany modelu danych.<\/p>\n<h4 id=\"przyklad-rozwoju-partnera\" ><span class=\"ez-toc-section\" id=\"Przyklad_rozwoju_partnera\"><\/span>Przyk\u0142ad rozwoju partnera<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<figure id=\"attachment_43248\" aria-describedby=\"caption-attachment-43248\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43248 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2.png\" alt=\"\" width=\"1000\" height=\"310\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2.png 1000w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-300x93.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-768x238.png 768w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-50x16.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-920x285.png 920w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-600x186.png 600w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_2-320x99.png 320w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><figcaption id=\"caption-attachment-43248\" class=\"wp-caption-text\">Tworzenie rozszerzenia i importowanie standardowego rozszerzenia<\/figcaption><\/figure>\n<p data-start=\"0\" data-end=\"268\">Najpierw tworzy si\u0119 rozszerzenie dla obiektu biznesowego <em data-start=\"57\" data-end=\"63\">Item<\/em> z atrybutami <em data-start=\"77\" data-end=\"87\">abc_type<\/em> i <em data-start=\"90\" data-end=\"101\">abc_color<\/em>, a nast\u0119pnie importuje si\u0119 wersj\u0119 1.1 obiektu <em data-start=\"148\" data-end=\"154\">Item<\/em>. W przypadku rozszerzenia nie jest wymagana r\u0119czna obs\u0142uga konflikt\u00f3w w klasach aktualizacji obiektu biznesowego.<\/p>\n<ul data-start=\"270\" data-end=\"431\">\n<li data-section-id=\"jsmiw9\" data-start=\"270\" data-end=\"349\">\n<p data-start=\"272\" data-end=\"349\">Metoda <strong data-start=\"279\" data-end=\"296\">init\u20acabc_type<\/strong> \u2013 oblicza warto\u015b\u0107 pocz\u0105tkow\u0105 dla kolumny <em data-start=\"338\" data-end=\"348\">abc_type<\/em><\/p>\n<\/li>\n<li data-section-id=\"xea4vd\" data-start=\"350\" data-end=\"431\">\n<p data-start=\"352\" data-end=\"431\">Metoda <strong data-start=\"359\" data-end=\"377\">init\u20acabc_color<\/strong> \u2013 oblicza warto\u015b\u0107 pocz\u0105tkow\u0105 dla kolumny <em data-start=\"419\" data-end=\"430\">abc_color<\/em><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"433\" data-end=\"682\" data-is-last-node=\"\" data-is-only-node=\"\">Podczas tworzenia rozszerzenia wywo\u0142ywane s\u0105 metody klas aktualizacji rozszerzenia. W przypadku zmiany bazowego obiektu biznesowego <em data-start=\"565\" data-end=\"571\">Item<\/em> nie ma konieczno\u015bci zmiany klas aktualizacji i nie s\u0105 wywo\u0142ywane \u017cadne metody klasy aktualizacji rozszerzenia.<\/p>\n<h4 id=\"przyklad-rozwoju-klienta\" ><span class=\"ez-toc-section\" id=\"Przyklad_rozwoju_klienta\"><\/span>Przyk\u0142ad rozwoju klienta<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<figure id=\"attachment_43249\" aria-describedby=\"caption-attachment-43249\" style=\"width: 680px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43249 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3.png\" alt=\"\" width=\"680\" height=\"440\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3.png 680w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3-300x194.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3-50x32.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3-600x388.png 600w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_3-320x207.png 320w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/a><figcaption id=\"caption-attachment-43249\" class=\"wp-caption-text\">Rozszerzenie z cz\u0119\u015bci\u0105 w dostosowywaniu klienta<\/figcaption><\/figure>\n<p data-start=\"45\" data-end=\"444\">Analogicznie do systemu rozszerze\u0144 partnerskich, r\u00f3wnie\u017c w systemie adaptacji klienta nie jest wymagana r\u0119czna obs\u0142uga konflikt\u00f3w w klasach aktualizacji obiektu biznesowego ani rozszerze\u0144 obiektu biznesowego z systemu rozszerze\u0144 partnerskich. Wraz z rozszerzeniem obiektu biznesowego <em data-start=\"329\" data-end=\"339\">XYZ_Item<\/em> dodawane s\u0105 atrybuty typu Part <em data-start=\"371\" data-end=\"387\">xyz_coordinate<\/em> z Part <em data-start=\"395\" data-end=\"407\">Coordinate<\/em> oraz <em data-start=\"413\" data-end=\"425\">xyz_length<\/em> z Part <em data-start=\"433\" data-end=\"443\">Quantity<\/em>.<\/p>\n<ul data-start=\"446\" data-end=\"1067\">\n<li data-section-id=\"17xra4o\" data-start=\"446\" data-end=\"763\">\n<p data-start=\"448\" data-end=\"763\"><strong data-start=\"448\" data-end=\"474\">Metoda init\u20acxyz_length<\/strong> \u2013 oblicza warto\u015b\u0107 pocz\u0105tkow\u0105 kolumn atrybutu typu Part <em data-start=\"530\" data-end=\"542\">xyz_length<\/em>.<br data-start=\"543\" data-end=\"546\" \/>Part <em data-start=\"551\" data-end=\"587\">com.cisag.app.general.obj.Quantity<\/em> jest traktowany przez klasy aktualizacji jako ca\u0142o\u015b\u0107, dlatego mo\u017ce zosta\u0107 zainicjalizowany jako ca\u0142o\u015b\u0107 i istnieje tylko jedna metoda inicjalizacji (patrz sekcja <em data-start=\"749\" data-end=\"761\">Datentypen<\/em>).<\/p>\n<\/li>\n<li data-section-id=\"1ctwnpq\" data-start=\"765\" data-end=\"1067\">\n<p data-start=\"767\" data-end=\"1067\"><strong data-start=\"767\" data-end=\"800\">Metody init\u20acxyz_coordinate\u2026\u20ac\u2026<\/strong> \u2013 obliczaj\u0105 warto\u015bci pocz\u0105tkowe kolumn atrybutu typu Part <em data-start=\"859\" data-end=\"875\">xyz_coordinate<\/em>.<br data-start=\"876\" data-end=\"879\" \/>Dla Part <em data-start=\"888\" data-end=\"900\">Coordinate<\/em> nie ma specjalnego traktowania, dlatego wszystkie kolumny musz\u0105 zosta\u0107 zainicjalizowane osobno i posiadaj\u0105 oddzielne metody inicjalizacji (patrz sekcja <em data-start=\"1053\" data-end=\"1065\">Datentypen<\/em>).<\/p>\n<\/li>\n<\/ul>\n<h3 data-section-id=\"7v3sr9\" data-start=\"1069\" data-end=\"1093\" id=\"zmiana-modelu-danych\" ><span class=\"ez-toc-section\" id=\"Zmiana_modelu_danych\"><\/span>Zmiana modelu danych<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"1095\" data-end=\"1203\">Przebieg zmiany modelu danych zale\u017cy od sposobu przeniesienia danych z wersji \u017ar\u00f3d\u0142owej do wersji docelowej.<\/p>\n<p data-start=\"1205\" data-end=\"1299\" data-is-last-node=\"\" data-is-only-node=\"\">Generowanie obiektu biznesowego podczas prac deweloperskich przebiega w nast\u0119puj\u0105cych krokach:<\/p>\n<figure id=\"attachment_43250\" aria-describedby=\"caption-attachment-43250\" style=\"width: 630px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43250 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4.png\" alt=\"\" width=\"630\" height=\"750\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4.png 630w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4-252x300.png 252w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4-42x50.png 42w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4-600x714.png 600w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_4-320x381.png 320w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><figcaption id=\"caption-attachment-43250\" class=\"wp-caption-text\">Kolejno\u015b\u0107 zmiany modelu danych w systemie deweloperskim<\/figcaption><\/figure>\n<div class=\"flex flex-col text-sm pb-25\">\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae60e2-44c8-832b-8573-b7b24ae19f60-2\" data-testid=\"conversation-turn-16\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"c0f424ad-130f-410c-9b35-43fcbf7d37ee\" data-message-model-slug=\"gpt-5-3\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"436\">Po edycji obiektu biznesowego, widoku lub Part w aplikacji <em data-start=\"59\" data-end=\"82\">Obiekty deweloperskie<\/em> nale\u017cy wygenerowa\u0107 ten obiekt za pomoc\u0105 narz\u0119dzia <em data-start=\"133\" data-end=\"140\">crtbo<\/em>. Podczas tego procesu generowane s\u0105 \u017ar\u00f3d\u0142a Java dla klas Mapper i klas aktualizacji, a tak\u017ce tabele tymczasowe. Nast\u0119pnie, w razie potrzeby, klasy aktualizacji musz\u0105 zosta\u0107 dostosowane przez dewelopera. Zmodyfikowane klasy aktualizacji umo\u017cliwiaj\u0105 testow\u0105 konwersj\u0119 danych do tabel tymczasowych.<\/p>\n<p data-start=\"438\" data-end=\"805\">Serwer aplikacji dewelopera uzyskuje dost\u0119p do tabel tymczasowych (patrz nast\u0119pna sekcja), co umo\u017cliwia sprawdzenie, czy konwersja przebieg\u0142a pomy\u015blnie. Po zatwierdzeniu zadania deweloperskiego dane s\u0105 ponownie konwertowane, a zmiana zostaje aktywowana na wszystkich bazach danych. Po aktywowaniu zmiany modelu danych mo\u017cliwe jest aktywowanie zadania deweloperskiego.<\/p>\n<p data-start=\"807\" data-end=\"1331\" data-is-last-node=\"\" data-is-only-node=\"\">Zmiany modelu danych zazwyczaj stanowi\u0105 ca\u0142o\u015b\u0107 wraz ze zmianami w przetwarzaj\u0105cym kodzie \u017ar\u00f3d\u0142owym. Mo\u017cliwe jest przetestowanie konsekwencji zmiany schematu przed jej aktywowaniem, dzi\u0119ki czemu unika si\u0119 potencjalnego zak\u0142\u00f3cenia pracy innych u\u017cytkownik\u00f3w systemu. Nowe klasy Mapper utworzone w bie\u017c\u0105cym zadaniu deweloperskim uzyskuj\u0105 dost\u0119p do tabeli tymczasowej z nowym schematem i skonwertowanymi danymi, podczas gdy stare (aktywne w systemie klasy Mapper) nadal korzystaj\u0105 z dotychczas aktywnych tabel w starym schemacie.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/div>\n<figure id=\"attachment_43251\" aria-describedby=\"caption-attachment-43251\" style=\"width: 430px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43251 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5.png\" alt=\"\" width=\"430\" height=\"360\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5.png 430w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5-300x251.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5-50x42.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_5-320x268.png 320w\" sizes=\"auto, (max-width: 430px) 100vw, 430px\" \/><\/a><figcaption id=\"caption-attachment-43251\" class=\"wp-caption-text\">Przyk\u0142ad stanu podczas opracowywania zmiany modelu danych<\/figcaption><\/figure>\n<p data-start=\"0\" data-end=\"525\">Nale\u017cy pami\u0119ta\u0107, \u017ce tabele tymczasowe s\u0105 tworzone wy\u0142\u0105cznie dla tych obiekt\u00f3w biznesowych, kt\u00f3re zosta\u0142y zablokowane w zadaniu deweloperskim i w nim wygenerowane. Dost\u0119p do tych tabel jest domy\u015blnie mo\u017cliwy tylko w trybie odczytu. Z tego powodu testowanie aplikacji jest mo\u017cliwe jedynie w ograniczonym zakresie. Parametr startowy serwera aplikacji <em data-start=\"348\" data-end=\"371\">-writeConvertedTables<\/em> umo\u017cliwia w\u0142\u0105czenie zapisu do tabel tymczasowych. Jego u\u017cycie nale\u017cy dok\u0142adnie przeanalizowa\u0107, poniewa\u017c mo\u017cliwe skutki uboczne s\u0105 trudne do przewidzenia.<\/p>\n<p data-start=\"527\" data-end=\"536\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p data-start=\"540\" data-end=\"807\">Je\u015bli w zadaniu deweloperskim zablokowano <em>Entity<\/em>, a jego zale\u017cno\u015bci <em>Dependents <\/em>nie zosta\u0142y zablokowane, podczas tworzenia nowej instancji <em>Entity <\/em>zostanie ona zapisana w tabeli tymczasowej, natomiast <em>Dependents <\/em>tej instancji zostan\u0105 zapisane w aktywnych tabelach.<\/p>\n<p data-start=\"810\" data-end=\"949\">Pozostali u\u017cytkownicy, korzystaj\u0105cy ze starych, nadal aktywnych klas <em>Mapper<\/em>, zapisuj\u0105 nowe <em>Entities <\/em>wy\u0142\u0105cznie w aktywnych tabelach. W rezultacie w bazie danych powstaj\u0105 niesp\u00f3jne stany. Podobne problemy mog\u0105 wyst\u0119powa\u0107 r\u00f3wnie\u017c w przypadku schemat\u00f3w numeracji i licznik\u00f3w.<\/div><\/section><\/p>\n<p data-start=\"1097\" data-end=\"1352\">Aby odczyta\u0107 dane z tabeli tymczasowej w aplikacji <em data-start=\"1148\" data-end=\"1165\">OQL-Anweisungen<\/em>, nale\u017cy umie\u015bci\u0107 s\u0142owo kluczowe CONVERTED_TABLE pomi\u0119dzy nazw\u0105 obiektu biznesowego a nazw\u0105 aliasu. Dost\u0119p do aktywnej tabeli odbywa si\u0119 przy u\u017cyciu s\u0142owa kluczowego ACTIVE_TABLE.<\/p>\n<p data-start=\"1354\" data-end=\"1720\" data-is-last-node=\"\" data-is-only-node=\"\">Nowe tabele mog\u0105 zosta\u0107 aktywowane tylko wtedy, gdy zadanie deweloperskie zosta\u0142o zatwierdzone, ale nie zosta\u0142o jeszcze aktywowane. Zmiany w bazie danych staj\u0105 si\u0119 widoczne dla innych u\u017cytkownik\u00f3w systemu dopiero po aktywacji. Po aktywacji obiektu biznesowego lub widoku nale\u017cy ponownie uruchomi\u0107 wszystkie serwery, kt\u00f3re uzyskuj\u0105 dost\u0119p do tego obiektu biznesowego.<\/p>\n<h3 id=\"ogolny-dostep-do-obiektow-biznesowych\" ><span class=\"ez-toc-section\" id=\"Ogolny_dostep_do_obiektow_biznesowych\"><\/span>Og\u00f3lny dost\u0119p do obiekt\u00f3w biznesowych<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"flex flex-col text-sm pb-25\">\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae5e3f-b7ec-832d-842a-e077e66387f7-8\" data-testid=\"conversation-turn-18\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"4668ee20-6cfe-4493-8b75-87a30805be72\" data-message-model-slug=\"gpt-5-3\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"47\" data-end=\"329\">W klasach aktualizacji nie jest mo\u017cliwy dost\u0119p do obiekt\u00f3w biznesowych przy u\u017cyciu standardowych klas <em>Mapper <\/em>obiektu biznesowego. Wszystkie obiekty biznesowe s\u0105 odczytywane przy u\u017cyciu generycznych klas <em>Mapper<\/em>. W tej sekcji opisano generyczny dost\u0119p do obiekt\u00f3w biznesowych.<\/p>\n<h4 data-section-id=\"xsg70o\" data-start=\"331\" data-end=\"350\" id=\"schemat-obiektu\" ><span class=\"ez-toc-section\" id=\"Schemat_obiektu\"><\/span>Schemat obiektu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"352\" data-end=\"545\">Ka\u017cdy obiekt biznesowy jest w pe\u0142ni opisany za pomoc\u0105 metadanych. Metadane schematu obiektu biznesowego mo\u017cna odczyta\u0107 jako <em>com.cisag.pgm.appserver.CisObjectSchema<\/em> w <em>CisObjectManager<\/em>.<\/p>\n<p data-start=\"547\" data-end=\"717\">W klasach aktualizacji schemat \u017ar\u00f3d\u0142owy i docelowy zmiany modelu danych mo\u017cna odczyta\u0107 za pomoc\u0105 metod<em> CisUpdateBase:getFromSchema<\/em> oraz <em>CisUpdateBase:getToSchema<\/em>.<\/p>\n<p data-start=\"719\" data-end=\"914\">Schemat zawiera mi\u0119dzy innymi opis wszystkich kolumn obiektu biznesowego. Opis kolumn mo\u017cna odczyta\u0107 w schemacie za pomoc\u0105 metod <em>CisObjectSchema:getColumn<\/em> oraz <em>CisObjectSchema:getColumns.<\/em><\/p>\n<p data-start=\"927\" data-end=\"1084\" data-is-last-node=\"\" data-is-only-node=\"\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Na podstawie schematu i odczytu opisu kolumn mo\u017cliwe jest sprawdzenie, czy w schemacie \u017ar\u00f3d\u0142owym podczas zmiany modelu danych istnieje ju\u017c okre\u015blona kolumna.<\/div><\/section><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/div>\n<h4 id=\"dostep-ogolny\" ><span class=\"ez-toc-section\" id=\"Dostep_ogolny\"><\/span>Dost\u0119p og\u00f3lny<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"0\" data-end=\"366\">Us\u0142uga persystencji standardowo uzyskuje dost\u0119p do obiekt\u00f3w biznesowych za pomoc\u0105 wygenerowanych klas <em data-start=\"102\" data-end=\"126\">Business Object Mapper<\/em>. Klasy <em data-start=\"134\" data-end=\"142\">Mapper<\/em> musz\u0105 dok\u0142adnie odpowiada\u0107 tabeli wygenerowanej w bazie danych, w przeciwnym razie dane nie mog\u0105 by\u0107 poprawnie odczytywane i zapisywane. Dla historycznych wersji obiektu biznesowego takie klasy <em data-start=\"337\" data-end=\"345\">Mapper<\/em> nie s\u0105 ju\u017c dost\u0119pne.<\/p>\n<p data-start=\"368\" data-end=\"736\">Klasa <em data-start=\"374\" data-end=\"415\">com.cisag.pgm.datatype.CisGenericObject<\/em> umo\u017cliwia generyczny dost\u0119p do dowolnych wersji obiektu biznesowego. Klasy aktualizacji wykorzystuj\u0105 te generyczne obiekty podczas zmian modelu danych. Ka\u017cdy dost\u0119p do us\u0142ugi persystencji, np. <em data-start=\"609\" data-end=\"620\">getObject<\/em>, kt\u00f3ry w normalnym przypadku zwraca instancj\u0119 obiektu biznesowego, w klasach aktualizacji zwraca obiekt generyczny.<\/p>\n<p data-start=\"738\" data-end=\"1301\">Podczas generycznego dost\u0119pu do obiekt\u00f3w biznesowych mo\u017cna u\u017cywa\u0107 wszystkich metod dost\u0119pu <em data-start=\"829\" data-end=\"846\">Object Managera<\/em>, np. <em data-start=\"852\" data-end=\"863\">getObject<\/em>, <em data-start=\"865\" data-end=\"884\">getObjectIterator<\/em>, <em data-start=\"886\" data-end=\"900\">getResultSet<\/em> itd. <em data-start=\"906\" data-end=\"922\">Object Manager<\/em> zawsze uzyskuje dost\u0119p do wersji obiektu biznesowego aktualnie aktywnej w bazie danych. Dzi\u0119ki generycznemu dost\u0119powi mo\u017cliwe jest odczytanie stanu bazy danych sprzed zmiany modelu danych. Nie jest natomiast mo\u017cliwy dost\u0119p do wyniku transformacji danych. Nie mo\u017cna r\u00f3wnie\u017c u\u017cywa\u0107 metod <em data-start=\"1209\" data-end=\"1226\">Object Managera<\/em> s\u0142u\u017c\u0105cych do zapisu w bazie danych \u2013 mo\u017cliwy jest wy\u0142\u0105cznie odczyt danych.<\/p>\n<p data-start=\"1303\" data-end=\"1500\">Kolumny generycznego obiektu biznesowego mog\u0105 by\u0107 odczytywane za pomoc\u0105 \u015bcie\u017cki atrybutu. Dla ka\u017cdego prymitywnego typu danych oraz dla <em data-start=\"1439\" data-end=\"1454\">Special Parts<\/em> dost\u0119pne s\u0105 odpowiednie metody <em data-start=\"1486\" data-end=\"1491\">Get<\/em> i <em data-start=\"1494\" data-end=\"1499\">Set<\/em>.<\/p>\n<p data-start=\"1502\" data-end=\"1719\">Aby sprawdzi\u0107, czy dla kolumny atrybutu typu <em data-start=\"1547\" data-end=\"1553\">Part<\/em> mo\u017cna odczyta\u0107 prawid\u0142ow\u0105 warto\u015b\u0107, zapytanie kolumny logicznej tego atrybutu <em data-start=\"1631\" data-end=\"1637\">Part<\/em> musi zwr\u00f3ci\u0107 warto\u015b\u0107 prawda. Nazwa tej kolumny odpowiada \u015bcie\u017cce atrybutu <em data-start=\"1712\" data-end=\"1718\">Part<\/em>.<\/p>\n<p data-start=\"1721\" data-end=\"1838\">Za pomoc\u0105 metody <em data-start=\"1738\" data-end=\"1755\">buildPrimaryKey<\/em> mo\u017cna utworzy\u0107 klucz g\u0142\u00f3wny lub zale\u017cny od czasu klucz g\u0142\u00f3wny obiektu biznesowego.<\/p>\n<p data-start=\"1850\" data-end=\"1906\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad u\u017cycia <em data-start=\"1866\" data-end=\"1884\">CisGenericObject<\/em> z <em data-start=\"1887\" data-end=\"1905\">CisObjectManager<\/em>:<\/p>\n<p data-start=\"1850\" data-end=\"1906\">CisGenericObject item = (CisGenericObject)om.getObject(<br \/>\nCisGenericObject.buildPrimaryKey(<br \/>\n\u201ccom.cisag.app.general.obj.Item\u201c,itemGuid)<br \/>\noldDescription=item.getString(\u201ddescription\u201c);<\/div><\/section><\/p>\n<p data-start=\"2098\" data-end=\"2406\">Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119, \u017ce odczyt atrybutu daty lub znacznika czasu, kt\u00f3rego logiczny typ danych bazuje na typie logicznym <em data-start=\"2219\" data-end=\"2257\">com.cisag.sys.kernel.ObjectTimeStamp<\/em>, musi by\u0107 wykonywany metod\u0105 <em data-start=\"2286\" data-end=\"2302\">getTimeStamp()<\/em>, kt\u00f3ra zwraca obiekt <em data-start=\"2324\" data-end=\"2340\">java.util.Date<\/em>. W razie potrzeby warto\u015b\u0107 <em data-start=\"2367\" data-end=\"2376\">CisDate<\/em> nale\u017cy utworzy\u0107 samodzielnie.<\/p>\n<p data-start=\"2408\" data-end=\"2416\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">&#8230;<br \/>\nDate dateValue = item.getTimeStamp(\u201cpurchaseStatusDate\u201d);<br \/>\nByte[] timeZoneGuid = item.getGuid(\u201c_timeZoneGuid\u201d);<br \/>\nCisDate purchaseStatusDate =<br \/>\ncom.cisag.pgm.datatype.CisDateUtility.createCisDate(timeZoneGuid,<br \/>\ndateValue);<br \/>\n&#8230;<\/div><\/section><\/p>\n<h4 id=\"korzystanie-z-transakcji\" ><span class=\"ez-toc-section\" id=\"Korzystanie_z_transakcji\"><\/span>Korzystanie z transakcji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"30\" data-end=\"368\">Przed wywo\u0142aniem metody klasy aktualizacji system automatycznie otwiera transakcj\u0119 dla bazy danych, kt\u00f3ra ma zosta\u0107 poddana konwersji. Dzi\u0119ki temu wszystkie standardowe u\u017cycia <em data-start=\"206\" data-end=\"223\">Object Managera<\/em> dzia\u0142aj\u0105 w odpowiednim kontek\u015bcie transakcji. W przypadku korzystania z automatycznie otwartej transakcji nie jest mo\u017cliwe u\u017cycie podtransakcji.<\/p>\n<p data-start=\"370\" data-end=\"690\">Dozwolone jest otwarcie dodatkowej transakcji najwy\u017cszego poziomu za pomoc\u0105 metody mened\u017cera transakcji <em data-start=\"474\" data-end=\"505\">beginNew(byte[] databaseGuid)<\/em>. Przekazana <em data-start=\"518\" data-end=\"524\">GUID<\/em> bazy danych musi odpowiada\u0107 <em data-start=\"553\" data-end=\"559\">GUID<\/em> bazy danych, kt\u00f3ra ma zosta\u0107 poddana konwersji. Warto\u015b\u0107 t\u0119 nale\u017cy ustali\u0107 za pomoc\u0105 metody <em data-start=\"651\" data-end=\"670\">getDatabaseGuid()<\/em> klasy aktualizacji.<\/p>\n<p data-start=\"692\" data-end=\"768\" data-is-last-node=\"\" data-is-only-node=\"\">Dla nowo utworzonej transakcji mo\u017cliwe jest r\u00f3wnie\u017c tworzenie podtransakcji.<\/p>\n<h3 id=\"klasy-aktualizacji\" ><span class=\"ez-toc-section\" id=\"Klasy_aktualizacji\"><\/span>Klasy aktualizacji<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"24\" data-end=\"279\">Klasy aktualizacji okre\u015blaj\u0105, w jaki spos\u00f3b dane zapisane w schemacie \u017ar\u00f3d\u0142owym s\u0105 przenoszone do schematu docelowego. Klasy aktualizacji definiuj\u0105 transformacj\u0119 danych dla ka\u017cdej kolumny w obiekcie biznesowym za pomoc\u0105 metod <em data-start=\"250\" data-end=\"256\">Init<\/em> oraz <em data-start=\"262\" data-end=\"278\">ChangeDatatype<\/em>.<\/p>\n<p data-start=\"281\" data-end=\"475\">W sekcji <em data-start=\"290\" data-end=\"296\">Opis<\/em> przedstawiono klas\u0119 aktualizacji dla obiekt\u00f3w biznesowych i rozszerze\u0144. W tej sekcji opisano spos\u00f3b implementacji zmiany modelu danych przez dewelopera w tej klasie aktualizacji.<\/p>\n<h4 data-section-id=\"1rg90ei\" data-start=\"477\" data-end=\"492\" id=\"metoda-init\" ><span class=\"ez-toc-section\" id=\"Metoda_Init\"><\/span>Metoda Init<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"494\" data-end=\"898\">Metoda <em data-start=\"501\" data-end=\"507\">Init<\/em> oblicza warto\u015b\u0107 pocz\u0105tkow\u0105 podczas tworzenia nowej kolumny. Warto\u015b\u0107 pocz\u0105tkowa jest wymagana wtedy, gdy kolumna istnieje w schemacie docelowym, ale nie wyst\u0119puje w schemacie \u017ar\u00f3d\u0142owym. Metoda <em data-start=\"700\" data-end=\"706\">Init<\/em> jest generowana w klasie aktualizacji z ustalon\u0105 warto\u015bci\u0105 pocz\u0105tkow\u0105. W razie potrzeby metoda <em data-start=\"802\" data-end=\"808\">Init<\/em> mo\u017ce zosta\u0107 zmieniona w klasie aktualizacji w celu obliczenia innej warto\u015bci pocz\u0105tkowej.<\/p>\n<p data-start=\"900\" data-end=\"964\">Nazwa metody <em data-start=\"913\" data-end=\"919\">Init<\/em> jest tworzona wed\u0142ug nast\u0119puj\u0105cego schematu:<\/p>\n<p data-start=\"966\" data-end=\"1005\"><em>&lt;Java-Datatype&gt; init\u20ac&lt;AttributePath&gt; ()<\/em><\/p>\n<p data-start=\"1007\" data-end=\"1214\">\u015acie\u017cka atrybutu kolumny odpowiada nazwie kolumny w <em data-start=\"1059\" data-end=\"1064\">OQL<\/em>. Nawiasy kwadratowe <em data-start=\"1085\" data-end=\"1089\">[]<\/em> oraz kropka <em data-start=\"1102\" data-end=\"1105\">.<\/em> s\u0105 jednak zast\u0119powane znakiem dolara <em data-start=\"1143\" data-end=\"1146\">$<\/em>, aby \u015bcie\u017cka atrybutu mog\u0142a zosta\u0107 u\u017cyta jako identyfikator metody.<\/p>\n<p data-start=\"1227\" data-end=\"1368\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli \u015bcie\u017cka atrybutu w <em data-start=\"1252\" data-end=\"1257\">OQL<\/em> ma posta\u0107 <em data-start=\"1268\" data-end=\"1295\">discounts[1].discountType<\/em>, w nazwie metody zostanie u\u017cyty ci\u0105g znak\u00f3w <em data-start=\"1340\" data-end=\"1367\">discounts$1$$discountType<\/em>.<\/div><\/section><\/p>\n<p data-start=\"1370\" data-end=\"1457\">Sekcja <em data-start=\"1377\" data-end=\"1389\">Datentypen<\/em> zawiera dodatkowe informacje dotycz\u0105ce typu danych w nazwie metody.<\/p>\n<p data-start=\"1459\" data-end=\"1872\">Dla atrybutu typu <em data-start=\"1477\" data-end=\"1483\">Part<\/em> opr\u00f3cz metod <em data-start=\"1497\" data-end=\"1503\">Init<\/em> powi\u0105zanych kolumn generowana jest dodatkowo metoda <em data-start=\"1556\" data-end=\"1562\">Init<\/em> dla logicznej kolumny <em data-start=\"1585\" data-end=\"1591\">Part<\/em>. Jako \u015bcie\u017ck\u0119 atrybutu wykorzystuje ona \u015bcie\u017ck\u0119 atrybutu <em data-start=\"1649\" data-end=\"1655\">Part<\/em>. Warto\u015b\u0107 zwracana przez metod\u0119 okre\u015bla, czy warto\u015b\u0107 <em data-start=\"1708\" data-end=\"1714\">Part<\/em> jest prawid\u0142owa. Aby zainicjalizowa\u0107 atrybut <em data-start=\"1760\" data-end=\"1766\">Part<\/em> warto\u015bci\u0105, metoda <em data-start=\"1785\" data-end=\"1791\">Init<\/em> logicznej kolumny <em data-start=\"1810\" data-end=\"1816\">Part<\/em> musi zosta\u0107 nadpisana tak, aby zwraca\u0142a warto\u015b\u0107 <em data-start=\"1865\" data-end=\"1871\">true<\/em>.<\/p>\n<p data-start=\"1874\" data-end=\"2153\">Metoda <em data-start=\"1881\" data-end=\"1887\">Init<\/em> jest generowana w klasie aktualizacji obiektu biznesowego, je\u015bli kolumna nale\u017cy do atrybutu obiektu biznesowego. Je\u015bli kolumna nale\u017cy do atrybutu rozszerzenia obiektu biznesowego, metoda <em data-start=\"2075\" data-end=\"2081\">Init<\/em> jest generowana w klasie aktualizacji rozszerzenia obiektu biznesowego.<\/p>\n<p data-start=\"2155\" data-end=\"2163\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p data-start=\"2165\" data-end=\"2259\">Obliczenie warto\u015bci pocz\u0105tkowej kolumny <em data-start=\"2205\" data-end=\"2218\">description<\/em> z typem danych <em data-start=\"2234\" data-end=\"2242\">String<\/em> i d\u0142ugo\u015bci\u0105 100.<\/p>\n<ul>\n<li data-start=\"2261\" data-end=\"2294\"><strong>Klasa aktualizacji \u2013 wygenerowana<\/strong><\/li>\n<\/ul>\n<p data-start=\"2261\" data-end=\"2294\"><em>String init\u20acdescription () {<\/em><br \/>\n<em>return \u201c\u201d;<\/em><br \/>\n<em>}<\/em><\/p>\n<ul>\n<li data-start=\"2348\" data-end=\"2399\"><strong>Klasa aktualizacji \u2013 zmodyfikowana przez dewelopera<\/strong><\/li>\n<\/ul>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>String init\u20acdescription() {<\/em><br \/>\n<em>return \u201cArtikel\u201d);<\/em><br \/>\n<em>}<\/em><\/div><\/section><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 id=\"metoda-init-przy-ponownym-utworzeniu\" ><span class=\"ez-toc-section\" id=\"Metoda_Init_przy_ponownym_utworzeniu\"><\/span>Metoda Init przy ponownym utworzeniu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Ponowne utworzenie kolumny wyst\u0119puje na przyk\u0142ad wtedy, gdy kolumna zosta\u0142a utworzona w wersji <em data-start=\"137\" data-end=\"141\">V1<\/em>, usuni\u0119ta w <em data-start=\"154\" data-end=\"158\">V2<\/em> i ponownie utworzona w <em data-start=\"182\" data-end=\"186\">V3<\/em>. Technicznie nie ma tu r\u00f3\u017cnicy w por\u00f3wnaniu z utworzeniem nowej kolumny, jednak mo\u017ce si\u0119 zdarzy\u0107, \u017ce w klasie aktualizacji nadal istnieje wcze\u015bniejsza metoda <em data-start=\"345\" data-end=\"351\">Init<\/em>. Deweloper powinien to sprawdzi\u0107 i w razie potrzeby dostosowa\u0107. Generowanie nigdy nie usuwa istniej\u0105cych metod z klasy aktualizacji.<\/p>\n<h4 id=\"metody-init-dla-atrybutow-czesci\" ><span class=\"ez-toc-section\" id=\"Metody_Init_dla_atrybutow_czesci\"><\/span>Metody Init dla atrybut\u00f3w cz\u0119\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"527\" data-end=\"861\">Je\u015bli atrybut typu <em data-start=\"546\" data-end=\"552\">Part<\/em> ma zosta\u0107 zainicjalizowany z\u0142o\u017con\u0105 warto\u015bci\u0105, metoda <em data-start=\"606\" data-end=\"614\">init()<\/em> dla logicznej kolumny <em data-start=\"637\" data-end=\"643\">Part<\/em> musi zwraca\u0107 warto\u015b\u0107 <em data-start=\"665\" data-end=\"671\">true<\/em>. W ten spos\u00f3b wskazuje si\u0119, \u017ce warto\u015b\u0107 <em data-start=\"711\" data-end=\"717\">Part<\/em> istnieje. Nazwa tej kolumny odpowiada \u015bcie\u017cce atrybutu atrybutu <em data-start=\"782\" data-end=\"788\">Part<\/em>. Dla wszystkich kolumn <em data-start=\"812\" data-end=\"818\">Part<\/em> generowane s\u0105 odpowiednie metody <em data-start=\"852\" data-end=\"860\">init()<\/em>.<\/p>\n<p data-start=\"863\" data-end=\"956\">Podczas tworzenia nowej kolumny z <em data-start=\"897\" data-end=\"911\">Special-Part<\/em> generowana jest tylko jedna metoda <em data-start=\"947\" data-end=\"955\">init()<\/em>.<\/p>\n<h4 id=\"metoda-changedatatype\" ><span class=\"ez-toc-section\" id=\"Metoda_ChangeDatatype\"><\/span>Metoda ChangeDatatype<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<div class=\"flex flex-col text-sm pb-25\">\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae5e3f-b7ec-832d-842a-e077e66387f7-13\" data-testid=\"conversation-turn-28\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"e54c20b7-6860-4520-9ac1-e413d84d0dbe\" data-message-model-slug=\"gpt-5-3\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"985\" data-end=\"1237\">Typ danych kolumny mo\u017ce zosta\u0107 zmieniony. Aby przekszta\u0142ci\u0107 zawarto\u015b\u0107 kolumny ze starego typu danych do nowego, wymagane jest wykonanie obliczenia. Obliczenie to jest realizowane w metodzie <em data-start=\"1175\" data-end=\"1191\">ChangeDatatype<\/em>, kt\u00f3ra jest generowana w klasie aktualizacji:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>&lt;Java-TargetDatatype&gt;<\/em><br \/>\n<em>changeDatatype\u20ac&lt;AttributePath&gt;\u20ac&lt;SourceDatatype&gt;_&lt;TargetDatatype&gt;(<\/em><br \/>\n<em>CisGenericObject object)<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1362\" data-end=\"2043\">Odpowiednia metoda <em data-start=\"1381\" data-end=\"1397\">ChangeDatatype<\/em> jest oczekiwana i wykonywana wtedy, gdy podczas konwersji zostanie wykryta zmiana typu danych mi\u0119dzy schematem \u017ar\u00f3d\u0142owym a docelowym. Je\u015bli typ danych kolumny zostanie zmieniony wielokrotnie, dla ka\u017cdej potencjalnie wyst\u0119puj\u0105cej zmiany typu danych wymagana jest odpowiednia metoda. Generowanie tworzy jednak tylko jedn\u0105 metod\u0119 dla ostatniej zmiany typu danych w systemie deweloperskim. Za utworzenie ewentualnie brakuj\u0105cych metod <em data-start=\"1828\" data-end=\"1844\">ChangeDatatype<\/em> odpowiada deweloper. Analogicznie metody <em data-start=\"1886\" data-end=\"1902\">ChangeDatatype<\/em> mog\u0105 zosta\u0107 usuni\u0119te, je\u015bli odpowiednia zmiana schematu nie zosta\u0142a jeszcze dostarczona. Decyzj\u0119 w tym zakresie r\u00f3wnie\u017c podejmuje deweloper.<\/p>\n<p data-start=\"2045\" data-end=\"2054\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<ul data-start=\"2056\" data-end=\"2218\">\n<li data-section-id=\"fd8num\" data-start=\"2056\" data-end=\"2111\">\n<p data-start=\"2058\" data-end=\"2111\">tworzona jest nowa kolumna z typem danych <em data-start=\"2100\" data-end=\"2109\">boolean<\/em><\/p>\n<\/li>\n<li data-section-id=\"zqzj1l\" data-start=\"2112\" data-end=\"2155\">\n<p data-start=\"2114\" data-end=\"2155\">typ danych zostaje zmieniony na <em data-start=\"2146\" data-end=\"2153\">short<\/em><\/p>\n<\/li>\n<li data-section-id=\"511afc\" data-start=\"2156\" data-end=\"2218\">\n<p data-start=\"2158\" data-end=\"2218\">typ danych zostaje ponownie zmieniony, tym razem na <em data-start=\"2210\" data-end=\"2218\">String<\/em><\/div><\/section><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2220\" data-end=\"2759\">W takiej sytuacji w drugim kroku generowanie utworzy metod\u0119 <em data-start=\"2280\" data-end=\"2296\">ChangeDatatype<\/em> z <em data-start=\"2299\" data-end=\"2308\">boolean<\/em> na <em data-start=\"2312\" data-end=\"2319\">short<\/em>. W trzecim kroku powstanie metoda <em data-start=\"2354\" data-end=\"2370\">ChangeDatatype<\/em> z <em data-start=\"2373\" data-end=\"2380\">short<\/em> na <em data-start=\"2384\" data-end=\"2392\">String<\/em>. Je\u015bli zmiana modelu danych z pierwszego kroku zosta\u0142a ju\u017c dostarczona, deweloper musi dodatkowo utworzy\u0107 metod\u0119 <em data-start=\"2506\" data-end=\"2522\">ChangeDatatype<\/em> z <em data-start=\"2525\" data-end=\"2534\">boolean<\/em> na <em data-start=\"2538\" data-end=\"2546\">String<\/em>. Z drugiej strony metody <em data-start=\"2572\" data-end=\"2588\">ChangeDatatype<\/em> mog\u0105 zosta\u0107 usuni\u0119te, je\u015bli zmiany schematu nie zosta\u0142y jeszcze dostarczone i na potencjalnych systemach docelowych b\u0119dzie wykonywana jedynie inicjalizacja typu <em data-start=\"2750\" data-end=\"2758\">String<\/em>.<\/p>\n<p data-start=\"2761\" data-end=\"2940\">Zmiana modelu danych jest kompatybilna, je\u015bli prymitywny typ danych nie zostaje zmieniony, a d\u0142ugo\u015b\u0107 typu danych zostaje zwi\u0119kszona. Wszystkie pozosta\u0142e zmiany s\u0105 niekompatybilne.<\/p>\n<p data-start=\"2942\" data-end=\"2951\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<ul data-start=\"2953\" data-end=\"3251\">\n<li data-section-id=\"vf1sf5\" data-start=\"2953\" data-end=\"3011\">\n<p data-start=\"2955\" data-end=\"3011\">zmiana z <em data-start=\"2964\" data-end=\"2975\">String 80<\/em> na <em data-start=\"2979\" data-end=\"2991\">String 100<\/em> jest kompatybilna<\/p>\n<\/li>\n<li data-section-id=\"1bnd0pu\" data-start=\"3012\" data-end=\"3073\">\n<p data-start=\"3014\" data-end=\"3073\">zmiana z <em data-start=\"3023\" data-end=\"3035\">String 100<\/em> na <em data-start=\"3039\" data-end=\"3050\">String 90<\/em> jest niekompatybilna<\/p>\n<\/li>\n<li data-section-id=\"1j31y6y\" data-start=\"3074\" data-end=\"3137\">\n<p data-start=\"3076\" data-end=\"3137\">zmiana z <em data-start=\"3085\" data-end=\"3099\">Decimal 10,3<\/em> na <em data-start=\"3103\" data-end=\"3117\">Decimal 17,6<\/em> jest kompatybilna<\/p>\n<\/li>\n<li data-section-id=\"1v0b0bl\" data-start=\"3138\" data-end=\"3193\">\n<p data-start=\"3140\" data-end=\"3193\">zmiana z <em data-start=\"3149\" data-end=\"3156\">Short<\/em> na <em data-start=\"3160\" data-end=\"3170\">ValueSet<\/em> jest niekompatybilna<\/p>\n<\/li>\n<li data-section-id=\"zlr793\" data-start=\"3194\" data-end=\"3251\">\n<p data-start=\"3196\" data-end=\"3251\">zmiana z <em data-start=\"3205\" data-end=\"3214\">Boolean<\/em> na <em data-start=\"3218\" data-end=\"3228\">ValueSet<\/em> jest niekompatybilna<\/div><\/section><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"3253\" data-end=\"3594\">Je\u015bli zmiana typu danych jest niekompatybilna, metody <em data-start=\"3307\" data-end=\"3323\">ChangeDatatype<\/em> s\u0105 generowane w klasie <em data-start=\"3347\" data-end=\"3355\">Update<\/em>, ale bez zdefiniowanej warto\u015bci zwracanej. Celowo prowadzi to do b\u0142\u0119du kompilacji, dzi\u0119ki czemu metoda musi zosta\u0107 zaimplementowana przez dewelopera. Niekompatybilne zmiany modelu danych zawsze prowadz\u0105 do konwersji na poziomie instancji.<\/p>\n<p data-start=\"3596\" data-end=\"3601\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Niekompatybilne zmiany zwi\u0119kszaj\u0105 nak\u0142ad pracy zwi\u0105zany z obs\u0142ug\u0105 konflikt\u00f3w w systemach nast\u0119pczych. Nale\u017cy unika\u0107 niekompatybilnych zmian modelu danych. W przypadku r\u00f3wnoleg\u0142ego utrzymania niekompatybilne zmiany modelu danych w starszych wydaniach s\u0105 szczeg\u00f3lnie problematyczne (patrz sekcja <em data-start=\"3897\" data-end=\"3916\">Parallele Wartung<\/em>).<\/div><\/section><\/p>\n<p data-start=\"3930\" data-end=\"3948\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Klasa aktualizacji<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><code>String changeDatatype\u20acdescription\u20acstr100_str90(<\/code><br \/>\n<code>CisGenericObject object) {<\/code><br \/>\n<code>String value = object.getString(\u201cdescription\u201d);<\/code><br \/>\n<code>if (value.length()&lt;=90) {<\/code><br \/>\n<code>return value;<\/code><br \/>\n<code>} else {<\/code><br \/>\n<code>return value.substring(0,87)+\u201d\u2026\u201d;<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/div><\/section><\/code><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/div>\n<h4 id=\"usuwanie-instancji\" ><span class=\"ez-toc-section\" id=\"Usuwanie_instancji\"><\/span>Usuwanie instancji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-(--header-height)\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"78ee424d-10a0-4645-90a6-dbbfc9c35c92\" data-testid=\"conversation-turn-29\" data-scroll-anchor=\"false\" data-turn=\"user\"><\/article>\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae5e3f-b7ec-832d-842a-e077e66387f7-14\" data-testid=\"conversation-turn-30\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"fb625d46-0217-43a3-89b6-1684d5263379\" data-message-model-slug=\"gpt-5-3\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"219\">Je\u015bli instancja nie powinna zosta\u0107 skonwertowana, lecz usuni\u0119ta, w jednej z wywo\u0142ywanych metod zmiany nale\u017cy wywo\u0142a\u0107 metod\u0119 <em data-start=\"124\" data-end=\"134\">delete()<\/em>. Powoduje to przerwanie konwersji bie\u017c\u0105cej instancji i nie zostaje ona przeniesiona.<\/p>\n<p data-start=\"221\" data-end=\"362\" data-is-last-node=\"\" data-is-only-node=\"\">Po wywo\u0142aniu metody <em data-start=\"241\" data-end=\"251\">delete()<\/em> nale\u017cy zako\u0144czy\u0107 metod\u0119 zmiany instrukcj\u0105 <em data-start=\"294\" data-end=\"302\">return<\/em>. Po <em data-start=\"307\" data-end=\"317\">delete()<\/em> nie mog\u0105 wyst\u0119powa\u0107 \u017cadne dalsze instrukcje.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<h4 id=\"typy-danych\" ><span class=\"ez-toc-section\" id=\"Typy_danych\"><\/span>Typy danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Typ danych jest cz\u0119\u015bci\u0105 metod <em data-start=\"42\" data-end=\"48\">Init<\/em> i <em data-start=\"51\" data-end=\"59\">Change<\/em>. W nazwach metod typ danych jest kodowany w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"border-style: outset; background-color: #ffffff;\">Typ danych<\/th>\n<th style=\"border-style: outset; background-color: #ffffff;\">Oznaczenie w nazwie metody<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Part: <em>com.cisag.app.general.obj.DomesticAmount<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">DomesticAmount<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Part: <em>com.cisag.app.general.obj.Duration<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">Duration<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Part: <em>com.cisag.app.general.obj.ForeignAmount<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">ForeignAmount<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Part: <em>com.cisag.app.general.obj.Quantity<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">Quantity<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Part: <em>com.cisag.app.general.obj.PointInTime<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">PointInTime<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisAttributeTimeStamp<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">CisDate<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisAttributeDate<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">CisDate<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisAttributeDateUntil<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">CisDate<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisCalendar<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">Calendar<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisTimeInterval<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">TimeInterval<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\"><em>com.cisag.pgm.datatype.CisSymbolicInterval<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">SymbolicInterval<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Binarny o d\u0142ugo\u015bci 123<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">bin123<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">BLOB<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">blob<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">boolean<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">bool<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">byte<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">byte<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">char<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">char<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Liczba dziesi\u0119tna o d\u0142ugo\u015bci 12 i 3 miejscach po przecinku<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">dec12X3<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">double<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">double<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">float<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">float<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">GUID<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">guid<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">int<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">int<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">long<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">long<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">short<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">short<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Ci\u0105g znak\u00f3w o d\u0142ugo\u015bci 123<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">str123<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">ValueSet<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">vset<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; background-color: #ffffff;\">Znacznik czasu<\/td>\n<td style=\"border-style: outset; background-color: #ffffff;\">stmp<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-(--header-height)\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"f55e2313-6de3-41ca-a618-91bf9e6e6b43\" data-testid=\"conversation-turn-33\" data-scroll-anchor=\"false\" data-turn=\"user\"><\/article>\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae5e3f-b7ec-832d-842a-e077e66387f7-17\" data-testid=\"conversation-turn-34\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"3ba7fd9a-e1b3-45d5-977e-7f718d8105a5\" data-message-model-slug=\"gpt-5-3\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"360\">Powy\u017csze typy danych s\u0105 traktowane w klasach <em data-start=\"45\" data-end=\"53\">Update<\/em> jako ca\u0142o\u015b\u0107, tzn. istnieje tylko jedna metoda zmiany, nawet je\u015bli w tabeli zosta\u0142o z nich wygenerowanych kilka kolumn. Wszystkie <em data-start=\"183\" data-end=\"190\">Parts<\/em> i <em data-start=\"193\" data-end=\"201\">Arrays<\/em>, kt\u00f3re nie s\u0105 wymienione w tabeli, nie s\u0105 traktowane jako ca\u0142o\u015b\u0107 \u2013 ka\u017cda kolumna wygenerowana z tych element\u00f3w jest obs\u0142ugiwana oddzielnie w klasach <em data-start=\"351\" data-end=\"359\">Update<\/em>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<h4 id=\"inicjalizacja\" ><span class=\"ez-toc-section\" id=\"Inicjalizacja\"><\/span>Inicjalizacja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"381\" data-end=\"733\">Do transformacji danych obiektu biznesowego w bazie danych tworzona jest jedna lub wi\u0119cej instancji klas <em data-start=\"486\" data-end=\"494\">Update<\/em>. Ka\u017cda instancja klasy <em data-start=\"518\" data-end=\"526\">Update<\/em> jest u\u017cywana wy\u0142\u0105cznie dla instancji obiektu biznesowego w danej bazie danych. Je\u015bli instancje obiektu biznesowego maj\u0105 zosta\u0107 przekszta\u0142cone w innej bazie danych, tworzone s\u0105 nowe instancje klasy <em data-start=\"724\" data-end=\"732\">Update<\/em>.<\/p>\n<p data-start=\"735\" data-end=\"1003\">Klasy <em data-start=\"741\" data-end=\"749\">Update<\/em> przekszta\u0142caj\u0105 dane z wersji \u017ar\u00f3d\u0142owej \u2013 czyli wersji aktywnej w bazie danych \u2013 do wersji docelowej, kt\u00f3ra dla dewelopera jest wersj\u0105 zablokowan\u0105 w zadaniu deweloperskim. Schemat wersji \u017ar\u00f3d\u0142owej i docelowej mo\u017cna odczyta\u0107 za pomoc\u0105 nast\u0119puj\u0105cych metod:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<ul>\n<li class=\"cm-content q9tKkq_readonly\"><em>CisObjectSchema getFromSchema()<\/em><\/li>\n<li class=\"cm-content q9tKkq_readonly\"><em>CisObjectSchema getToSchema()<\/em><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1076\" data-end=\"1454\">Metoda <em data-start=\"1083\" data-end=\"1097\">initialize()<\/em> klasy <em data-start=\"1104\" data-end=\"1112\">Update<\/em> jest wywo\u0142ywana przed u\u017cyciem ka\u017cdej instancji. Metoda <em data-start=\"1168\" data-end=\"1180\">initialize<\/em> mo\u017ce zosta\u0107 nadpisana w klasie <em data-start=\"1212\" data-end=\"1220\">Update<\/em>, aby zainicjalizowa\u0107 instancj\u0119 klasy do u\u017cycia w danej bazie danych. W tej metodzie mo\u017cliwy jest jedynie odczyt danych z obiekt\u00f3w biznesowych przy u\u017cyciu generycznego dost\u0119pu (patrz sekcja <em data-start=\"1410\" data-end=\"1452\">Generischer Zugriff auf Business Objects<\/em>).<\/p>\n<p data-start=\"1456\" data-end=\"1636\">W metodzie <em data-start=\"1467\" data-end=\"1479\">initialize<\/em> nale\u017cy dla ka\u017cdej inicjalizacji sprawdzi\u0107 za pomoc\u0105 metody <em data-start=\"1539\" data-end=\"1556\">getFromSchema()<\/em>, czy jest ona wymagana. W tym celu nale\u017cy wykorzysta\u0107 schemat wersji \u017ar\u00f3d\u0142owej.<\/p>\n<p data-start=\"1645\" data-end=\"1863\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli w metodzie <em data-start=\"1662\" data-end=\"1674\">initialize<\/em> zostan\u0105 wykonane z\u0142o\u017cone obliczenia bez \u017cadnego warunku, b\u0119d\u0105 one wykonywane przy ka\u017cdej zmianie modelu danych i mog\u0105 negatywnie wp\u0142yn\u0105\u0107 na czas wykonywania przysz\u0142ych zmian modelu danych.<\/div><\/section><\/p>\n<p data-start=\"1865\" data-end=\"1873\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p data-start=\"1875\" data-end=\"2059\">Dla metody <em data-start=\"1886\" data-end=\"1892\">Init<\/em> kolumny <em data-start=\"1901\" data-end=\"1909\">myUnit<\/em> warto\u015b\u0107 domy\u015blna jest obliczana w metodzie <em data-start=\"1953\" data-end=\"1965\">initialize<\/em>. Warto\u015b\u0107 ta jest potrzebna tylko wtedy, gdy kolumna <em data-start=\"2018\" data-end=\"2026\">myUnit<\/em> nie istnieje w wersji \u017ar\u00f3d\u0142owej.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>byte[] myUnitDefault;<\/em><br \/>\n<em>void initialize() {<\/em><br \/>\n<em>if (getFromSchema().getColumn(&#8222;myUnit&#8221;)==null) {<\/em><br \/>\n<em>myUnitDefault=\u2026<\/em><br \/>\n<em>}<\/em><br \/>\n<em>}<\/em><br \/>\n<em>byte[] init$myUnit () {<\/em><br \/>\n<em>return myUnitDefault;<\/em><br \/>\n<em>}<\/em><\/div><\/section><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 data-section-id=\"1v2swwz\" data-start=\"0\" data-end=\"43\" id=\"dostep-do-danych-aplikacji-konfiguracja\" ><span class=\"ez-toc-section\" id=\"Dostep_do_danych_aplikacji_Konfiguracja\"><\/span>Dost\u0119p do danych aplikacji Konfiguracja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"45\" data-end=\"225\">Podczas transformacji danych cz\u0119sto wymagany jest dost\u0119p do danych aplikacji <em data-start=\"122\" data-end=\"136\">Konfiguracja<\/em>. Dost\u0119p do danych aplikacji <em data-start=\"165\" data-end=\"179\">Konfiguracja<\/em> jest mo\u017cliwy przy u\u017cyciu nast\u0119puj\u0105cych metod:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cd \u037cr\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><em>boolean isAvailable(String functionName)<\/em><br \/>\n<em>boolean isAvailable(String functionName, byte[] organizationGuid)<\/em><br \/>\n<em>Object getConfiguredValues(String functionName,<\/em><br \/>\n<em>byte[] organizationGuid)<\/em><br \/>\n<em>Object getConfiguredValues(String functionName)<\/em><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"465\" data-end=\"712\">Nale\u017cy pami\u0119ta\u0107, \u017ce klasy <em data-start=\"491\" data-end=\"499\">Update<\/em> musz\u0105 by\u0107 wykonywalne niezale\u017cnie od stanu aplikacji <em data-start=\"553\" data-end=\"567\">Konfiguracja<\/em>. Aby klasy <em data-start=\"579\" data-end=\"587\">Update<\/em> mog\u0142y dzia\u0142a\u0107 r\u00f3wnie\u017c w \u201epustej\u201d bazie danych, zawsze nale\u017cy uwzgl\u0119dni\u0107 mo\u017cliwo\u015b\u0107, \u017ce metody te mog\u0105 zwr\u00f3ci\u0107 warto\u015b\u0107 <em data-start=\"705\" data-end=\"711\">null<\/em>.<\/p>\n<p data-start=\"721\" data-end=\"1082\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli klasa <em data-start=\"733\" data-end=\"741\">Update<\/em> w przypadku niekompletnej konfiguracji zg\u0142osi wyj\u0105tek, instalacja aktualizacji oprogramowania zawieraj\u0105cej t\u0119 klas\u0119 <em data-start=\"858\" data-end=\"866\">Update<\/em> mo\u017ce zosta\u0107 przerwana w systemach nast\u0119pczych i b\u0119dzie mog\u0142a zosta\u0107 wznowiona dopiero po poprawieniu klasy <em data-start=\"974\" data-end=\"982\">Update<\/em>.<\/div><\/section><\/p>\n<h3 data-section-id=\"1lj0wd0\" data-start=\"1084\" data-end=\"1097\" id=\"konwersja\" ><span class=\"ez-toc-section\" id=\"Konwersja\"><\/span>Konwersja<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p data-start=\"1099\" data-end=\"1605\" data-is-last-node=\"\" data-is-only-node=\"\">Konwersja danych jest bardzo wa\u017cnym etapem. Je\u015bli podczas konwersji dane zostan\u0105 przeniesione nieprawid\u0142owo, w najgorszym przypadku mog\u0105 zosta\u0107 utracone. Je\u015bli nie jest mo\u017cliwe odtworzenie pierwotnych danych, konieczne jest przywr\u00f3cenie kopii zapasowej odpowiedniej bazy danych lub ca\u0142ego systemu. Je\u015bli b\u0142\u0119dna konwersja zosta\u0142a dostarczona klientowi, skutki s\u0105 jeszcze powa\u017cniejsze. Z tego powodu zaleca si\u0119 jak najdok\u0142adniejsze testowanie konwersji, dop\u00f3ki obiekt biznesowy nie zosta\u0142 jeszcze aktywowany.<\/p>\n<h4 id=\"konwersja-przez-baze-danych\" ><span class=\"ez-toc-section\" id=\"Konwersja_przez_baze_danych\"><\/span>Konwersja przez baz\u0119 danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<div class=\"flex flex-col text-sm pb-25\">\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"fb4a83d2-3938-4e01-a388-49f9c76e2100\" data-testid=\"conversation-turn-38\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"eb1e465b-f04c-44b9-8cc1-f0529ec5c2c6\" data-message-model-slug=\"gpt-5-4-thinking\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"321\">Konwersja danych mo\u017ce by\u0107 wykonywana w obr\u0119bie bazy danych, je\u015bli z klas <em data-start=\"73\" data-end=\"81\">Update<\/em> do konwersji wymagane s\u0105 wy\u0142\u0105cznie sta\u0142e warto\u015bci pocz\u0105tkowe lub kompatybilne zmiany modelu danych. Je\u015bli cho\u0107 jedna wymagana metoda wymaga konwersji na poziomie instancji, konwersja musi zosta\u0107 wykonana za po\u015brednictwem serwera aplikacji.<\/p>\n<p data-start=\"323\" data-end=\"328\">Uwaga<\/p>\n<p data-start=\"330\" data-end=\"430\">Metody wymagane dla przeskoku wersji mo\u017cna wy\u015bwietli\u0107 za pomoc\u0105 polecenia <em data-start=\"404\" data-end=\"429\">wrkupdcls \u2013printUpgrade<\/em>.<\/p>\n<p data-start=\"432\" data-end=\"761\" data-is-last-node=\"\" data-is-only-node=\"\">Konwersja wykonywana w bazie danych mo\u017ce odbywa\u0107 si\u0119 bez u\u017cycia tabel tymczasowych. Konwersja przebiega ca\u0142kowicie w obr\u0119bie bazy danych, bez konieczno\u015bci przesy\u0142ania instancji obiektu biznesowego do serwera aplikacji. Taka konwersja zazwyczaj wymaga znacznie mniej czasu ni\u017c zmiana modelu danych wykonywana dla ka\u017cdej instancji.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"z-0 flex min-h-[46px] justify-start\">\n<figure id=\"attachment_43261\" aria-describedby=\"caption-attachment-43261\" style=\"width: 521px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43261 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6.png\" alt=\"\" width=\"521\" height=\"206\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6.png 521w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6-300x119.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6-50x20.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_6-320x127.png 320w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/a><figcaption id=\"caption-attachment-43261\" class=\"wp-caption-text\">Konwersja przez baz\u0119 danych<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/div>\n<div class=\"flex flex-col text-sm pb-25\">\n<article class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-69ae5e3f-b7ec-832d-842a-e077e66387f7-23\" data-testid=\"conversation-turn-40\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"848849a9-b3d3-4b08-8648-2f3fcc7745f9\" data-message-model-slug=\"gpt-5-4-thinking\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"64\">Aktywna tabela jest zmieniana za pomoc\u0105 polecenia <em data-start=\"50\" data-end=\"63\">ALTER TABLE<\/em>.<\/p>\n<p data-start=\"73\" data-end=\"522\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Systemy produkcyjne powinny by\u0107 wy\u0142\u0105czane na czas importu aktualizacji oprogramowania mo\u017cliwie jak najkr\u00f3cej. Systemy produkcyjne zazwyczaj zawieraj\u0105 r\u00f3wnie\u017c znacznie wi\u0119cej danych ni\u017c odpowiadaj\u0105ce im systemy deweloperskie. Im wi\u0119cej danych zawieraj\u0105 tabele zmienianego obiektu biznesowego, tym wa\u017cniejsza jest konwersja wykonywana w bazie danych i tym mniej korzystna jest konwersja za po\u015brednictwem serwera aplikacji z u\u017cyciem tabeli tymczasowej.<\/p>\n<p data-start=\"524\" data-end=\"674\" data-is-last-node=\"\" data-is-only-node=\"\">Podczas prac deweloperskich zawsze tworzona jest tabela tymczasowa, aby mo\u017cna by\u0142o lokalnie testowa\u0107 tak\u017ce jeszcze nieaktywowane zmiany modelu danych.<\/div><\/section><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/div>\n<h4 id=\"konwersja-za-posrednictwem-serwera-aplikacji\" ><span class=\"ez-toc-section\" id=\"Konwersja_za_posrednictwem_serwera_aplikacji\"><\/span>Konwersja za po\u015brednictwem serwera aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"40\" data-end=\"244\">W przypadku z\u0142o\u017conych konwersji klasy aktualizacji musz\u0105 by\u0107 wywo\u0142ywane dla ka\u017cdej instancji. Na potrzeby konwersji tworzona jest tymczasowa tabela do przechowywania po\u015bredniego skonwertowanych instancji.<\/p>\n<p data-start=\"246\" data-end=\"445\">Konwersja odbywa si\u0119 przez <em>Application-Server,<\/em> je\u017celi co najmniej jedna metoda, kt\u00f3ra musi zosta\u0107 wywo\u0142ana z klas aktualizacji dla zmiany modelu danych, wymaga konwersji dla poszczeg\u00f3lnych instancji.<\/p>\n<figure id=\"attachment_43340\" aria-describedby=\"caption-attachment-43340\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43340 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7.png\" alt=\"\" width=\"560\" height=\"390\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7.png 560w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7-300x209.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7-50x35.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_7-320x223.png 320w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/a><figcaption id=\"caption-attachment-43340\" class=\"wp-caption-text\">Konwertowanie przez serwer aplikacji<\/figcaption><\/figure>\n<p>Konwersja za po\u015brednictwem serwera aplikacji jest wolniejsza ni\u017c konwersja za po\u015brednictwem bazy danych, ale umo\u017cliwia specjaln\u0105 logik\u0119 konwersji poszczeg\u00f3lnych instancji.<\/p>\n<p data-start=\"373\" data-end=\"556\">W przypadku przeprowadzania konwersji przez serwer aplikacji prowadzi to do znacznie d\u0142u\u017cszych czas\u00f3w dzia\u0142ania podczas wgrywania aktualizacji oprogramowania do systemu produkcyjnego.<\/p>\n<p data-start=\"558\" data-end=\"669\">Je\u017celi nowa wersja obiektu biznesowego zawiera obiekt BLOB, konwersja zawsze odbywa si\u0119 przez serwer aplikacji.<\/p>\n<p data-start=\"671\" data-end=\"1052\">Za pomoc\u0105 w\u0142a\u015bciwo\u015bci <em data-start=\"693\" data-end=\"753\">com.cisag.sys.kernel.tools.ObjectUpdateConvertWorkerNumber<\/em> mo\u017cna skonfigurowa\u0107 stopie\u0144 r\u00f3wnoleg\u0142o\u015bci konwersji. Wi\u0119cej informacji na ten temat znajduje si\u0119 w artykule <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/wlasciwosci-erp\/\"><em data-start=\"862\" data-end=\"879\">W\u0142a\u015bciwo\u015bci ERP<\/em>.<\/a><\/p>\n<h4 id=\"widoki\" ><span class=\"ez-toc-section\" id=\"Widoki\"><\/span>Widoki<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p data-start=\"1062\" data-end=\"1165\">Widoki r\u00f3wnie\u017c s\u0105 najpierw tworzone tymczasowo, aby mo\u017cliwe by\u0142o przetestowanie widoku przed aktywacj\u0105. Je\u017celi widok uzyskuje dost\u0119p do obiekt\u00f3w biznesowych, kt\u00f3re znajduj\u0105 si\u0119 w tym samym zadaniu deweloperskim, w\u00f3wczas dla tego tymczasowego widoku nast\u0119puje dost\u0119p do skonwertowanych tabel.<\/p>\n<figure id=\"attachment_43342\" aria-describedby=\"caption-attachment-43342\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43342 size-full\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1.png\" alt=\"\" width=\"490\" height=\"270\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1.png 490w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1-300x165.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1-50x28.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2026\/03\/mod_baz_8.drawio-1-320x176.png 320w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \/><\/a><figcaption id=\"caption-attachment-43342\" class=\"wp-caption-text\">Widoki<\/figcaption><\/figure>\n<h4 id=\"narzedzia-generowania\" ><span class=\"ez-toc-section\" id=\"Narzedzia_generowania\"><\/span>Narz\u0119dzia generowania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:dccf4ecc-b585-4cfa-9046-770ce87dcd4a-5\" data-testid=\"conversation-turn-12\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"6d355ccd-e400-4b5a-aed3-7d9c28ae5b3a\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"155\" data-is-last-node=\"\" data-is-only-node=\"\">Standardowy cykl rozwoju obiektu biznesowego obejmuje kilka krok\u00f3w, kt\u00f3re musz\u0105 zosta\u0107 wykonane przy u\u017cyciu narz\u0119dzi, aplikacji lub aplikacji zewn\u0119trznych.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<table style=\"width: 100%; height: 511px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<th style=\"border-style: outset; background-color: #ffffff; height: 23px;\">Narz\u0119dzie<\/th>\n<th style=\"border-style: outset; background-color: #ffffff; height: 23px;\">Opis<\/th>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"border-style: outset; background-color: #ffffff; height: 46px;\"><em>crtbo<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff; height: 46px;\">Narz\u0119dzie <em>crtbo<\/em> (create business object) \u0142\u0105czy generowanie opisu tabeli, klas mappera, klas aktualizacji oraz tabeli tymczasowej.<\/td>\n<\/tr>\n<tr style=\"height: 93px;\">\n<td style=\"border-style: outset; background-color: #ffffff; height: 93px;\"><em>cnvbo<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff; height: 93px;\">Polecenie <em>cnvbo<\/em> (convert business object) s\u0142u\u017cy do przenoszenia danych z tabeli aktywnej do tabeli tymczasowej.<br \/>\nDo konwersji wymagane s\u0105 mappery utworzone przez <em>crtbo<\/em> oraz ewentualnie dostosowane klasy aktualizacji.<\/td>\n<\/tr>\n<tr style=\"height: 163px;\">\n<td style=\"border-style: outset; background-color: #ffffff; height: 163px;\"><em>actbo<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff; height: 163px;\">Je\u015bli zadanie deweloperskie, w kt\u00f3rym obiekty by\u0142y przetwarzane, zosta\u0142o zwolnione, nale\u017cy nast\u0119pnie za pomoc\u0105 narz\u0119dzia actbo (activate business object) aktywowa\u0107 obiekty zawarte w tym zadaniu.<br \/>\nNarz\u0119dzie <em>actbo<\/em> tworzy ponownie tabele tymczasowe i konwertuje dane z tabel aktywnych do tabel tymczasowych. Po konwersji tabele aktywne s\u0105 usuwane, a tabele tymczasowe aktywowane lub tabele aktywne s\u0105 modyfikowane za pomoc\u0105 ALTER TABLE. Nast\u0119pnie mo\u017cna aktywowa\u0107 zadanie deweloperskie.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"border-style: outset; background-color: #ffffff; height: 70px;\"><em>rmvbo<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff; height: 70px;\">Generowanie tabel tymczasowych mo\u017cna cofn\u0105\u0107 za pomoc\u0105 <em>rmvbo<\/em> (remove business object), podaj\u0105c obiekt lub zadanie deweloperskie. Obiekt zostaje usuni\u0119ty z zadania deweloperskiego.<\/td>\n<\/tr>\n<tr style=\"height: 116px;\">\n<td style=\"border-style: outset; background-color: #ffffff; height: 116px;\"><em>wrkupdcls<\/em><\/td>\n<td style=\"border-style: outset; background-color: #ffffff; height: 116px;\">Narz\u0119dzie <em>wrkupdcls<\/em> (work update class) wspiera dewelopera dodatkowymi informacjami i wskaz\u00f3wkami:<br \/>\n\u2022 &#8211;<em>printUpgrade<\/em> \u2013 wy\u015bwietlenie wszystkich metod klas aktualizacji obiektu biznesowego wykonywanych przy zmianie wersji.<br \/>\n\u2022 <em>-printHistory<\/em> \u2013 wy\u015bwietlenie historii zmian obiektu biznesowego.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"0\" data-end=\"84\">Standardowy cykl przetwarzania widok\u00f3w i obiekt\u00f3w biznesowych przebiega nast\u0119puj\u0105co:<\/p>\n<ol>\n<li>Edycja obiektu w aplikacji <em>Obiekty deweloperskie<\/em><\/li>\n<li>Generowanie wszystkich obiekt\u00f3w w zadaniu deweloperskim xyz przy u\u017cyciu polecenia:<\/li>\n<\/ol>\n<p><em>crtbo -j:xyz<\/em><\/p>\n<ol start=\"3\">\n<li>Edycja klas aktualizacji w celu konwersji danych<\/li>\n<li>Kompilacja programu mapuj\u0105cego i aktualizuj\u0105cego<\/li>\n<li>Ponowne uruchomienie serwera aplikacji, za pomoc\u0105 kt\u00f3rego dane maj\u0105 zosta\u0107 przekonwertowane<\/li>\n<li>Konwersja danych z aktywnych tabel do tabel tymczasowych z nowym schematem za pomoc\u0105:<\/li>\n<\/ol>\n<p><em>cnvbo -j:xyz<\/em><\/p>\n<ol start=\"7\">\n<li>Test konwersji, tj. kontrola, czy wszystkie dane zosta\u0142y poprawnie przeniesione do tabel tymczasowych; testowanie aplikacji z now\u0105 wersj\u0105 obiektu biznesowego. Mo\u017cliwe s\u0105 ograniczenia, poniewa\u017c tabele tymczasowe standardowo nie s\u0105 zapisywalne. Test aplikacji nast\u0119puje po aktywacji<\/li>\n<\/ol>\n<ol start=\"8\">\n<li>Zwolnienie zadania deweloperskiego xyz<\/li>\n<li>Aktywacja wszystkich tabel tymczasowych w zadaniu deweloperskim za pomoc\u0105:<\/li>\n<\/ol>\n<p>actbo -j:xyz<\/p>\n<ol start=\"10\">\n<li>Aktywacja zadania deweloperskiego xyz<\/li>\n<li>Ponowne uruchomienie wszystkich serwer\u00f3w aplikacji w systemie<\/li>\n<\/ol>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-(--header-height)\" dir=\"auto\" data-turn-id=\"09ceaf92-6f86-4ebf-ab5e-2141fb62fce0\" data-testid=\"conversation-turn-19\" data-scroll-anchor=\"false\" data-turn=\"user\"><\/section>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:dccf4ecc-b585-4cfa-9046-770ce87dcd4a-10\" data-testid=\"conversation-turn-20\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"779a7ffc-5c4f-4e44-ba3c-ef860feec4fa\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"285\">W standardowym przebiegu prac deweloperskich mo\u017ce wyst\u0105pi\u0107 konieczno\u015b\u0107 wielokrotnego dostosowywania zmian metadanych obiektu. Kroki 1\u20137 mog\u0105 by\u0107 powtarzane dowoln\u0105 liczb\u0119 razy, w zale\u017cno\u015bci od potrzeb. Kroki 8\u201311 mog\u0105 by\u0107 wykonywane wy\u0142\u0105cznie sekwencyjnie i tylko w podanej kolejno\u015bci.<\/p>\n<p data-start=\"287\" data-end=\"419\">W narz\u0119dziach <em data-start=\"301\" data-end=\"308\">crtbo<\/em> oraz <em data-start=\"314\" data-end=\"321\">cnvbo<\/em> mo\u017cna jawnie okre\u015bli\u0107, z kt\u00f3rymi obiektami ma by\u0107 prowadzona praca. W tym celu dost\u0119pne s\u0105 opcje:<\/p>\n<ul data-start=\"421\" data-end=\"484\">\n<li data-section-id=\"14cxgyq\" data-start=\"421\" data-end=\"458\"><strong data-start=\"423\" data-end=\"429\">-j<\/strong> \u2013 dla zada\u0144 deweloperskich<\/li>\n<li data-section-id=\"181c34a\" data-start=\"459\" data-end=\"484\"><strong data-start=\"461\" data-end=\"467\">-o<\/strong> \u2013 dla obiekt\u00f3w<\/li>\n<\/ul>\n<p data-start=\"486\" data-end=\"750\">W standardowym cyklu deweloperskim najcz\u0119\u015bciej stosowana jest opcja <em data-start=\"554\" data-end=\"558\">-j<\/em>. W przypadku du\u017cych zada\u0144 deweloperskich lub podczas testowania konkretnego programu aktualizacji zasadne mo\u017ce by\u0107 generowanie obiekt\u00f3w pojedynczo w celu skr\u00f3cenia czasu oczekiwania na wynik.<\/p>\n<p data-start=\"752\" data-end=\"1022\">Generowanie tabel tymczasowych mo\u017ce zosta\u0107 cofni\u0119te przy u\u017cyciu narz\u0119dzia <em data-start=\"826\" data-end=\"833\">rmvbo<\/em> poprzez wskazanie obiektu lub zadania deweloperskiego. Narz\u0119dzie <em data-start=\"899\" data-end=\"906\">rmvbo<\/em> usuwa obiekt z zadania deweloperskiego. Wszystkie zmiany w obiekcie zostaj\u0105 utracone bez dodatkowego potwierdzenia.<\/p>\n<p data-start=\"1024\" data-end=\"1177\" data-is-last-node=\"\" data-is-only-node=\"\">Aktywacja zmian mo\u017ce zosta\u0107 przeprowadzona wy\u0142\u0105cznie dla ca\u0142ego zadania deweloperskiego przy u\u017cyciu narz\u0119dzia <em data-start=\"1134\" data-end=\"1176\">actbo -j:&lt;numer zadania deweloperskiego&gt;<\/em>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<h4 id=\"rozszerzenia\" ><span class=\"ez-toc-section\" id=\"Rozszerzenia\"><\/span>Rozszerzenia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"font-size: revert; color: initial;\">Rozszerzenia rozszerzaj\u0105 tabel\u0119 w bazie danych o kolumny zdefiniowane w rozszerzeniu. Bazy danych podlegaj\u0105 jednak ograniczeniom. Ogranicza to na przyk\u0142ad maksymaln\u0105 szeroko\u015b\u0107 wiersza bazy danych. Kolumny z obiektu biznesowego oraz rozszerzenia sumuj\u0105 si\u0119 i w niekorzystnym przypadku przekraczaj\u0105 maksymalny rozmiar.<\/span><\/p>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:dccf4ecc-b585-4cfa-9046-770ce87dcd4a-12\" data-testid=\"conversation-turn-24\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"690b84c1-69f1-4ac5-b83f-6bd9988656c5\" data-message-model-slug=\"gpt-5-4-thinking\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"332\" data-end=\"585\">Obecnie zaleca si\u0119 stosowanie tak zwanych suplement\u00f3w. S\u0105 to obiekty biznesowe posiadaj\u0105ce w\u0142asn\u0105 tabel\u0119. Je\u017celi dla obiektu biznesowego zdefiniowano suplement, w\u00f3wczas podczas operacji na bazie danych suplement jest r\u00f3wnie\u017c wczytywany lub zapisywany.<\/p>\n<p data-start=\"587\" data-end=\"901\">Obiekty biznesowe oraz cz\u0119\u015bci mog\u0105 by\u0107 rozszerzane za pomoc\u0105 rozszerze\u0144. Za pomoc\u0105 rozszerzenia mo\u017cliwe jest rozszerzenie obiektu o nowe w\u0142a\u015bciwo\u015bci. Rozszerzenie nie mo\u017ce ogranicza\u0107 w\u0142a\u015bciwo\u015bci obiektu. Oznacza to, \u017ce rozszerzenie stanowi kompatybilne i bezkonfliktowe rozszerzenie obiektu biznesowego lub cz\u0119\u015bci.<\/p>\n<p data-start=\"903\" data-end=\"1045\" data-is-last-node=\"\" data-is-only-node=\"\">Rozszerzenia dla cz\u0119\u015bci, w odr\u00f3\u017cnieniu od rozszerze\u0144 dla obiekt\u00f3w biznesowych, mog\u0105 powodowa\u0107 konflikty w standardowych obiektach biznesowych.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<h5 id=\"rozszerzenia-dla-czesci\" ><span class=\"ez-toc-section\" id=\"Rozszerzenia_dla_czesci\"><\/span>Rozszerzenia dla cz\u0119\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-(--header-height)\" dir=\"auto\" data-turn-id=\"6d53924c-0f73-40c3-96c2-202b149eeccd\" data-testid=\"conversation-turn-25\" data-scroll-anchor=\"false\" data-turn=\"user\"><\/section>\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-69c072f3-7e50-832b-b480-8dc9255ebdd3-0\" data-testid=\"conversation-turn-26\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"273337ec-3f2b-4e1a-a8ce-5b4c8e204ca3\" data-message-model-slug=\"gpt-5-4-thinking\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"362\">Cz\u0119\u015bci mog\u0105 by\u0107 rozszerzane za pomoc\u0105 rozszerzenia mi\u0119dzy innymi o dodatkowe atrybuty. Nowe atrybuty cz\u0119\u015bci musz\u0105 zosta\u0107 utworzone we wszystkich obiektach biznesowych, kt\u00f3re wykorzystuj\u0105 t\u0119 cz\u0119\u015b\u0107. Cz\u0119\u015b\u0107 mo\u017ce by\u0107 u\u017cywana przez dowoln\u0105 liczb\u0119 obiekt\u00f3w biznesowych. Zasadniczo nie jest wiadomo, kt\u00f3re obiekty biznesowe w systemie podrz\u0119dnym wykorzystuj\u0105 dan\u0105 cz\u0119\u015b\u0107.<\/p>\n<p data-start=\"375\" data-end=\"760\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Cz\u0119\u015b\u0107 P zostaje rozszerzona za pomoc\u0105 rozszerzenia E w bran\u017cowym systemie deweloperskim. W podrz\u0119dnym systemie deweloperskim klienta cz\u0119\u015b\u0107 P jest wykorzystywana w obiekcie biznesowym B. Je\u017celi rozszerzenie E dla cz\u0119\u015bci P zostanie dostarczone, obiekt biznesowy B w systemie deweloperskim klienta musi zosta\u0107 wygenerowany ponownie, aby mog\u0142y tam zosta\u0107 utworzone atrybuty rozszerzenia E.<\/div><\/section><\/p>\n<p data-start=\"11\" data-end=\"398\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Atrybut <em data-start=\"19\" data-end=\"24\">abc<\/em> standardowego obiektu biznesowego B ma jako typ danych cz\u0119\u015b\u0107 P. Cz\u0119\u015b\u0107 P zostaje rozszerzona za pomoc\u0105 rozszerzenia E o atrybut <em data-start=\"152\" data-end=\"161\">xyz_bcd<\/em>. Dla kolumny <em data-start=\"175\" data-end=\"188\">abc.xyz_bcd<\/em> generowana jest metoda inicjalizacji w klasach aktualizacji obiektu B. Je\u017celi zostanie zainstalowana nowa standardowa wersja obiektu B, konflikt w klasach aktualizacji obiektu B musi zosta\u0107 opracowany r\u0119cznie.<\/p>\n<p data-start=\"400\" data-end=\"799\">Atrybut <em data-start=\"408\" data-end=\"417\">cde_abc<\/em> rozszerzenia F obiektu biznesowego B ma jako typ danych cz\u0119\u015b\u0107 P. Cz\u0119\u015b\u0107 P zostaje rozszerzona za pomoc\u0105 rozszerzenia E o atrybut <em data-start=\"546\" data-end=\"555\">xyz_bcd<\/em>. Dla kolumny <em data-start=\"569\" data-end=\"586\">cde_abc.xyz_bcd<\/em> generowana jest metoda inicjalizacji w klasach aktualizacji rozszerzenia F. Je\u017celi zostanie zainstalowana nowa wersja rozszerzenia F, konflikt w klasach aktualizacji rozszerzenia F musi zosta\u0107 opracowany r\u0119cznie.<\/div><\/section><\/p>\n<p data-start=\"812\" data-end=\"1266\" data-is-last-node=\"\" data-is-only-node=\"\"><section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Rozszerzenia cz\u0119\u015bci potencjalnie zawsze powoduj\u0105 konieczno\u015b\u0107 r\u0119cznego opracowywania konflikt\u00f3w oraz dodatkowy nak\u0142ad pracy, je\u017celi obiekty biznesowe w kolejnych systemach wykorzystuj\u0105 te rozszerzone cz\u0119\u015bci. Przed utworzeniem rozszerzenia dla cz\u0119\u015bci nale\u017cy wi\u0119c dok\u0142adnie sprawdzi\u0107, czy problemu nie mo\u017cna lepiej rozwi\u0105za\u0107 za pomoc\u0105 rozszerzenia obiektu biznesowego lub suplementu. Rozszerzenia obiekt\u00f3w biznesowych lub suplement s\u0105 zawsze bezkonfliktowe.<\/div><\/section><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<h5 id=\"rozszerzanie-atrybutu-string\" ><span class=\"ez-toc-section\" id=\"Rozszerzanie_atrybutu_string\"><\/span>Rozszerzanie atrybutu string<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"33\" data-end=\"408\">Atrybut typu string obiektu biznesowego mo\u017ce zosta\u0107 wyd\u0142u\u017cony za pomoc\u0105 rozszerzenia obiektu biznesowego. Wymagana do tego metoda <em data-start=\"163\" data-end=\"179\">ChangeDatatype<\/em> jest generowana w klasach aktualizacji przypisanych do wyd\u0142u\u017canego atrybutu. Wyd\u0142u\u017cenie atrybutu mo\u017ce zatem wymaga\u0107 modyfikacji klas aktualizacji, kt\u00f3re nie znajduj\u0105 si\u0119 w deweloperskiej przestrzeni nazw systemu deweloperskiego.<\/p>\n<p data-start=\"410\" data-end=\"541\" data-is-last-node=\"\" data-is-only-node=\"\">Je\u017celi zostanie zainstalowana nowa wersja zmodyfikowanej klasy aktualizacji, mo\u017ce powsta\u0107 konflikt wymagaj\u0105cy r\u0119cznego opracowania.<\/p>\n<h5 id=\"metody-inicjowania\" ><span class=\"ez-toc-section\" id=\"Metody_inicjowania\"><\/span>Metody inicjowania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"0\" data-end=\"374\">System ERP mo\u017ce zosta\u0107 zainstalowany jako system standardowy, a nast\u0119pnie mog\u0105 zosta\u0107 zainstalowane modyfikacje wraz z aktualizacjami oprogramowania, na przyk\u0142ad z systemu deweloperskiego klienta. W tym podej\u015bciu konieczne jest, aby warto\u015bci pocz\u0105tkowe atrybut\u00f3w rozszerze\u0144 obiektu biznesowego mog\u0142y zosta\u0107 obliczone na podstawie atrybut\u00f3w standardowego obiektu biznesowego.<\/p>\n<p data-start=\"387\" data-end=\"655\"><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">W wersji 6.0.1 obiektu biznesowego atrybut <em data-start=\"430\" data-end=\"439\">xyz_abc<\/em> zosta\u0142 utworzony w systemie deweloperskim partnera. Nast\u0119pnie do systemu deweloperskiego partnera zosta\u0142a wgrana wersja 7.0 obiektu biznesowego, co skutkuje powstaniem wersji 7.0.1 w systemie deweloperskim partnera.<\/p>\n<p data-start=\"657\" data-end=\"1078\" data-is-last-node=\"\" data-is-only-node=\"\">Je\u017celi system produkcyjny zostanie zainstalowany z wersj\u0105 7.0 obiektu biznesowego i zostan\u0105 zainstalowane aktualizacje oprogramowania z systemu deweloperskiego partnera, w\u00f3wczas metoda inicjalizacji dla <em data-start=\"860\" data-end=\"869\">xyz_abc<\/em> dla wersji 7.0.1 musi zosta\u0107 wywo\u0142ana i obliczy\u0107 swoj\u0105 warto\u015b\u0107 pocz\u0105tkow\u0105 na podstawie przekazanej instancji obiektu w wersji 7.0. Metoda inicjalizacji musi r\u00f3wnie\u017c przetwarza\u0107 instancje obiektu w wersji 6.0.<\/div><\/section><\/p>\n<h5 id=\"normalny-transport\" ><span class=\"ez-toc-section\" id=\"Normalny_transport\"><\/span>Normalny transport<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Rozszerzenia obiekt\u00f3w biznesowych przy wgrywaniu aktualizacji oprogramowania z systemu poprzedzaj\u0105cego standardowo nie wymagaj\u0105 r\u0119cznego opracowywania konflikt\u00f3w. R\u0119czne opracowywanie konflikt\u00f3w mo\u017ce by\u0107 konieczne, je\u017celi rozszerzenia zosta\u0142y utworzone dla cz\u0119\u015bci lub je\u017celi wyd\u0142u\u017cono atrybuty typu string.<\/p>\n<h5 id=\"konserwacja-rownolegla\" ><span class=\"ez-toc-section\" id=\"Konserwacja_rownolegla\"><\/span>Konserwacja r\u00f3wnoleg\u0142a<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<div class=\"flex flex-col text-sm pb-25\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-69c072f3-7e50-832b-b480-8dc9255ebdd3-2\" data-testid=\"conversation-turn-36\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" tabindex=\"0\" data-message-author-role=\"assistant\" data-message-id=\"347f2f44-48e3-4718-806c-a97c518b8d9c\" data-message-model-slug=\"gpt-5-4-thinking\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"1150\">Dla jednego prefiksu deweloperskiego mo\u017ce by\u0107 r\u00f3wnolegle utrzymywanych kilka system\u00f3w deweloperskich z r\u00f3\u017cnymi wersjami. Je\u017celi obiekt biznesowy lub rozszerzenie zostanie zmienione w starszej wersji, w\u00f3wczas dany obiekt biznesowy musi zosta\u0107 przej\u0119ty do kolejnej wersji. Proces ten musi by\u0107 kontynuowany a\u017c do najnowszej wersji. Przej\u0119cie zmienionego obiektu biznesowego odbywa si\u0119 przez transport poprzeczny. Je\u017celi transportowany obiekt biznesowy zosta\u0142 ju\u017c zmieniony w systemie docelowym, aktywna wersja obiektu biznesowego zostaje przeniesiona do zadania konfliktowego. Klasy aktualizacji s\u0105 generowane w taki spos\u00f3b, aby obs\u0142ugiwa\u0142y przej\u015bcie zar\u00f3wno z wersji aktywnej, jak i z zaimportowanej wersji obiektu biznesowego do wersji obiektu biznesowego zablokowanej w zadaniu konfliktowym. Przej\u015bcie z wersji aktywnej do wersji zablokowanej mo\u017ce zosta\u0107 przetestowane w systemie deweloperskim. Przej\u015bcie z wersji zaimportowanej do wersji zablokowanej nie mo\u017ce zosta\u0107 przetestowane w systemie deweloperskim. Przej\u015bcie to jest wykonywane dopiero wtedy, gdy system ze starszym stanem wersji zostanie podniesiony do stanu wersji systemu deweloperskiego.<\/p>\n<p data-start=\"1152\" data-end=\"1407\">Kompatybilne zmiany w starszych wersjach s\u0105 stosunkowo ma\u0142o problematyczne. Zazwyczaj wystarczy przej\u0105\u0107 do wersji zablokowanej te metody inicjalizacji, kt\u00f3rych brakuje w logice aktualizacji wersji zablokowanej, z logiki aktualizacji wersji zaimportowanej.<\/p>\n<p data-start=\"1409\" data-end=\"1861\">Niekompatybilne zmiany typ\u00f3w danych lub usuwanie kolumn w starszych wersjach s\u0105 problematyczne, je\u017celi inne metody w klasach aktualizacji uzyskuj\u0105 dost\u0119p do zmienionych kolumn. Wszystkie metody uzyskuj\u0105ce dost\u0119p do zmienionego atrybutu musz\u0105 zosta\u0107 odpowiednio dostosowane. Zmiany w klasach aktualizacji nie mog\u0105 zosta\u0107 przetestowane w systemie deweloperskim. W celu przetestowania zmian konieczne jest przetestowanie zmiany wersji w systemie testowym.<\/p>\n<p data-start=\"1874\" data-end=\"2080\"><section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Niekompatybilne zmiany w starszych wersjach powoduj\u0105 przy r\u00f3wnoleg\u0142ym utrzymaniu zwi\u0119kszony nak\u0142ad pracy zwi\u0105zany z opracowywaniem konflikt\u00f3w oraz wi\u0119kszy nak\u0142ad pracy przy testowaniu podczas zmiany wersji.<\/p>\n<p data-start=\"2082\" data-end=\"2180\" data-is-last-node=\"\" data-is-only-node=\"\">Nale\u017cy dok\u0142adnie sprawdzi\u0107, czy mo\u017cliwe jest unikni\u0119cie niekompatybilnej zmiany w starszej wersji.<\/div><\/section><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<h5 id=\"aplikacje\" ><span class=\"ez-toc-section\" id=\"Aplikacje\"><\/span>Aplikacje<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Rozszerzenia obiekt\u00f3w biznesowych w aplikacji generuj\u0105, jak zwykle, klasy aktualizacji. Metody rozszerze\u0144 z aplikacji s\u0105 zawsze wywo\u0142ywane podczas konwersji po metodach klas aktualizacji obiektu biznesowego oraz innych rozszerze\u0144 obiekt\u00f3w biznesowych.<\/p>\n<h4 id=\"funkcje-specjalne\" ><span class=\"ez-toc-section\" id=\"Funkcje_specjalne\"><\/span>Funkcje specjalne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nie wszystkie mo\u017cliwe zmiany mog\u0105 zosta\u0107 przeprowadzone przy u\u017cyciu opisanych wcze\u015bniej mechanizm\u00f3w bez dodatkowych dzia\u0142a\u0144.<\/p>\n<h5 id=\"atrybuty-mozliwe-do-zlokalizowania\" ><span class=\"ez-toc-section\" id=\"Atrybuty_mozliwe_do_zlokalizowania\"><\/span>Atrybuty mo\u017cliwe do zlokalizowania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"436\" data-end=\"691\">Je\u017celi obiekt biznesowy zawiera atrybuty lokalizowalne, mo\u017ce by\u0107 konieczne dostosowanie program\u00f3w aktualizacji tabel NLS. W wi\u0119kszo\u015bci przypadk\u00f3w kolumny istniej\u0105cych tabel NLS nie ulegaj\u0105 zmianie, dlatego dostosowanie klas aktualizacji nie jest wymagane.<\/p>\n<p data-start=\"693\" data-end=\"1165\">Je\u017celi zawarto\u015b\u0107 atrybutu mo\u017cliwego do zlokalizowania ma zosta\u0107 zmieniona, nale\u017cy uwzgl\u0119dni\u0107, \u017ce w klasach aktualizacji obiektu biznesowego mo\u017ce zosta\u0107 zmieniony wy\u0142\u0105cznie j\u0119zyk g\u0142\u00f3wny bazy danych. J\u0119zyki dodatkowe atrybutu musz\u0105 zosta\u0107 zmienione w odpowiednich klasach aktualizacji tabel NLS. W tych klasach aktualizacji powi\u0105zany obiekt biznesowy musi zosta\u0107 odczytany przy u\u017cyciu dost\u0119pu generycznego lub zestaw\u00f3w wynik\u00f3w.<\/p>\n<h5 data-start=\"1167\" data-end=\"1193\" id=\"tworzenie-nowych-elementow\" ><span class=\"ez-toc-section\" id=\"Tworzenie_nowych_elementow\"><\/span>Tworzenie nowych element\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"1195\" data-end=\"1487\">Podczas dodawania atrybutu NLS lub gdy atrybut nielokalizowalny zostaje przekszta\u0142cony w lokalizowalny, wszystkie t\u0142umaczenia s\u0105 inicjalizowane warto\u015bci\u0105 atrybutu w j\u0119zyku g\u0142\u00f3wnym obiektu. W takim przypadku zawsze wymuszana jest konwersja instancji odpowiedniego g\u0142\u00f3wnego obiektu biznesowego.<\/p>\n<p data-start=\"1489\" data-end=\"1708\" data-is-last-node=\"\" data-is-only-node=\"\">Ewentualne metody <em data-start=\"1507\" data-end=\"1523\">changeDatatype<\/em> istniej\u0105ce w klasach aktualizacji dla obiektu biznesowego NLS nie s\u0105 wykonywane, poniewa\u017c nie istniej\u0105 jeszcze instancje obiektu biznesowego NLS, do kt\u00f3rych mog\u0142yby zosta\u0107 zastosowane.<\/p>\n<h5 id=\"zmiany-klucza-glownego\" ><span class=\"ez-toc-section\" id=\"Zmiany_klucza_glownego\"><\/span>Zmiany klucza g\u0142\u00f3wnego<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zmiany klucza g\u0142\u00f3wnego obiektu biznesowego s\u0105 bardzo krytyczne i w miar\u0119 mo\u017cliwo\u015bci powinny by\u0107 unikane.<\/p>\n<h5 id=\"referencje-obiektow\" ><span class=\"ez-toc-section\" id=\"Referencje_obiektow\"><\/span>Referencje obiekt\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"127\" data-end=\"320\">W przypadku zmiany klucza g\u0142\u00f3wnego obiektu biznesowego wszystkie referencje obiekt\u00f3w staj\u0105 si\u0119 niewa\u017cne. Powoduje to mi\u0119dzy innymi utrat\u0119 wszystkich powi\u0105za\u0144 aktywno\u015bci workflow z tym obiektem.<\/p>\n<p data-start=\"333\" data-end=\"406\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nie istnieje uniwersalne rozwi\u0105zanie problemu utraty referencji obiekt\u00f3w.<\/div><\/section><\/p>\n<p data-start=\"408\" data-end=\"938\" data-is-last-node=\"\" data-is-only-node=\"\">Poniewa\u017c atrybuty mo\u017cliwe do zlokalizowania r\u00f3wnie\u017c odwo\u0142uj\u0105 si\u0119 do powi\u0105zanego obiektu biznesowego za pomoc\u0105 referencji obiekt\u00f3w, po zmianie klucza g\u0142\u00f3wnego t\u0142umaczenia trac\u0105 powi\u0105zanie z obiektem g\u0142\u00f3wnym. Je\u017celi zmiana klucza g\u0142\u00f3wnego jest konieczna, nale\u017cy utworzy\u0107 aktualizacj\u0119 danych, kt\u00f3ra zast\u0105pi referencje obiekt\u00f3w w tabelach NLS. Poniewa\u017c tabela NLS zawiera dodatkowo atrybuty klucza g\u0142\u00f3wnego obiektu g\u0142\u00f3wnego, dla ka\u017cdego t\u0142umaczenia mo\u017cliwe jest za\u0142adowanie obiektu g\u0142\u00f3wnego i na tej podstawie obliczenie nowej referencji obiektu.<\/p>\n","protected":false},"author":32,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9262","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-persistence-service"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9262","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\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9262"}],"version-history":[{"count":24,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9262\/revisions"}],"predecessor-version":[{"id":43373,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9262\/revisions\/43373"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}