{"id":7498,"date":"2019-05-27T12:10:12","date_gmt":"2019-05-27T10:10:12","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=7498"},"modified":"2025-05-07T12:04:39","modified_gmt":"2025-05-07T10:04:39","slug":"sapui5-szybki-start","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/sapui5-szybki-start\/","title":{"rendered":"SAPUI5 \u2013 szybki start"},"content":{"rendered":"\n<p>Czym jest SAPUI5? Najpro\u015bciej ujmuj\u0105c \u2013 jest to JavaScriptowo \u2013 XMLowy framework, oparty na wzorcu projektowym MVC i zawieraj\u0105cy wiele predefiniowanych bibliotek oraz kontrolek. Dzi\u0119ki nim budowa frontendowej warstwy dowolnej webowej aplikacji przebiega w spos\u00f3b du\u017co prostszy i przede wszystkim bardziej sp\u00f3jny.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Oficjalna dokumentacja<\/h2>\n\n\n\n<p><a href=\"https:\/\/sapui5.hana.ondemand.com\/#\/topic\" rel=\"nofollow\" >https:\/\/sapui5.hana.ondemand.com\/#\/topic<\/a><br>Powy\u017cszy odno\u015bnik bez w\u0105tpienia jest podstawow\u0105 pomoc\u0105 przy developmencie aplikacji na ka\u017cdym etapie i poziomie. Szczeg\u00f3lnie pomocne zak\u0142adki:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>API Reference \u2013 lista wszystkich predefiniowanych kontrolek wraz z ich opisem, indywidualn\u0105 list\u0105 event\u00f3w, agregacji, asocjacji i metod<\/li><li>Samples \u2013 przyk\u0142ady wykorzystania konkretnych kontrolek w praktyce wraz z kodem \u017ar\u00f3d\u0142owym<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Fiori a SAPUI5<\/h2>\n\n\n\n<p>Oba te poj\u0119cia cz\u0119sto wyst\u0119puj\u0105 zamiennie lub nieroz\u0142\u0105cznie, dlatego uwa\u017cam, \u017ce dobrze jest potrafi\u0107 ju\u017c na wst\u0119pie je rozr\u00f3\u017cnia\u0107.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>SAPUI5 \u2013 jak ju\u017c wspomnia\u0142em wy\u017cej jest to framework MVC stworzony g\u0142\u00f3wnie z my\u015bl\u0105 o unowocze\u015bnieniu interfejs\u00f3w SAPa i jest technologi\u0105 b\u0119d\u0105c\u0105 baz\u0105 dla wszystkich aplikacji Fiori. Nie oznacza to jednak, \u017ce jej wykorzystanie ogranicza si\u0119 do tematyki SAPa. Tak jak np. Angular lub React.js, SAPUI5 mo\u017ce zosta\u0107 wykorzystany do tworzenia zupe\u0142nie autonomicznych i niezale\u017cnych od samego SAPa aplikacji.<\/li><li>SAP Fiori \u2013 najkr\u00f3cej m\u00f3wi\u0105c jest paradygmatem projektowania (UX), kt\u00f3ry dzi\u0119ki wykorzystaniu technologii SAPUI5 zapewnia sp\u00f3jny wygl\u0105d oraz mechanizmy dzia\u0142ania wszystkich aplikacji. Ujmuj\u0105c to bardziej oficjalnie i cytuj\u0105c fragment tekstu ze strony www.sap.com jest to \u201ewiod\u0105ce \u015brodowisko u\u017cytkownika wszystkich aplikacji SAP\u201d.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Architektura aplikacji<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/4-1.jpg\"><img decoding=\"async\" width=\"605\" height=\"665\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/4-1.jpg\" alt=\"schemat architektury aplikacji\" class=\"wp-image-21401\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/4-1.jpg 605w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/4-1-273x300.jpg 273w\" sizes=\"(max-width: 605px) 100vw, 605px\" \/><\/a><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Widok<\/h3>\n\n\n\n<p>Cz\u0119\u015b\u0107 aplikacji odpowiedzialna za definiowanie i renderowanie interfejsu u\u017cytkownika (UI). W przypadku SAPUI5, wspierane s\u0105 konkretne typy widok\u00f3w: \u201eXML\u201d, \u201eJSON\u201d, \u201eJS\u201d, \u201eHTML\u201d, przy czym najmocniej wspieranym i zalecanym jest XML. W przyk\u0142adach aplikacji lub fragmenta kodu jakie cz\u0119sto mo\u017cna znale\u017a\u0107 niemal zawsze znajduje si\u0119 widok XMLowy. Dobrze jest r\u00f3wnie\u017c pozna\u0107 notacj\u0119 JavaScriptow\u0105 &#8211; przydaje si\u0119 ona m. in. w przypadkach konieczno\u015bci generowania dynamicznej zawarto\u015bci na widoku w samej logice jego kontrolera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kontroler<\/h3>\n\n\n\n<p>Zawiera metody definiuj\u0105ce w jaki spos\u00f3b model wsp\u00f3\u0142dzia\u0142a z widokiem. Najprostsza konstrukcja kontrolera o nazwie<em> ControllerName.controller.js<\/em> bez definiowania zale\u017cno\u015bci lub wykorzystywanych bibliotek przedstawia si\u0119 nast\u0119puj\u0105co:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nsap.ui.controller('name.space.ControllerName', {\n\/\/ logika kontrolera\n});\n<\/pre><\/div>\n\n\n<p>SAPUI5, tak jak wiele innych framework\u00f3w, zapewnia obs\u0142ug\u0119 zdarze\u0144 zwi\u0105zanych z cyklem dzia\u0142ania aplikacji: \u201eonInit\u201d, \u201eonExit\u201d, \u201eonAfterRendering\u201d, \u201eonBeforeRendering\u201d. Dodatkowo ka\u017cda z kontrolek u\u017cytych na powi\u0105zanym widoku posiada swoje w\u0142asne predefiniowane zdarzenia, dok\u0142adnie wylistowane i opisane w oficjalnej dokumentacji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model<\/h3>\n\n\n\n<p>Przetrzymuje dane i zapewnia metody do ich pobierania z bazy danych oraz ich modyfikowania, usuwania i dodawania (CRUD). Modele danych wspierane przez SAPUI5: \u201eOData\u201d, \u201eJSON\u201d, \u201eXML\u201d, \u201eResource\u201d.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/5.jpg\"><img decoding=\"async\" width=\"228\" height=\"189\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/5.jpg\" alt=\"\" class=\"wp-image-7535\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Zgodnie z obrazem widocznym powy\u017cej modele danych dziel\u0105 si\u0119 na \u201eclient-side models\u201d oraz \u201eserver-side models\u201d. JSON, XML i Resource s\u0105 modelami typu client-side. Wszelkie dane s\u0105 \u0142adowane i dost\u0119pne bezpo\u015brednio po stronie klienta, a operacje takie jak sortowanie czy filtrowanie przeprowadzane s\u0105 r\u00f3wnie\u017c bez udzia\u0142u serwera. Odata z kolei jest modelem typu server-side i udost\u0119pnia klientowi dane konkretnie sformatowane wed\u0142ug jego zapyta\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SAP Web IDE<\/h2>\n\n\n\n<p>Przechodz\u0105c do praktyki \u2013 do developmentu aplikacji SAPUI5 potrzebne b\u0119dzie IDE \u2013 w tym przypadku zalecan\u0105 opcj\u0105 przez wi\u0119kszo\u015b\u0107 os\u00f3b oraz firm z jakimi si\u0119 spotka\u0142em jest SAP Web IDE czyli \u015brodowisko programistyczne w chmurze. Pierwsza rzecz, jak\u0105 musimy w tym kierunku zrobi\u0107 to za\u0142o\u017cenie konta na SAP Cloud Platform (<a href=\"https:\/\/cloudplatform.sap.com\/index.html\" rel=\"nofollow\" >https:\/\/cloudplatform.sap.com\/index.html<\/a>) \u2013 platformie integruj\u0105cej szerok\u0105 gam\u0119 serwis\u00f3w i narz\u0119dzi do budowania i rozszerzania aplikacji SAPowych. Po zarejestrowaniu i zalogowaniu do SCP powinien ukaza\u0107 si\u0119 widok identyczny jak na zrzucie ekranu poni\u017cej.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x519-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x519-1.jpg\" alt=\"AP Cloud Platform Cockpit\" class=\"wp-image-21403\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x519-1.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x519-1-300x152.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x519-1-768x389.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pierwsza aplikacja<\/h2>\n\n\n\n<p>Tak jak w przypadku wielu innych framework\u00f3w tak r\u00f3wnie\u017c w SAPUI5 mo\u017cna r\u0119cznie, plik po pliku, linijka po linijce, utworzy\u0107 ca\u0142\u0105 aplikacj\u0119, jednak jest du\u017co prostsza i szybsza metoda umo\u017cliwiaj\u0105ca start. SAPUI5 udost\u0119pnia wiele szablon\u00f3w, kt\u00f3re potrafi\u0105 ograniczy\u0107 development do konfigurowania i wyklikiwania ustawie\u0144. Klikaj\u0105c kolejno \u201eFile\u201d -> \u201eNew\u201d -> \u201eProject from Template\u201d powinien wy\u015bwietli\u0107 si\u0119 widok jak na zrzucie ekranu poni\u017cej.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1024x516-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"516\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1024x516-1.jpg\" alt=\"Screenshot New List Report Application Template Selection\" class=\"wp-image-21405\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1024x516-1.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1024x516-1-300x151.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1024x516-1-768x387.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Po wyborze \u201eSAPUI5 Application\u201d, okre\u015bleniu nazwy i przestrzeni nazw, nast\u0119pnie typu i nazwy pierwszego widoku uzyskamy pierwsz\u0105 aplikacj\u0119 SAPUI5. Aby j\u0105 uruchomi\u0107 wystarczy zaznaczy\u0107 folder z nazw\u0105 aplikacji, klikn\u0105\u0107 zielony tr\u00f3jk\u0105t w k\u00f3\u0142ku w pasku na g\u00f3rze strony, nast\u0119pnie w okienku, kt\u00f3re si\u0119 wy\u015bwietli zaznaczy\u0107 index.html i klikn\u0105\u0107 OK.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1024x519-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1024x519-1.jpg\" alt=\"\" class=\"wp-image-21407\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1024x519-1.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1024x519-1-300x152.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1024x519-1-768x389.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>W przypadku blokowania popup\u00f3w przez przegl\u0105dark\u0119 nale\u017cy post\u0119powa\u0107 wed\u0142ug instrukcji, kt\u00f3re wy\u015bwietli samo Web IDE. Uruchomiona aplikacja prezentuje si\u0119 jak ni\u017cej (pusty widok przygotowany do w\u0142a\u015bciwego developmentu):<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-1024x519-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-1024x519-1.jpg\" alt=\"\" class=\"wp-image-21409\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-1024x519-1.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-1024x519-1-300x152.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-1024x519-1-768x389.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Co dalej?<\/h2>\n\n\n\n<p>Nowa struktura projektu jest gotowa i mo\u017cna zacz\u0105\u0107 jego budow\u0119. W dalszej pracy mo\u017cna si\u0119 ju\u017c skupi\u0107 na samym zape\u0142nianiu nowoutworzonej, pustej przestrzeni odpowiednimi kontrolkami UI5 i programowaniu w\u0142a\u015bciwej logiki aplikacji w kontrolerach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">i18n<\/h2>\n\n\n\n<p>Pierwsz\u0105 wa\u017cn\u0105 rzecz\u0105, na kt\u00f3r\u0105 nale\u017cy zwraca\u0107 uwag\u0119 przy dalszej pracy nad aplikacj\u0105 s\u0105 t\u0142umaczenia wszelkich wy\u015bwietlanych tekst\u00f3w. SAPUI5 zapewnia \u015bwietny mechanizm translacji i dobr\u0105 praktyk\u0105 jest niewpisywanie statycznych tekst\u00f3w w widokach, a zamiast tego stosowa\u0107 nast\u0119puj\u0105c\u0105 notacj\u0119:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;Page title=&quot;{i18n&gt;title}&quot;&gt;\n<\/pre><\/div>\n\n\n<p>T\u0142umaczenia takich zmiennych mo\u017cna odnale\u017a\u0107 w \u201ewebapp\/i18n\/i18n.properties\u201d.<\/p>\n\n\n\n<p>Plik i18n.properties jest domy\u015blnym plikiem t\u0142umacze\u0144 do kt\u00f3rego aplikacja odwo\u0142uje si\u0119 wy przypadku braku pliku w\u0142a\u015bciwego dla konkretnego j\u0119zyka. Aby w przysz\u0142o\u015bci doda\u0107 j\u0119zyk t\u0142umaczenia wystarczy utworzy\u0107 plik z w\u0142a\u015bciwym sufiksem w nazwie \u2013 np. w przypadku t\u0142umacze\u0144 dla j\u0119zyka polskiego by\u0142by to plik \u201ei18n_pl.properties\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dodawanie kontrolek<\/h2>\n\n\n\n<p>Aby doda\u0107 nowe kontrolki do widoku najlepiej jest najpierw wyszuka\u0107 j\u0105 w dokumentacji (link na pocz\u0105tku artyku\u0142u). Mo\u017cna w ten spos\u00f3b sprawdzi\u0107 interesuj\u0105ce nas w\u0142a\u015bciwo\u015bci i ich domy\u015blne warto\u015bci, przestrze\u0144 nazw itp. Skutecznym i szybkim sposobem cz\u0119sto okazuje si\u0119 r\u00f3wnie\u017c skopiowanie interesuj\u0105cego nas przyk\u0142adowego kodu z zak\u0142adki \u201eSamples\u201d z dokumentacji i przerobienie go wed\u0142ug w\u0142asnych potrzeb. Najpopularniejsz\u0105 przestrzeni\u0105 nazw z jak\u0105 mo\u017cna si\u0119 zetkn\u0105\u0107 przy tworzeniu aplikacji SAPUI5 jest \u201esap.m\u201d. Zawiera ona zdecydowan\u0105 wi\u0119kszo\u015b\u0107 popularnych i u\u017cytecznych kontrolek. \u017beby jednak przybli\u017cy\u0107 spos\u00f3b dzia\u0142ania przestrzeni nazw i dodawanie innych kontrolek dodamy do naszego widoku kontrolk\u0119 o nazwie \u201eSimpleForm\u201d z przestrzeni nazw \u201esap.ui.layout.form\u201d oraz po 2 pola formularza i etykiety z domy\u015blnej przestrzeni nazw (sap.m).<\/p>\n\n\n\n<p>W pliku \u201ewebapp\/view\/nazwawidoku.view.xml\u201d wystarczy doda\u0107 namespace oraz linijki kodu w spos\u00f3b podobny jak w poni\u017cszym przyk\u0142adzie:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;mvc:View xmlns:mvc=&quot;sap.ui.core.mvc&quot; xmlns=&quot;sap.m&quot; xmlns:form=&quot;sap.ui.layout.form&quot; xmlns:html=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot; controllerName=&quot;test.nmsp.test.controller.testview&quot; displayBlock=&quot;true&quot;&gt;\n   &lt;App id=&quot;idAppControl&quot;&gt;\n      &lt;pages&gt;\n         &lt;Page title=&quot;{i18n&gt;title}&quot;&gt;\n            &lt;content&gt;\n               &lt;form:SimpleForm title=&quot;Simple test form&quot;&gt;\n                  &lt;Label text=&quot;Test Input&quot; labelFor=&quot;testInput&quot; \/&gt;\n                  &lt;Input id=&quot;testInput&quot; required=&quot;true&quot; \/&gt;\n                  &lt;Label text=&quot;Test Input 2&quot; labelFor=&quot;testInput2&quot; \/&gt;\n                  &lt;Input id=&quot;testInput2&quot; required=&quot;true&quot; \/&gt;\n               &lt;\/form:SimpleForm&gt;\n            &lt;\/content&gt;\n         &lt;\/Page&gt;\n      &lt;\/pages&gt;\n   &lt;\/App&gt;\n&lt;\/mvc:View&gt;\n<\/pre><\/div>\n\n\n<p>Ostateczny efekt powinien prezentowa\u0107 si\u0119 jak poni\u017cej:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/10-1024x518-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"518\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/10-1024x518-1.jpg\" alt=\"\" class=\"wp-image-21411\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/10-1024x518-1.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/10-1024x518-1-300x152.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/10-1024x518-1-768x389.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Na koniec<\/h2>\n\n\n\n<p>W powy\u017cszym tek\u015bcie brakuje punktu dedykowanego kontrolerom i programowaniu logiki aplikacji, jest to jednak temat na oddzielny kurs i jednocze\u015bnie znajomo\u015b\u0107 j\u0119zyka JavaScript powinna by\u0107 bardzo znacz\u0105cym, je\u015bli nie jedynym wymogiem w tym temacie. Wed\u0142ug nazwy tego artyku\u0142u, mia\u0142 to by\u0107 szybki start, dlatego nie b\u0119d\u0119 si\u0119 rozpisywa\u0142 nad innymi bardziej z\u0142o\u017conymi zagadnieniami. Powy\u017csza tre\u015b\u0107 powinna by\u0107 jednak w zupe\u0142no\u015bci wystarczaj\u0105ca aby przybli\u017cy\u0107 ka\u017cdemu temat tego coraz bardziej popularnego i mocno rozwijanego frameworku, jakim jest SAPUI5.<\/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;7498&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;9&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.1&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;4.1\\\/5 ( votes: 9)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;SAPUI5 \u2013 szybki start&quot;,&quot;width&quot;:&quot;113.4&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: 113.4px;\">\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            4.1\/5 ( votes: 9)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Czym jest SAPUI5? Najpro\u015bciej ujmuj\u0105c \u2013 jest to JavaScriptowo \u2013 XMLowy framework, oparty na wzorcu projektowym MVC i zawieraj\u0105cy wiele &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/sapui5-szybki-start\/\">Continued<\/a><\/p>\n","protected":false},"author":189,"featured_media":7612,"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":[548,701],"class_list":["post-7498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-sap","tag-sapui5"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/05\/fioricover2.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7498"}],"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\/189"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=7498"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7498\/revisions"}],"predecessor-version":[{"id":21413,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7498\/revisions\/21413"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/7612"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=7498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=7498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=7498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}