{"id":9703,"date":"2025-05-14T11:41:29","date_gmt":"2025-05-14T09:41:29","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9703"},"modified":"2025-05-14T11:43:58","modified_gmt":"2025-05-14T09:43:58","slug":"podrecznik-referencyjny-supplement","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/podrecznik-referencyjny-supplement\/","title":{"rendered":"Podr\u0119cznik referencyjny: Supplement"},"content":{"rendered":"<h3 id=\"wprowadzenie\" >Wprowadzenie<\/h3>\n<p>Obiekt biznesowy typu <em>Supplement<\/em> mo\u017ce by\u0107 u\u017cyty do rozszerzenia obiektu biznesowego innego typu o atrybuty biznesowe. Ten rozszerzony obiekt biznesowy jest zazwyczaj jednostk\u0105 biznesow\u0105. Obiekt zale\u017cny mo\u017ce r\u00f3wnie\u017c zosta\u0107 rozszerzony przez supplement, ale supplement nie mo\u017ce rozszerzy\u0107 supplementu.<\/p>\n<p>Rozszerzenie jednostki biznesowej za pomoc\u0105 supplementu w por\u00f3wnaniu z obiektem deweloperskim o typie <em>Extension <\/em>ma nast\u0119puj\u0105ce zalety:<\/p>\n<ul>\n<li>brak technicznych zale\u017cno\u015bci mi\u0119dzy jednostk\u0105 biznesow\u0105 a supplementem. Dzi\u0119ki czemu zmniejsza si\u0119 ilo\u015b\u0107 zada\u0144 konfliktowych<\/li>\n<li>obiekty biznesowe aplikacji nie mog\u0105 by\u0107 rozszerzane za pomoc\u0105 obiektu deweloperskiego typu <em>Extension<\/em>, ale mog\u0105 by\u0107 rozszerzane za pomoc\u0105 supplement\u00f3w.<\/li>\n<li>Suplement pozwala na wyprowadzenie danych, co skutkuje zmniejszeniem szeroko\u015bci tabeli.<\/li>\n<\/ul>\n<p>Supplement cz\u0119sto pojawia si\u0119 w interfejsie u\u017cytkownika i mo\u017ce by\u0107 u\u017cywany w rozszerzeniach wyszukiwania lub w filtrze obiekt\u00f3w w aplikacjach <em>Eksport danych<\/em> i <em>Import danych<\/em>. W tym celu dost\u0119pne s\u0105 gotowe mechanizmy automatyzuj\u0105ce. Alternatywnie do supplement\u00f3w mo\u017cna r\u00f3wnie\u017c u\u017cy\u0107 w\u0142asny obiekt biznesowego.<\/p>\n<p>W artykule <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/obiekt-deweloperski-business-object\/\">Obiekt deweloperski: Business object<\/a> <\/em>znajduje si\u0119 opis wprowadzania i edytowania obiekt\u00f3w biznesowych.<\/p>\n<p>Typowym przypadkiem u\u017cycia dodatk\u00f3w jest dodanie atrybutu do istniej\u0105cej aplikacji dialogowej. W artykule opisano prosty przyk\u0142ad rozwoju, kt\u00f3ry pokazuje, jakie obiekty nale\u017cy zarejestrowa\u0107 i w jaki spos\u00f3b to zrobi\u0107.<\/p>\n<h3 id=\"grupa-docelowa\" >Grupa docelowa<\/h3>\n<ul>\n<li>Programi\u015bci<\/li>\n<\/ul>\n<h3 id=\"tworzenie-supplementu\" >Tworzenie supplementu<\/h3>\n<p>Supplement tworzy si\u0119 zawsze na podstawie obiektu biznesowego typu <em>Business Entity<\/em> lub <em>Dependent<\/em>, do kt\u00f3rego supplement ma si\u0119 odnosi\u0107.\u00a0Aby utworzy\u0107 dodatek w aplikacji <em>Obiekty deweloperskie<\/em>, nale\u017cy u\u017cy\u0107 akcji zwi\u0105zanej z aplikacj\u0105 <em>Utw\u00f3rz Dependent lub Supplement<\/em>. Post\u0119puj zgodnie z poni\u017cszymi instrukcjami.<\/p>\n<p>Instrukcja:<\/p>\n<ol>\n<li>Otworzy\u0107 aplikacj\u0119 <em>Obiekty deweloperskie<\/em><\/li>\n<li>W nag\u0142\u00f3wku nale\u017cy wybra\u0107 w polu <em>Typ<\/em> opcj\u0119: <em>Business Object, <\/em>na zak\u0142adce <em>Edytor <\/em>w polu <em>Typ <\/em>wybra\u0107 jedn\u0105 z opcji do kt\u00f3rej b\u0119dzie tworzony dodatek:\n<ul>\n<li>Business entity<\/li>\n<li>Dependent<\/li>\n<\/ul>\n<\/li>\n<li>Na standardowym pasku narz\u0119dzi nale\u017cy wskaza\u0107 zadanie deweloperskie, na podstawie kt\u00f3rego zostanie utworzony dodatek.<\/li>\n<\/ol>\n<figure id=\"attachment_30338\" aria-describedby=\"caption-attachment-30338\" style=\"width: 1495px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-30338\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6.png\" alt=\"\" width=\"1495\" height=\"187\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6.png 1495w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-300x38.png 300w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-1024x128.png 1024w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-768x96.png 768w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-50x6.png 50w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-920x115.png 920w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-600x75.png 600w, https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/image-6-320x40.png 320w\" sizes=\"auto, (max-width: 1495px) 100vw, 1495px\" \/><\/a><figcaption id=\"caption-attachment-30338\" class=\"wp-caption-text\">Pole Zadania deweloperskie w aplikacji Obiekty deweloperskie<\/figcaption><\/figure>\n<ol>\n<li>Wybra\u0107 akcj\u0119 <em>Utw\u00f3rz Dependent lub Supplement<\/em> dost\u0119pn\u0105 pod przyciskiem na pasku narz\u0119dzi [<strong>Utw\u00f3rz dodatkowe obiekty<\/strong>].<\/li>\n<li>Otwarte zostanie okno dialogowe <em>Utw\u00f3rz elementy zale\u017cne<\/em><\/li>\n<li>Nale\u017cy wybra\u0107 warto\u015b\u0107 S<em>upplement<\/em>\u00a0w polu <em>Typ<\/em>. Odpowiednie dane s\u0105 domy\u015blnie ustawianie w polach <em>Nazwa<\/em> i <i>Oznaczenie<\/i>.<\/li>\n<li>Je\u015bli suplement ma by\u0107 u\u017cywany w okre\u015blonym interfejsie, nale\u017cy go wprowadzi\u0107 w polu <em>Interfejs<\/em>.<\/li>\n<li>Wybra\u0107 przycisk [<strong>OK<\/strong>]. Okno dialogowe zostanie zamkni\u0119te, a obiekt biznesowy typu <em>Supplement<\/em> zostanie utworzony z wprowadzonymi danymi. Ma on status <em>Nowy<\/em> i jest przypisany do wcze\u015bniej wybranego zlecenia deweloperskiego. Ustawienia s\u0105 przyjmowane przez jednostk\u0119 biznesow\u0105 (lub Dependent), do kt\u00f3rego supplement ma si\u0119 odnosi\u0107.<\/li>\n<li>Tworzona jest relacja <em>_businessObject<\/em> z jednostk\u0105 biznesow\u0105.<\/li>\n<li>Klucz podstawowy supplementu jest generowany zgodnie z kluczem podstawowym powi\u0105zanej jednostki biznesowej.<\/li>\n<li>Nale\u017cy wprowadzi\u0107 atrybuty, kt\u00f3re maj\u0105 zosta\u0107 dodane do encji biznesowej.<\/li>\n<li>Wybra\u0107 przycisk [<strong>Zapisz<\/strong>] na standardowym pasku narz\u0119dzi. Suplement zostanie zapisany w wybranym zleceniu deweloperskim.<\/li>\n<\/ol>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Uzupe\u0142nienie mo\u017cna r\u00f3wnie\u017c wprowadzi\u0107 bezpo\u015brednio, bez korzystania z akcji <em>Utw\u00f3rz Dependent lub Supplement<\/em>. Kontrole zapewniaj\u0105, \u017ce r\u0119czne wprowadzenie jest sp\u00f3jne. Pole <em>Interfejs<\/em> znajduje si\u0119 na zak\u0142adce <em>Edytor -&gt; <\/em>podzak\u0142adka <em>Ustawienia<\/em> -&gt; sekcja <em>Inne ustawienia<\/em>.<\/div><\/section>\n<h3 id=\"tworzenie-widoku-obiektu\" >Tworzenie widoku obiektu<\/h3>\n<p>Z regu\u0142y atrybuty supplementu powinny by\u0107 r\u00f3wnie\u017c edytowalne w interfejsie u\u017cytkownika w odpowiedniej aplikacji. <em>Tryb projektowania<\/em> jest dost\u0119pny dla modyfikowalnej aplikacji, kt\u00f3rej mo\u017cna u\u017cy\u0107 do dostosowania uk\u0142adu do w\u0142asnych wymaga\u0144. Wymagany jest obiekt deweloperski typu <em>Data view<\/em>, aby mo\u017cna by\u0142o doda\u0107 atrybuty do aplikacji w trybie projektowania. Konwencja nazewnictwa s\u0142u\u017cy do tworzenia widoku obiektu, jak pokazano w poni\u017cszym przyk\u0142adzie.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">W pe\u0142ni kwalifikowana nazwa dodatku:<\/p>\n<p>com.&lt;prefiks deweloperski&gt;.app.general.obj.ItemSupplement<\/p>\n<p>Je\u015bli widok obiektu dla suplementu posiada nast\u0119puj\u0105c\u0105 w pe\u0142ni kwalifikowan\u0105 nazw\u0119, zostanie on automatycznie zaoferowany w trybie projektowania odpowiedniej aplikacji w dokowanym oknie <em>Tryb projektowania<\/em>, np. na zak\u0142adce <em>Struktura<\/em>, poniewa\u017c sk\u0142adnik nazwy <em>obj<\/em> zosta\u0142 zast\u0105piony przez <em>model<\/em>:<\/p>\n<p>com.&lt;prefiks deweloperski&gt;.app.general.model.ItemSupplement.<\/div><\/section>\n<p>Aby otworzy\u0107 okno dokowane <em>Tryb projektowania<\/em>, nale\u017cy:<\/p>\n<ol>\n<li>Wej\u015b\u0107 w tryb projektowania rozwijaj\u0105c opcj\u0119 <em>Wybierz i organizuj widoki <\/em>w wybranej aplikacji np.<em> Artyku\u0142y<\/em><\/li>\n<li>Na pasku zada\u0144 w menu u\u017cytkownika nale\u017cy wybra\u0107 przycisk [<strong>Tryb projektowania<\/strong>]<\/li>\n<\/ol>\n<p>Je\u015bli suplement i widok obiektu zostan\u0105 zapisane z identycznymi w pe\u0142ni kwalifikowanymi nazwami z wyj\u0105tkiem komponent\u00f3w <em>obj<\/em> i <em>model<\/em>, widok obiektu jest automatycznie oferowany do wyboru w trybie projektowania dostosowywanej aplikacji z jej atrybutami.<\/p>\n<p>Widok obiektu nadal wymaga informacji o klasie implementuj\u0105cej. Mo\u017cna u\u017cy\u0107 m.inm. nast\u0119puj\u0105cej nadklasy:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">com.cisag.pgm.base.DataSupplement<\/code><\/p>\n<p>W konstruktorze mo\u017cna jako \u201eparent\u201d wskaza\u0107 widok obiektu, kt\u00f3ry zostanie w ten spos\u00f3b skutecznie rozszerzony, jednocze\u015bnie wykluczaj\u0105c inne widoki. Dzi\u0119ki temu widoki obiekt\u00f3w dziedzicz\u0105 ustawienia z okre\u015blonego widoku g\u0142\u00f3wnego.<\/p>\n<p>Na przyk\u0142ad, je\u015bli g\u0142\u00f3wny widok nie jest edytowalny w okre\u015blonych warunkach, to warunek ten automatycznie dotyczy r\u00f3wnie\u017c widoku obiektu suplementu. W zale\u017cno\u015bci od wymaga\u0144 projektu mo\u017ce by\u0107 r\u00f3wnie\u017c zasadne u\u017cycie jako <em>DataObject<\/em> standardowego obiektu danych pgm.<\/p>\n<p>Wi\u0119cej informacji na temat widok\u00f3w obiekt\u00f3w mo\u017cna znale\u017a\u0107 w artykule <a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/obiekt-deweloperski-data-view\/\" rel=\"bookmark\"><em>Obiekt deweloperski: Data view<\/em>.<\/a><\/p>\n<p class=\"\" data-start=\"0\" data-end=\"164\">Przestrzeganie konwencji nazewnictwa lub zintegrowanie suplementu za pomoc\u0105 hook\u00f3w powoduje, \u017ce widok obiektu staje si\u0119 dost\u0119pny w trybie projektowania aplikacji.<\/p>\n<p class=\"\" data-start=\"166\" data-end=\"313\">Jest on widoczny zgodnie z nast\u0119puj\u0105cym wzorcem nazewnictwa (przy wcze\u015bniejszych przyk\u0142adowych danych):<em>&lt;prefiks_deweloperski&gt;_ItemSupplement<\/em>.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Ze wzgl\u0119d\u00f3w technicznych zar\u00f3wno supplement, jak i Data View musz\u0105 by\u0107 aktywowane tylko raz. Prefiks nazwy &lt;prefiks deweloperski&gt; zapewnia wykluczenie konfliktu nazw z supplementami z innych system\u00f3w.<\/div><\/section>\n<h3 id=\"implementacja\" >Implementacja<\/h3>\n<div>Zalecana minimalna implementacja dla nowych supplement\u00f3w polega na okre\u015bleniu warto\u015bci domy\u015blnej i sprawdzeniu zarejestrowanych danych. Zazwyczaj mo\u017cna to zrobi\u0107 za pomoc\u0105 nast\u0119puj\u0105cych hook\u00f3w:<\/div>\n<ul>\n<li>applyDefaults<\/li>\n<li>validate<\/li>\n<\/ul>\n<div>W poni\u017cszym przyk\u0142adzie do aplikacji <em>Artyku\u0142y<\/em> dodawany jest supplement. Nazwa tego dodatku to <em>ItemSupplement<\/em>. Atrybut <em>yourAttribute<\/em> zosta\u0142 do niego dodany.<\/div>\n<div>Ta sama procedura dotyczy innych obiekt\u00f3w biznesowych.<\/div>\n<h4 id=\"dataobject\" >DataObject<\/h4>\n<p>Aby m\u00f3c zarejestrowa\u0107 widok obiektu, potrzebny jest obiekt <em>DataObject<\/em>. W najprostszym przypadku implementacja wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class ItemSupplementDataObject extends DataSupplement&lt;ItemSupplement, ItemView&gt; {\n\npublic ItemSupplementDataObject(ItemSupplement obj, ItemView parentView) {\n\nsuper(obj, parentView);\n\n}\n\n}<\/pre>\n<h3 id=\"hooki\" >Hooki<\/h3>\n<div>Aby rozszerzy\u0107 aplikacj\u0119 <em>Artyku\u0142y<\/em> za pomoc\u0105 supplementu, nale\u017cy zaimplementowa\u0107 odpowiednie hooki w projekcie.<\/div>\n<h5 id=\"hook-contract\" >Hook Contract<\/h5>\n<div>W tym przypadku potrzebny jest nast\u0119puj\u0105cy Hook Contract. Nale\u017cy\u00a0 zast\u0105pi\u0107 &lt;development prefix&gt; prefiksem deweloperskim swojego systemu.<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?xml version=\"1.0\" encoding=\"UTF-16\"?&gt;\n&lt;HookContract xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"HookXMLSchema.xsd\"&gt;\n\n&lt;!\u2013 Don\u2019t change this line and the lines above! \u2013&gt;\n\n&lt;HOOK_IMPLEMENTATION&gt;\n&lt;contract&gt;\n&lt;hook&gt;\n&lt;interface&gt;\ncom.cisag.app.general.item.hook.log.ItemApplyDefaultsHook\n&lt;\/interface&gt;\n&lt;implementation&gt;\ncom.&lt;development prefix&gt;.app.general.ItemHookImpl\n&lt;\/implementation&gt;.\n&lt;\/hook&gt;\n&lt;hook&gt;\n&lt;interface&gt;\ncom.cisag.app.general.item.hook.log.hook.ItemValidateHook\n&lt;\/interface&gt;\n&lt;implementation&gt;\ncom.&lt;development prefix&gt;.app.general.ItemHookImpl\n&lt;\/implementation&gt;.\n&lt;\/hook&gt;.\n&lt;\/kontrakt&gt;\n&lt;\/HOOK_IMPLEMENTATION&gt;\n&lt;\/HookContract&gt;<\/pre>\n<p><strong><span style=\"color: initial;\">applyDefaults<\/span><\/strong><\/p>\n<\/div>\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142adowa implementacja hooka <em>applyDefaults<\/em>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import com.cisag.pgm.base.Path;\n\npublic class ItemHookImpl implements ItemApplyDefaultsHook&lt;Item, ItemAccess.Full&gt;{\n\npublic void applyDefaults(Full full, ItemView itemView){\n\nItemSupplement suppObj = ItemSupplement.newTransientInstance();\n\nsuppObj.setYourAttribute(...) \/\/ tw\u00f3j atrybut\n\nbyte[] org = Company.getCompanyGuid();\n\nCisObjectInitialiser.getInstance(ItemSupplement.class).init(suppObj, org);\n\nItemSupplementDataObject itemSupplementDataObject =\n\n\u00a0 \u00a0 \u00a0 \u00a0 new ItemSupplementDataObject(suppObj, itemView);\n\nCisDataViewManager dvm = CisEnviron-ment.getInstance().getDataViewManager();\n\nItemSupplementAccess access = dvm.create(ItemSupplementView.class, itemSupplementDataObject);\n\nPath suppPath = Path.getSupplementInstance(ItemView.class, ItemSupple-mentView.class);\n\nfull.setValue(suppPath, access);\n\n}\n\n}<\/pre>\n<p><strong>validate<\/strong><\/p>\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142adowa implementacja hooka <em>validate<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import com.cisag.pgm.base.Path;\n\npublic class ItemHookImpl implements ItemValidateHook&lt;Item, ItemAccess.Full&gt;\n\npublic void validate(ItemView itemView){\n\nPath suppPath = Path.getSupplementInstance(ItemView.class, ItemSupple-mentView.class);\n\nPath append = supp-Path.append(ItemSupplementView.Attribute.$yourAttribute);\n\nItemSupplementView value = itemView.getValue(suppPath);\n\nCisMessageManager mm = CisEnvironment.getInstance().getMessageManager();\n\nmm.setProgramMessagePath(suppPath);\n\nif (value.getYourAttribute()!=null){\n\n\/\/ insert validation here\n\n}\n\n}<\/pre>\n<h3 id=\"interfejs-programistyczny\" >Interfejs programistyczny<\/h3>\n<div>\n<p class=\"\" data-start=\"32\" data-end=\"318\">Je\u015bli zostan\u0105 zaimplementowane odpowiednie hooki, zazwyczaj nie ma potrzeby ingerencji programistycznej. Je\u015bli jednak np. aplikacja nie jest dostosowywalna lub dost\u0119pne hooki nie s\u0105 wystarczaj\u0105ce do okre\u015blonych cel\u00f3w, mo\u017cliwe jest bezpo\u015brednie uzyskanie dost\u0119pu do supplementu.<\/p>\n<p class=\"\" data-start=\"320\" data-end=\"405\">Aby uzyska\u0107 dost\u0119p programistyczny, dost\u0119pne s\u0105 nast\u0119puj\u0105ce metody w\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisObject<\/code>:<\/p>\n<ul data-start=\"407\" data-end=\"729\" data-is-last-node=\"\" data-is-only-node=\"\">\n<li class=\"\" data-start=\"407\" data-end=\"624\">\n<p class=\"\" data-start=\"409\" data-end=\"624\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">get_Supplement(Supplement.class)<\/code> &#8211; umo\u017cliwia uzyskanie obiektu suplementu zapisanego w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisObject<\/code>, je\u015bli taki istnieje. Je\u015bli obiekt supplementu nie jest dost\u0119pny, zostanie zwr\u00f3cona warto\u015b\u0107 <em>null<\/em>.<\/p>\n<\/li>\n<li class=\"\" data-start=\"626\" data-end=\"729\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">set_Supplement(Supplement.instanz) <\/code>&#8211; umo\u017cliwia ustawienie instancji suplementu w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisObject<\/code>.<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<h3 id=\"trwalosc-persistence\" >Trwa\u0142o\u015b\u0107 (Persistence)<\/h3>\n<div>\n<p class=\"\" data-start=\"19\" data-end=\"462\">Zaleca si\u0119 otwieranie i zapisywanie suplementu wy\u0142\u0105cznie za po\u015brednictwem <em>Business Entity.<\/em> Na podstawie zapisanych metadanych w aplikacji <em>Obiekty deweloperskie<\/em>, tj. relacji <em>_businessObject,<\/em> rozpoznawane s\u0105 suplementy nale\u017c\u0105ce do <em>Business Entity<\/em> (lub zale\u017cnych obiekt\u00f3w). Suplementy s\u0105 nast\u0119pnie automatycznie otwierane i dodawane do instancji <em>Business Entity<\/em>. Mo\u017cna je nast\u0119pnie zapyta\u0107 za pomoc\u0105 nast\u0119puj\u0105cej metody:<\/p>\n<p class=\"\" data-start=\"464\" data-end=\"502\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">get_Supplement(Supplement.class)<\/code><\/p>\n<p class=\"\" data-start=\"504\" data-end=\"617\">Je\u015bli do instancji <em>Business Entity<\/em> nie nale\u017cy \u017cadna instancja suplementu, zwracana jest warto\u015b\u0107 <em>null<\/em>.<\/p>\n<p class=\"\" data-start=\"619\" data-end=\"869\">Podobnie przy zapisywaniu: zapisuje si\u0119 <em>Business Object<\/em>. W ramach tej operacji us\u0142uga persystencji sprawdza, czy do tej instancji nale\u017cy instancja suplementu. Je\u015bli tak, instancja suplementu zostaje r\u00f3wnie\u017c zapisana w ramach tej samej transakcji.<\/p>\n<\/div>\n<h3 id=\"skutki\" >Skutki<\/h3>\n<p>Je\u015bli zostanie zachowana konwencja nazewnictwa suplement\u00f3w, jak opisano powy\u017cej, suplement lub widok obiektu na nim oparty b\u0119dzie dost\u0119pny w trybie projektowania.<\/p>\n<p>Dost\u0119pne s\u0105 r\u00f3wnie\u017c nast\u0119puj\u0105ce funkcje automatyczne:<\/p>\n<ul>\n<li>w aplikacjach <em>Import danych<\/em> i <em>Eksport danych<\/em> supplement jest automatycznie dost\u0119pny. Nie ma potrzeby rozszerzania kontrolera. Je\u015bli supplement zostanie nazwany zgodnie z przyk\u0142adem <em>ItemSupplement<\/em> i b\u0119dzie nale\u017ca\u0142 do obiektu biznesowego <em>Item<\/em>, w filtrze dla obiektu biznesowego <em>Item<\/em> pojawi si\u0119 relacja do supplementu. Nazwa relacji to <em>&lt;Prefiks deweloperski&gt;_ItemSupplement<\/em>, analogicznie do trybu projektowania. Tutaj &lt;Prefiks deweloperski&gt; to prefiks deweloperski systemu.<\/li>\n<li>w ten sam spos\u00f3b supplement jest dost\u0119pny w konfigurowalnych wyszukiwaniach i aplikacjach typu lista.<\/li>\n<li>mie jest wymagane r\u0119czne programowanie wsparcia dla j\u0119zyk\u00f3w (NLS). Je\u015bli w supplemencie znajduje si\u0119 atrybut obs\u0142uguj\u0105cy NLS, to dzi\u0119ki standardowej implementacji zostanie on automatycznie obs\u0142u\u017cony.<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Supplement jest r\u00f3wnie\u017c obiektem biznesowym, tak jak ka\u017cdy inny. Celem supplementu jest rozszerzenie jednostki biznesowej. W tym celu dost\u0119pne s\u0105 r\u00f3\u017cne funkcje automatyczne, takie jak automatyczne otwieranie i zapisywanie, integracja z filtrem podczas importu danych itp. W przypadku znacznej ingerencji w automaty lub ca\u0142kowitego pomini\u0119cia supplmentu zaleca si\u0119 zastosowanie obiektu biznesowego typu <em>Business Entity<\/em> zamiast supplementu.<\/div><\/section>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9703","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-podreczniki-referencji"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9703"}],"version-history":[{"count":12,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9703\/revisions"}],"predecessor-version":[{"id":30388,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9703\/revisions\/30388"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}