{"id":9273,"date":"2025-11-18T10:38:44","date_gmt":"2025-11-18T09:38:44","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9273"},"modified":"2025-11-18T10:46:52","modified_gmt":"2025-11-18T09:46:52","slug":"generowanie-kodu","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/","title":{"rendered":"Generowanie kodu"},"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\/generowanie-kodu\/#Wprowadzenie\" >Wprowadzenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#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-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Definicja\" >Definicja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Podobienstwa_miedzy_Business_Objects_oraz_Parts\" >Podobie\u0144stwa mi\u0119dzy Business Objects oraz Parts<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Zapytanie_o_metadane\" >Zapytanie o metadane<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Flagi_dla_stanow_przejsciowych_i_trwalych\" >Flagi dla stan\u00f3w przej\u015bciowych i trwa\u0142ych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Metody_kopiowania\" >Metody kopiowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Metody_Equals\" >Metody Equals<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Serializacja\" >Serializacja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Deserializacja\" >Deserializacja<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Parts\" >Parts<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Metody_kopiowania-2\" >Metody kopiowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Dostep_do_immutable_niezmiennych_czesci\" >Dost\u0119p do immutable (niezmiennych) cz\u0119\u015bci<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Dostep_do_mutable_Parts\" >Dost\u0119p do mutable Parts<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Business_Objects\" >Business Objects<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Klucze_keys\" >Klucze (keys)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Relacje\" >Relacje<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Metody_kopiowania-3\" >Metody kopiowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#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-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Zaleznosc_czasowa\" >Zale\u017cno\u015b\u0107 czasowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Informacje_o_zmianach\" >Informacje o zmianach<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Business_Entities\" >Business Entities<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Informacje_o_dacie_i_godzinie_ze_strefa_czasowa\" >Informacje o dacie i godzinie ze stref\u0105 czasow\u0105<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/generowanie-kodu\/#Waluty_bazowe\" >Waluty bazowe<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W niniejszym artykule opisano generowanie jednej lub kilku klas Java przez Kernel dla Business Objects i Parts. W kontek\u015bcie generowania kodu, przedstawiono podobie\u0144stwa Business Objects i Parts oraz ich specyficzne cechy.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Deweloperzy<\/li>\n<\/ul>\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>Wymagana jest znajomo\u015b\u0107 <a title=\"Persistence service\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/persistence-service\/\">Persistence service.<\/a><\/p>\n<h3 id=\"definicja\" ><span class=\"ez-toc-section\" id=\"Definicja\"><\/span>Definicja<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>Persistence service<\/strong> &#8211; dzia\u0142a wy\u0142\u0105cznie z obiektami <em>nieprzechodnimi<\/em>. Je\u015bli Persistence service za\u0142aduje obiekt z bazy danych, obiekt ten jest <em>nieprzechodni<\/em> i <em>trwa\u0142y<\/em>. Je\u015bli obiekt jest nowo generowany przez Persistence service i nie jest jeszcze przechowywany w bazie danych, w\u00f3wczas obiekt ten jest <em>nieprzechodni<\/em> i <em>nietrwa\u0142y<\/em>. Przej\u015bciowa kopia ka\u017cdego obiektu mo\u017ce zosta\u0107 utworzona niezale\u017cnie od jego statusu. Na przyk\u0142ad przej\u015bciowa kopia trwa\u0142ego obiektu zawiera r\u00f3wnie\u017c informacj\u0119, \u017ce obiekt jest trwa\u0142y, ale brakuje odniesienia do bazy danych.<\/p>\n<p><strong>Obiekty nietrwa\u0142e<\/strong> &#8211; nie s\u0105 jeszcze przechowywane w bazie danych.<\/p>\n<p><strong>Obiekty nieprzechodnie<\/strong> &#8211; obiekty nietrwa\u0142e posiadaj\u0105 kontekst transakcyjny, a zatem posiadaj\u0105 odniesienie do bazy danych. Obiekty nowo wygenerowane przez Object Manager nie s\u0105 trwa\u0142e ani przej\u015bciowe.<\/p>\n<p><strong>Obiekty trwa\u0142e<\/strong> (<em class=\"eujQNb\" data-processed=\"true\">persistent<\/em>)- s\u0105 przechowywane w bazie danych i z niej s\u0105 \u0142adowane.<\/p>\n<p><strong>Obiekty przej\u015bciowe<\/strong> (<em>transient<\/em>) nie maj\u0105 kontekstu transakcji, a zatem nie maj\u0105 odniesienia do bazy danych. Przej\u015bciowa kopia trwa\u0142ego obiektu zawiera informacj\u0119, \u017ce obiekt jest trwa\u0142y, ale brakuje odniesienia do bazy danych.<\/p>\n<h3 id=\"podobienstwa-miedzy-business-objects-oraz-parts\" ><span class=\"ez-toc-section\" id=\"Podobienstwa_miedzy_Business_Objects_oraz_Parts\"><\/span>Podobie\u0144stwa mi\u0119dzy Business Objects oraz Parts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>W\u0142a\u015bciwo\u015bci, metody i obiekty s\u0105 dziedziczone przez Business Objects oraz Parts\u00a0<i>zmienne (mutable)<\/i> z klasy <i>com.cisag.pgm.datatype.CisObject<\/i>.<\/li>\n<li>W\u0142a\u015bciwo\u015bci, metody i obiekty s\u0105 dziedziczone przez Parts\u00a0<i style=\"font-size: revert; color: initial;\">niezmienne (immutable)<\/i><span style=\"font-size: revert; color: initial;\"> z klasy <\/span><i style=\"font-size: revert; color: initial;\">com.cisag.pgm.datatype.CisPart<\/i><span style=\"font-size: revert; color: initial;\">.<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-40146\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu.png\" alt=\"\" width=\"437\" height=\"232\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu.png 437w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu-300x159.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu-50x27.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/11\/generowanie-kodu-320x170.png 320w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/a>Obiekty biznesowe i zmienne Parts maj\u0105 pewne podobie\u0144stwa, cz\u0119\u015bciowo ze wzgl\u0119du na identyczn\u0105 klas\u0119 bazow\u0105, kt\u00f3re opisano poni\u017cej.<\/p>\n<p>Poniewa\u017c zmienne Parts i obiekty biznesowe maj\u0105 t\u0119 sam\u0105 klas\u0119 bazow\u0105, istniej\u0105 metody, kt\u00f3re s\u0105 zadeklarowane w klasie bazowej, ale nie s\u0105 nadpisywane w klasie pochodnej. Metody te, takie jak getMutableCopy() obiektu biznesowego, wywo\u0142uj\u0105 wyj\u0105tki (wyj\u0105tek nieobs\u0142ugiwanej operacji). Nale\u017cy zatem sprawdzi\u0107 zaimplementowane metody przed ich u\u017cyciem. W tym celu nale\u017cy u\u017cy\u0107 kontekstu u\u017cycia lub zapyta\u0107 o typy obiekt\u00f3w.<\/p>\n<h5 id=\"zapytanie-o-metadane\" ><span class=\"ez-toc-section\" id=\"Zapytanie_o_metadane\"><\/span>Zapytanie o metadane<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W klasie CisObject mo\u017cna zapyta\u0107 o typ obiektu tylko za pomoc\u0105 metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public short get_type();<\/code><\/pre>\n<p>Warto\u015b\u0107 zwracana przez t\u0119 metod\u0119 odpowiada &#8211; w zale\u017cno\u015bci od typu obiektu &#8211; jednej z poni\u017cszych sta\u0142ych:<\/p>\n<ul>\n<li>T_BUSINESS_OBJECT<\/li>\n<li>T_MUTABLE_PART<\/li>\n<li>T_VIEW<\/li>\n<li>T_BUSINESS_ENTITY<\/li>\n<li>T_BUSINESS_SUBENTITY<\/li>\n<\/ul>\n<p data-start=\"424\" data-end=\"503\">W celu zweryfikowania, czy obiekt jest okre\u015blonego typu, stosowana jest metoda:<\/p>\n<div class=\"contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public boolean is_type(short type)<\/code><\/pre>\n<p data-start=\"549\" data-end=\"685\">Metoda ta uwzgl\u0119dnia zale\u017cno\u015bci pomi\u0119dzy typami, rozpoznaj\u0105c <em data-start=\"610\" data-end=\"627\">Business Entity<\/em> oraz <em data-start=\"633\" data-end=\"654\">Business-Sub-Entity<\/em> tak\u017ce jako <em data-start=\"666\" data-end=\"684\">Business Objects<\/em>.<\/p>\n<p data-start=\"687\" data-end=\"845\">GUID (Globally Unique Identifier) obiektu typu <em data-start=\"734\" data-end=\"751\">Business Object<\/em>, kt\u00f3ry stanowi podstaw\u0119 do generowania klasy, mo\u017ce by\u0107 pobrany za pomoc\u0105 nast\u0119puj\u0105cej metody:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public byte[] get_classGuid()<\/code><\/pre>\n<h5 id=\"flagi-dla-stanow-przejsciowych-i-trwalych\" ><span class=\"ez-toc-section\" id=\"Flagi_dla_stanow_przejsciowych_i_trwalych\"><\/span>Flagi dla stan\u00f3w przej\u015bciowych i trwa\u0142ych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"46\" data-end=\"144\">Za pomoc\u0105 poni\u017cszych metod mo\u017cliwe jest sprawdzenie, czy jest persistent czy transient:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public boolean is_persistent()<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public boolean is_transient()<\/pre>\n<p>Flaga persistent mo\u017ce by\u0107 ustawiona dla obiekt\u00f3w transient\u00a0za pomoc\u0105 tej metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public boolean set_persistent(boolean value)<\/pre>\n<p data-start=\"367\" data-end=\"467\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Ustawienie tej flagi dla obiekt\u00f3w, kt\u00f3re nie s\u0105 transient, powoduje b\u0142\u0105d wykonywania.<\/div><\/section><\/p>\n<p>Za pomoc\u0105 metody<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public boolean is_newObject()<\/pre>\n<p>mo\u017cna sprawdzi\u0107, czy obiekt jest ju\u017c zarejestrowany w Mened\u017cerze obiekt\u00f3w. Obiekt jest nowy tylko wtedy, gdy zosta\u0142 utworzony za pomoc\u0105 READ_WRITE lub INSERT i nie zosta\u0142 jeszcze przes\u0142any do Object Managera za pomoc\u0105 putObject.<\/p>\n<h5 id=\"metody-kopiowania\" ><span class=\"ez-toc-section\" id=\"Metody_kopiowania\"><\/span>Metody kopiowania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zawarto\u015b\u0107 obiektu jest kopiowana do innej instancji (tej samej klasy lub instancji pochodnej) przy u\u017cyciu nast\u0119puj\u0105cej metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public void copyTo(CisObject obj)<\/pre>\n<p>W przypadku obiekt\u00f3w zale\u017cnych od czasu wpis dotycz\u0105cy okresu wa\u017cno\u015bci nie jest kopiowany.<\/p>\n<p data-start=\"295\" data-end=\"357\">Zasady kopiowania w zale\u017cno\u015bci od stanu obiektu docelowego:<\/p>\n<ul data-start=\"359\" data-end=\"662\" data-is-last-node=\"\" data-is-only-node=\"\">\n<li data-start=\"359\" data-end=\"532\">\n<p data-start=\"361\" data-end=\"532\"><span style=\"font-size: revert; color: initial;\">Je\u015bli obiekt docelowy jest <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"388\" data-end=\"399\">transient<\/em><span style=\"font-size: revert; color: initial;\">, w\u00f3wczas do obiektu docelowego kopiowana jest kompletna zawarto\u015b\u0107 obiektu \u017ar\u00f3d\u0142owego, \u0142\u0105cznie z flagami <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"504\" data-end=\"516\">persistent<\/em><span style=\"font-size: revert; color: initial;\"> oraz <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"522\" data-end=\"531\">deleted<\/em><span style=\"font-size: revert; color: initial;\">.<\/span><\/p>\n<\/li>\n<li data-start=\"359\" data-end=\"532\">Je\u015bli obiekt docelowy nie jest <em data-start=\"567\" data-end=\"578\">transient<\/em>, w\u00f3wczas do tego obiektu nie jest kopiowany ani klucz g\u0142\u00f3wny, ani \u017cadne inne flagi.<\/li>\n<\/ul>\n<h5 id=\"metody-equals\" ><span class=\"ez-toc-section\" id=\"Metody_Equals\"><\/span>Metody Equals<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Za pomoc\u0105 tej metody mo\u017cna por\u00f3wna\u0107 zawarto\u015b\u0107 dw\u00f3ch obiekt\u00f3w:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">boolean contentEquals(Object obj)<\/pre>\n<p>Nast\u0119puj\u0105ca metoda equals jest u\u017cywana Business Objects oraz Parts:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">boolean equals(Object object)<\/pre>\n<p>Metoda ta prowadzi do r\u00f3\u017cnych wynik\u00f3w, w przypadku:<\/p>\n<ul>\n<li>Business Objects por\u00f3wnywany jest klucz podstawowy i flaga &#8222;transient&#8221;.<\/li>\n<li>Parts <span style=\"font-size: revert; color: initial;\">wywo\u0142ywana jest nast\u0119puj\u0105ca metoda:<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">contentEquals<\/pre>\n<h5 id=\"serializacja\" ><span class=\"ez-toc-section\" id=\"Serializacja\"><\/span>Serializacja<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Stan obiektu mo\u017ce by\u0107 serializowany w tablicy bajt\u00f3w (Byte-Arrays). Serializacja zapewnia pe\u0142n\u0105 kopi\u0119 zawarto\u015bci obiektu. Oznacza to, \u017ce Parts i Arrays zawarte w obiekcie s\u0105 r\u00f3wnie\u017c kopiowane.<\/p>\n<p>Podczas serializacji mo\u017cliwe jest okre\u015blenie, czy ma zosta\u0107 zapisany ca\u0142y obiekt (<em data-start=\"295\" data-end=\"316\">changesOnly = false<\/em>), czy jedynie te elementy, kt\u00f3re zosta\u0142y zmienione w bie\u017c\u0105cej transakcji (<em data-start=\"391\" data-end=\"411\">changesOnly = true<\/em>). Serializacja pe\u0142nego obiektu lub jego cz\u0119\u015bci odbywa si\u0119 za pomoc\u0105 metody:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public byte[] serialise(boolean changesOnly)<\/pre>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Ze wzgl\u0119du na przejrzysto\u015b\u0107 nale\u017cy u\u017cywa\u0107 tylko serializacji kompletnego obiektu.<\/div><\/section>\n<h5 id=\"deserializacja\" ><span class=\"ez-toc-section\" id=\"Deserializacja\"><\/span>Deserializacja<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zserializowany obiekt mo\u017cna deserializowa\u0107 na dwa sposoby:<\/p>\n<ul>\n<li>Kopiuj\u0105c zawarto\u015b\u0107 tablicy bajt\u00f3w (Byte-Arrays) do istniej\u0105cej instancji tej samej klasy. Oznacza to, \u017ce zawarto\u015b\u0107 wcze\u015bniej zserializowanego obiektu jest zapisywana do istniej\u0105cej instancji. W tym celu nale\u017cy u\u017cy\u0107 tej metody:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public void deserialise(byte[]array)<\/pre>\n<p>Jest ona podobna do metody copyTo, ale serializowana Byte-Arrays zawiera r\u00f3wnie\u017c zakresy obiekt\u00f3w zale\u017cnych od czasu.<\/p>\n<ul>\n<li>Generowana jest nowa instancja z zawarto\u015bci\u0105 tablicy bajt\u00f3w (Byte-Arrays). Za pomoc\u0105 tej metody generowana jest instancja serializowanej klasy:<\/li>\n<\/ul>\n<p>public static CisObject create NewInstance(byte[]array)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public static CisObject create NewInstance(byte[]array)<\/pre>\n<h4 id=\"parts\" ><span class=\"ez-toc-section\" id=\"Parts\"><\/span>Parts<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 [content-visibility:auto] supports-[content-visibility:auto]:[contain-intrinsic-size:auto_100lvh] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-WEB:1d275f16-4061-43b7-9321-d750fb26963a-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:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] thread-lg:[--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 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=\"79ea5228-7bd3-4512-abea-9335668204ff\" data-message-model-slug=\"gpt-5-1\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[1px]\">\n<div class=\"markdown prose dark:prose-invert w-full break-words light markdown-new-styling\">\n<p data-start=\"52\" data-end=\"139\" data-is-last-node=\"\" data-is-only-node=\"\">W tym rozdziale opisane s\u0105 metody, kt\u00f3re s\u0105 dost\u0119pne wy\u0142\u0105cznie dla mutowalnych <em data-start=\"131\" data-end=\"138\">Parts<\/em>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h5 class=\"z-0 flex min-h-[46px] justify-start\" id=\"metody-kopiowania\" ><span class=\"ez-toc-section\" id=\"Metody_kopiowania-2\"><\/span><span style=\"color: revert; font-size: revert; font-weight: revert;\">Metody kopiowania<\/span><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<\/div>\n<\/div>\n<\/article>\n<p>Poni\u017csza metoda tworzy &#8222;g\u0142\u0119bok\u0105 kopi\u0119&#8221; cz\u0119\u015bci:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public CisObject copy()<\/pre>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Poj\u0119cie <em data-start=\"128\" data-end=\"145\">g\u0142\u0119bokiej kopii<\/em> oznacza pe\u0142ne skopiowanie <em data-start=\"172\" data-end=\"178\" data-is-only-node=\"\">Part<\/em> wraz ze wszystkimi zawartymi w nim atrybutami oraz <em data-start=\"230\" data-end=\"237\">Parts<\/em>. Kopiowana jest ca\u0142a zawarto\u015b\u0107 <em data-start=\"269\" data-end=\"275\">Part<\/em>.<\/div><\/section>\n<h5 id=\"dostep-do-immutable-niezmiennych-czesci\" ><span class=\"ez-toc-section\" id=\"Dostep_do_immutable_niezmiennych_czesci\"><\/span>Dost\u0119p do immutable (niezmiennych) cz\u0119\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em data-start=\"47\" data-end=\"63\">Immutable Part<\/em> stanowi otoczk\u0119 (<em data-start=\"81\" data-end=\"90\">wrapper<\/em>) dla <em data-start=\"96\" data-end=\"110\">mutable Part<\/em>. Podczas przekszta\u0142cania <em data-start=\"136\" data-end=\"150\">mutable Part<\/em> w <em data-start=\"153\" data-end=\"169\">immutable Part<\/em> dost\u0119pne s\u0105 dwa podej\u015bcia:<\/p>\n<p>Generowanie nowego wrappera dla istniej\u0105cego mutable Part<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">- public CisPart castImmutable()\n\n- public static &lt;&lt;Part&gt;&gt; castImmutable(&lt;&lt;PartMutable&gt;&gt; partMutable)\n\n- public static &lt;&lt;Part&gt;&gt;[] castImmutable(&lt;&lt;PartMutable&gt;&gt;[] partMutable)<\/pre>\n<p data-start=\"439\" data-end=\"483\">Tworzenie g\u0142\u0119bokiej kopii <em data-start=\"469\" data-end=\"483\">mutable Part<\/em><\/p>\n<div class=\"contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\"><span style=\"color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;\">&#8211; public CisPart getImmutableCopy ()<\/span><\/div>\n<\/div>\n<\/div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">- public static &lt;&lt;Part&gt;&gt; getImmutableCopy (&lt;&lt;PartMutable&gt;&gt; partMutable)\n\n- public static &lt;&lt;Part&gt;&gt; getImmutableCopy (&lt;&lt;PartMutable&gt;&gt;partMutable)<\/pre>\n<p>Metody <em data-start=\"676\" data-end=\"684\">static<\/em> (statyczne) ka\u017cdorazowo sprawdzaj\u0105, czy argument jest <em data-start=\"727\" data-end=\"733\">null<\/em>.<br data-start=\"734\" data-end=\"737\" \/>Je\u015bli przekazany argument ma warto\u015b\u0107 <em data-start=\"774\" data-end=\"780\">null<\/em>, zwracana warto\u015b\u0107 r\u00f3wnie\u017c jest <em data-start=\"812\" data-end=\"818\">null<\/em>.<\/p>\n<h6 id=\"roznice\" ><strong>R\u00f3\u017cnice<\/strong><\/h6>\n<p data-start=\"152\" data-end=\"317\"><strong>castImmutable<\/strong><br data-start=\"165\" data-end=\"168\" \/>Metoda <em data-start=\"175\" data-end=\"190\">castImmutable<\/em> nie tworzy kopii. Dlatego atrybuty <em data-start=\"226\" data-end=\"242\">immutable Part<\/em> mog\u0105 ulega\u0107 zmianie, je\u015bli zmieniany jest odpowiadaj\u0105cy mu <em data-start=\"302\" data-end=\"316\">mutable Part<\/em>.<\/p>\n<p data-start=\"319\" data-end=\"506\"><strong>copyImmutable<\/strong><br data-start=\"332\" data-end=\"335\" \/><em data-start=\"335\" data-end=\"351\">Immutable Part<\/em> jest zapisywany w oddzielnym <em data-start=\"381\" data-end=\"395\">mutable Part<\/em>. <em data-start=\"397\" data-end=\"413\">Immutable Part<\/em> kapsu\u0142kuje <em data-start=\"425\" data-end=\"439\">mutable Part<\/em>. Dzi\u0119ki temu \u017caden program nie mo\u017ce zmodyfikowa\u0107 <em data-start=\"489\" data-end=\"505\">immutable Part<\/em>.<\/p>\n<h5 id=\"dostep-do-mutable-parts\" ><span class=\"ez-toc-section\" id=\"Dostep_do_mutable_Parts\"><\/span>Dost\u0119p do <em data-start=\"40\" data-end=\"55\">mutable Parts<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>Mutable Part<\/em> jest otoczony przez <em>immutable Part<\/em>. Po wygenerowaniu <em>immutable Part<\/em> dost\u0119p do <em>mutable Part<\/em> nie jest ju\u017c mo\u017cliwy. Z tego powodu mo\u017ce zosta\u0107 wygenerowana jedynie kopia <em>mutable Part<\/em>, kt\u00f3ra zawiera tre\u015b\u0107 <em>immutable Part<\/em>. Nast\u0119puj\u0105ce metody generuj\u0105 <em>mutable Parts<\/em>:<\/p>\n<pre><code>public CisObject getMutableCopy()\n<\/code><\/pre>\n<pre><code>public static &lt;&lt;PartMutable&gt;&gt; getMutableCopy (&lt;&lt;Part&gt;&gt; part)\n<\/code><\/pre>\n<pre><code>public static &lt;&lt;PartMutable&gt;&gt;[] getMutableCopy (&lt;&lt;Part&gt;&gt;[] part)\n<\/code><\/pre>\n<p>Metody <em>static<\/em> sprawdzaj\u0105 ka\u017cdorazowo, czy argument ma warto\u015b\u0107 <em>null<\/em>. Je\u015bli przekazany argument jest <em>null<\/em>, wynik r\u00f3wnie\u017c ma warto\u015b\u0107 <em>null<\/em>.<\/p>\n<h4 id=\"5-3-business-objects\" id=\"business-objects\" ><span class=\"ez-toc-section\" id=\"Business_Objects\"><\/span>Business Objects<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla ka\u017cdej instancji <em>Business Object<\/em> mo\u017cliwe jest pobranie iteratora zawieraj\u0105cego wszystkie istniej\u0105ce instancje przy u\u017cyciu nast\u0119puj\u0105cych metod:<\/p>\n<pre><code>public CisObjectIterator retrieve_instances()\n<\/code><\/pre>\n<pre><code>public CisObjectIterator retrieve_instances(int flags)\n<\/code><\/pre>\n<p>Referencja do <em>Business Object<\/em> jest pobierana za pomoc\u0105 metody:<\/p>\n<pre><code>byte[] get_objectReference()\n<\/code><\/pre>\n<p>Referencj\u0119 mo\u017cna pobra\u0107 jedynie dla <em>persistent Business Objects<\/em>.<br \/>\nPobrana referencja zostaje za\u0142adowana do <em>Business Object<\/em> i jest wa\u017cna tylko wtedy, gdy transakcja zosta\u0142a zako\u0144czona instrukcj\u0105 <em>commit<\/em>.<\/p>\n<h5 id=\"klucze-keys\" ><span class=\"ez-toc-section\" id=\"Klucze_keys\"><\/span>Klucze (keys)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Wszystkie <em data-start=\"62\" data-end=\"80\">Business Objects<\/em> zawieraj\u0105 metody statyczne umo\u017cliwiaj\u0105ce generowanie r\u00f3\u017cnych kluczy. Klucze mog\u0105 by\u0107 tworzone r\u00f3wnie\u017c dla obiekt\u00f3w, kt\u00f3re jeszcze nie istniej\u0105. Metody statyczne odpowiedzialne za generowanie kluczy znajduj\u0105 si\u0119 w klasie <em data-start=\"301\" data-end=\"318\">Business Object<\/em>, do kt\u00f3rego dany klucz nale\u017cy. Ich struktura ma nast\u0119puj\u0105c\u0105 posta\u0107:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;&lt;BusinessObject&gt;&gt;.build&lt;&lt;KeyName&gt;&gt;Key(&lt;&lt;KeyAttribute 1&gt;&gt;,...,&lt;&lt;KeyAttribute n&gt;&gt;)<\/code><\/p>\n<p>Nazwa klucza g\u0142\u00f3wnego zawsze rozpoczyna si\u0119 od <em data-start=\"571\" data-end=\"580\">Primary<\/em>. Oznacza to, \u017ce klucz g\u0142\u00f3wny mo\u017ce zosta\u0107 wygenerowany przy u\u017cyciu metody:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">buildPrimaryKey<\/code><\/p>\n<p data-start=\"683\" data-end=\"769\">Klucz g\u0142\u00f3wny instancji <em data-start=\"706\" data-end=\"723\">Business Object<\/em> mo\u017cna pobra\u0107 z poziomu tej instancji poprzez:<\/p>\n<div class=\"contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public byte[] get_primaryKey()<\/code><\/p>\n<p data-start=\"845\" data-end=\"894\">Wszystkie klucze unikalne (<em data-start=\"872\" data-end=\"885\">unique keys<\/em>), czyli:<\/p>\n<ul data-start=\"896\" data-end=\"1006\">\n<li data-start=\"896\" data-end=\"927\">\n<p data-start=\"898\" data-end=\"927\">klucz g\u0142\u00f3wny (<em data-start=\"912\" data-end=\"925\">primary key<\/em>),<\/p>\n<\/li>\n<li data-start=\"928\" data-end=\"968\">\n<p data-start=\"930\" data-end=\"968\">klucze drugorz\u0119dne (<em data-start=\"950\" data-end=\"966\">secondary keys<\/em>),<\/p>\n<\/li>\n<li data-start=\"969\" data-end=\"1006\">\n<p data-start=\"971\" data-end=\"1006\">klucze biznesowe (<em data-start=\"989\" data-end=\"1004\">business keys<\/em>),<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"1008\" data-end=\"1045\">mog\u0105 zosta\u0107 pobrane za pomoc\u0105 metody:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public byte[][] get_uniqueKeys()<\/code><\/p>\n<p><em data-start=\"1110\" data-end=\"1127\">Instance String<\/em> to tekstowa reprezentacja instancji <em data-start=\"1164\" data-end=\"1181\">Business Object<\/em>, u\u0142atwiaj\u0105ca jej zrozumia\u0142\u0105 identyfikacj\u0119 dla u\u017cytkownika, np. Odbiornik radiowy art. 4711.<br data-start=\"1275\" data-end=\"1278\" \/>Atrybuty u\u017cyte do stworzenia <em data-start=\"1307\" data-end=\"1324\">Instance String<\/em> znajduj\u0105 si\u0119 r\u00f3wnie\u017c w <em data-start=\"1348\" data-end=\"1362\">Business Key<\/em>. Pobranie <em data-start=\"1374\" data-end=\"1391\">Instance String<\/em> odbywa si\u0119 za pomoc\u0105:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public String get_instanceString()<\/code><\/p>\n<p>Po pierwszym przekazaniu instancji <em data-start=\"1544\" data-end=\"1561\">Business Object<\/em> do <em data-start=\"1565\" data-end=\"1582\">Object-Managera<\/em> przy u\u017cyciu <em data-start=\"1595\" data-end=\"1606\">putObject<\/em>, atrybuty klucza g\u0142\u00f3wnego tej instancji nie mog\u0105 by\u0107 ju\u017c zmieniane.<\/p>\n<h5 id=\"relacje\" ><span class=\"ez-toc-section\" id=\"Relacje\"><\/span>Relacje<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Mi\u0119dzy Business Objects oraz mi\u0119dzy Part a Business Objects mog\u0105 istnie\u0107 relacje. Rozr\u00f3\u017cnia si\u0119 relacje 1:1 oraz 1:n. Dla ka\u017cdej relacji generowana jest metoda retrieve w obiekcie, z kt\u00f3rego relacja wychodzi. Za pomoc\u0105 metody retrieve mo\u017cna pobiera\u0107 referencjonowane Business Objects. Je\u015bli obiekty zawieraj\u0105 atrybuty NLS, referencjonowane obiekty s\u0105 \u0142adowane w nast\u0119puj\u0105cy spos\u00f3b dla:<\/p>\n<ul>\n<li>Business Objects referencjonowane obiekty s\u0105 \u0142adowane w j\u0119zyku, w kt\u00f3rym zosta\u0142 za\u0142adowany obiekt \u017ar\u00f3d\u0142owy.<\/li>\n<li>Parts referencjonowane obiekty s\u0105 \u0142adowane w j\u0119zyku bazy danych.<\/li>\n<\/ul>\n<p>Metody retrieve dla relacji 1:1 s\u0105 generowane w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">&lt;&lt;BusinessObject&gt;&gt; retrieve&lt;&lt;nazwa relacji&gt;&gt;()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">&lt;&lt;BusinessObject&gt;&gt; retrieve&lt;&lt;nazwa zwi\u0105zku&gt;&gt;(int flags)<\/code><\/p>\n<p>Metody retrieve dla relacji 1:n s\u0105 generowane w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">CisObjectIterator retrieve&lt;&lt;nazwa relacji&gt;&gt;()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">CisObjectIterator retrieve&lt;&lt;nazwa zwi\u0105zku&gt;&gt;(int flags)<\/code><\/p>\n<p>Opcjonalny parametr flags okre\u015bla, w jaki spos\u00f3b obiekt ma zosta\u0107 za\u0142adowany. Odpowiednie sta\u0142e (READ, READ_UPDATE, \u2026) znajduj\u0105 si\u0119 w Object-Manager.<\/p>\n<h5 id=\"metody-kopiowania\" ><span class=\"ez-toc-section\" id=\"Metody_kopiowania-3\"><\/span>Metody kopiowania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Ka\u017cde persistent Business Object jest wa\u017cne wy\u0142\u0105cznie w ramach tej transakcji, w kt\u00f3rej zosta\u0142o za\u0142adowane przez Object Manager. Je\u015bli konieczne jest u\u017cycie Business Object, kt\u00f3re nie powinno zale\u017ce\u0107 od \u017cadnej transakcji, nale\u017cy wygenerowa\u0107 jego kopi\u0119 transient za pomoc\u0105 poni\u017cszych metod:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public static &lt;&lt;BusinessObject&gt;&gt; getTransientCopy(&lt;&lt;BusinessObject&gt;&gt; object)<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public static &lt;&lt;BusinessObject&gt;&gt; getTransientCopy(&lt;&lt;BusinessObject&gt;&gt; object)<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public static &lt;&lt;BusinessObject&gt;&gt;[] getTransientCopy(&lt;&lt;BusinessObject&gt;&gt;[] object)<\/code><\/p>\n<p>Metody <em data-start=\"630\" data-end=\"638\">static<\/em> ka\u017cdorazowo sprawdzaj\u0105, czy przekazany argument ma warto\u015b\u0107 <em data-start=\"698\" data-end=\"704\">null<\/em>. Je\u015bli argument jest <em data-start=\"728\" data-end=\"734\">null<\/em>, zwracany wynik r\u00f3wnie\u017c ma warto\u015b\u0107 <em data-start=\"770\" data-end=\"776\" data-is-only-node=\"\">null<\/em>.<\/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>W momencie \u0142adowania <em data-start=\"50\" data-end=\"67\">Business Object<\/em> mo\u017cliwe jest okre\u015blenie j\u0119zyka, w kt\u00f3rym maj\u0105 zosta\u0107 zwr\u00f3cone atrybuty mo\u017cliwe do zlokalizowania. J\u0119zyk, w kt\u00f3rym takie atrybuty zosta\u0142y za\u0142adowane, mo\u017cna sprawdzi\u0107 za pomoc\u0105 nast\u0119puj\u0105cej metody:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public String get_contentLanguage()<\/code><\/p>\n<h5 id=\"zaleznosc-czasowa\" ><span class=\"ez-toc-section\" id=\"Zaleznosc_czasowa\"><\/span>Zale\u017cno\u015b\u0107 czasowa<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Za pomoc\u0105 poni\u017cszej metody mo\u017cna sprawdzi\u0107, czy Business Object jest obiektem zale\u017cnym od czasu:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">boolean is_timeDependent()<\/code><\/p>\n<p>Dla obiekt\u00f3w zale\u017cnych od czasu, niezale\u017cnie od rodzaju ich zale\u017cno\u015bci czasowej, generowane s\u0105 nast\u0119puj\u0105ce metody:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public java.util.Date getValidFrom()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public void setValidFrom(java.util.Date validFrom)<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public java.util.Date getValidUntil()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public void setValidUntil(java.util.Date validUntil)<\/code><\/p>\n<p>Przedzia\u0142 czasu [validFrom, validUntil[ obiektu zale\u017cnego od czasu mo\u017cna odczyta\u0107 lub zmieni\u0107 za pomoc\u0105 tych standardowych metod.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Kierunek nawias\u00f3w kwadratowych wskazuje, czy granice przedzia\u0142u s\u0105 zawarte w przedziale.<\/div><\/section>\n<p>W tym przypadku dolny limit validFrom jest zawarty w przedziale wa\u017cno\u015bci, podczas gdy g\u00f3rny limit validUntil nie jest zawarty w przedziale wa\u017cno\u015bci.<\/p>\n<p>W przypadku obiekt\u00f3w zale\u017cnych od czasu mo\u017ce wyst\u0105pi\u0107 sytuacja, w kt\u00f3rej istnieje wiele obiekt\u00f3w z takim samym kluczem g\u0142\u00f3wnym lub kluczem wt\u00f3rnym, pod warunkiem \u017ce posiadaj\u0105 one roz\u0142\u0105czne interwa\u0142y obowi\u0105zywania.<br \/>\nStandardowy klucz g\u0142\u00f3wny nie zawiera atrybutu validFrom, dlatego dost\u0119pne s\u0105 metody pozwalaj\u0105ce pobra\u0107 lub wygenerowa\u0107 odpowiedni klucz dla obiektu zale\u017cnego od czasu.<\/p>\n<p>W przypadku zale\u017cno\u015bci czasowej typu:<\/p>\n<ul>\n<li>data ze stref\u0105 czasow\u0105 (zarz\u0105dzana przez aplikacj\u0119)<\/li>\n<li>czas ze stref\u0105 czasow\u0105 (zarz\u0105dzany przez aplikacj\u0119)<\/li>\n<\/ul>\n<p>generowany jest dodatkowy atrybut:<\/p>\n<ul>\n<li>_timeZoneGuid<\/li>\n<\/ul>\n<p>Atrybut ten ma takie samo znaczenie, jak w przypadku Object-Dates lub Object-Timestamps.<br \/>\nAtrybuty validFrom oraz validUntil nie s\u0105 typu CisDate.<\/p>\n<p>Ten klucz jednoznacznie identyfikuje <em data-start=\"1374\" data-end=\"1391\">Business Object<\/em> wraz z jego interwa\u0142em obowi\u0105zywania:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public byte[] get_timeDependentKey()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public byte[] buildTimeDependentKey(&lt;&lt;PrimaryKey&gt;&gt;, java.util.Date validFrom)<\/code><\/p>\n<p>Dla obiektu zale\u017cnego od czasu mo\u017cliwe jest pobranie czasowo nast\u0119pnej lub poprzedniej wersji Business Object przy u\u017cyciu nast\u0119puj\u0105cych metod:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public &lt;&lt;BusinessObject&gt;&gt; retrieve_nextVersion()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public &lt;&lt;BusinessObject&gt;&gt; retrieve_nextVersion(int flags)<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public &lt;&lt;BusinessObject&gt;&gt; retrieve_previousVersion()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public &lt;&lt;BusinessObject&gt;&gt; retrieve_previousVersion(int flags)<\/code><\/p>\n<h5 id=\"informacje-o-zmianach\" ><span class=\"ez-toc-section\" id=\"Informacje_o_zmianach\"><\/span>Informacje o zmianach<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby sprawdzi\u0107, czy informacje o aplikacji powinny by\u0107 przechowywane dla Business Object nale\u017cy u\u017cy\u0107 metody:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">boolean is_updateInfoRequired()<\/code><\/p>\n<p>Nast\u0119puj\u0105ce metody s\u0105 generowane dla obiekt\u00f3w z informacjami o zmianach:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public UpdateInformation getUpdateInfo()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public UpdateInformationMutable getMutableUpdateInfo()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public void setUpdateInfo(UpdateInformationMutable _updateInfoInstance)<\/code><\/p>\n<p>Informacje o zmianach obiektu mog\u0105 by\u0107 odczytywane i modyfikowane za pomoc\u0105 standardowych metod. Na podstawie informacji o zmianach mo\u017cna ustali\u0107, kiedy i przez kt\u00f3rego u\u017cytkownika Business Object zosta\u0142o utworzone, ostatnio zmodyfikowane lub oznaczone jako usuni\u0119te. Oznaczenie jako usuni\u0119te nie oznacza fizycznego usuni\u0119cia obiektu z bazy danych. Do oznaczenia obiektu jako usuni\u0119tego s\u0142u\u017cy metoda:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public void set_deleted(boolean value)<\/code><\/p>\n<p data-start=\"999\" data-end=\"1188\">Metoda ta ustawia jedynie flag\u0119 usuni\u0119cia (data usuni\u0119cia w informacjach o zmianach staje si\u0119 r\u00f3\u017cna od null). Dzi\u0119ki temu aplikacja mo\u017ce wizualnie wyr\u00f3\u017cnia\u0107 obiekty oznaczone jako usuni\u0119te. Aby sprawdzi\u0107, czy obiekt zosta\u0142 oznaczony jako usuni\u0119ty, s\u0142u\u017cy metoda:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public boolean is_deleted()<\/code><\/p>\n<p>Metody:<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">is_deleted<\/code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\"><\/code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\"><\/code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\"><\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">set_deleted<\/code><\/li>\n<\/ul>\n<p>s\u0105 r\u00f3wnie\u017c dost\u0119pne dla obiekt\u00f3w, kt\u00f3re nie maj\u0105 informacji o zmianach. W tym przypadku jednak metody te mog\u0105 by\u0107 u\u017cywane tylko dla obiekt\u00f3w transient.<\/p>\n<h5 id=\"5-3-7-business-entitys\" id=\"business-entities\" ><span class=\"ez-toc-section\" id=\"Business_Entities\"><\/span>Business Entities<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli <em data-start=\"49\" data-end=\"66\">Business Object<\/em> jest <em data-start=\"72\" data-end=\"84\">Sub-Entity<\/em> lub <em data-start=\"89\" data-end=\"100\">Dependent<\/em>, mo\u017cliwe jest pobranie powi\u0105zanego <em data-start=\"136\" data-end=\"153\">Business Entity<\/em> za pomoc\u0105 nast\u0119puj\u0105cych metod:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public CisObject retrieve_entity()<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public CisObject retrieve_entity(int flags)<\/code><\/p>\n<h5 id=\"informacje-o-dacie-i-godzinie-ze-strefa-czasowa\" ><span class=\"ez-toc-section\" id=\"Informacje_o_dacie_i_godzinie_ze_strefa_czasowa\"><\/span>Informacje o dacie i godzinie ze stref\u0105 czasow\u0105<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"40\" data-end=\"241\">Czas oraz daty z informacj\u0105 o strefie czasowej s\u0105 przechowywane w klasie Java<\/p>\n<p data-start=\"40\" data-end=\"241\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">com.cisag.pgm.datatype.CisDate<\/code><\/p>\n<p data-start=\"40\" data-end=\"241\">Obiekt <em data-start=\"161\" data-end=\"170\">CisDate<\/em> sk\u0142ada si\u0119 czasu oraz przypisanej do niej strefy czasowej.<\/p>\n<p data-start=\"243\" data-end=\"452\">W przestrzeni nazw <em data-start=\"262\" data-end=\"286\">com.cisag.pgm.datatype<\/em> znajduj\u0105 si\u0119 r\u00f3\u017cne typy danych umo\u017cliwiaj\u0105ce wykorzystanie atrybutu <em data-start=\"355\" data-end=\"364\">CisDate<\/em> w <em data-start=\"367\" data-end=\"384\">Business Object<\/em> lub <em data-start=\"389\" data-end=\"395\">Part<\/em>.<br data-start=\"396\" data-end=\"399\" \/>W kodzie generowanym rozr\u00f3\u017cniane s\u0105 nast\u0119puj\u0105ce typy:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisObjectDate oraz CisObjectTimeStamp\n\nCisAttributeDate oraz CisAttributeTimeStamp<\/pre>\n<p data-start=\"583\" data-end=\"751\">Wszystkie <em data-start=\"593\" data-end=\"609\">CisObjectDates<\/em> w jednym <em data-start=\"619\" data-end=\"636\">Business Object<\/em> musz\u0105 korzysta\u0107 z tej samej strefy czasowej.<br data-start=\"681\" data-end=\"684\" \/>Strefa czasowa dla <em data-start=\"703\" data-end=\"719\">CisObjectDates<\/em> jest przechowywana w atrybucie:<\/p>\n<ul data-start=\"753\" data-end=\"771\">\n<li data-start=\"753\" data-end=\"771\">\n<p data-start=\"755\" data-end=\"771\"><strong data-start=\"755\" data-end=\"771\">timeZoneGuid <\/strong>&#8211; a<span style=\"font-size: revert; color: initial;\">trybut <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"781\" data-end=\"795\">timeZoneGuid<\/em><span style=\"font-size: revert; color: initial;\"> mo\u017ce zosta\u0107 ustawiony jedynie podczas tworzenia nowego <\/span><em style=\"font-size: revert; color: initial;\" data-start=\"851\" data-end=\"868\">Business Object<\/em><span style=\"font-size: revert; color: initial;\">.<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"773\" data-end=\"1039\">Po jego pierwszym ustawieniu nie mo\u017ce by\u0107 ju\u017c zmieniany w obiektach, kt\u00f3re nie s\u0105 <em data-start=\"954\" data-end=\"965\">transient<\/em>.<br data-start=\"966\" data-end=\"969\" \/>Ka\u017cda pr\u00f3ba ponownego ustawienia warto\u015bci prowadzi do b\u0142\u0119du wykonania.<\/p>\n<p>Je\u015bli w Parts wykorzystywane s\u0105 CisObjectDates, strefa czasowa jest weryfikowana dopiero w momencie przypisania instancji Part do atrybutu Business Object.<\/p>\n<p>Je\u015bli CisDate o innej strefie czasowej zostanie przypisany do atrybutu typu CisObjectDate, wyst\u0105pi b\u0142\u0105d wykonania.<\/p>\n<h5 id=\"waluty-bazowe\" ><span class=\"ez-toc-section\" id=\"Waluty_bazowe\"><\/span>Waluty bazowe<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p data-start=\"141\" data-end=\"274\">Je\u015bli w <em data-start=\"149\" data-end=\"166\">Business Object<\/em> wykorzystywane s\u0105 waluty bazowe (DomesticAmounts), w\u00f3wczas do obiektu generowane s\u0105 dodatkowe atrybuty:<\/p>\n<ul data-start=\"276\" data-end=\"551\">\n<li data-start=\"276\" data-end=\"424\">\n<p data-start=\"278\" data-end=\"424\"><strong data-start=\"278\" data-end=\"302\">_organization (GUID) &#8211; <\/strong>GUID jednostki organizacyjnej, do kt\u00f3rej odnosz\u0105 si\u0119 wszystkie <em data-start=\"370\" data-end=\"385\">waluty bazowe<\/em> w <em data-start=\"388\" data-end=\"405\">Business Object<\/em> podczas konwersji.<\/p>\n<\/li>\n<li data-start=\"426\" data-end=\"491\">\n<p data-start=\"428\" data-end=\"491\"><strong data-start=\"428\" data-end=\"459\">_conversionDate (TimeStamp) &#8211; <\/strong>moment wykonania konwersji.<\/p>\n<\/li>\n<li data-start=\"493\" data-end=\"551\">\n<p data-start=\"495\" data-end=\"551\"><strong data-start=\"495\" data-end=\"521\">_currencyCombo (short) &#8211; <\/strong>u\u017cywana kombinacja walut.<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"553\" data-end=\"676\">Atrybuty te s\u0105 wykorzystywane przede wszystkim podczas reorganizacji jednostek organizacyjnych lub zmiany kombinacji walut.<\/p>\n","protected":false},"author":27,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9273","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\/9273","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\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9273"}],"version-history":[{"count":11,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9273\/revisions"}],"predecessor-version":[{"id":40160,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9273\/revisions\/40160"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}