SAP FSM Lifehack: Využitie custom objektu na manažovanie credentials
FSM má veľa skvelých funkcionalít, no zároveň aj zopár painpointov, predovšetkým v admin časti, ktoré ostávajú nepovšimnuté.
Preto je na každom konzultačnom tíme, aby zapojil svoju fantáziu pri ich obchádzaní. Jednou z nich je aj skladovanie a udržiavanie technických overovacích dát, tzv. credentials. Ak chce spoločnosť naplno využiť potenciál FSM, nevyhne sa nastavovaniu biznis pravidiel, ktoré sú kostrou automatizácie systému. Pri jednoduchších rozšíreniach si implementačný konzultant vystačí s akciami typu Create / Update / Delete Object, Send Email, Push notifications a pod. No ak už prichádza k zložitejším požiadavkám, keď napr. biznis pravidlo svojim updatom objektu musí vyvolať ďalšie biznis pravidlo, je potrebné updatovať viaceré záznamy objektu, poslať dáta do iného systému, konzultant musí siahnuť aj po akciách typu Webhook a FSM Webhook. Podstatou tejto akcie je prevolanie API, ktorá už ale musí obsahovať určité bezpečnostné prvky. Zmyslom tohto blogu je práve inšpirovať vás na ich jednoduchšie manažovanie.
Ako príklad uvediem využitie Client ID a Client Secret, ktoré je potrebné zadať do akcie FSM Webhook. Vygenerovanie oboch údajov je možné v admin časti Clients (na úrovni Account). Systém vygeneruje oba údaje, pričom už prvá zásadná nepríjemnosť vzniká tu. Ku Client Id je možné sa dostať aj dodatočne, no pokiaľ si Client Secret neuložíte pri jeho vygenerovaní, už sa k nemu nedostanete. O to nepríjemnejšie je, ak na nastavení systému pracuje viacero konzultantov, ktorí tento údaj potrebujú poznať.
Ďalším veľkým mínusom je, že keď prenášate vytvorené biznis pravidlo z developerského systému do testovacieho, prípadne produkčného, je potrebné Client Secret opätovne zadať do FSM Webhook akcie. Prax nás naučila, že veľa manuálnych krokov zvyšuje šancu na nevynútenú chybu, preto sme si s kolegami vymysleli workaround.
Vytvorenie custom objektu
Vytvorili sme si nový custom object Credentials na uchovávanie prístupových dát s poľami: Meno, Popis, Užívateľ, Heslo, Kľúč.
Poznámka: Pole Kľúč nie je pre potreby Client ID a Client Secret potrebné. My toto pole používame na autorizačné tokeny do externých systémov ako je ERP, Google Forms a pod.
Získané Client ID a Client Secret následne vytvoríme ako záznam nového objektu s unikátnym názvom.
Takýmto spôsobom uložené credentials uľahčujú adminom spoluprácu a zároveň aj manažovanie bezpečnosti, nakoľko je možné pravidelne generovať nové ID + Secret a jednoducho zmenou záznamu tohto objektu obnoviť bezpečnosť systému bez toho, aby ste museli prácne hľadať všetky biznis pravidlá, ktoré obsahujú FSM Webhook a aktualizovať v nich natvrdo vložené credentials.
Select údajov vo Variables biznis pravidla
Namiesto toho, aby sme vkladali do biznis pravidla natvrdo hodnotu oboch údajov, vo Variables (Premenné) si vytvoríme SELECT nad našim novým objektom. Je možné si vytvoriť variable typu Value zvlášť pre Client ID a Client Secret, my sme sa však rozhodli ísť formou 1 variable typu Array nakoľko využívame biznis pravidlá, kde doťahujeme až 4 rôzne záznamy objektu Credentials.
Vzor selectu pre Client ID a Client Secret:
SELECT a.udf.z_f_udo_credentials_user AS clientId, a.udf.z_f_udo_credentials_password AS clientSecret FROM UdoValue a WHERE a.udf.z_f_udo_credentials_name = ‚Client ID and Client Secret for API calls‘
V prípade potreby dotiahnutia viacerých záznamov credentials, použijeme JOIN na rovnaký objekt UdoValue, pričom objekty budeme párovať podľa rovnakého UdoValue.meta. Platí pravidlo, čo záznam to nový JOIN:
SELECT a.udf.z_f_udo_credentials_user AS ClientID, a.udf.z_f_udo_credentials_password AS ClientSecret, b.udf.z_f_udo_credentials_key AS GoogleForms FROM UdoValue a JOIN UdoValue b ON a.meta = b.meta
WHERE a.udf.z_f_udo_credentials_name = ‚Client ID and Client Secret for API calls‘ AND b.udf.z_f_udo_credentials_name = ‚GOOGLE_FORMS‘
Pridanie údajov do akcie
Posledným krokom je vytvorenie akcie typu FSM Webhook, kde do polí Client ID a Client Secret dotiahneme hodnoty zo selectu. V našom prípade ide o: ${creds[0].clientId} a ${creds[0].clientSecret}
Tip: Pole Client Secret neukazuje napísanú hodnotu, preto odporúčam napísať si daný vzorec pomimo a následne ho do daného poľa len nakopírovať.
Filip Žarnovický, CX Consultant