{"id":26021,"date":"2023-12-19T05:00:00","date_gmt":"2023-12-19T04:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=26021"},"modified":"2023-12-12T14:42:32","modified_gmt":"2023-12-12T13:42:32","slug":"sposoby-logowania-power-automate-cloud-flow-bez-center-of-excellence-na-przykladzie-dataverse","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/sposoby-logowania-power-automate-cloud-flow-bez-center-of-excellence-na-przykladzie-dataverse\/","title":{"rendered":"Sposoby logowania Power Automate Cloud Flow bez Center of Excellence na przyk\u0142adzie Dataverse"},"content":{"rendered":"\n<p>Tworz\u0105c oprogramowanie na bazie Power Platform, jedn\u0105 z us\u0142ug, kt\u00f3re mamy do dyspozycji, jest Power Automate. Korzystaj\u0105c z Power Automate, mo\u017cemy stworzy\u0107 automatyzacje, do przygotowania kt\u00f3rych dawniej by\u0142yby wymagane dedykowane zespo\u0142y IT sk\u0142adaj\u0105ce si\u0119 z analityk\u00f3w, programist\u00f3w i administrator\u00f3w. Jednak takie uproszczenie niesie ze sob\u0105 r\u00f3wnie\u017c wi\u0119ksz\u0105 odpowiedzialno\u015b\u0107, szczeg\u00f3lnie dla os\u00f3b, kt\u00f3re tworz\u0105 nowe automatyzacje.<\/p>\n\n\n\n<p>Jedn\u0105 ze wspomnianych odpowiedzialno\u015bci jest <strong>zarz\u0105dzanie i administracja przep\u0142ywami<\/strong>, a w przypadku, gdy co\u015b p\u00f3jdzie nie tak \u2013 analiza przyczyn. W takich sytuacjach nieocenione staj\u0105 si\u0119 logi (dziennik) zawieraj\u0105ce informacje o zdarzeniu, kt\u00f3re nast\u0105pi\u0142o. W Power Automate mamy oczywi\u015bcie funkcj\u0119 automatycznego logowania, jednak to rozwi\u0105zanie ma znacz\u0105ce ograniczenia w przegl\u0105daniu i wyszukiwaniu historycznych danych.<\/p>\n\n\n\n<p>W artykule zapraszam do <strong>zg\u0142\u0119bienia dodatkowych sposob\u00f3w<\/strong>, kt\u00f3re pomog\u0105 nam rozszerzy\u0107 standardowe logowanie, u\u0142atwiaj\u0105c ich historyczne przegl\u0105danie, odszukiwanie konkretnych uruchomie\u0144 mechanizm\u00f3w, czy te\u017c dodaj\u0105c kontekst biznesowy do ka\u017cdego z uruchomionych mechanizm\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Jakie problemy chcemy rozwi\u0105za\u0107?<\/strong><\/h2>\n\n\n\n<p>W momencie diagnostyki mechanizm\u00f3w Cloud Flow mo\u017cemy stan\u0105\u0107 przed kilkoma wyzwaniami:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li><strong>Trudno\u015bci w odczytywaniu szczeg\u00f3\u0142\u00f3w historycznych uruchomie\u0144 Power Automate Cloud Flow<\/strong> \u2013 ten, kto korzysta\u0142 z odczytu historii uruchomie\u0144 poszczeg\u00f3lnych Cloud Flow, wie, \u017ce nie jest to najprzyjemniejsze miejsce do szukania informacji. W szczeg\u00f3lno\u015bci, gdy interesuje nas konkretne uruchomienie, ale sami nie wiemy kt\u00f3re.<\/li>\n\n\n\n<li><strong>Trudno\u015bci w identyfikacji konkretnego uruchomienia Cloud Flow, kt\u00f3re chcemy zbada\u0107<\/strong> \u2013 w Cloud Flowach uruchomionych produkcyjnie naturaln\u0105 sytuacj\u0105 jest uruchamianie takiego flow minimum setki razy dziennie. Taki flow mo\u017ce ko\u0144czy\u0107 si\u0119 r\u00f3\u017cnymi stanami \u2013 Successful, canceled, failed. Oczywi\u015bcie, w idealnym \u015bwiecie powinni\u015bmy d\u0105\u017cy\u0107 do wyeliminowania uruchomie\u0144 failed, jednak w praktyce cz\u0119sto okazuje si\u0119, \u017ce musimy szybko zidentyfikowa\u0107 krytyczny przypadek, przez kt\u00f3ry nasza produkcyjna aplikacja nie dzia\u0142a. W takiej sytuacji standardowe logi mog\u0105 spowolni\u0107 nasze wysi\u0142ki rozwi\u0105zywania krytycznych b\u0142\u0119d\u00f3w, a jak wiemy \u2013 utraconego czasu nie spos\u00f3b odzyska\u0107.<\/li>\n\n\n\n<li><strong>Trudno\u015bci w identyfikacji, kt\u00f3ry konkretnie flow wp\u0142yn\u0105\u0142 w danym momencie na dany rekord<\/strong> \u2013 je\u015bli przygotowujemy aplikacj\u0119, w ramach kt\u00f3rej dzia\u0142a wiele Cloud Flow wchodz\u0105cych w interakcje z tym samym rekordem, mo\u017ce pojawi\u0107 si\u0119 problem kolejno\u015bci wykonywanych dzia\u0142a\u0144 (Cloud Flow s\u0105 wyzwalane jako mechanizmy asynchroniczne). W takim przypadku nieocenione s\u0105 informacje, jaki mechanizm spowodowa\u0142 poszczeg\u00f3ln\u0105 zmian\u0119 na rekordzie.<\/li>\n<\/ol>\n\n\n\n<p>W dalszej cz\u0119\u015bci artyku\u0142u wymieni\u0119 kilka propozycji, <strong>jak zapobiega\u0107 takim sytuacjom<\/strong>. Wskazane sposoby nale\u017cy traktowa\u0107 jako pewn\u0105 propozycj\u0119 rozwi\u0105za\u0144 i wykorzysta\u0107 te, kt\u00f3re uwa\u017camy za najbardziej dla nas przydatne. \u017badne z poni\u017cszych rozwi\u0105za\u0144 <strong>nie jest rozwi\u0105zaniem idealnym<\/strong>, jednak ka\u017cde przybli\u017ca nas do odpowiedzi na wyzwania, przed kt\u00f3rymi stajemy.<\/p>\n\n\n\n<p>Na potrzeby artyku\u0142u b\u0119d\u0119 wykorzystywa\u0142 baz\u0119 danych Dataverse oraz funkcjonalno\u015b\u0107 Audit History. Mo\u017cemy z powodzeniem zastosowa\u0107 te same metody np. na listach SharePoint, bazach SQL, plikach Excel, czy w dowolnym rozwi\u0105zaniu, w kt\u00f3rym da si\u0119 doda\u0107 kilka p\u00f3l czy tabel do przechowywania dodatkowych informacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Scenariusz biznesowy<\/strong><\/h2>\n\n\n\n<p>\u017beby bardziej wczu\u0107 si\u0119 w sytuacj\u0119 i przybli\u017cy\u0107 przypadki, kt\u00f3rych b\u0119dzie dotyczy\u0107 ten artyku\u0142, za\u0142\u00f3\u017cmy, \u017ce pracujemy dla firmy Contoso, kt\u00f3ra sprzedaje swoim klientom miesi\u0119czny abonament na swoj\u0105 us\u0142ug\u0119. W Contoso dzia\u0142aj\u0105 4 mechanizmy Cloud Flow odpowiadaj\u0105ce za:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Integracje z systemem ERP,<\/li>\n\n\n\n<li>Integracje z systemem Marketingowym,<\/li>\n\n\n\n<li>Integracje z systemem Sprzeda\u017cowym,<\/li>\n\n\n\n<li>Proces zatwierdze\u0144.<\/li>\n<\/ol>\n\n\n\n<p>Jeden z pracownik\u00f3w zg\u0142osi\u0142 nam, \u017ce zauwa\u017cy\u0142 b\u0142\u0105d w systemie. Klient John Smith kupi\u0142 miesi\u0119czn\u0105 subskrypcj\u0119, ale system wy\u015bwietla go jako klienta potencjalnego, a nie jako aktualnego. Mamy zlokalizowa\u0107 przyczyn\u0119 tego b\u0142\u0119du. Zerknijmy na rekord klienta:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta.png\"><img decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta-1024x586.png\" alt=\"Dane klienta w systemie. Faktycznie wida\u0107, \u017ce typ klienta to \u201ePotential Customer\u201d, pomimo \u017ce ni\u017cej system wskazuje, jaki plan zakupi\u0142 klient i do kiedy jest wa\u017cny\" class=\"wp-image-26022\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta-1024x586.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta-300x172.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta-768x440.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr1-Bledne-dane-klienta.png 1341w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Dane klienta w systemie. Faktycznie wida\u0107, \u017ce typ klienta to \u201ePotential Customer\u201d, pomimo \u017ce ni\u017cej system wskazuje, jaki plan zakupi\u0142 klient i do kiedy jest wa\u017cny<\/figcaption><\/figure>\n\n\n\n<p>Na szcz\u0119\u015bcie Dataverse ma du\u017c\u0105 liczb\u0119 wbudowanych funkcji \u015bledzenia zmian i operacji na rekordach. Jedn\u0105 z nich jest historia zmian (Audit history<a id=\"_ftnref1\" href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[1]<\/a>), dzi\u0119ki kt\u00f3rej b\u0119dziemy mogli zapozna\u0107 si\u0119 ze zmianami na rekordzie:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji.png\"><img decoding=\"async\" width=\"1024\" height=\"488\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji-1024x488.png\" alt=\"Audit History rekordu klienta\" class=\"wp-image-26024\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji-1024x488.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji-300x143.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji-768x366.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr2-Historia-Inspekcji.png 1513w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 Audit History rekordu klienta<\/figcaption><\/figure>\n\n\n\n<p>Przegl\u0105daj\u0105c Audit History, widzimy, \u017ce typ klienta zosta\u0142 ustawiony przez u\u017cytkownika aplikacyjnego<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[2]<\/a> Power Automate. Z du\u017cym prawdopodobie\u0144stwem mo\u017cemy stwierdzi\u0107, \u017ce w takim razie zrobi\u0142 to kt\u00f3ry\u015b z naszych Cloud Flow. Ale kt\u00f3ry? A jak ju\u017c dowiemy si\u0119, kt\u00f3ry mechanizm \u2013 to kt\u00f3re jego uruchomienie?<\/p>\n\n\n\n<p>Na nasze pytania nie znajdziemy odpowiedzi w Audit History, poniewa\u017c system nie zapisuje tutaj tych informacji. Co prawda, Power Automate zapisuje 28-dniow\u0105 histori\u0119 uruchomie\u0144<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[3]<\/a>, ale gdy np. chcemy dowiedzie\u0107 si\u0119 wi\u0119cej o kontek\u015bcie uruchomienia danego flow, czy sprawdzi\u0107 kt\u00f3ry flow wp\u0142yn\u0105\u0142 na dany rekord, to musimy sami zadba\u0107 o zalogowanie takich danych. W tym artykule skupimy si\u0119 na tym, <strong>jak radzi\u0107 sobie z takimi wyzwaniami.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Spos\u00f3b 1 \u2013 logowanie kontekstu zmiany na poszczeg\u00f3lnych rekordach<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Om\u00f3wienie implementacji<\/strong><\/h3>\n\n\n\n<p>Pierwszy spos\u00f3b jest jednym z najprostszych i moich ulubionych \u2013 w szczeg\u00f3lno\u015bci w przypadku korzystania z Dataverse. Jedn\u0105 z funkcjonalno\u015bci OOTB (Out Of the Box) jest funkcjonalno\u015b\u0107 Audytu\/historii inspekcji, czyli osobnej tabeli, kt\u00f3ra automatycznie \u015bledzi informacje o operacjach wykonanych na danym rekordzie.<\/p>\n\n\n\n<p>W tym przypadku skupimy si\u0119 na rozszerzeniu takiej historii audytu o dodatkowe informacje (Uwaga! Je\u015bli chcesz wykorzysta\u0107 ten spos\u00f3b logowania w innym systemie ni\u017c Dataverse \u2013 bez odpowiednika historii inspekcji, stracisz cz\u0119\u015b\u0107 benefit\u00f3w tego rozwi\u0105zania! Jednak mo\u017cesz przygotowa\u0107 podobny mechanizm samodzielnie, tworz\u0105c dodatkow\u0105 tabel\u0119, w kt\u00f3rej b\u0119dziesz przechowywa\u0142 histori\u0119 zmian danego rekordu).<\/p>\n\n\n\n<p>W przypadku korzystania z Power Automate mo\u017cemy \u0142atwo rozszerzy\u0107 logowanie, dodaj\u0105c informacje, kt\u00f3ry Cloud Flow i kt\u00f3re jego historyczne uruchomienie wp\u0142yn\u0119\u0142y na dany rekord. W tym celu wystarczy rozszerzy\u0107 nasze rozwi\u0105zanie o kilka element\u00f3w:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>W naszym systemie dodajemy dwa nowe pola:\n<ul class=\"wp-block-list\">\n<li>Pole nr 1 \u2013 Power Automate Instance URL,<\/li>\n\n\n\n<li>Pole nr 2 \u2013 Power Automate Cloud Flow name.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>W naszym Cloud Flow dodajemy dwie zmienne:\n<ul class=\"wp-block-list\">\n<li>Zmienna nr 1 \u2013 PowerAutomateInstanceURL \u2013 b\u0119dzie tworzy\u0107 i przechowywa\u0107 unikatowy adres URL ka\u017cdego uruchomienia Power Automate,<\/li>\n\n\n\n<li>Zmienna nr 2 \u2013 PowerAutomateCloudFlowName \u2013 b\u0119dzie odczytywa\u0107 nazw\u0119 naszego Cloud Flow i j\u0105 przechowywa\u0107. Nawet je\u015bli zmienimy nazw\u0119 Cloud Flow, zmienna zawsze odczyta aktualn\u0105 nazw\u0119.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Rozszerzamy Cloud Flow tak, by za ka\u017cdym razem, gdy edytuje rekord w systemie, zapisywa\u0142 powy\u017csze informacje na rekordzie.<\/li>\n<\/ol>\n\n\n\n<p>Na potrzeby artyku\u0142u za\u0142o\u017cymy, \u017ce jeste\u015bmy ju\u017c po rozszerzeniu naszego systemu o nowe pola i skupimy si\u0119 na konfiguracji mechanizmu. Z perspektywy Cloud Flow musimy wykona\u0107 nast\u0119puj\u0105c\u0105 konfiguracj\u0119:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dodajemy zmienn\u0105 PowerAutomateInstanceURL, a jako jej warto\u015b\u0107 <a href=\"https:\/\/make.powerautomate.com\/environments\/75e33d40-4395-e17a-85c9-2bd75fccd046\/flows\/9b2a83e5-ef63-01f9-5a23-16c8af17b6d6\/runs\/08585063994694980783718337781CU146\" class=\"ek-link\" rel=\"nofollow\" >podajemy wyra\u017cenie uj\u0119te na stronie<\/a><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable.png\"><img decoding=\"async\" width=\"1024\" height=\"454\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable-1024x454.png\" alt=\"Utworzenie zmiennej do przechowywania adresu URL historycznego uruchomienia Power Automate\" class=\"wp-image-26026\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable-1024x454.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable-300x133.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable-768x341.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable-1536x681.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr3-Cloud-Flow-Instance-URL-Variable.png 1855w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Utworzenie zmiennej do przechowywania adresu URL historycznego uruchomienia Power Automate<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Dodajemy zmienn\u0105 PowerAutomateCloudFlowName, a jako jej warto\u015b\u0107 ustawiamy: workflow()?[&#8217;tags&#8217;][&#8217;flowDisplayName&#8217;]<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-1024x456.png\"><img decoding=\"async\" width=\"1024\" height=\"456\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-1024x456.png\" alt=\"Utworzenie zmiennej dynamicznie odczytuj\u0105cej nazw\u0119 naszego Cloud Flow. Je\u015bli w przy\u0142o\u015bci zmienimy nazw\u0119 flow, zmienna b\u0119dzie stosowa\u0107 aktualn\u0105 nazw\u0119\" class=\"wp-image-26028\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-1024x456.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-300x134.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-768x342.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable-1536x685.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr4-Cloud-Flow-Name-ariable.png 1849w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Utworzenie zmiennej dynamicznie odczytuj\u0105cej nazw\u0119 naszego Cloud Flow. Je\u015bli w przy\u0142o\u015bci zmienimy nazw\u0119 flow, zmienna b\u0119dzie stosowa\u0107 aktualn\u0105 nazw\u0119<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Analizujemy nasz Cloud Flow i w ka\u017cdej akcji, w kt\u00f3rej tworzymy czy te\u017c aktualizujemy rekord, uzupe\u0142niamy nasze nowe pola nowymi zmiennymi<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr5-Cloud-Flow-Variable-location.png\"><img decoding=\"async\" width=\"949\" height=\"222\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr5-Cloud-Flow-Variable-location.png\" alt=\"Wykorzystanie zmiennych w ka\u017cdej operacji tworzenia i edycji rekord\u00f3w w naszym Cloud Flow\" class=\"wp-image-26030\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr5-Cloud-Flow-Variable-location.png 949w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr5-Cloud-Flow-Variable-location-300x70.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr5-Cloud-Flow-Variable-location-768x180.png 768w\" sizes=\"(max-width: 949px) 100vw, 949px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 5 Wykorzystanie zmiennych w ka\u017cdej operacji tworzenia i edycji rekord\u00f3w w naszym Cloud Flow<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Zapisujemy Cloud Flow i uruchamiany jego testowanie<\/li>\n<\/ol>\n\n\n\n<p>Po uruchomieniu Cloud Flow mo\u017cemy podejrze\u0107, jakie warto\u015bci zosta\u0142y zapisane w zmiennych. Poni\u017cej przyk\u0142ad zmiennej z dynamicznie budowanym adresem URL uruchomienia Power Automate:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr6-Przyklad-wartosci-zmiennej.png\"><img decoding=\"async\" width=\"765\" height=\"461\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr6-Przyklad-wartosci-zmiennej.png\" alt=\"Przyk\u0142ad warto\u015bci jednej z naszych dynamicznych zmiennych. W tym przypadku zmienna stworzy\u0142a nam adres URL wywo\u0142ania konkretnego Cloud Flow. Po skopiowaniu i wej\u015bciu w ten link Power Automate otworzy nam historyczne wywo\u0142anie\" class=\"wp-image-26032\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr6-Przyklad-wartosci-zmiennej.png 765w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr6-Przyklad-wartosci-zmiennej-300x181.png 300w\" sizes=\"(max-width: 765px) 100vw, 765px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 6 Przyk\u0142ad warto\u015bci jednej z naszych dynamicznych zmiennych. W tym przypadku zmienna stworzy\u0142a nam adres URL wywo\u0142ania konkretnego Cloud Flow. Po skopiowaniu i wej\u015bciu w ten link Power Automate otworzy nam historyczne wywo\u0142anie<\/figcaption><\/figure>\n\n\n\n<p>Od teraz ka\u017cde uruchomienie Cloud Flow zapisze nam na rekordzie, kt\u00f3ry mechanizm i kt\u00f3re jego uruchomienie wp\u0142yn\u0119\u0142o na rekord. Je\u015bli mamy skonfigurowane wiele Cloud Flow, to te dane b\u0119d\u0105 si\u0119 nam nadpisywa\u0107.<\/p>\n\n\n\n<p>Jednak korzystaj\u0105c z Dataverse, otrzymujemy mo\u017cliwo\u015b\u0107 \u015bledzenia historii zmian. Odkrywa ona ca\u0142\u0105 si\u0142\u0119 tej funkcjonalno\u015bci \u2013 dostajemy histori\u0119 operacja po operacji, co sta\u0142o si\u0119 z naszym rekordem. W tym przypadku g\u0142\u00f3wnym benefitem jest informacja, jaki konkretny mechanizm wp\u0142yn\u0105\u0142 na poszczeg\u00f3lny rekord i jaki jest adres URL do prze\u015bledzenia historycznego uruchomienia. Je\u015bli u\u017cytkownicy zg\u0142osiliby b\u0142\u0105d danych czy b\u0142\u0105d systemu powi\u0105zany z tym poszczeg\u00f3lnym klientem, mo\u017cemy w prosty i szybki spos\u00f3b prze\u015bledzi\u0107, jakie mechanizmy wp\u0142yn\u0119\u0142y na poszczeg\u00f3lny rekord.<\/p>\n\n\n\n<p>Je\u015bli nie korzystasz z Dataverse, <strong>mo\u017cesz z powodzeniem zbudowa\u0107<\/strong> tak\u0105 sam\u0105 histori\u0119 zmian jako osobn\u0105 tabel\u0119, kt\u00f3ra b\u0119dzie \u015bledzi\u0142a, jaki mechanizm wp\u0142yn\u0105\u0142 na dany rekord. Jednak wykracza to poza ten artyku\u0142.<\/p>\n\n\n\n<p>Z perspektywy aplikacji opartej o Dataverse otrzymujemy dodatkow\u0105 informacj\u0119, jakie jest \u017ar\u00f3d\u0142o danej zmiany:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory.png\"><img decoding=\"async\" width=\"1024\" height=\"470\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory-1024x470.png\" alt=\"Audit History zawieraj\u0105cy informacje o tym, kt\u00f3ry Cloud Flow wykona\u0142 dan\u0105 zmian\u0119 oraz jaki by\u0142 adres URL danego wywo\u0142ania\" class=\"wp-image-26034\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory-1024x470.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory-300x138.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory-768x353.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory-1536x705.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr7-Rozszerzony-Audit-Hitory.png 1799w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 7 Audit History zawieraj\u0105cy informacje o tym, kt\u00f3ry Cloud Flow wykona\u0142 dan\u0105 zmian\u0119 oraz jaki by\u0142 adres URL danego wywo\u0142ania<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr8-Szczegoly-pojedynczego-loga-Cloud-Flow.png\"><img decoding=\"async\" width=\"875\" height=\"418\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr8-Szczegoly-pojedynczego-loga-Cloud-Flow.png\" alt=\"Szczeg\u00f3\u0142y pojedynczego loga Cloud Flow. Mo\u017cemy zobaczy\u0107, jak wygl\u0105da pe\u0142ny adres URL historycznego wywo\u0142ania\" class=\"wp-image-26057\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr8-Szczegoly-pojedynczego-loga-Cloud-Flow.png 875w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr8-Szczegoly-pojedynczego-loga-Cloud-Flow-300x143.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr8-Szczegoly-pojedynczego-loga-Cloud-Flow-768x367.png 768w\" sizes=\"(max-width: 875px) 100vw, 875px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 8 Szczeg\u00f3\u0142y pojedynczego loga Cloud Flow. Mo\u017cemy zobaczy\u0107, jak wygl\u0105da pe\u0142ny adres URL historycznego wywo\u0142ania<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Konsekwencje i skutki uboczne<\/strong><\/h3>\n\n\n\n<p>Jakie konsekwencje i skutki uboczne b\u0119dzie mia\u0142o wprowadzenie takiego rozwi\u0105zania?<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>W wi\u0119kszo\u015bci przypadk\u00f3w u\u017cytkownik, kt\u00f3ry ma dost\u0119p do rekordu w bazie danych, otrzyma r\u00f3wnie\u017c dost\u0119p do pola w linkiem URL historycznego wywo\u0142ania. Umo\u017cliwi mu to odczytanie historii operacji i szczeg\u00f3\u0142\u00f3w Cloud Flow, a je\u015bli ma uprawnienia do edycji \u2013 r\u00f3wnie\u017c edycj\u0119 Cloud Flow.<\/li>\n<\/ol>\n\n\n\n<p>Poni\u017cej przedstawi\u0119 <strong>list\u0119 propozycji, jak mo\u017cemy poradzi\u0107 sobie z tymi konsekwencjami<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Aby unikn\u0105\u0107 tego problemu, nale\u017cy przejrze\u0107 uprawnienia u\u017cytkownik\u00f3w i upewni\u0107 si\u0119, \u017ce u\u017cytkownicy nie b\u0119d\u0105 mogli edytowa\u0107 tych Cloud Flow (np. Cloud flow uruchamiane przez wybrane wyzwalacze (ang. triggers<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[4]<\/a>) mo\u017cna ustawi\u0107 w trybie Run Only<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[5]<\/a> dla wybranej grupy u\u017cytkownik\u00f3w).<\/li>\n\n\n\n<li>W wybranych sytuacjach by\u0107 mo\u017ce trzeba b\u0119dzie stworzy\u0107 dwa Cloud Flowy: pierwszy flow jako Child flow<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[6]<\/a> wykonuj\u0105cy ca\u0142\u0105 logik\u0119 biznesow\u0105, i drugi flow, kt\u00f3ry w okre\u015blonym momencie w systemie uruchomi Child Flow.<\/li>\n\n\n\n<li>Rozwi\u0105zaniem najprostszym, cho\u0107 nieidealnym, b\u0119dzie ograniczenie dost\u0119pu u\u017cytkownikowi do tego pola, np. w Dataverse mo\u017cna to osi\u0105gn\u0105\u0107, stosuj\u0105c Column Security Profile<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[7]<\/a>. Zastosowanie tej opcji ograniczy dost\u0119p do tego pola u\u017cytkownikowi ju\u017c na poziomie API Dataverse, tak wi\u0119c niezale\u017cnie od tego, w jaki spos\u00f3b b\u0119dzie pr\u00f3bowa\u0142 odczyta\u0107 dane, nie b\u0119dzie w stanie tego osi\u0105gn\u0105\u0107.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Spos\u00f3b 2 \u2013 logowanie wyniku uruchomie\u0144 i poszczeg\u00f3lnych Cloud Flow w osobnych tabelach<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Om\u00f3wienie implementacji<\/strong><\/h3>\n\n\n\n<p>Innym sposobem niestandardowego logowania jest zapisywanie informacji o wyniku naszego Cloud Flow w osobnej tabeli, czy innym wybranym przez nas miejscu. Na potrzeby tego artyku\u0142u stworz\u0119 prost\u0105 tabel\u0119 przechowuj\u0105c\u0105 kilka informacji o naszych Cloud Flow:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Power Automate Cloud Flow name \u2013 pole tekstowe przechowuj\u0105ce informacje o nazwie naszego Cloud Flow,<\/li>\n\n\n\n<li>Power Automate Instance URL \u2013 pole tekstowe przechowuj\u0105ce informacje o adresie URL wyzwolenia poszczeg\u00f3lnego Cloud Flow,<\/li>\n\n\n\n<li>Status operacji \u2013 wynik naszego Cloud Flow.<\/li>\n<\/ol>\n\n\n\n<p>Mo\u017cemy zauwa\u017cy\u0107, \u017ce elementy 1 oraz 2 s\u0105 dok\u0142adnie takie same, jak w przypadku sposobu nr 1, tak wi\u0119c b\u0119dziemy tutaj wykorzystywa\u0107 te same funkcje, co w poprzednim sposobie.<\/p>\n\n\n\n<p>Jedyn\u0105 zmian\u0105 w tym przypadku jest status operacji naszego Cloud Flow. Tutaj mo\u017ce pojawi\u0107 si\u0119 pytanie \u2013 <strong>jak odczyta\u0107 taki status?<\/strong> Aby to zrobi\u0107, niezb\u0119dne b\u0119dzie odpowiednie pouk\u0142adanie operacji w naszych Cloud Flow. Poni\u017cej znajduje si\u0119 diagram, kt\u00f3ry przybli\u017ca nam struktur\u0119 sprzyjaj\u0105c\u0105 takiemu logowaniu:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Podstawowa-struktura-Cloud-Flow.jpg\"><img decoding=\"async\" width=\"378\" height=\"379\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Podstawowa-struktura-Cloud-Flow.jpg\" alt=\"Podstawowa struktura Cloud Flow\" class=\"wp-image-26059\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Podstawowa-struktura-Cloud-Flow.jpg 378w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Podstawowa-struktura-Cloud-Flow-300x300.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Podstawowa-struktura-Cloud-Flow-150x150.jpg 150w\" sizes=\"(max-width: 378px) 100vw, 378px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 9 Podstawowa struktura Cloud Flow<\/figcaption><\/figure>\n\n\n\n<p>Kr\u00f3tkie obja\u015bnienie ka\u017cdego z etap\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Numer etapu<\/td><td class=\"has-text-align-center\" data-align=\"center\">Nazwa etapu<\/td><td class=\"has-text-align-center\" data-align=\"center\">Opis\/przeznaczenie<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">Trigger<\/td><td class=\"has-text-align-center\" data-align=\"center\">Standardowa operacja, kt\u00f3ra wyzwala nasz Cloud Flow<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">Variables<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[8]<\/a><\/td><td class=\"has-text-align-center\" data-align=\"center\">Ze wzgl\u0119du na to, \u017ce zmienne w Cloud Flow musimy tworzy\u0107 zawsze w \u201eTop Level\u201d, zak\u0142adamy, \u017ce wszystkie zmienne globalne dla naszego przep\u0142ywu b\u0119d\u0105 tworzone w tym miejscu<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">Do Business Logic (Scope)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Tutaj kryje si\u0119 ca\u0142e serce naszego Cloud Flow. Zamykamy logik\u0119 biznesow\u0105, czyli to, co ma wykona\u0107 cloud flow w jeden du\u017cy kontener (Scope), kt\u00f3ry zwr\u00f3ci wynik naszego Cloud Flow<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">4<\/td><td class=\"has-text-align-center\" data-align=\"center\">Logger \u2013 Positive &amp; Logger &#8211; Negative<\/td><td class=\"has-text-align-center\" data-align=\"center\">Ostatni etap naszego Cloud Flow, gdzie na podstawie wyniku Scope Business Logic zalogujemy finalny rezultat Cloud Flow. Taki logger w wi\u0119kszo\u015bci przypadk\u00f3w powinien by\u0107 osobnym Child Flowem. Pozwoli to na umieszczenie ca\u0142ej logiki logowania w jednym miejscu i jej u\u017cywanie w wielu flow, nie trac\u0105c czasu na jej ponown\u0105 implementacj\u0119. Znacz\u0105co u\u0142atwi to r\u00f3wnie\u017c zmiany w logice logowania (gdyby mia\u0142y jakie\u015b zaj\u015b\u0107). Na potrzeby artyku\u0142u i uproszczenia przyjmiemy, \u017ce naszym logerem b\u0119dzie proste dodanie rekordu do Dataverse<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Poni\u017cej instrukcja dodania takiego loggera:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Krok 1 \u2013 po naszym scope \u201eDo Business Logic\u201d dodajemy kolejny scope i nazywamy go \u201eLogger \u2013 Possitive\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr9-Dodanie-logera-positive.png\"><img decoding=\"async\" width=\"784\" height=\"363\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr9-Dodanie-logera-positive.png\" alt=\"Dodawanie loggera, krok 1.\" class=\"wp-image-26036\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr9-Dodanie-logera-positive.png 784w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr9-Dodanie-logera-positive-300x139.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr9-Dodanie-logera-positive-768x356.png 768w\" sizes=\"(max-width: 784px) 100vw, 784px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 10 Dodawanie loggera, krok 1.<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Krok 2 \u2013 dodajemy nowy parallel branch wychodz\u0105cy z Do Business Logic<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr10-Parential-Branch.png\"><img decoding=\"async\" width=\"794\" height=\"366\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr10-Parential-Branch.png\" alt=\"Dodawanie loggera, krok 2.\" class=\"wp-image-26038\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr10-Parential-Branch.png 794w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr10-Parential-Branch-300x138.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr10-Parential-Branch-768x354.png 768w\" sizes=\"(max-width: 794px) 100vw, 794px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 11 Dodawanie loggera, krok 2.<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\" start=\"3\">\n<li>Krok 3 \u2013 w nowym parallel branch dodajemy nowy scope, kt\u00f3ry nazywamy Logger \u2013 Negative i w szczeg\u00f3\u0142ach akcji konfigurujemy \u201eRun After<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[9]<\/a>\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After.png\"><img decoding=\"async\" width=\"1024\" height=\"320\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After-1024x320.png\" alt=\"Dodawanie loggera, krok 3.\" class=\"wp-image-26040\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After-1024x320.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After-300x94.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After-768x240.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr11-Run-After.png 1511w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 12 Dodawanie loggera, krok 3.<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Krok 4 \u2013 logger Negative powinien by\u0107 uruchomiony tylko wtedy, gdy ca\u0142y scope \u201eDo Business Logic\u201d wykona si\u0119 negatywnie. Wobec tego zaznaczamy wszystkie opcje poza \u201eIs Successful\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr12-Run-After-finish.png\"><img decoding=\"async\" width=\"752\" height=\"295\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr12-Run-After-finish.png\" alt=\"Dodawanie loggera , krok 4. \" class=\"wp-image-26042\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr12-Run-After-finish.png 752w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr12-Run-After-finish-300x118.png 300w\" sizes=\"(max-width: 752px) 100vw, 752px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 13 Dodawanie loggera , krok 4.<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>Krok 5 \u2013 maj\u0105c tak przygotowane scope, mo\u017cemy doda\u0107 logik\u0119 logowania. Przypominam, \u017ce najlepiej by by\u0142o wykorzysta\u0107 child flow, ale na potrzeby uproszenia artyku\u0142u, u\u017cyj\u0119 zwyk\u0142ego dodania rekordu. W naszym rekordzie logu zapiszemy sobie Nazw\u0119 Cloud Flow, adres URL wywo\u0142ania i status naszego flow. Wynik takiej przyk\u0142adowej konfiguracji mo\u017cna zobaczy\u0107 poni\u017cej:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania.png\"><img decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania-1024x437.png\" alt=\"Dodawanie loggera , krok 5. \" class=\"wp-image-26044\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania-1024x437.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania-300x128.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania-768x328.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania-1536x656.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr13-Koniec-logowania.png 1555w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 14 Dodawanie loggera , krok 5.<\/figcaption><\/figure>\n\n\n\n<p>Z kolei w naszej bazie zaczn\u0105 si\u0119 odk\u0142ada\u0107 informacje o historycznych uruchomieniach, u\u0142atwiaj\u0105c przegl\u0105danie informacji o b\u0142\u0119dach:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania.png\"><img decoding=\"async\" width=\"1024\" height=\"386\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania-1024x386.png\" alt=\"Informacje o historycznych uruchomieniach\" class=\"wp-image-26046\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania-1024x386.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania-300x113.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania-768x290.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania-1536x580.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr14-Wynik-logowania.png 1807w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 15 Informacje o historycznych uruchomieniach<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Konsekwencje i skutki uboczne<\/h3>\n\n\n\n<p>Jakie konsekwencje i skutki uboczne b\u0119dzie mia\u0142o wprowadzenie takiego rozwi\u0105zania? Poni\u017csza lista przybli\u017cy nam odpowied\u017a na to pytanie:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Ze wzgl\u0119du na to, \u017ce rozwi\u0105zanie nr 2 dziedziczy kilka funkcjonalno\u015bci z rozwi\u0105zania nr 1 \u2013 wszystkie konsekwencje z poprzedniego rozwi\u0105zania maj\u0105 zastosowanie r\u00f3wnie\u017c tutaj.<\/li>\n\n\n\n<li>Zastosowanie tego rozwi\u0105zania doda nam do systemu now\u0105 tabel\u0119, kt\u00f3ra b\u0119dzie zwi\u0119ksza\u0107 swoj\u0105 obj\u0119to\u015b\u0107 za ka\u017cdym razem, gdy mechanizm zostanie uruchomiony (innymi s\u0142owy \u2013 b\u0119dzie zajmowa\u0107 nam cenn\u0105 przestrze\u0144 bazodanow\u0105).<\/li>\n\n\n\n<li>Nowa tabela b\u0119dzie dodatkowym komponentem, o kt\u00f3rym b\u0119dziemy musieli pami\u0119ta\u0107, podczas nadawania dost\u0119pu administratorom czy innym osobom odpowiedzialnym za monitorowanie dzia\u0142ania systemu.<\/li>\n\n\n\n<li>Je\u015bli z jakiego\u015b powodu ostatni kafelek\/akcja (logger) nie wykona si\u0119 poprawnie, ca\u0142y Cloud Flow zostanie oznaczony jako failed.<\/li>\n<\/ol>\n\n\n\n<p>Poni\u017cej r\u00f3wnie\u017c <strong>lista propozycji, jak mo\u017cemy poradzi\u0107 sobie z tymi konsekwencjami:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>W przypadku zwi\u0119kszania si\u0119 obj\u0119to\u015bci tabeli log\u00f3w \u2013 mo\u017cemy przygotowa\u0107 mechanizm regularnie usuwaj\u0105cy logi z nowej tabeli. W przypadku korzystania z Dataverse mo\u017cemy wykorzysta\u0107 funkcjonalno\u015b\u0107 Buld Delete<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[10]<\/a> lub stworzy\u0107 kolejny mechanizm Power Automate w oparciu o Schedule Trigger<a href=\"#_ftn11\" class=\"ek-link\" rel=\"nofollow\" >[11]<\/a>, kt\u00f3ry usunie nam rekordy wed\u0142ug \u015bci\u015ble okre\u015blonej logiki (np. rekordy starsze ni\u017c 365 dni).<\/li>\n\n\n\n<li>W przypadku zarz\u0105dzania dost\u0119pem do nowej tabeli&nbsp;\u2013 w przypadku Dataverse mo\u017cemy utworzy\u0107 now\u0105 niestandardow\u0105 rol\u0119 (Security Roles)<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[12]<\/a>, kt\u00f3r\u0105 b\u0119dziemy nadawa\u0107 osobom odpowiedzialnym za monitorowanie dzia\u0142ania systemu.<\/li>\n\n\n\n<li>W przypadku b\u0142\u0119du w wykonaniu ostatniego kafelka \u2013 tutaj niestety jedyne, co mo\u017cemy robi\u0107, to monitorowa\u0107 sytuacj\u0119 z poziomu <a href=\"https:\/\/make.powerautomate.com\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Microsoft Power Automate | Home<\/a> i sprawdza\u0107 histori\u0119 wywo\u0142a\u0144, korzystaj\u0105c np. z XRMToolBox<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[13]<\/a> i Flow Execution History<a href=\"#_ftn1\" class=\"ek-link\" rel=\"nofollow\" >[14]<\/a>, a nast\u0119pnie eliminowa\u0107 problemy, kt\u00f3re spowodowa\u0142y b\u0142\u0119dy w mechanizmie logowania. Niestety, nie ma sposobu, aby niestandardowo zalogowa\u0107 b\u0142\u0105d w niestandardowym mechanizmie logowania \ud83d\ude0a W tym wypadku jest to nasz ostateczny punkt potencjalnego b\u0142\u0119du.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Spos\u00f3b 3 \u2013 logowanie uruchomienia i zako\u0144czenia poszczeg\u00f3lnych Cloud Flow w osobnych tabelach<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Om\u00f3wienie implementacji<\/strong><\/h3>\n\n\n\n<p>Ostatni spos\u00f3b w tym zestawieniu \u0142\u0105czy oba poprzednie. Jednak tym razem dodamy dodatkowy etap, kt\u00f3ry poinformuje nas o tym, \u017ce jaki\u015b flow jest w trakcie procesu. Takie logowanie jest szczeg\u00f3lne przydatne np. w przypadku korzystania z Approval Connector, gdzie mo\u017cemy mie\u0107 uruchomiony szereg r\u00f3\u017cnych proces\u00f3w akceptacji, nie maj\u0105c do ko\u0144ca \u015bwiadomo\u015bci o tym i nie znaj\u0105c skali zjawiska.<\/p>\n\n\n\n<p>Na potrzeby tego rozbudowanego scenariusza musimy r\u00f3wnie\u017c zaktualizowa\u0107 nasz\u0105 struktur\u0119 Cloud Flow. Poni\u017cej zaktualizowana struktura:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Rozszerzona-struktura-Cloud-Flow.jpg\"><img decoding=\"async\" width=\"301\" height=\"384\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Rozszerzona-struktura-Cloud-Flow.jpg\" alt=\"Rozszerzona struktura Cloud Flow dla podw\u00f3jnego logowania\" class=\"wp-image-26061\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Rozszerzona-struktura-Cloud-Flow.jpg 301w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Rozszerzona-struktura-Cloud-Flow-235x300.jpg 235w\" sizes=\"(max-width: 301px) 100vw, 301px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 16 Rozszerzona struktura Cloud Flow dla podw\u00f3jnego logowania<\/figcaption><\/figure>\n\n\n\n<p>Kr\u00f3tkie obja\u015bnienie zaktualizowanych etap\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Numer etapu<\/td><td class=\"has-text-align-center\" data-align=\"center\">Nazwa etapu<\/td><td class=\"has-text-align-center\" data-align=\"center\">Opis\/przeznaczenie<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">Start Logger<\/td><td class=\"has-text-align-center\" data-align=\"center\">Nowy etap w strukturze. Tutaj b\u0119dziemy logowa\u0107 uruchomienie naszego Cloud Flow, tak aby poinformowa\u0107 system, \u017ce mechanizm rozpocz\u0105\u0142 pracy. Logowanie b\u0119dzie polega\u0107 na utworzeniu nowego rekordu Cloud Flow Log<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">5<\/td><td class=\"has-text-align-center\" data-align=\"center\">End Logger \u2013 Positive &amp; End Logger \u2013 Negative<\/td><td class=\"has-text-align-center\" data-align=\"center\">Ostatni etap naszego Cloud Flow, gdzie na podstawie wyniku Scope Business Logic zalogujemy finalny rezultat Cloud Flow. Zmian\u0105 wzgl\u0119dem poprzedniego sposobu jest to, \u017ce zamiast tworzy\u0107 nowy rekord na tym etapie, teraz b\u0119dziemy tylko aktualizowa\u0107 rekord logu utworzony w etapie nr 2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>I aktualizacja naszych Cloud Flow. Zaczynamy od dodania mechanizmu loguj\u0105cego nad \u201eDo Business Logic\u201d (jak ju\u017c wspomnia\u0142em \u2013 w wi\u0119kszo\u015bci przypadk\u00f3w powinien by\u0107 to Cloud Flow Child Flow, ale na potrzeby artyku\u0142u zrobimy zwyk\u0142\u0105 pojedyncz\u0105 akcj\u0119). W naszym przypadku dodamy tutaj akcj\u0119 \u201eCreate a new record\u201d, kt\u00f3ra stworzy nowy log Power Automate i ustawi jego status na \u201eIn Progress\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr15-Logger-starter.png\"><img decoding=\"async\" width=\"858\" height=\"582\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr15-Logger-starter.png\" alt=\"Akcja \u201eAdd a new row \u2013 logger starter\u201d\" class=\"wp-image-26048\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr15-Logger-starter.png 858w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr15-Logger-starter-300x203.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr15-Logger-starter-768x521.png 768w\" sizes=\"(max-width: 858px) 100vw, 858px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 17 Akcja \u201eAdd a new row \u2013 logger starter\u201d<\/figcaption><\/figure>\n\n\n\n<p>Maj\u0105c tak skonfigurowan\u0105 akcj\u0119, pozostaje nam jedynie zaktualizowa\u0107 operacj\u0119 na ko\u0144cu naszych mechanizm\u00f3w. Teraz na ko\u0144cu mechanizm\u00f3w zamiast tworzenia nowych rekord\u00f3w b\u0119dziemy aktualizowa\u0107 istniej\u0105cy. Usu\u0144my operacj\u0119 tworzenia nowego rekordu, a w jej miejsce wybierzmy operacj\u0119 aktualizacji rekordu. Jako ID aktualizowanego rekordu podamy ID rekordy utworzonego w etapie nr 2:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1.png\"><img decoding=\"async\" width=\"1024\" height=\"566\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1-1024x566.png\" alt=\"Aktualizacja rekordu\" class=\"wp-image-26050\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1-1024x566.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1-300x166.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1-768x424.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr16-Logger-update-part-1.png 1301w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 18 Aktualizacja rekordu<\/figcaption><\/figure>\n\n\n\n<p>Pozostaje ustawi\u0107 odpowiedni status: \u201e\u201dsuccessful&#8221; dla logera Positive i \u201eFailed\u201d dla loggera negative. Poni\u017cej wynik ko\u0144cowy takiej konfiguracji:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2.png\"><img decoding=\"async\" width=\"1024\" height=\"326\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2-1024x326.png\" alt=\"Wynik ko\u0144cowy konfiguracji\" class=\"wp-image-26052\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2-1024x326.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2-300x95.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2-768x244.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2-1536x489.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr17-Logger-update-part-2.png 1555w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 19 Wynik ko\u0144cowy konfiguracji<\/figcaption><\/figure>\n\n\n\n<p>A jak to b\u0119dzie wygl\u0105da\u0107 z perspektywy systemu? Je\u015bli otworzymy nasz widok Cloud Flow\u00f3w w trakcie wykonywania jakiego\u015b mechanizmu, zobaczymy, \u017ce status operacji jest \u201eIn Progress\u201d. Maj\u0105c link URL, mo\u017cemy przej\u015b\u0107 od razu do szczeg\u00f3\u0142\u00f3w uruchomienia Cloud Flow, sprawdzi\u0107 na jakim jest etapie, na jakie zatwierdzenia czeka, itp. Gdy Cloud Flow sko\u0144czy prac\u0119 zmieni sw\u00f3j status na \u201eSuccessful\u201d lub \u201eFailed\u201d (w zale\u017cno\u015bci od tego, co si\u0119 wydarzy).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera.png\"><img decoding=\"async\" width=\"1024\" height=\"306\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera-1024x306.png\" alt=\"Ko\u0144czenie pracy Cloud Flow\" class=\"wp-image-26054\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera-1024x306.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera-300x90.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera-768x230.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera-1536x459.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/Zrzut-ekranu-nr18-Wynik-rozszerzonego-loggera.png 1765w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 20 Ko\u0144czenie pracy Cloud Flow<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Konsekwencje i skutki uboczne<\/strong><\/h3>\n\n\n\n<p>Jakie konsekwencje i skutki uboczne b\u0119dzie mia\u0142o wprowadzenie takiego rozwi\u0105zania? Poni\u017csza lista przybli\u017cy nam odpowied\u017a na to pytanie:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Z racji, \u017ce to rozwi\u0105zanie jest po\u0142\u0105czeniem obu wcze\u015bniejszych opcji, to wszystkie wcze\u015bniej wymienione konsekwencje i skutki uboczne b\u0119d\u0105 mie\u0107 tutaj zastosowanie.<\/li>\n\n\n\n<li>Je\u015bli kafelek\/akcja Start Logger wykona si\u0119 niepoprawnie\/b\u0142\u0119dnie, mo\u017ce doprowadzi\u0107 do przerwania ca\u0142ego Cloud Flow.<\/li>\n<\/ol>\n\n\n\n<p>Poni\u017cej r\u00f3wnie\u017c <strong>lista propozycji, jak mo\u017cemy poradzi\u0107 sobie z tymi konsekwencjami<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>W przypadku kafelek\/akcja Start Logger \u2013 je\u015bli zale\u017cy nam, by wykona\u0107 logik\u0119 biznesow\u0105 nawet wtedy, gdy mechanizm logowania zawiedzie, mo\u017cemy skonfigurowa\u0107 operacj\u0119 Run After tak, aby Cloud Flow wykona\u0142 dalsz\u0105 logik\u0119 niezale\u017cnie od wyniku logowania. Niestety, finalnie bez rozpocz\u0119cia logowania nie uda si\u0119 r\u00f3wnie\u017c jego zako\u0144czenie, co spowoduje b\u0142\u0105d na samym ko\u0144cu procesu i oznaczenie Cloud Flow jako wykonanego niepoprawnie. W przypadku wykrycia takich sytuacji rekomendowa\u0142bym \u015bledzenie historii uruchomie\u0144 za pomoc\u0105 standardowych mechanizm\u00f3w Power Automate.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie i dalsze kroki<\/strong><\/h2>\n\n\n\n<p>W artykule skupili\u015bmy si\u0119 na niestandardowych mechanizmach logowania Cloud Flow. Nale\u017cy zaznaczy\u0107, \u017ce przedstawione wy\u017cej sposoby to jedynie propozycje, kt\u00f3re mog\u0105, ale nie musz\u0105, pasowa\u0107 do danego projektu. Mog\u0105 by\u0107 gotowym sposobem rozwi\u0105zania problemu lub te\u017c dobrym wst\u0119pem do poszukiwania w\u0142asnego sposobu. Zach\u0119cam do opracowania mechanizm\u00f3w dostosowanych do indywidualnych potrzeb sytuacji i projektu \ud83d\ude0a<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli interesuje Ci\u0119 tematyka Power Platform, zajrzyj koniecznie do drugiego artyku\u0142u autora: <a href=\"https:\/\/sii.pl\/blog\/power-platform-od-strony-administracyjnej-podstawy-konfiguracji-srodowisk\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Power Platform od strony administracyjnej \u2013 podstawy konfiguracji \u015brodowisk<\/a><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a id=\"_ftn1\" href=\"#_ftnref1\" class=\"ek-link\" rel=\"nofollow\" >[1]<\/a> <a href=\"\/learn.microsoft.com\/en-us\/power-platform\/admin\/manage-dataverse-auditing\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Dokumentacja funkcjonalno\u015bci<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref2\" class=\"ek-link\" rel=\"nofollow\" >[2]<\/a> W ekosystemie Microsoft mo\u017cemy autoryzowa\u0107 si\u0119 jako u\u017cytkownik zwyk\u0142y i nieinteraktywny. <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity-platform\/howto-create-service-principal-portal\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Jednym z podtyp\u00f3w u\u017cytkownik\u00f3w nieinteraktywnych jest Application User<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref3\" class=\"ek-link\" rel=\"nofollow\" >[3]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/fix-flow-failures\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Funkcjonalno\u015b\u0107 szczeg\u00f3lnie przydaje si\u0119 w sytuacji podstawowej diagnostyki b\u0142\u0119d\u00f3w<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref4\" class=\"ek-link\" rel=\"nofollow\" >[4]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/triggers-introduction?tabs=classic-designer\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Dokumentacja trigger\u00f3w<\/a><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/triggers-introduction?tabs=classic-designer\" rel=\"nofollow\" ><\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref5\" class=\"ek-link\" rel=\"nofollow\" >[5]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/sharepoint\/dev\/business-apps\/power-automate\/guidance\/manage-list-flows\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie Run Only Users<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref6\" class=\"ek-link\" rel=\"nofollow\" >[6]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/create-child-flows\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie Child Flow\u00f3w<\/a><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/create-child-flows\" rel=\"nofollow\" ><\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref7\" class=\"ek-link\" rel=\"nofollow\" >[7]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/admin\/field-level-security\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie funkcjonalno\u015bci Column Security Profile<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref8\" class=\"ek-link\" rel=\"nofollow\" >[8]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/create-variable-store-values?tabs=classic-designer\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Dokumentacja Variables<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref9\" class=\"ek-link\" rel=\"nofollow\" >[9]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/training\/modules\/error-handling\/2-configure-run-after\" rel=\"nofollow\" >Dok\u0142adniejsze om\u00f3wienie operacji Run After<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref10\" class=\"ek-link\" rel=\"nofollow\" >[10]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/developer\/data-platform\/delete-data-bulk?tabs=sdk\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Dokumentacja funkcjonalno\u015bci<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref11\" class=\"ek-link\" rel=\"nofollow\" >[11]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-automate\/run-scheduled-tasks?tabs=classic-designer\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Dokumentacja Cloud Flow wyzwalanych automatycznie o okre\u015blonej porze<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref12\" class=\"ek-link\" rel=\"nofollow\" >[12]<\/a> <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/admin\/database-security#create-or-configure-a-custom-security-role\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie tworzenia i zarz\u0105dzania Security Roles w Dataverse<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref13\" class=\"ek-link\" rel=\"nofollow\" >[13]<\/a> <a href=\"Om\u00f3wienie%20XRMToolBoxa\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie XRMToolBoxa<\/a><\/p>\n\n\n\n<p><a href=\"#_ftnref14\" class=\"ek-link\" rel=\"nofollow\" >[14]<\/a> <a href=\"https:\/\/www.xrmtoolbox.com\/plugins\/Fic.XTB.FlowExecutionHistory\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Om\u00f3wienie narz\u0119dzia Flow Execution History<\/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;26021&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;1&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 ( vote: 1)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Sposoby logowania Power Automate Cloud Flow bez Center of Excellence na przyk\u0142adzie Dataverse&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 ( vote: 1)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Tworz\u0105c oprogramowanie na bazie Power Platform, jedn\u0105 z us\u0142ug, kt\u00f3re mamy do dyspozycji, jest Power Automate. Korzystaj\u0105c z Power Automate, &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/sposoby-logowania-power-automate-cloud-flow-bez-center-of-excellence-na-przykladzie-dataverse\/\">Continued<\/a><\/p>\n","protected":false},"author":569,"featured_media":26063,"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":[1316],"tags":[1846,1806,1546,1512,624],"class_list":["post-26021","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-miekko","tag-power-automate-cloud-flow","tag-power-platform","tag-przeglad-narzedzi","tag-poradnik","tag-microsoft"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/12\/SPOSOB_1.jpg","category_names":["Development na mi\u0119kko"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26021"}],"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\/569"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=26021"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26021\/revisions"}],"predecessor-version":[{"id":26088,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26021\/revisions\/26088"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/26063"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=26021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=26021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=26021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}