{"id":31901,"date":"2025-09-10T05:00:00","date_gmt":"2025-09-10T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=31901"},"modified":"2025-08-11T14:53:27","modified_gmt":"2025-08-11T12:53:27","slug":"widok-hierarchii-w-aplikacjach-canvas","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/widok-hierarchii-w-aplikacjach-canvas\/","title":{"rendered":"Widok hierarchii w aplikacjach Canvas"},"content":{"rendered":"\n<p>Hierarchia danych jest wszechobecna w aplikacjach biznesowych \u2013 katalog produkt\u00f3w, struktura organizacyjna firmy oraz zarz\u0105dzanie projektami lub zadaniami cz\u0119sto wymagaj\u0105 reprezentacji wielopoziomowej. U\u017cytkownicy aplikacji potrzebuj\u0105 narz\u0119dzi pozwalaj\u0105cych na przejrzyste i intuicyjne poruszanie si\u0119 po zagnie\u017cd\u017conych strukturach. <strong>Prezentacja danych w formie czytelnego, wielopoziomowego, hierarchicznego widoku jest jednym z wi\u0119kszych wyzwa\u0144, z kt\u00f3rymi mierz\u0105 si\u0119 tw\u00f3rcy aplikacji Canvas Apps.<\/strong><\/p>\n\n\n\n<p>U\u017cytkownicy ko\u0144cowi oczekuj\u0105 funkcjonalnych i intuicyjnych interfejs\u00f3w, kt\u00f3re umo\u017cliwiaj\u0105 szybkie zrozumienie i nawigacj\u0119 po danych. Prezentacja informacji w formie wielopoziomowej listy mo\u017ce znacznie poprawi\u0107 czytelno\u015b\u0107 i efektywno\u015b\u0107 pracy. Hierarchia pozwala u\u017cytkownikowi lepiej zrozumie\u0107 kontekst, zale\u017cno\u015bci oraz stopie\u0144 szczeg\u00f3\u0142owo\u015bci. Niestety, Canvas Apps, pomimo mnogo\u015bci gotowych komponent\u00f3w, <strong>nie oferuje gotowego rozwi\u0105zania do elastycznej wizualizacji danych w takiej formie.<\/strong><\/p>\n\n\n\n<p>Powstaje zatem potrzeba <strong>tworzenia w\u0142asnych rozwi\u0105za\u0144<\/strong>, o kt\u00f3rych wi\u0119cej dowiecie si\u0119 z tego artyku\u0142u.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Metody wizualizacji danych w postaci hierarchii<\/strong><\/h2>\n\n\n\n<p>Najpopularniejsz\u0105 metod\u0105 wizualizacji danych w postaci hierarchii jest wykorzystanie zagnie\u017cd\u017conych galerii. Jest to stosunkowo \u0142atwe w implementacji rozwi\u0105zanie, kt\u00f3re umo\u017cliwia prezentacj\u0119 2-poziomowej struktury danych.<\/p>\n\n\n\n<p><strong>Przyk\u0142ad wykorzystania<\/strong>:<\/p>\n\n\n\n<p>G\u0142\u00f3wna galeria pokazuje dzia\u0142y, a w ka\u017cdym jej rekordzie znajduje si\u0119 podrz\u0119dna galeria z pracownikami danego dzia\u0142u.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"780\" height=\"472\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1.png\" alt=\"Galeria zagnie\u017cd\u017cona\" class=\"wp-image-31902\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1-300x182.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1-768x465.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><figcaption class=\"wp-element-caption\">Ryc. 1 Galeria zagnie\u017cd\u017cona<\/figcaption><\/figure>\n\n\n\n<p>\u0179r\u00f3d\u0142o danych galerii zagnie\u017cd\u017conej:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"409\" height=\"102\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1.png\" alt=\"\u0179r\u00f3d\u0142o danych galerii zagnie\u017cd\u017conej\" class=\"wp-image-31904\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1.png 409w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1-300x75.png 300w\" sizes=\"(max-width: 409px) 100vw, 409px\" \/><\/figure>\n\n\n\n<p>Uzale\u017cniaj\u0105c widoczno\u015b\u0107 zagnie\u017cd\u017conych galerii np. od warto\u015bci rekordu nadrz\u0119dnego (grupy), kt\u00f3ra aktualizowana jest po naci\u015bni\u0119ciu ikonki, mo\u017cna r\u00f3wnie\u017c w stosunkowo \u0142atwy spos\u00f3b wdro\u017cy\u0107 rozwijane\/zwijane sekcje.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"777\" height=\"466\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1.png\" alt=\"Sekcje rozwijane i zwijane\" class=\"wp-image-31906\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1.png 777w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1-300x180.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1-768x461.png 768w\" sizes=\"(max-width: 777px) 100vw, 777px\" \/><figcaption class=\"wp-element-caption\">Ryc. 2 Sekcje rozwijane i zwijane<\/figcaption><\/figure>\n\n\n\n<p>Widoczno\u015b\u0107 galerii zagnie\u017cd\u017conej:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"664\" height=\"49\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image4-1.png\" alt=\"Widoczno\u015b\u0107 galerii zagnie\u017cd\u017conej:\" class=\"wp-image-31908\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image4-1.png 664w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image4-1-300x22.png 300w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p>Akcja na zaznaczeniu ikonki:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"388\" height=\"174\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image5-1.png\" alt=\"Akcja na zaznaczeniu ikonki:\" class=\"wp-image-31910\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image5-1.png 388w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image5-1-300x135.png 300w\" sizes=\"(max-width: 388px) 100vw, 388px\" \/><\/figure>\n\n\n\n<p>Rodzaj ikonki:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"574\" height=\"33\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image6.png\" alt=\"Rodzaj ikonki\" class=\"wp-image-31912\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image6.png 574w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image6-300x17.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image6-555x33.png 555w\" sizes=\"(max-width: 574px) 100vw, 574px\" \/><\/figure>\n\n\n\n<p>Z uwagi na niski poziom skomplikowania tego rozwi\u0105zania, jest ono bardzo popularne i cz\u0119sto wykorzystywane. W przypadku dwupoziomowej struktury hierarchii oraz optymalnej ilo\u015bci danych, zastosowanie tego typu wizualizacji mo\u017ce by\u0107 dobrym rozwi\u0105zaniem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Wady rozwi\u0105zania<\/strong><\/h3>\n\n\n\n<p>Trzeba jednak pami\u0119ta\u0107, \u017ce wi\u0105\u017ce si\u0119 z pewnymi ograniczeniami oraz problemami, g\u0142\u00f3wnie objawiaj\u0105cymi si\u0119 w postaci <strong>niskiej efektywno\u015bci oraz braku elastyczno\u015bci<\/strong>. Wewn\u0119trzna galeria \u0142aduje dane osobno, co znacz\u0105co wp\u0142ywa na wydajno\u015b\u0107 i szybko\u015b\u0107 dzia\u0142ania systemu. Pr\u00f3ba stworzenia dodatkowego poziomu zagnie\u017cd\u017cenia danych wy\u0142\u0105cznie spot\u0119guje ten efekt i jeszcze bardziej spowolni aplikacj\u0119.<\/p>\n\n\n\n<p>Kolejnym, cho\u0107 tym razem mniej oczywistym minusem tego rozwi\u0105zania jest <strong>limit wysoko\u015bci pojedynczego rekordu galerii<\/strong>. Z uwagi na to, \u017ce ka\u017cda z zagnie\u017cd\u017conych galerii wchodzi w sk\u0142ad rekord\u00f3w galerii nadrz\u0119dnej, obowi\u0105zuje j\u0105 limit wysoko\u015bci wynosz\u0105cy 5000. Nale\u017cy o tym pami\u0119ta\u0107, szczeg\u00f3lnie w przypadku wy\u015bwietlania wi\u0119kszej ilo\u015bci rekord\u00f3w z danymi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Widok hierarchiczny w jednej galerii<\/strong><\/h2>\n\n\n\n<p>Rozwi\u0105zaniem, kt\u00f3re obchodzi wi\u0119kszo\u015b\u0107 z powy\u017cej wymienionych ogranicze\u0144 i problem\u00f3w, mo\u017ce by\u0107 implementacja widoku hierarchicznego w jednej galerii przy wykorzystaniu klucza umo\u017cliwiaj\u0105cego dynamiczne filtrowanie i uk\u0142adanie danych w wielopoziomowej strukturze.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Definiowanie kluczy<\/strong><\/h3>\n\n\n\n<p>Najwa\u017cniejszym elementem tworzenia tego typu widoku jest poprawne skonstruowanie klucza, na podstawie kt\u00f3rego b\u0119dzie odbywa\u0107 si\u0119 sortowanie danych w galerii. Pomocne mo\u017ce si\u0119 okaza\u0107 r\u00f3wnie\u017c zdefiniowanie stopnia zagnie\u017cd\u017cenia rekord\u00f3w z danymi w kontek\u015bcie ca\u0142ej wielopoziomowej struktury. Do budowy klucza najlepiej u\u017cy\u0107 unikalnych informacji w ramach konkretnej instancji danych. <strong>Najlepszym wyborem mo\u017ce okaza\u0107 si\u0119 GUID<\/strong>, poniewa\u017c opr\u00f3cz unikalno\u015bci ma dodatkow\u0105 zalet\u0119, kt\u00f3ra w tym przypadku jest bardzo pomocna \u2013 sta\u0142a ilo\u015b\u0107 znak\u00f3w.<\/p>\n\n\n\n<p>Zdefiniowanie kluczy dla poszczeg\u00f3lnych rekord\u00f3w mo\u017ce odby\u0107 si\u0119 na kilka sposob\u00f3w.<\/p>\n\n\n\n<p>Jednym z nich jest u\u017cycie p\u0119tli, kt\u00f3ra b\u0119dzie obraca\u0107 si\u0119 do momentu zako\u0144czenia przetwarzania wszystkich rekord\u00f3w. Poniewa\u017c w Canvas Apps nie ma wbudowanej funkcji podobnej do tych z popularnych j\u0119zyk\u00f3w programowania (np. \u2018do until\u2019 lub \u2018while\u2019 ), to obej\u015bciem tego mo\u017ce by\u0107 wykorzystanie samowyzwalaj\u0105cej si\u0119 kontrolki \u2018toggle\u2019. <strong>To sztuczka, kt\u00f3ra mo\u017ce znale\u017a\u0107 zastosowanie nie tylko w tej sytuacji<\/strong>, ale tak\u017ce w ka\u017cdej innej, gdy chcieliby\u015bmy wykorzysta\u0107 logik\u0119 dzia\u0142ania p\u0119tli wykonuj\u0105cej si\u0119 do momentu spe\u0142nienia okre\u015blonego warunku.<\/p>\n\n\n\n<p><strong>Przyk\u0142ad:<\/strong><\/p>\n\n\n\n<p>W tabeli zada\u0144 istniej\u0105 relacje pomi\u0119dzy rekordami danych z tej samej tabeli. Tw\u00f3rcy zada\u0144 mog\u0105 zdefiniowa\u0107 w ten spos\u00f3b kolejno\u015b\u0107 ich wykonania, podzieli\u0107 je na konkretne etapy realizacji, pogrupowa\u0107 itd. Ka\u017cdy z rekord\u00f3w posiada unikalny identyfikator (GUID) zapisany w kolumnie \u2018InternalId\u2019 . W kolumnie \u2018ParentInternalId\u2019&nbsp; opcjonalnie zdefiniowany mo\u017ce by\u0107 r\u00f3wnie\u017c identyfikator zadania nadrz\u0119dnego tzw. rodzica.<\/p>\n\n\n\n<p>To przyk\u0142ad, kt\u00f3rego charakterystyka relacji mi\u0119dzy danymi znajduje odzwierciedlenie w wielu instancjach danych i przypadkach biznesowych.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"172\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image7-1024x172.png\" alt=\"Fragment tabeli z danymi\" class=\"wp-image-31914\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image7-1024x172.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image7-300x51.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image7-768x129.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image7.png 1134w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ryc. 3 Fragment tabeli z danymi<\/figcaption><\/figure>\n\n\n\n<p>Z uwagi na brak zdefiniowanej konkretnej liczby poziom\u00f3w zagnie\u017cd\u017cenia danych oraz ilo\u015bci rekord\u00f3w znajduj\u0105cych si\u0119 na tych poziomach, do generacji klucza wykorzystamy kontrolk\u0119 \u2018toggle\u2019. W celu implementacji \u0142atwej i kontrolowanej akcji wyzwolenia dzia\u0142ania kodu mo\u017cna wykorzysta\u0107 zmienn\u0105, kt\u00f3r\u0105 nale\u017cy podstawi\u0107 do warto\u015bci domy\u015blnej toggla i w odpowiednim dla nas miejscu (np. \u2018OnVisible\u2019 ekranu) zdefiniowa\u0107 jej warto\u015b\u0107 na \u2018true\u2019 (wywo\u0142anie), a nast\u0119pnie na \u2018false\u2019 (dezaktywacja i oczekiwanie na kolejne wywo\u0142anie).<\/p>\n\n\n\n<p>Deklaracja warto\u015bci zmiennej:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"347\" height=\"44\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image8.png\" alt=\"Deklaracja warto\u015bci zmiennej\" class=\"wp-image-31916\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image8.png 347w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image8-300x38.png 300w\" sizes=\"(max-width: 347px) 100vw, 347px\" \/><\/figure>\n\n\n\n<p>Warto\u015b\u0107 domy\u015blna toggla:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"504\" height=\"38\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image9.png\" alt=\"Warto\u015b\u0107 domy\u015blna toggla\" class=\"wp-image-31918\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image9.png 504w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image9-300x23.png 300w\" sizes=\"(max-width: 504px) 100vw, 504px\" \/><\/figure>\n\n\n\n<p>Kod, kt\u00f3ry ma si\u0119 wykona\u0107 w trakcie dzia\u0142ania toggla, nale\u017cy zdefiniowa\u0107 we w\u0142a\u015bciwo\u015bci \u2018OnCheck\u2019 kontrolki. Idea jest taka, aby zaktualizowa\u0107 warto\u015bci w kolumnach z kluczem i poziomem zagnie\u017cd\u017cenia dla ka\u017cdego rekordu.<\/p>\n\n\n\n<p>Sekwencja aktualizacji warto\u015bci nast\u0119powa\u0107 b\u0119dzie od najwy\u017cszego poziomu (pozycji bez zdefiniowanego rodzica), w d\u00f3\u0142 (pozycji najbardziej zagnie\u017cd\u017conych). W tym celu przy ka\u017cdym obrocie p\u0119tli tworzona jest kolekcja z danymi podlegaj\u0105cymi aktualizacji. Liczba obrot\u00f3w p\u0119tli (wywo\u0142a\u0144 kodu toggla) jest r\u00f3wna liczbie poziom\u00f3w zagnie\u017cd\u017cenia danych w ca\u0142ej strukturze hierarchii. Po tym nast\u0119puje aktualizacja warto\u015bci klucza oraz poziomu zagnie\u017cd\u017cenia.<\/p>\n\n\n\n<p>Warto\u015b\u0107 klucza tworzona jest z identyfikator\u00f3w rekord\u00f3w nadrz\u0119dnych, procesowanego rekordu oraz opcjonalnie z warto\u015bci umo\u017cliwiaj\u0105cej wdro\u017cenie dodatkowego sortowania (w tym przypadku data rozpocz\u0119cia). Warto\u015b\u0107 poziomu zagnie\u017cd\u017cenia to warto\u015b\u0107 liczbowa, gdzie 0 oznacza rekord niezagnie\u017cd\u017cony. Wzrost tych warto\u015bci oznacza wi\u0119kszy stopie\u0144 zagnie\u017cd\u017cenia danych.<\/p>\n\n\n\n<p>Na ko\u0144cu sprawdzane jest, <strong>czy nadal istniej\u0105 nieprzeprocesowane dane<\/strong> i w przypadku otrzymania odpowiedzi twierdz\u0105cej nast\u0119puje ponowna aktywacja toggla. <strong>Warto\u015b\u0107 negatywna tego warunku oznacza koniec wykonywania si\u0119 kodu.<\/strong><\/p>\n\n\n\n<p>Kod na aktywacji toggla:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"751\" height=\"812\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie-1.jpg\" alt=\"Kod na aktywacji toggla\" class=\"wp-image-31924\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie-1.jpg 751w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie-1-277x300.jpg 277w\" sizes=\"(max-width: 751px) 100vw, 751px\" \/><\/figure>\n\n\n\n<p>Opcjonalnie, w przypadku gdy istotna jest kolejno\u015b\u0107 wy\u015bwietlanych rekord\u00f3w w obr\u0119bie tej samej instancji (te sam poziom + ten sam rodzic), w trakcie definiowania klucza, mo\u017cna uwzgl\u0119dni\u0107 warto\u015b\u0107 kolumny, po kt\u00f3rej ma nast\u0105pi\u0107 sortowanie.<\/p>\n\n\n\n<p>Nale\u017cy jednak pami\u0119ta\u0107, \u017ce docelowe sortowanie, kt\u00f3re zostanie wdro\u017cone w galerii, <strong>jest sortowaniem alfabetycznym<\/strong>. Ma to szczeg\u00f3lne znaczenie, gdy oczekujemy sortowania po kolumnie z warto\u015bciami liczbowymi lub datami. W przypadku dat dobrym rozwi\u0105zaniem jest uwzgl\u0119dnienie odpowiedniego formatu (np. \u2018yyyy-mm-dd\u2019) \u2013 tak jak w przyk\u0142adzie powy\u017cej.<\/p>\n\n\n\n<p>Dane liczbowe mog\u0105 okaza\u0107 si\u0119 bardziej problematyczne, jednak dla tego typu informacji r\u00f3wnie\u017c mo\u017cna stworzy\u0107 rozwi\u0105zanie, kt\u00f3re zadzia\u0142a. Nale\u017cy jedynie oszacowa\u0107 prognozowan\u0105, maksymaln\u0105 liczb\u0119 znak\u00f3w najwi\u0119kszych warto\u015bci. W przyk\u0142adzie poni\u017cej jest to 3 (czyli maksymalna szacowana warto\u015b\u0107 to 999). Dla zachowania buforu bezpiecze\u0144stwa mo\u017cna zwi\u0119kszy\u0107 t\u0119 warto\u015b\u0107 o margines b\u0142\u0119du szacunkowego.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"617\" height=\"37\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie2.jpg\" alt=\"aktualizacja\" class=\"wp-image-31926\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie2.jpg 617w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie2-300x18.jpg 300w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<p>W \u017ar\u00f3dle danych galerii nale\u017cy odnie\u015b\u0107 si\u0119 do przygotowanej kolekcji oraz uwzgl\u0119dni\u0107 sortowanie alfabetyczne po kolumnie z kluczem.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"556\" height=\"42\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie3.jpg\" alt=\"aktualizacja\" class=\"wp-image-31928\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie3.jpg 556w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Przechwytywanie3-300x23.jpg 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/figure>\n\n\n\n<p>Aby zobrazowa\u0107 poziomy zagnie\u017cd\u017cenia rekord\u00f3w w galerii, mo\u017cna np. wykorzysta\u0107 warto\u015b\u0107 z kolumny \u2018LevelInHierarchy\u2019 i uzale\u017cni\u0107 od tego odsuni\u0119cie tekstu oraz kolor t\u0142a.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"851\" height=\"516\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image10-1.png\" alt=\"Poziomy zagnie\u017cd\u017cenia rekord\u00f3w w tabeli \u2013 wizualizacja \" class=\"wp-image-31930\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image10-1.png 851w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image10-1-300x182.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image10-1-768x466.png 768w\" sizes=\"(max-width: 851px) 100vw, 851px\" \/><figcaption class=\"wp-element-caption\">Ryc. 4 Poziomy zagnie\u017cd\u017cenia rekord\u00f3w w tabeli \u2013 wizualizacja<\/figcaption><\/figure>\n\n\n\n<p>Odsuni\u0119cie tekstu:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"626\" height=\"36\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image11.png\" alt=\"Odsuni\u0119cie tekstu\" class=\"wp-image-31932\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image11.png 626w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image11-300x17.png 300w\" sizes=\"(max-width: 626px) 100vw, 626px\" \/><\/figure>\n\n\n\n<p>Kolor wype\u0142nienia t\u0142a:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"901\" height=\"35\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image12.png\" alt=\"Kolor wype\u0142nienia t\u0142a\" class=\"wp-image-31934\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image12.png 901w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image12-300x12.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image12-768x30.png 768w\" sizes=\"(max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/oferty-pracy\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-PL-k-4.jpg\" alt=\"oferty pracy\" class=\"wp-image-31936\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-PL-k-4.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-PL-k-4-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Powy\u017csze rozwi\u0105zanie umo\u017cliwia wizualizacj\u0119 wielopoziomowej hierarchii danych bez konieczno\u015bci wcze\u015bniejszego okre\u015blania ilo\u015bci poziom\u00f3w. <strong>Ze wzgl\u0119du na elastyczno\u015b\u0107 mo\u017ce znale\u017a\u0107 szerokie zastosowanie w wielu scenariuszach<\/strong>. Rozwi\u0105zanie nie wyklucza r\u00f3wnie\u017c opcji implementacji rozwijanych sekcji oraz filtr\u00f3w.<\/p>\n\n\n\n<p>Nale\u017cy jednak pami\u0119ta\u0107, aby zadba\u0107 o <strong>intuicyjne rozr\u00f3\u017cnienie poszczeg\u00f3lnych instancji danych<\/strong>, tak by poszczeg\u00f3lne struktury hierarchiczne nie \u0142\u0105czy\u0142y si\u0119 losowo w widoku. Jest to jednak aspekt wizualny, kt\u00f3ry mo\u017cna obs\u0142u\u017cy\u0107 na wiele sposob\u00f3w, w zale\u017cno\u015bci od preferencji.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;31901&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;2&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Widok hierarchii w aplikacjach Canvas&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hierarchia danych jest wszechobecna w aplikacjach biznesowych \u2013 katalog produkt\u00f3w, struktura organizacyjna firmy oraz zarz\u0105dzanie projektami lub zadaniami cz\u0119sto wymagaj\u0105 &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/widok-hierarchii-w-aplikacjach-canvas\/\">Continued<\/a><\/p>\n","protected":false},"author":733,"featured_media":31938,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2858,1824,1546,1512],"class_list":["post-31901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-canvas-apps","tag-aplikacje","tag-przeglad-narzedzi","tag-poradnik"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Computer_2.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31901"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/733"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=31901"}],"version-history":[{"count":1,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31901\/revisions"}],"predecessor-version":[{"id":31940,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31901\/revisions\/31940"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/31938"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=31901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=31901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=31901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}