Change Data Capture Events

Change Data Capture Eventy Salesforce představil jako pilot již v releasu Winter 18 a rozšířil tak Streaming API o další typ eventy (těmi zbylými jsou PushTopic Event, Generic Event a Platform Event).

Co to vlastně Streaming API je? Jedná se o tzv. push technologii, publish/subscribe model. Jednoduše to znamená, že na jedné straně je vysílač, který vysílá eventy (server), k jejichž odebírání se mohou hlásit posluchači (klienti). Posluchačem těchto event může být jiný systém, a lze tak zajistit near-real time synchronizaci dat. Posluchačem může být také prohlížeč uživatele stejné Salesforce instance. A na tento způsob využití se dnes podíváme.

Change Data Capture Eventy fungují velmi jednoduše. O jejich publikování se Salesforce stará sám. Vy pouze musíte streamování povolit pro požadované Objekty. Vybrat si jich můžete až pět. Od této chvíle se při vytvoření, editaci nebo smazání záznamu daného objektu automaticky publikuje eventa.

Zbývá druhá část, a sice zajistit odběr těchto event pro uživatele SF. Zde už je to trochu více srandy a neobejdeme se bez práce vývojáře. Naštěstí Salesforce, taktéž ve W18, přišel s novou aura (a později i LWC) komponentou lightning:empApi. Té vy jen řeknete, ke kterému kanálu se má přihlásit (každý objekt má svůj kanál), a implementujete logiku zpracování těchto event a následný způsob notifikace.

Takže na jedné straně máme vysílač – Salesforce, který nyní automaticky streamuje veškeré změny na vybraných objektech, a na druhé straně máme připravené poslouchátko. To můžeme umístit třeba do utility baru, nebo na layout.

K čemu je to vlastně dobré? Využití je celá řada. Pojďme se podívat, jak a proč jsme Change Data Capture Eventy využili v Zonky, kde desítky uživatelů odbavují veškerou komunikaci a zpracovávají žádosti o půjčky.

Notifikace o novém emailu

Problémy, které jsme se s Change Data Capture Eventami rozhodli vyřešit, byly tři:

  1. Uživatel pracuje s Casem (nebo ho má otevřený v tabu a věnuje se jinému) a najednou se změní hodnota v nějakém poli. Uživatel se o této nové hodnotě nedozví, dokud stránku neobnoví. Toto je problém všude tam, kde na jednom záznamu může pracovat více lidí najednou, nebo dochází k updatu dat z externího systému, nebo třeba změnou na provázaném záznamu a následnou automatizací, scheduled akcí, atd.
  2. Uživatel má přiřazený Case a píše email klientovi, s využitím emailových šablon s podpisem. Co se stane, když je v průběhu psaní emailu Case přesunut do fronty (např. nějakým nezávislým procesem)? Email nebude podepsaný jménem uživatele, nýbrž jménem fronty.
  3. U emailů ještě zůstaneme. Je to k nevíře, ale když vám přijde odpověď na Case, který máte otevřený, uživatel není upozorněn a o emailu se dozví opět až po obnovení stránky.

Rozhodli jsme se tedy využít Change Data Capture Eventy a poslouchací okénko jsme přidali na layout Casu, kde, neviděno, čeká, jestli nedojde ke změně na záznamu. Samozřejmě je potřeba změny nějak vyfiltrovat a zpracovat (například asi nechceme uživatele notifikovat o změně záznamu, kterou právě provedl on sám) a rozmyslet, jakým způsobem uživatele notifikovat. My jsme například rozlišili upozornění na nový email a změny ostatní. A toto je výsledek:

Jak vypadá komponenta na stránce

A jak dlouho zabere samotná implementace? Úplný základ budete mít hotový za odpoledne. Níže pro představu sdílím, jak může vypadat kostra poslouchátka psaná v aura komponentě. V závislosti na složitosti logiky a požadavcích na vzhled počítejte s jednotkami dnů. Pokud využití Change Data Capture Event zvažujete, nepodceňte analytickou fázi. Seznamte se s limity (např. počet doručených Event/24 hodin) a omezeními (View All permission pro daný objekt) a zvažte, zdali je toto řešení pro vás tím nejvhodnějším.

Aura komponenta

Controller
Handler
Eliška Bušáková

Eliška Bušáková je Salesforce developerka a konzultantka ve společnosti Enehano Solutions. Dámy ji mohou znát také jako lektorku kurzů zaměřených na Salesforce administraci a vývoj, které od loňského roku Enehano zajišťuje pro skupinu Women in Tech.   

Leave a Reply