{"id":8297,"date":"2025-05-19T12:57:25","date_gmt":"2025-05-19T10:57:25","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=8297"},"modified":"2025-05-19T12:57:35","modified_gmt":"2025-05-19T10:57:35","slug":"niezalezne-od-kanalu-powiazania-i-adresy-url","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/","title":{"rendered":"Niezale\u017cne od kana\u0142u powi\u0105zania i adresy URL"},"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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Linki_niezalezne_od_kanalu\" >Linki niezale\u017cne od kana\u0142u<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_Link\" >Klasa Link<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_ApplicationLink\" >Klasa ApplicationLink<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_BusinessEntityLink\" >Klasa BusinessEntityLink<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_HyperLink\" >Klasa HyperLink<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Narzedzie_klasy_Link\" >Narz\u0119dzie klasy Link<\/a><\/li><\/ul><\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Powiazania_dla_kanalu_dialogowego\" >Powi\u0105zania dla kana\u0142u dialogowego<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_LinkTransferable\" >Klasa LinkTransferable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Klasa_LinkDnDAdapter\" >Klasa LinkDnDAdapter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Wplyw_klawiatury_na_funkcje_Drag_Drop\" >Wp\u0142yw klawiatury na funkcj\u0119 Drag &amp; Drop<\/a><\/li><\/ul><\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Powiazania_dla_kanalu_ODBC\" >Powi\u0105zania dla kana\u0142u ODBC<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Adres_URL\" >Adres URL<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Wygenerowane_adresy_URL\" >Wygenerowane adresy URL<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Adres_URL_aplikacji\" >Adres URL aplikacji<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Adres_URL_jednostki_biznesowej\" >Adres URL jednostki biznesowej<\/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\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Adres_URL_hiperlacza\" >Adres URL hiper\u0142\u0105cza<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#Instrukcja_Wykorzystanie_LinkDnDAdapter\" >Instrukcja: Wykorzystanie LinkDnDAdapter<\/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-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/niezalezne-od-kanalu-powiazania-i-adresy-url\/#DragAdapter_dla_list\" >DragAdapter dla list<\/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>Adres URL (Uniform Resource Locator) to uniwersalny spos\u00f3b adresowania obiekt\u00f3w i dokument\u00f3w. w artykule opisano \u0142\u0105cza niezale\u017cne od kana\u0142u, kt\u00f3re w szczeg\u00f3lno\u015bci umo\u017cliwiaj\u0105 tworzenie adres\u00f3w URL zgodnych z systemem niezale\u017cnie od tego, czy interaktywny login jest aktualnie aktywny, czy nie. Umo\u017cliwia to us\u0142ugom dzia\u0142aj\u0105cym w tle, takim jak zadania programistyczne lub Workflow, wysy\u0142anie wiadomo\u015bci e-mail zawieraj\u0105cych \u0142\u0105cza do aplikacji lub jednostek biznesowych. Dodatkowe rozszerzenie dla okien dialogowych umo\u017cliwia realizacj\u0119 opcji: drag&amp;drop oraz podobnych operacji.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>programi\u015bci<\/li>\n<li>konsultanci techniczni<\/li>\n<\/ul>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"linki-niezalezne-od-kanalu\" ><span class=\"ez-toc-section\" id=\"Linki_niezalezne_od_kanalu\"><\/span>Linki niezale\u017cne od kana\u0142u<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wszystkie klasy, kt\u00f3re wsp\u00f3lnie implementuj\u0105 po\u0142\u0105czenia niezale\u017cne od kana\u0142u, znajduj\u0105 si\u0119 w przestrzeni nazw <em>com.cisag.pgm.util<\/em>. Rozr\u00f3\u017cnia si\u0119 powi\u0105zanie (LInk) i klas\u0119 pomocnicz\u0105 (LinkUtility). Link jest klas\u0105 kontenerow\u0105 z zachowaniem stanu, natomiast LinkUtility jest bezstanow\u0105 klas\u0105 logiczn\u0105.<\/p>\n<h5 id=\"klasa-link\" ><span class=\"ez-toc-section\" id=\"Klasa_Link\"><\/span>Klasa Link<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klasa abstrakcyjna <em>Link<\/em> jest klas\u0105 bazow\u0105 dla wszystkich typ\u00f3w \u0142\u0105czy obs\u0142ugiwanych przez system. Instancje <em>Link<\/em> mog\u0105 by\u0107 tworzone wy\u0142\u0105cznie przez klas\u0119 <em>LinkUtility<\/em>. Klasa <em>Link<\/em> zawiera wszystkie informacje niezb\u0119dne do zalogowania si\u0119 do serwera aplikacji systemu.<\/p>\n<ul>\n<li>Podstawowy adres URL SAS-a (\u201ehttps:\/\/server:port\u201d).<\/li>\n<li>Baza danych OLTP do kt\u00f3rej powinno nast\u0105pi\u0107 logowanie (opcjonalnie).<\/li>\n<li>Kontekst organizacji, kt\u00f3ry ma zosta\u0107 ustawiony po zalogowaniu (opcjonalnie).<\/li>\n<li>Czytelny opis (opcjonalnie).<\/li>\n<li><span style=\"color: #ff00ff;\"><span style=\"color: #000000;\">Ustawienie<\/span> <\/span>okre\u015blaj\u0105ce, czy link ma zosta\u0107 uruchomiony w trybie HTA, czy nie (opcjonalnie, tylko dla Application- i BusinessEntityLinks).<\/li>\n<\/ul>\n<p>Podstawowy adres URL mo\u017cna ustawi\u0107, ustawiaj\u0105c identyfikator GUID SAS-a lub jawnie okre\u015blaj\u0105c warto\u015b\u0107 ci\u0105gu. Aby pomin\u0105\u0107 wyb\u00f3r bazy danych podczas logowania mo\u017cna ustawi\u0107 baz\u0119 OLTP. Kolejn\u0105 informacj\u0105, jak\u0105 mo\u017ce zawiera\u0107 link, jest czytelny opis.<\/p>\n<p>Dane te mog\u0105 zosta\u0107 uzupe\u0142nione automatycznie podczas ich tworzenia. W tym celu nale\u017cy przekaza\u0107 odpowiednie flagi do narz\u0119dzia <em>LinkUtility<\/em>.<\/p>\n<h5 id=\"klasa-applicationlink\" ><span class=\"ez-toc-section\" id=\"Klasa_ApplicationLink\"><\/span>Klasa ApplicationLink<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>ApplicationLink<\/em> opisuje powi\u0105zanie z aplikacj\u0105 w systemie. Zawsze zawiera identyfikator aplikacji. Dodatkowo mo\u017cna okre\u015bli\u0107 parametry akcji i startu.<\/p>\n<h5 id=\"klasa-businessentitylink\" ><span class=\"ez-toc-section\" id=\"Klasa_BusinessEntityLink\"><\/span>Klasa BusinessEntityLink<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>BusinessEntityLink<\/em> opisuje \u0142\u0105cze do jednostki biznesowej w systemie. Zawsze zawiera oznaczenie bazy danych, w kt\u00f3rej przechowywany jest obiekt oraz klucz g\u0142\u00f3wny obiektu. Dodatkowo mo\u017cna sprawdzi\u0107 typ obiektu. Opcjonalnie do <em>BusinessEntityLink <\/em>mo\u017cna do\u0142\u0105czy\u0107 element zale\u017cny (<em>Dependent<\/em>), co pozwala na przyk\u0142ad na do\u0142\u0105czenie konkretnej pozycji do zam\u00f3wienia w <em>BusinessEntityLink<\/em>. R\u00f3wnie\u017c w przypadku elementu zale\u017cnego mo\u017cna zapyta\u0107 o jego typ.<\/p>\n<h5 id=\"klasa-hyperlink\" ><span class=\"ez-toc-section\" id=\"Klasa_HyperLink\"><\/span>Klasa HyperLink<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><em>HyperLink<\/em> s\u0142u\u017cy do opisywania link\u00f3w, kt\u00f3re nie maj\u0105 zastosowania w systemie. Zawiera dowolnie definiowany adres URL jako jedyny atrybut.<\/p>\n<h5 id=\"narzedzie-klasy-link\" ><span class=\"ez-toc-section\" id=\"Narzedzie_klasy_Link\"><\/span>Narz\u0119dzie klasy <em>Link<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Ta klasa pomocnicza udost\u0119pnia metody umo\u017cliwiaj\u0105ce:<\/p>\n<ul>\n<li>utworzenie nowego \u0142\u0105cza<\/li>\n<li>konwertowanie linku na adres URL<\/li>\n<li>utworzenie linku z adresu URL poprzez jego analiz\u0119<\/li>\n<li>za\u0142adowanie jednostki biznesowej lub element zale\u017cny (dependent) od <em>BusinessEntityLink<\/em>.<\/li>\n<\/ul>\n<h4 id=\"powiazania-dla-kanalu-dialogowego\" ><span class=\"ez-toc-section\" id=\"Powiazania_dla_kanalu_dialogowego\"><\/span>Powi\u0105zania dla kana\u0142u dialogowego<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Klasy umo\u017cliwiaj\u0105ce wykorzystanie powi\u0105za\u0144 w przypadku okna dialogowego, znajduj\u0105 si\u0119 w przestrzeni nazw <em>com.cisag.pgm.gui.<\/em> Wykorzystuj\u0105 one powi\u0105zania do implementacji operacji takich jak Drag &amp; Drop, kopiowanie, wycinanie oraz wklejanie r\u00f3\u017cnych obiekt\u00f3w. Funkcje kopiowania, wycinania i wklejania mo\u017cna wywo\u0142a\u0107 zar\u00f3wno za pomoc\u0105 klawiatury, jak i poprzez menu kontekstowe.<\/p>\n<h5 id=\"klasa-linktransferable\" ><span class=\"ez-toc-section\" id=\"Klasa_LinkTransferable\"><\/span><strong data-start=\"0\" data-end=\"26\" data-is-only-node=\"\"><span class=\"_fadeIn_4f9by_7\">Klasa <\/span><span class=\"_fadeIn_4f9by_7\">LinkTransferable<\/span><\/strong><span class=\"_fadeIn_4f9by_7\"><br data-start=\"26\" data-end=\"29\" \/><\/span><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Instancje klasy <em>LinkTransferable<\/em> reprezentuj\u0105 przeno\u015bn\u0105 przez klasy interfejsu u\u017cytkownika (UI) otoczk\u0119 wok\u00f3\u0142 linku. Zawieraj\u0105 link, dodatkowe dane oraz wsparcie umo\u017cliwiaj\u0105ce po\u0142\u0105czenie pomy\u015blnego wklejenia z wcze\u015bniejszym wyci\u0119ciem.<\/p>\n<p><em>LinkTransferable<\/em> posiada og\u00f3lne funkcje pomocnicze, umo\u017cliwiaj\u0105ce:<\/p>\n<ul>\n<li>utworzenie <em>LinkTransferable<\/em> z linku<\/li>\n<li>skopiowanie <em>LinkTransferable<\/em> do schowka<\/li>\n<li>utworzenie <em>LinkTransferable<\/em> z zawarto\u015bci schowka<\/li>\n<li>utworzenie \u00a0<em>LinkTransferable<\/em> z innego <em>Transferable<\/em><\/li>\n<\/ul>\n<p class=\"\" data-start=\"0\" data-end=\"50\"><strong data-start=\"0\" data-end=\"48\">Zasady implementacji operacji Wytnij i Wklej (Cut &amp; Paste)<\/strong><\/p>\n<p class=\"\" data-start=\"44\" data-end=\"328\">Gdy element zostanie wyci\u0119ty, tworzony jest obiekt <em>LinkTransferable<\/em> i kopiowany do schowka. Do tego obiektu mo\u017cna zarejestrowa\u0107 <em>pastedListener<\/em>. Podczas odbierania akcji pasted mo\u017cna zdecydowa\u0107, czy wyci\u0119cie by\u0142o dopuszczalne oraz sprawdzi\u0107, czy wklejenie zako\u0144czy\u0142o si\u0119 powodzeniem.<\/p>\n<p class=\"\" data-start=\"330\" data-end=\"560\">Podczas wklejania zawsze nale\u017cy wywo\u0142a\u0107 metod\u0119 <em>pasted(Object source)<\/em>. Je\u015bli wklejanie si\u0119 powiod\u0142o, parametrem <em>source<\/em> powinien by\u0107 odbiorca operacji wklejania. W przypadku niepowodzenia jako warto\u015b\u0107 source nale\u017cy przekaza\u0107 <em>null<\/em>.<\/p>\n<p class=\"\" data-start=\"562\" data-end=\"837\">Podczas kopiowania do schowka sprawdzane jest, czy w schowku znajduje si\u0119 ju\u017c wyci\u0119ty element. Je\u015bli tak, automatycznie wywo\u0142ywana jest metoda <em>pasted(null)<\/em>. Dzi\u0119ki temu mo\u017cna m.in. automatycznie usun\u0105\u0107 oznaczenie elementu, kt\u00f3ry zosta\u0142 wcze\u015bniej oznaczony jako wyci\u0119ty.<\/p>\n<h5 id=\"klasa-linkdndadapter\" ><span class=\"ez-toc-section\" id=\"Klasa_LinkDnDAdapter\"><\/span>Klasa LinkDnDAdapter<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>LinkDnDAdapter jest potrzebny, gdy ma zosta\u0107 zaimplementowane wsparcie dla funkcji Drag &amp; Drop. Adapter mo\u017ce by\u0107 powi\u0105zany z dowolnym widocznym elementem interfejsu u\u017cytkownika. Wbudowana jest dodatkowa obs\u0142uga drzew i ich w\u0119z\u0142\u00f3w, kt\u00f3r\u0105\u00a0 nale\u017cy zignorowa\u0107 w przypadku innych element\u00f3w. Aby u\u017cy\u0107 adaptera, nale\u017cy go odziedziczy\u0107.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Poniewa\u017c w\u0119z\u0142y w drzewie nie s\u0105 w\u0142asnymi elementami interfejsu u\u017cytkownika, powinna by\u0107 mo\u017cliwa operacja metod\u0105 Drag &amp; Drop.<\/div><\/section>\n<p>Do konkretnej implementacji dost\u0119pne s\u0105 cztery metody, kt\u00f3re wp\u0142ywaj\u0105 na zachowanie funkcji Drag &amp; Drop. Wszystkie metody otrzymuj\u0105 jako parametr wej\u015bciowy obiekt typu <em>TreeNode<\/em>, je\u015bli zosta\u0142 przeci\u0105gni\u0119ty w\u0119ze\u0142 drzewa, oraz akcj\u0119 wybran\u0105 przez u\u017cytkownika. Wszystkie metody, poza <em>dragStart<\/em>, otrzymuj\u0105 dodatkowo jako parametr obiekt <em>LinkTransferable<\/em> znajduj\u0105cy si\u0119 w trakcie przeci\u0105gania i mog\u0105 okre\u015bli\u0107 dozwolon\u0105 akcj\u0119 za pomoc\u0105 warto\u015bci zwracanej.<\/p>\n<ul>\n<li><strong>dragStart()<\/strong> \u2013 zwraca <em>LinkTransferable<\/em>, je\u015bli \u017c\u0105dana akcja jest dozwolona. Je\u015bli przeci\u0105ganie nie jest dozwolone, nale\u017cy zwr\u00f3ci\u0107 warto\u015b\u0107 null.<\/li>\n<li><strong>dragOver()<\/strong> \u2013 s\u0142u\u017cy do wp\u0142ywania na \u017c\u0105dan\u0105 akcj\u0119 przed upuszczeniem. Ze wzgl\u0119du na ograniczenia w <em>com.cisag.pgm.dialog<\/em> obecnie dzia\u0142a jedynie odrzucenie wszystkich akcji. W przypadku drzewa nale\u017cy zachowa\u0107 ostro\u017cno\u015b\u0107, poniewa\u017c wp\u0142ywa to na ca\u0142y obiekt drzewa, a nie tylko na pojedynczy w\u0119ze\u0142.<\/li>\n<li><strong>drop()<\/strong> \u2013 opcja jest wywo\u0142ywana, gdy u\u017cytkownik upu\u015bci\u0142 element. W tym miejscu okre\u015bla si\u0119, czy punkt pocz\u0105tkowy (dragStart) mo\u017ce wynika\u0107 z akcji przeniesienia czy kopiowania. Przenoszenie powinno odbywa\u0107 si\u0119 wy\u0142\u0105cznie w obr\u0119bie tej samej grupy. To, co nale\u017cy do grupy, zale\u017cy od indywidualnego przypadku.<\/li>\n<li><strong>dragDropEnd()<\/strong> &#8211; powiadomienie punktu pocz\u0105tkowego o pomy\u015blnym upuszczeniu. Je\u015bli dosz\u0142o do przeniesienia, dane w punkcie pocz\u0105tkowym mog\u0105 zosta\u0107 usuni\u0119te.<\/li>\n<\/ul>\n<h5 id=\"wplyw-klawiatury-na-funkcje-drag-drop\" ><span class=\"ez-toc-section\" id=\"Wplyw_klawiatury_na_funkcje_Drag_Drop\"><\/span>Wp\u0142yw klawiatury na funkcj\u0119 Drag &amp; Drop<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zachowanie funkcji <em>Drag &amp; Drop<\/em> mo\u017ce by\u0107 modyfikowane przez naci\u015bni\u0119cie dodatkowych klawiszy, tzw. klawiszy modyfikuj\u0105cych. W zale\u017cno\u015bci od dzia\u0142a\u0144 wspieraj\u0105cych \u017ar\u00f3d\u0142o i cel operacji, u\u017cytkownik mo\u017ce wybra\u0107 rzeczywist\u0105 akcj\u0119 do wykonania:<\/p>\n<ul>\n<li><strong>brak przycisku<\/strong> &#8211; akcja to przeniesienie<\/li>\n<li><strong>Shift<\/strong> &#8211; akcja to przeniesienie<\/li>\n<li><strong>Ctrl<\/strong> &#8211;\u00a0 akcja to kopiowanie<\/li>\n<li><strong>Shift<\/strong> <strong>+<\/strong> <strong>Ctrl<\/strong> &#8211; akcja to utworzenie powi\u0105zania<\/li>\n<\/ul>\n<p class=\"\" data-start=\"442\" data-end=\"480\"><strong data-start=\"442\" data-end=\"478\">Zasady implementacji Drag &amp; Drop<\/strong><\/p>\n<p>Implementacja metody <em>dragStart<\/em>: <em>additionalData<\/em> obiektu <em>LinkTransferable<\/em> powinna zawiera\u0107 <em>TreeNode<\/em> lub <em>VisualElement<\/em>.<\/p>\n<p>Implementacja metody <em>drop<\/em>: przenoszenie powinno odbywa\u0107 si\u0119 wy\u0142\u0105cznie w obr\u0119bie tej samej grupy element\u00f3w (np. w obr\u0119bie tego samego drzewa). Je\u017celi nie jest si\u0119 pewnym czy element pochodzi z tej samej grupy, jako mo\u017cliw\u0105 akcj\u0119 nale\u017cy zwr\u00f3ci\u0107 kopiowanie lub tworzenie powi\u0105zania.<\/p>\n<h4 data-start=\"0\" data-end=\"28\" id=\"powiazania-dla-kanalu-odbc\" ><span class=\"ez-toc-section\" id=\"Powiazania_dla_kanalu_ODBC\"><\/span>Powi\u0105zania dla kana\u0142u ODBC<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W interfejsie ODBC linki s\u0105 dost\u0119pne jako wirtualne atrybuty o nazwie <em>link_text<\/em> i jest dost\u0119pny dla wszystkich jednostek biznesowych, kt\u00f3rych klucz g\u0142\u00f3wny sk\u0142ada si\u0119 z identyfikatora GUID . Aby u\u017cy\u0107 go w raporcie, mo\u017cna zdefiniowa\u0107 pole typu Hyperlink z atrybutem wirtualnym jako \u017ar\u00f3d\u0142em danych. Po klikni\u0119ciu powsta\u0142ego \u0142\u0105cza zostanie uruchomiona przegl\u0105darka, i nastapi zalogowanie si\u0119 do serwera aplikacji systemu, na kt\u00f3ry wskazuje \u017ar\u00f3d\u0142o danych ODBC i otworzy si\u0119 standardowa aplikacja powi\u0105zana z jednostk\u0105 biznesow\u0105.<\/p>\n<p>Serwer aplikacji systemu, na kt\u00f3ry wskazuje link, mo\u017cna ustawi\u0107 w aplikacji<em> Panel System <\/em>po wybraniu typu<em> Serwer aplikacji <\/em>w polu <em>Docelowy serwer dla atrybut\u00f3w linku<\/em>, na kt\u00f3ry wskazuje \u017ar\u00f3d\u0142o danych ODBC.<\/p>\n<h3 id=\"adres-url\" ><span class=\"ez-toc-section\" id=\"Adres_URL\"><\/span>Adres URL<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"wygenerowane-adresy-url\" ><span class=\"ez-toc-section\" id=\"Wygenerowane_adresy_URL\"><\/span>Wygenerowane adresy URL<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<article class=\"text-token-text-primary w-full\" dir=\"auto\" data-testid=\"conversation-turn-54\" data-scroll-anchor=\"true\">\n<div class=\"text-base my-auto mx-auto py-5 [--thread-content-margin:--spacing(4)] @[37rem]:[--thread-content-margin:--spacing(6)] @[72rem]:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:32rem] @[34rem]:[--thread-content-max-width:40rem] @[64rem]:[--thread-content-max-width:48rem] mx-auto flex max-w-(--thread-content-max-width) flex-1 text-base gap-4 md:gap-5 lg:gap-6 group\/turn-messages focus-visible:outline-hidden\" tabindex=\"-1\">\n<div class=\"group\/conversation-turn relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"relative flex-col gap-1 md:gap-3\">\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-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"1379b65f-5331-445a-b280-2d151a9609f2\" data-message-model-slug=\"gpt-4o\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\">\n<div class=\"markdown prose dark:prose-invert w-full break-words light\">\n<p class=\"\" data-start=\"0\" data-end=\"176\">Z instancji klasy <strong data-start=\"18\" data-end=\"26\">Link<\/strong> mo\u017cna generowa\u0107 adresy URL. Nazwy parametr\u00f3w rozpoczynaj\u0105ce si\u0119 od ma\u0142ych liter s\u0105 zarezerwowane do u\u017cytku wewn\u0119trznego. Nale\u017c\u0105 do nich mi\u0119dzy innymi:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"flex justify-start\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<ul>\n<li>oltp<\/li>\n<li>context<\/li>\n<li>app, appActionId, View<\/li>\n<li>be, dependent<\/li>\n<li>id, key, databaseGuid<\/li>\n<\/ul>\n<p class=\"\" data-start=\"0\" data-end=\"195\">Nazwy parametr\u00f3w rozpoczynaj\u0105ce si\u0119 od wielkich liter s\u0105 zarezerwowane dla parametr\u00f3w aplikacji akcji w aplikacjach systemu. Te parametry s\u0105 definiowane w aplikacji <em>Obiekty deweloperskie. <\/em>Nazwa parametru <em>View\u00a0<\/em>jest zarezerwowana do sterowania widokiem. Warto\u015bci parametr\u00f3w rozpoczynaj\u0105ce si\u0119 od <em>0x<\/em> s\u0105 interpretowane jako szesnastkowa reprezentacja tablic bajt\u00f3w.<\/p>\n<p><section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Parametry s\u0105 oceniane w okre\u015blonej kolejno\u015bci:<\/p>\n<ol>\n<li>Do logowania wykorzystywana jest baza danych OLTP.<\/li>\n<li>Jednostka organizacyjna jest ustawiona jako kontekst. Uruchomienie aplikacji mo\u017ce nadpisa\u0107 t\u0119 warto\u015b\u0107.<\/li>\n<li>Aplikacja zostaje uruchomiona.<\/li>\n<li>Oceniana jest akcja ApplicationAction (\u201eappActionId\u201d).<\/li>\n<li>Oceniany jest parametr widoku (\u201eView\u201d).<\/li>\n<li>Pozosta\u0142e parametry s\u0105 ustawiane w polach.<\/div><\/section><br \/>\n<article class=\"text-token-text-primary w-full\" dir=\"auto\" data-testid=\"conversation-turn-60\" data-scroll-anchor=\"true\">\n<div class=\"text-base my-auto mx-auto py-5 [--thread-content-margin:--spacing(4)] @[37rem]:[--thread-content-margin:--spacing(6)] @[72rem]:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:32rem] @[34rem]:[--thread-content-max-width:40rem] @[64rem]:[--thread-content-max-width:48rem] mx-auto flex max-w-(--thread-content-max-width) flex-1 text-base gap-4 md:gap-5 lg:gap-6 group\/turn-messages focus-visible:outline-hidden\" tabindex=\"-1\">\n<div class=\"group\/conversation-turn relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"relative flex-col gap-1 md:gap-3\">\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-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"1fe8516c-a86f-4c85-b9ed-d86d9f6efb06\" data-message-model-slug=\"gpt-4o\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\">\n<div class=\"markdown prose dark:prose-invert w-full break-words light\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"flex justify-start\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/li>\n<\/ol>\n<p>Dla przejrzysto\u015bci r\u00f3\u017cne formaty adres\u00f3w URL zosta\u0142y przedstawione schematycznie poni\u017cej. W systemie adresy URL powinny by\u0107 generowane wy\u0142\u0105cznie przez klasy <em>Link<\/em>, poniewa\u017c rzeczywisty format adres\u00f3w URL mo\u017cna w ka\u017cdej chwili zmieni\u0107 lub rozszerzy\u0107 z przyczyn technicznych.<\/p>\n<p>Typy parametr\u00f3w aplikacji u\u017cywane podczas interaktywnego okre\u015blania adresu URL jako tekst:<\/p>\n<ul>\n<li>parametry akcji typu <em>Logiczny typ danych<\/em> z pierwotnym typem <em>String<\/em><\/li>\n<li>parametry akcji typu <em>Obiekt biznesowy<\/em>, kt\u00f3rych obiekt biznesowy istnieje dok\u0142adnie w jednym typie bazy danych i posiada dok\u0142adnie jeden atrybut typu <em>String <\/em>jako klucz biznesowy<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Poniewa\u017c adresy URL nie zawieraj\u0105 informacji o typie i maj\u0105 ograniczenie d\u0142ugo\u015bci do 2047 znak\u00f3w, z\u0142o\u017cone zestawy parametr\u00f3w, takie jak wzorce zapyta\u0144 w ramach systemu, s\u0105 serializowane. W adresach URL wzorc\u00f3w zapyta\u0144 przesy\u0142ane jest jedynie odniesienie do odpowiedniego obiektu biznesowego.<\/div><\/section>\n<h5 id=\"adres-url-aplikacji\" ><span class=\"ez-toc-section\" id=\"Adres_URL_aplikacji\"><\/span>Adres URL aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>&lt;Protok\u00f3\u0142&gt;:\/\/&lt;Host&gt;[:&lt;Port&gt;]\/semiramis.(app|hta)?app=0x&lt;identyfikator GUID aplikacji&gt;[&amp;appAction=&lt;Dzia\u0142anie aplikacji zgodnie z obiektem deweloperskim&gt;] [<br \/>\n&amp;oltp=&lt;Baza danych nazwa&gt;] [&amp;context=&lt;Identyfikator organizacji&gt;]<br \/>\n[&amp;View=&lt;Kr\u00f3tka warto\u015b\u0107 widoku wed\u0142ug obiektu opracowania&gt;]<br \/>\n[&lt;Parametry aplikacji&gt;]<\/p>\n<p>Alternatywnie poprawne:<\/p>\n<p>&lt;protok\u00f3\u0142&gt;:\/\/&lt;host&gt;[:&lt;port&gt;]\/[semiramis.(app|hta)<br \/>\n?app=&lt;nazwa aplikacji&gt;[&amp;oltp=&lt;nazwa bazy danych&gt;]<br \/>\n[&amp;context=&lt;identyfikacja organizacji&gt;][&lt;aplikacja parametry&gt;]<\/p>\n<h5 id=\"adres-url-jednostki-biznesowej\" ><span class=\"ez-toc-section\" id=\"Adres_URL_jednostki_biznesowej\"><\/span>Adres URL jednostki biznesowej<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>&lt;Protok\u00f3\u0142&gt;:\/\/&lt;Host&gt;[:&lt;Port&gt;]\/semiramis.(app|hta)?be=0x&lt;Identyfikator podmiotu&gt;[&amp;dependent=0x&lt;Identyfikator podmiotu Dependent&gt;]<br \/>\n[&amp;oltp=&lt;Nazwa bazy danych &gt;][ &amp;context=&lt;Identyfikator organizacji&gt;]<\/p>\n<h5 id=\"adres-url-hiperlacza\" ><span class=\"ez-toc-section\" id=\"Adres_URL_hiperlacza\"><\/span>Adres URL hiper\u0142\u0105cza<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Uzyskane adresy URL maj\u0105 posta\u0107 zgodn\u0105 z RFC 3986.<\/p>\n<h3 id=\"instrukcja-wykorzystanie-linkdndadapter\" ><span class=\"ez-toc-section\" id=\"Instrukcja_Wykorzystanie_LinkDnDAdapter\"><\/span>Instrukcja: Wykorzystanie LinkDnDAdapter<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h5 id=\"dragadapter-dla-list\" ><span class=\"ez-toc-section\" id=\"DragAdapter_dla_list\"><\/span>DragAdapter dla list<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\/\/ po\u0142\u0105cz LinkDnDAdapter z list\u0105<\/p>\n<p>nowy ListDnDAdapter( &lt;list&gt;);<\/p>\n<p>\/\/ Implementacja<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">private class ListDnDAdapter extends\u00a0 LinkDnDAdapter {\n\nList list;\n\npublic ListDnDAdapter (List list) {\n\nsuper(list);\n\nthis.list = list;\n\nsetDropGesture(LinkDnDAdapter.NONE);\n\n}\n\nprotected int dragOver(TreeNode node,\n\nLinkTransferable linkTransferable,\n\nint action) {\n\nreturn LinkDnDAdapter.NONE;\n\n}\n\nprotected int drop(TreeNode node,\n\nLinkTransferable linkTransferable,\n\nint action) {\n\nreturn LinkDnDAdapter.NONE;\n\n}\n\nprotected void dragDropEnd(LinkTransferable linkTransferable,\n\nint action) {\n\n\/\/ Do Nothing\n\n}\n\nprotected LinkTransferable dragStart( TreeNode node,\n\nint action ) {\n\nCisListPartMutable rowMutable = list.getSelectedRow();\n\nif (rowMutable == null) {\n\nreturn null;\n\n}\n\nCisObject rowData = ( CisObject )rowMutable.getData();\n\nLink link = LinkUtility.createBusinessEntityLink(\n\nLinkUtility.DEFAULT_FLAGS ,\n\n&lt;databaseGuid&gt;, rowData);\n\nreturn LinkTransferable.fromLink(link);\n\n}\n\n}<\/pre>\n","protected":false},"author":29,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-8297","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-interfejsy-techniczne"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8297","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=8297"}],"version-history":[{"count":5,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8297\/revisions"}],"predecessor-version":[{"id":30956,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/8297\/revisions\/30956"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=8297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}