{"id":16307,"date":"2022-10-12T07:00:00","date_gmt":"2022-10-12T05:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=16307"},"modified":"2023-05-10T15:55:31","modified_gmt":"2023-05-10T13:55:31","slug":"wykorzystanie-angular-bootstrap-calendar-w-service-portalu","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wykorzystanie-angular-bootstrap-calendar-w-service-portalu\/","title":{"rendered":"Wykorzystanie Angular Bootstrap Calendar w Service Portalu"},"content":{"rendered":"\n<p>W ostatnich latach ServiceNow zyska\u0142 miano najlepszego narz\u0119dzia do zarz\u0105dzania procesami, us\u0142ugami oraz infrastruktur\u0105 w szeroko poj\u0119tym IT. Nazwany przez Forbes w 2018 roku najbardziej innowacyjn\u0105 firm\u0105, ServiceNow dzia\u0142a w modelu SaaS (software as a service), stale udoskonalaj\u0105c platform\u0119.<\/p>\n\n\n\n<p>Wyr\u00f3\u017cniaj\u0105c\u0105 funkcjonalno\u015bci\u0105 tej platformy jest modu\u0142 o nazwie <strong>Service Portal<\/strong>. Umo\u017cliwia on w znacznym stopniu dostosowanie oprogramowania do potrzeb klienta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Wprowadzenie<\/strong><\/h2>\n\n\n\n<p>Za pomoc\u0105 Service Portalu mo\u017cemy rozszerzy\u0107 lub nawet stworzy\u0107 od podstaw interfejs u\u017cytkownika, kt\u00f3ry b\u0119dzie wykorzystywa\u0142 inne funkcjonalno\u015bci ServiceNow. Modu\u0142 ten powsta\u0142 przy wykorzystaniu kilku znanych technologii.<\/p>\n\n\n\n<p>Jedn\u0105 z nich jest AngularJS \u2013 popularny front-endowy framework, pozwalaj\u0105cym w \u0142atwy spos\u00f3b tworzy\u0107 i utrzymywa\u0107 aplikacje internetowe ze z\u0142o\u017con\u0105 logik\u0105. Framework ten pozwala r\u00f3wnie\u017c na korzystanie z istniej\u0105cych, sprawdzonych ju\u017c rozwi\u0105za\u0144, co znacznie skraca czas implementacji niekt\u00f3rych element\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Angular Bootstrap Calendar<\/strong><\/h2>\n\n\n\n<p>Jako przyk\u0142ad mo\u017ce pos\u0142u\u017cy\u0107 widget Angular Bootstrap Calendar, kt\u00f3ry implementuje bardzo por\u0119czne <strong>rozwi\u0105zanie interfejsu kalendarza<\/strong>. Aby zainstalowa\u0107 ten widget musimy najpierw <a href=\"https:\/\/developer.servicenow.com\/connect.do#!\/share\/contents\/3031851_angular_bootstrap_calendar_widget?t=PRODUCT_DETAILS\" rel=\"nofollow\" >pobra\u0107 go ze strony<\/a>, a nast\u0119pnie doda\u0107 do naszej instancji ServiceNow.<\/p>\n\n\n\n<p>Kolejnym krokiem jest modyfikacja logiki, czego zadaniem jest dostosowanie kalendarza do potrzeb projektu. W tym celu nale\u017cy otworzy\u0107 w trybie edycji widget o nazwie angular_bootstrap_calendar w module Service Portal.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/?attachment_id=16308\"><img decoding=\"async\" width=\"1024\" height=\"177\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-1-1-1024x177.png\" alt=\"Angular Bootstrap Calendar w Service Portalu\" class=\"wp-image-16308\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-1-1-1024x177.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-1-1-300x52.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-1-1-768x133.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-1-1.png 1040w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 1 Angular Bootstrap Calendar w Service Portalu<\/figcaption><\/figure><\/div>\n\n\n\n<p>Jest to punkt wej\u015bcia dla logiki frontendowej, kt\u00f3r\u0105 da si\u0119 p\u00f3\u017aniej dostosowa\u0107 wedle naszych potrzeb.<\/p>\n\n\n\n<p>Opcji jest kilka. Mo\u017cemy u\u017cy\u0107 nazwy strony, aby otworzy\u0107 j\u0105 w pasku nawigacyjnym, u\u017cywaj\u0105c adresu URL: <br><em>https:\/\/instance_name.service-now.com\/sp?id=page_name<\/em><\/p>\n\n\n\n<p>Aby doda\u0107 lub zmodyfikowa\u0107 logik\u0119, mo\u017cemy skorzysta\u0107 z edytora stron Service Portal lub otworzy\u0107 Now Platform user interface, gdzie z kontenera przejdziemy do widgetu.&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2.png\"><img decoding=\"async\" width=\"1024\" height=\"433\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2-1024x433.png\" alt=\"Page Content w Angular Bootstrap Calendar\" class=\"wp-image-16327\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2-1024x433.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2-300x127.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2-768x325.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-2-2.png 1324w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 2 Page Content w Angular Bootstrap Calendar<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Service Portal Widget<\/strong><\/h2>\n\n\n\n<p>Service Portal Widget sk\u0142ada si\u0119 z czterech element\u00f3w.<\/p>\n\n\n\n<p>Pierwszym z nich jest HTML, kt\u00f3ry zawiera powi\u0105zan\u0105 statyczn\u0105 logik\u0119. Poniewa\u017c ta cz\u0119\u015b\u0107 platformy szeroko wykorzystuje AngularJS, mo\u017cemy tutaj skorzysta\u0107 z dyrektyw frameworka.<\/p>\n\n\n\n<p>Kolejna cz\u0119\u015b\u0107 zawiera komponent CSS odpowiedzialny za form\u0119 prezentacji, wygl\u0105d strony. <\/p>\n\n\n\n<p>Je\u015bli chodzi o cz\u0119\u015b\u0107 skryptow\u0105 to mamy Client Script oraz Server Side:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Widget Scripts<\/strong><\/h3>\n\n\n\n<p>Zgodnie z nazwami, <strong>w sekcji Client Script umieszczamy logik\u0119 frontendow\u0105, natomiast Server Side Script zawiera operacje zwi\u0105zane z backendem.<\/strong> Client Script jest w zasadzie kontrolerem, kt\u00f3ry komunikuje si\u0119 z logik\u0105 umieszczon\u0105 w Server Side Script poprzez obiekt danych. Client Script jest pobierany w momencie \u0142adowania strony, ale mo\u017cemy go r\u00f3wnie\u017c od\u015bwie\u017cy\u0107 za pomoc\u0105 metody server.get, kt\u00f3ra pobiera dane z backendu. Z kolei Server Side ma dost\u0119p do wszystkich API ServiceNow Backendu, kt\u00f3re s\u0105 dost\u0119pne np. w Business Rules oraz Script Includes. Jest to pomocne zw\u0142aszcza przy pobieraniu danych z backendu za pomoc\u0105 GlideRecord API.<\/p>\n\n\n\n<p>Fakt, \u017ce wszystkie wcze\u015bniej wymienione komponenty, a tak\u017ce ca\u0142a platforma, jest zarz\u0105dzana w oparciu o JavaScript, sprawia, \u017ce jest ona \u0142atwa w utrzymaniu i dostosowywaniu do wymaga\u0144 danego u\u017cytkownika.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Wykorzystanie Bootstrap oraz AngularJS<\/strong><\/h2>\n\n\n\n<p>Widget opisany w artykule nosi nazw\u0119 test_angular_bootstrap_calendar i jak sama nazwa wskazuje w warstwie prezentacji wykorzystuje on znany framework o nazwie Bootstrap. Framework ten mo\u017cemy r\u00f3wnie\u017c u\u017cy\u0107 w wielu innych komponentach ServicePortalu.<\/p>\n\n\n\n<p>Podczas inspekcji kodu widgetu, mo\u017cna zauwa\u017cy\u0107, i\u017c zawiera on kolejny widget, wywo\u0142ywany przez dyrektyw\u0119 sp-widget podczas renderowania strony.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2.png\"><img decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2-1024x379.png\" alt=\"Inspekcja kodu widgetu\" class=\"wp-image-16330\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2-1024x379.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2-300x111.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2-768x285.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-3-2.png 1317w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 3 Inspekcja kodu widgetu<\/figcaption><\/figure><\/div>\n\n\n\n<p>Jak wida\u0107, bardzo \u0142atwo jest osadzi\u0107 inne widgety na stronie, co pozwala na tworzenie bardziej rozbudowanych narz\u0119dzi poprzez kompozycj\u0119 wielu widget\u00f3w. Drugi widget zawiera konfiguracj\u0119 paska nawigacyjnego kalendarza.<\/p>\n\n\n\n<p>Podczas inspekcji skryptu serwera g\u0142\u00f3wnego widgetu mo\u017cemy zobaczy\u0107 kod odpowiedzialny za pobieranie danych, kt\u00f3re p\u00f3\u017aniej b\u0119d\u0105 renderowane na stronie kalendarza.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-4.png\"><img decoding=\"async\" width=\"970\" height=\"554\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-4.png\" alt=\"Struktura danych na przyk\u0142adzie tablicy Events\" class=\"wp-image-16314\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-4.png 970w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-4-300x171.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-4-768x439.png 768w\" sizes=\"(max-width: 970px) 100vw, 970px\" \/><\/a><figcaption>Ryc. 4 Struktura danych na przyk\u0142adzie tablicy Events<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pobieranie danych<\/strong><\/h3>\n\n\n\n<p>Jak wspomniano wcze\u015bniej GlideRecord s\u0142u\u017cy do pobierania danych z backendu. Mo\u017cemy wi\u0119c pobra\u0107 je z dowolnej tabeli np. time_sheet z aplikacji Project Management Module lub innej, stworzonej przez nas na w\u0142asne potrzeby.<\/p>\n\n\n\n<p>Aby jednak dane wy\u015bwietla\u0142y si\u0119 poprawnie, musimy zadba\u0107 o ich odpowiedni\u0105 struktur\u0119. Przyk\u0142ad widoczny jest na rysunku powy\u017cej pod tablic\u0105 o nazwie events. Zawiera list\u0119 zdarze\u0144, czyli element\u00f3w danego kalendarza. Ka\u017cdy z nich powinien posiada\u0107 w\u0142a\u015bciwo\u015bci takie jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>title,<\/li><li>color,<\/li><li>startsAt,<\/li><li>endsAt,<\/li><li>druggable,<\/li><li>resizable.<\/li><\/ul>\n\n\n\n<p>Niekt\u00f3re w\u0142a\u015bciwo\u015bci jak np. recursOn s\u0105 opcjonalne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Rozszerzanie i modyfikacja logiki<\/strong><\/h2>\n\n\n\n<p>Podczas edytowania client script widzimy nast\u0119puj\u0105c\u0105 logik\u0119.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-5-1.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-5-1.png\" alt=\"Logika podczas edytowania Client script\" class=\"wp-image-16318\" width=\"696\" height=\"392\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-5-1.png 696w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-5-1-300x169.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-5-1-555x312.png 555w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/><\/a><figcaption>Ryc. 5 Logika podczas edytowania Client script<\/figcaption><\/figure><\/div>\n\n\n\n<p>Skrypt mo\u017cemy rozszerza\u0107 lub zmienia\u0107 w zale\u017cno\u015bci od potrzeb. Powy\u017cszy kod jest odpowiedzialny za wywo\u0142anie modala ze szczeg\u00f3\u0142ami danego zdarzenia tzn. elementu w kalendarzu.<\/p>\n\n\n\n<p>Istnieje r\u00f3wnie\u017c cz\u0119\u015b\u0107 odpowiedzialna za formatowanie tekstu kalendarza zwi\u0105zanego z ka\u017cdym zdarzeniem. Ponadto, mo\u017cemy rozszerzy\u0107 t\u0105 logik\u0119, dodaj\u0105c w\u0142asne filtry, kt\u00f3re wska\u017c\u0105 wydarzenia dla danego u\u017cytkownika lub danego stanu.<\/p>\n\n\n\n<p>Aby to osi\u0105gn\u0105\u0107, musimy dostarczy\u0107 odpowiednie w\u0142a\u015bciwo\u015bci we wspomnianej wcze\u015bniej li\u015bcie zdarze\u0144. Powinni\u015bmy r\u00f3wnie\u017c zdefiniowa\u0107 dodatkow\u0105 funkcj\u0119 w kontrolerze i wywo\u0142a\u0107 j\u0105 po stronie HTML za pomoc\u0105 dyrektyw Angulara.<\/p>\n\n\n\n<p>Innym sposobem na rozszerzenie i modyfikacj\u0119 logiki jest wykorzystanie szablon\u00f3w Angulara. W widgecie znajdziemy je w sekcji related list. W tym przyk\u0142adzie jest to plik calendarControls.html, kt\u00f3ry zawiera cz\u0119\u015b\u0107 UI odpowiedzialn\u0105 za wyb\u00f3r r\u00f3\u017cnych opcji widoku kalendarza tj. dzie\u0144, tydzie\u0144, miesi\u0105c.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1.png\"><img decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1-1024x315.png\" alt=\"Wykorzystanie szablon\u00f3w Angulara do rozszerzania i modyfikowania logiki \" class=\"wp-image-16332\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1-1024x315.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1-300x92.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1-768x236.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/10\/Ryc.-6-1.png 1167w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 6 Wykorzystanie szablon\u00f3w Angulara do rozszerzania i modyfikowania logiki<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad prezentuje u\u017cycie komponentu Angular Bootstrap Calendar w Service Portalu. Jest to jednak jedynie jedno z wielu narz\u0119dzi dost\u0119pnych w module ServiceNow. Uzmys\u0142awia to jak elastycznym i \u0142atwym w konfiguracji jest Service Portal.<\/p>\n\n\n\n<p>Fakt, \u017ce wykorzystuje on takie frameworki jak AngularJS i Bootstrap sprawia, \u017ce staje si\u0119 idealnym narz\u0119dziem do tworzenia spersonalizowanych rozwi\u0105za\u0144. Dzi\u0119ki temu, \u017ce mamy mo\u017cliwo\u015b\u0107 korzystania z wtyczek, narz\u0119dzi i bibliotek, mo\u017cemy wdro\u017cy\u0107 wymagania klienta w stosunkowo kr\u00f3tkim czasie oraz rozbudowa\u0107 ServiceNow o nowe funkcjonalno\u015bci, kt\u00f3re nie s\u0105 na starcie dostarczane z platform\u0105.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli interesuje Ci\u0119 tematyka zwi\u0105zana z ServiceNow, polecamy inne artyku\u0142y naszych specjalist\u00f3w np.: <a href=\"https:\/\/sii.pl\/blog\/integracja-servicenow-z-active-directory-przy-uzyciu-ldap\/?category=development-na-miekko&amp;tag=active-directory,integracja,servicenow\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Integracja ServiceNow z Active Directory przy u\u017cyciu LDAP\">Integracja ServiceNow z Active Directory przy u\u017cyciu LDAP<\/a>.<\/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;16307&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;5&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: 5)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wykorzystanie Angular Bootstrap Calendar w Service Portalu&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: 5)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W ostatnich latach ServiceNow zyska\u0142 miano najlepszego narz\u0119dzia do zarz\u0105dzania procesami, us\u0142ugami oraz infrastruktur\u0105 w szeroko poj\u0119tym IT. Nazwany przez &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wykorzystanie-angular-bootstrap-calendar-w-service-portalu\/\">Continued<\/a><\/p>\n","protected":false},"author":462,"featured_media":19768,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[1536,1537,17,1100],"class_list":["post-16307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-angular-bootstrap-calendar","tag-service-portal","tag-angularjs","tag-servicenow"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/08\/Wykorzystanie-Angular-Bootstrap-Calendar-w-Service-Portalu.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/16307"}],"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\/462"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=16307"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/16307\/revisions"}],"predecessor-version":[{"id":21592,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/16307\/revisions\/21592"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/19768"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=16307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=16307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=16307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}