{"id":21850,"date":"2023-05-26T05:00:00","date_gmt":"2023-05-26T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=21850"},"modified":"2023-05-24T10:10:07","modified_gmt":"2023-05-24T08:10:07","slug":"wypelnianie-dokumentow-z-pomoca-aplikacji-heroku","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wypelnianie-dokumentow-z-pomoca-aplikacji-heroku\/","title":{"rendered":"Wype\u0142nianie dokument\u00f3w z pomoc\u0105 aplikacji Heroku"},"content":{"rendered":"\n<p>Obs\u0142uga dokument\u00f3w jest jedn\u0105 z podstawowych funkcji wykorzystywanych przez u\u017cytkownik\u00f3w, kt\u00f3rzy ka\u017cdego dnia przegl\u0105daj\u0105 i tworz\u0105 setki, je\u015bli nie tysi\u0105ce plik\u00f3w. Cz\u0119\u015b\u0107 z nich jest w formie zeskanowanych dokument\u00f3w, przesy\u0142anych za pomoc\u0105 faksu, a cz\u0119\u015b\u0107 jest przesy\u0142ana i cyfrowo podpisywana wykorzystuj\u0105c po\u0142\u0105czenie z rozwi\u0105zaniem <em>Adobe Sign<\/em>.<\/p>\n\n\n\n<p>W niniejszym artykule skupimy si\u0119 na tym, w jaki spos\u00f3b wykorzysta\u0107 aplikacj\u0119 <em>Heroku <\/em>do wype\u0142niania wcze\u015bniej przygotowanych dokument\u00f3w w formacie .pdf danymi, wprowadzonymi przez u\u017cytkownika w Community Salesforce\u2019, na podstawie jednego z projekt\u00f3w realizowanych w Sii.<\/p>\n\n\n\n<p>Nie przedstawi\u0119 tutaj ca\u0142o\u015bciowego rozwi\u0105zania, nie b\u0119d\u0119 tak\u017ce umieszcza\u0142 fragment\u00f3w kodu, ale znajd\u0105 si\u0119 tutaj najwa\u017cniejsze kroki, wskazuj\u0105ce jak nawi\u0105za\u0107 po\u0142\u0105czenie z aplikacj\u0105 Heroku z poziomu platformy Salesforce oraz og\u00f3lne za\u0142o\u017cenia wykorzystywanej funkcjonalno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Co to jest Heroku?<\/strong><\/h2>\n\n\n\n<p>W projekcie u\u017cywamy aplikacji umieszczonej na Heroku w celu obr\u00f3bki dokument\u00f3w na r\u00f3\u017cne sposoby:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>uzupe\u0142niania dokument\u00f3w danymi,<\/li>\n\n\n\n<li>obracania stron do g\u00f3ry nogami,<\/li>\n\n\n\n<li>dzielenia stron na kilka mniejszych dokument\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Na potrzeby tego artyku\u0142u skupimy si\u0119 na wype\u0142nianiu dokument\u00f3w przekazanymi danymi, natomiast Heroku samo w sobie nie posiada takiej funkcjonalno\u015bci \u2013 trzeba wi\u0119c j\u0105 stworzy\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Na pocz\u0105tek jednak pytanie: czym w og\u00f3le jest Heroku?<\/strong><\/h3>\n\n\n\n<p>Platforma Salesforce \u0142\u0105czy w sobie wiele us\u0142ug i narz\u0119dzi w jedn\u0105 sp\u00f3jn\u0105 ca\u0142o\u015b\u0107. <strong>Platforma Heroku jest rozwi\u0105zaniem dzia\u0142aj\u0105cym w chmurze, kt\u00f3re funkcjonuje jako <em>Platform as a Service<\/em> i jest cz\u0119\u015bci\u0105 tego zestawu narz\u0119dzi udost\u0119pnionego u\u017cytkownikom.<\/strong> Jej celem jest umo\u017cliwienie u\u017cytkownikowi hostowania aplikacji webowej w us\u0142udze <em>serverless<\/em>. Platforma pozwala na \u0142atwe zarz\u0105dzanie i budowanie aplikacji, bez konieczno\u015bci martwienia si\u0119 o server i jego ustawienia.<\/p>\n\n\n\n<p>Stworzon\u0105 aplikacj\u0119 (w jednym z przyk\u0142adowych dost\u0119pnych j\u0119zyk\u00f3w: Java, Ruby, Python, PHP, JavaScript, oraz Go) mo\u017cna wdro\u017cy\u0107 za pomoc\u0105 powszechnie dost\u0119pnych narz\u0119dzi typu Git Hub. Heroku ma przejrzysty panel do monitorowania wydajno\u015bci aplikacji oraz podstawowe instrukcje na temat korzystania z dost\u0119pnych funkcjonalno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Heroku \u2013 jak zacz\u0105\u0107?<\/strong><\/h2>\n\n\n\n<p>Aby zacz\u0105\u0107 nasz\u0105 prac\u0119, potrzebujemy konta na platformie Heroku. Mo\u017cemy stworzy\u0107 aplikacj\u0119 na w\u0142asny u\u017cytek lub u\u017cy\u0107 konta do przechowywania wielu aplikacji w ramach ca\u0142ego projektu.<\/p>\n\n\n\n<p>Na potrzeby tego artyku\u0142u stworzymy now\u0105 aplikacj\u0119 o nazwie <em>pdftools<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/1-4.png\"><img decoding=\"async\" width=\"574\" height=\"349\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/1-4.png\" alt=\"Tworzenie nowej aplikacji w Heroku\" class=\"wp-image-21851\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/1-4.png 574w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/1-4-300x182.png 300w\" sizes=\"(max-width: 574px) 100vw, 574px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Tworzenie nowej aplikacji w Heroku<\/figcaption><\/figure>\n\n\n\n<p>Do nowo stworzonej aplikacji b\u0119dziemy potrzebowa\u0107 odpowiednich wtyczek, kt\u00f3re pomog\u0105 nam w realizacji projektu \u2013 bez nich nie b\u0119dziemy w stanie zaimplementowa\u0107 niekt\u00f3rych wymaganych rozwi\u0105za\u0144. Najwa\u017cniejsz\u0105 z nich b\u0119dzie <em>Heroku Postgres<\/em>, dzi\u0119ki kt\u00f3rej mo\u017cemy stworzy\u0107 baz\u0119 danych po stronie Heroku, w kt\u00f3rej b\u0119dziemy przechowywa\u0107 nasze dokumenty.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/2-4.png\"><img decoding=\"async\" width=\"780\" height=\"272\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/2-4.png\" alt=\"Heroku Postgres\" class=\"wp-image-21853\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/2-4.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/2-4-300x105.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/2-4-768x268.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 Heroku Postgres<\/figcaption><\/figure>\n\n\n\n<p>Dokumenty b\u0119d\u0105 tam przechowywane w \u201esurowej\u201d postaci. Mo\u017cna je nazwa\u0107 szablonem, na kt\u00f3ry b\u0119dziemy nanosi\u0107 nasze zmiany. B\u0119d\u0105 to podstawowe, puste, odpowiednio spreparowane pliki z <em>merge field<\/em>-ami (wi\u0119cej o tym w nast\u0119pnym rozdziale), a wersje wype\u0142nione przes\u0142anymi danymi b\u0119d\u0105 tam tylko tymczasowo \u2013 po uzupe\u0142nieniu i odes\u0142aniu b\u0119d\u0105 kasowane, \u017ceby nie przechowywa\u0107 danych wra\u017cliwych.<\/p>\n\n\n\n<p>Wiadomo jednak, \u017ce <strong>samo dodanie wtyczki nie wystarczy i trzeba si\u0119 po\u0142\u0105czy\u0107 z nowo powsta\u0142\u0105 baz\u0105, za pomoc\u0105 odpowiedniego narz\u0119dzia<\/strong>, np. aplikacji <em>pgAdmin<\/em>. Dzi\u0119ki pod\u0142\u0105czeniu si\u0119 do bazy danych, stworzonej przez nasz\u0105 wtyczk\u0119, b\u0119dziemy mogli doda\u0107 ca\u0142\u0105 struktur\u0119 naszej bazy z odpowiednimi tabelami.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>Opr\u00f3cz tego mamy dost\u0119p do wielu innych wtyczek, jak np. <em>CloudAMQP<\/em> i <em>New Relic APM<\/em>, kt\u00f3re mog\u0105 nam pom\u00f3c w monitorowaniu przep\u0142ywu danych, b\u0142\u0119d\u00f3w lub wizualizacji innych potrzebnych informacji. Oczywi\u015bcie sama aplikacja b\u0119dzie zawiera\u0107 wykresy prezentuj\u0105ce jej dzia\u0142anie, ale dodatkowe wtyczki mog\u0105 znacznie rozbudowa\u0107 t\u0119 funkcjonalno\u015b\u0107:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/3-3.png\"><img decoding=\"async\" width=\"780\" height=\"215\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/3-3.png\" alt=\"Wykresy przedstawiaj\u0105ce dzia\u0142anie aplikacji\" class=\"wp-image-21855\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/3-3.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/3-3-300x83.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/3-3-768x212.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Wykresy przedstawiaj\u0105ce dzia\u0142anie aplikacji<\/figcaption><\/figure>\n\n\n\n<p><strong>Najwa\u017cniejszym krokiem jest jednak napisanie samej aplikacji,<\/strong> w naszym przypadku przy u\u017cyciu j\u0119zyka Java, kt\u00f3ra b\u0119dzie obs\u0142ugiwa\u0107 zapytania przesy\u0142ane przez Salesforce. Nie jestem w stanie zamie\u015bci\u0107 tutaj kodu u\u017cywanego w naszej aplikacji, ale \u017ceby umie\u015bci\u0107 kod w aplikacji, mo\u017cemy post\u0119powa\u0107 zgodnie z krokami przedstawionymi w zak\u0142adce <em>Deploy.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/4-2.png\"><img decoding=\"async\" width=\"780\" height=\"387\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/4-2.png\" alt=\"Zak\u0142adka Deploy\" class=\"wp-image-21857\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/4-2.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/4-2-300x149.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/4-2-768x381.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Zak\u0142adka Deploy<\/figcaption><\/figure>\n\n\n\n<p>Og\u00f3lna zasada dzia\u0142ania naszej aplikacji polega na pobraniu mapy, zawieraj\u0105cej wszystkie warto\u015bci, kt\u00f3re chcemy przypisa\u0107 pod konkretne klucze p\u00f3l na wybranym dokumencie, a nast\u0119pnie zwr\u00f3cenie nam uzupe\u0142nionego pliku .pdf. W tym celu potrzebujemy jednak specjalnie przygotowanego dokumentu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Dokument<\/strong><\/h2>\n\n\n\n<p>Na pocz\u0105tek b\u0119dziemy potrzebowa\u0107 odpowiednio przygotowan\u0105 struktur\u0119 pliku .pdf. <strong>B\u0119dzie si\u0119 on sk\u0142ada\u0107 z opis\u00f3w oraz p\u00f3l, do kt\u00f3rych wstawiamy konkretne warto\u015bci <\/strong>(nic nas nie powstrzymuje od przygotowania skomplikowanych tabel lub formularzy).<\/p>\n\n\n\n<p>Na przyk\u0142ad, za\u0142\u00f3\u017cmy, \u017ce nasz dokument b\u0119dzie zawiera\u0107 dane u\u017cytkownika z naszego systemu. Musimy wi\u0119c przygotowa\u0107 odpowiednie pola, \u017ceby te informacje przechowa\u0107:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/5-2.png\"><img decoding=\"async\" width=\"780\" height=\"127\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/5-2.png\" alt=\"Pola do wype\u0142nienia przez u\u017cytkownika\" class=\"wp-image-21859\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/5-2.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/5-2-300x49.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/5-2-768x125.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 5 Pola do wype\u0142nienia przez u\u017cytkownika<\/figcaption><\/figure>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad pokazuje, \u017ce ka\u017cde z naszych p\u00f3l (<em>merge field<\/em>) jest przypisane do konkretnej warto\u015bci, a nazwa ka\u017cdego pola b\u0119dzie wykorzystana przez nas p\u00f3\u017aniej do przekazania po\u017c\u0105danych informacji. Tak jak wspomnia\u0142em wcze\u015bniej, do uzupe\u0142nienia tych p\u00f3l b\u0119dziemy musieli przes\u0142a\u0107 w zapytaniu odpowiednie warto\u015bci.<\/p>\n\n\n\n<p>W tym celu musimy przekaza\u0107 co najmniej dwie podstawowe informacje:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>nazw\u0119 pliku, kt\u00f3ry chcemy wype\u0142ni\u0107,<\/li>\n\n\n\n<li>map\u0119 danych, w postaci nazwy pola, oraz warto\u015bci, kt\u00f3r\u0105 chcemy do danego pola przypisa\u0107.<\/li>\n<\/ol>\n\n\n\n<p>Tak przygotowane zapytanie musi obs\u0142u\u017cy\u0107 Heroku, wybieraj\u0105c wskazany przez nas dokument z bazy danych oraz na podstawie mapy danych przypisa\u0107 odpowiednie warto\u015bci do p\u00f3l o odpowiednich nazwach<\/p>\n\n\n\n<p>Przyk\u0142ad zapytania w formacie JSON:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n{\n   &quot;documentName&quot;: &quot;UserDataDocument&quot;,\n   &quot;userData&quot;: &#x5B;        \n      {&quot;FirstName&quot;: &quot;TestFN&quot;},\n      {&quot;LastName&quot;: &quot;TestLN&quot;},\n      { &quot;Birthday&quot;: &quot;01\/01\/1999&quot;},\n      {&quot;Birthday&quot;: &quot;01\/01\/1999&quot;},\n      {&quot;GenderMale&quot;: &quot;true&quot;},\n      ...\n   ]\n}\t\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Podpi\u0119cie aplikacji Heroku pod Salesforce<\/strong><\/h2>\n\n\n\n<p>Pierwszym krokiem b\u0119dzie oczywi\u015bcie stworzenie klas i metod w systemie, dzi\u0119ki kt\u00f3rym b\u0119dziemy mogli wysy\u0142a\u0107 zapytania do naszej aplikacji po stronie Heroku. W tym przypadku potrzebujemy osobnych metod do wys\u0142ania nowego pliku .pdf obs\u0142ugiwanego dokumentu do bazy danych w <em>Heroku Postgres<\/em> oraz osobnych metod do przes\u0142ania danych do wype\u0142nienia przygotowanego dokumentu.<\/p>\n\n\n\n<p>Wszystkie adresy URL, pod kt\u00f3re b\u0119dziemy wysy\u0142a\u0107 zapytania przechowujemy w rekordzie typu <em>Metadata<\/em>, gdzie posiadamy osobn\u0105 konfiguracj\u0119 pod r\u00f3\u017cne \u015brodowiska (np. DEV, SQA, UAT):<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/6-1.png\"><img decoding=\"async\" width=\"780\" height=\"410\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/6-1.png\" alt=\"Metadata do przechowywania adres\u00f3w URL\" class=\"wp-image-21861\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/6-1.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/6-1-300x158.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/6-1-768x404.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 6 Metadata do przechowywania adres\u00f3w URL<\/figcaption><\/figure>\n\n\n\n<p>Mo\u017cna te\u017c, jak na przyk\u0142adzie powy\u017cej, skonfigurowa\u0107 dodatkow\u0105 aplikacj\u0119 zapasow\u0105, na kt\u00f3r\u0105 nast\u0105pi przekierowanie w przypadku wyst\u0105pienia konkretnej ilo\u015bci b\u0142\u0119d\u00f3w w danym czasie.<\/p>\n\n\n\n<p>Drugim krokiem b\u0119dzie wybranie odpowiedniego u\u017cytkownika na naszym \u015brodowisku, kt\u00f3ry pos\u0142u\u017cy do uwierzytelnienia naszego po\u0142\u0105czenia. W tym celu stworzymy nowego, kt\u00f3remu przydzielimy specjalny profil i uprawnienia, \u017ceby posiada\u0142 dost\u0119p tylko i wy\u0142\u0105cznie do danych wymaganych dla naszej funkcjonalno\u015bci.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1.png\"><img decoding=\"async\" width=\"780\" height=\"167\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1.png\" alt=\"Profil u\u017cytkownika\" class=\"wp-image-21863\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1-300x64.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/7-1-768x164.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 7 Profil u\u017cytkownika<\/figcaption><\/figure>\n\n\n\n<p>Nast\u0119pnym krokiem jest stworzenie nowej <em>Connected App<\/em>, kt\u00f3ra pos\u0142u\u017cy do po\u0142\u0105czenia si\u0119 z nasz\u0105 nowo stworzon\u0105 aplikacj\u0105 po stronie Heroku.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1.png\"><img decoding=\"async\" width=\"780\" height=\"392\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1.png\" alt=\"Nowa Connected App\" class=\"wp-image-21865\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1-300x151.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/8-1-768x386.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 8 Nowa Connected App<\/figcaption><\/figure>\n\n\n\n<p>Po stworzeniu <em>PDF Tools App<\/em> b\u0119dziemy mie\u0107 dost\u0119p do danych, kt\u00f3re wykorzystamy w konfiguracji po\u0142\u0105czenia z Heroku. W tym celu b\u0119dziemy potrzebowa\u0107 <em>Consumer Key and Secret<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9.png\"><img decoding=\"async\" width=\"780\" height=\"293\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9.png\" alt=\"Consumer Key and Secret\" class=\"wp-image-21867\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9.png 780w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-300x113.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/9-768x288.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 9 Consumer Key and Secret<\/figcaption><\/figure>\n\n\n\n<p>U\u017cyjemy informacji przechwyconych tutaj i wcze\u015bniej utworzonego u\u017cytkownika, aby utworzy\u0107 plik po stronie aplikacji Heroku, kt\u00f3ry pos\u0142u\u017cy do uwierzytelnienia naszego po\u0142\u0105czenia. Poni\u017cej umieszczam przyk\u0142ad wpisu z takiego pliku, zawieraj\u0105cy wszystkie potrzebne informacje dla jednego ze \u015brodowisk:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[ENV_NAME].sfUser=pdfherokuappuser@sii.pl.[ENV_NAME]\n[ENV_NAME].sfPassword=[ENCRYPTED_PASSWORD_TOKEN]\n[ENV_NAME].sfServerurl=https:\/\/test.salesforce.com\n[ENV_NAME].authEndpoint=https:\/\/test.salesforce.com\/services\/Soap\/u\/35.0\n\n[ENV_NAME].oauthUser=pdfherokuappuser@sii.pl.[ENV_NAME]\n[ENV_NAME].oauthPassword=[ENCRYPTED_PASSWORD_TOKEN]\n[ENV_NAME].oauthEndpoint=https:\/\/test.salesforce.com\/services\/oauth2\/token\n[ENV_NAME].oauth_client_id=[CONSUMER_KEY]\n[ENV_NAME].oauth_client_secret=[ENCRYPTED_CONSUMER_SECRET]\n[ENV_NAME].sessionTtl=5\n[ENV_NAME].domainPart=[ENV_NAME]\n<\/pre>\n\n\n\n<p>Tak spreparowany plik konfiguracyjny, zawieraj\u0105cy informacje o wszystkich u\u017cytkownikach z r\u00f3\u017cnych \u015brodowisk korzystaj\u0105cych z danej aplikacji, umieszczamy w kodzie aplikacji Heroku, gdzie b\u0119dzie u\u017cywany do sprawdzania po\u0142\u0105czenia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Realizuj\u0105c wskazane powy\u017cej kroki, mo\u017cna stworzy\u0107 podpi\u0119t\u0105 pod \u015brodowisko Salesforce aplikacj\u0119 Heroku, kt\u00f3ra ma na celu uzupe\u0142nienie wybranego przez nas dokumentu dostarczonymi warto\u015bciami.<\/p>\n\n\n\n<p>Podstawowe kroki i opisy tworzenia takich aplikacji mo\u017cna te\u017c znale\u017a\u0107 na platformie Trailhead, zawieraj\u0105cej wiele materia\u0142\u00f3w treningowych, wprowadzaj\u0105cych w dzia\u0142anie narz\u0119dzia Salesforce.<\/p>\n\n\n\n<p>Mam nadziej\u0119, \u017ce powy\u017cszy artyku\u0142 przys\u0142u\u017cy si\u0119 chocia\u017c w najmniejszym stopniu do stworzenia podobnego rozwi\u0105zania.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>A je\u015bli interesuj\u0105 Ci\u0119 rozwi\u0105zania Salesforce, zerknij koniecznie r\u00f3wnie\u017c <a href=\"https:\/\/sii.pl\/blog\/wyszukiwarka\/salesforce\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">do innych artyku\u0142\u00f3w naszych autor\u00f3w.<\/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;21850&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;4&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.7&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.7\\\/5 ( votes: 4)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wype\u0142nianie dokument\u00f3w z pomoc\u0105 aplikacji Heroku&quot;,&quot;width&quot;:&quot;130.8&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: 130.8px;\">\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.7\/5 ( votes: 4)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Obs\u0142uga dokument\u00f3w jest jedn\u0105 z podstawowych funkcji wykorzystywanych przez u\u017cytkownik\u00f3w, kt\u00f3rzy ka\u017cdego dnia przegl\u0105daj\u0105 i tworz\u0105 setki, je\u015bli nie tysi\u0105ce &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wypelnianie-dokumentow-z-pomoca-aplikacji-heroku\/\">Continued<\/a><\/p>\n","protected":false},"author":521,"featured_media":21870,"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":[1707,1546,365],"class_list":["post-21850","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-heroku","tag-przeglad-narzedzi","tag-salesforce"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/05\/Wypelnianie-dokumentow-z-pomoca-aplikacji-Heroku.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/21850"}],"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\/521"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=21850"}],"version-history":[{"count":1,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/21850\/revisions"}],"predecessor-version":[{"id":21869,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/21850\/revisions\/21869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/21870"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=21850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=21850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=21850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}