Základní fungování Automatizace (workflow)
Workflow, po česku také označené jako automatizace, slouží pro
zautomatizování činností prováděných v Mango. Umožňuje typicky na základě nějaké akce uživatele provádět další akce automatizovaně a ulehčovat mu tak jeho činnost. Celá automatizace
se řídí pravidly, která je možné si uživatelsky definovat, nicméně pro opravdu komplexní využití workflow se vytváření pravidel složitostí blíží k samotnému programování.
Každé pravidlo workflow se skládá ze
3 základních entit, které bývají dále specifikovány prostřednictvím parametrů.
Objekt - udává místo vzniku události, jedná se například proces, zákazník, úkol, zařízení, objednávka a nebo třeba časovač.
Událost - Každý objekt má definovánu sadu možných událostí, které s ním
mohou nastat. Například Proces má definovány události vytvoření, editace, změna stavu, dokončení, změna parametru, vypršení sla atd.
Akce - udává akci, která se má
automaticky provést. Může se jednat například o vytvoření úkolu, vygenerování smlouvy, odeslání e-mailu, zapojení služby, nastavení parametru procesu atd.
Obecně každé pravidlo říká, že pokud se stane nad daným
Objektem daná
Událost, má systém automaticky provést definovanou
Akci.
Na jednu událost nad objektem je možné napojit
neomezené množství akcí, je možné u nich definovat pořadí a v omezené míře si mezi nimi předávat nějaké hodnoty.
Přehled dialogu editace pravidla workflow
Podmínky Události
Pokud by pravidlo workflow neobsahovalo žádné podmínky, pak by se spouštělo
při každé události, která s objektem nastane. Například pravidlo s událostí na změnu stavu procesu by se spouštělo při jakékoliv změně stavu procesu v lokaci. Typicky je ale potřeba reagovat jen na změny stavu určitého typu procesu a například jen u jednoho konkrétního přechodu - k tomu slouží podmínky události.
Podmínky jsou vždy definovány jako
vlastnost objektu a hodnota, kdy podmínka je typicky splněna pokud se tyto dva údaje
rovnají. Například podmínka na typ procesu a hodnota 3 bude splněna pokud bude ID typu procesu rovno 3.
Jednotlivé podmínky
jsou definovány v databázi, a to vždy
vázané na objekt (nikoliv na událost, všechny události daného objektu mají tedy stejné podmínky.
Toto je omezení, například při
změně stavu procesu je potřeba podmiňovat zdrojový nebo cílový stav, naopak třeba při vytvoření procesu tato podmínka nemá smysl.)
Definice každé z nich obsahuje název vlastnosti procesu, popis podmínky, typ (číslo, řetězec, seznam...) a definiční obor hodnoty. Jednotlivé podmínky nemají mezi sebou žádné závislosti, pokud je například definována podmínka na typ procesu, nenabídnou se v podmínce na stav procesu pouze ty definované k typu, ale systém zobrazí všechny.
Podmínky se vztahují vždy ke
statické vlastnosti objektu v době vyvolání workflow, nelze je vztahovat k události samotné. Typickým příkladem je podmínění konkrétního přechodu při změně stavu procesu – k tomu slouží některé zvláštní statické vlastnosti procesu, které i takové podmínky umožňují. Například u procesu je definována podmínka na poslední provedený přechod procesu, kdy se předpokládá, že ten poslední je právě ten, který akci vyvolal.
Parametry akce
Každá akce musí mít naprosto přirozeně své vstupní parametry. Pokud je například potřeba vytvořit úkol, musí být definován zdroj, termín, textový popis úkolu atd. Stejně tak pokud je potřeba odeslat e-mail, musí být dáno komu, s jakým předmětem a textem.
Definice každého parametru je uložena
v databázi, kromě názvu a popisu nese také samotný typ (číslo, řetězec, seznam...), definiční obor, povinnost nebo indexovatelnost (indexovaný parametr může být zadán vícekrát). Opět
nejsou řešeny závislosti mezi parametry, například kdy zadáním jednoho ztrácí smysl druhý, případně zadáním jednoho se změní definiční obor nebo povinnost druhého.
Parametr akce je možné zadat prostřednictvním 4 způsobů:
- Hodnotou - zadáno jako konstanta, která musí pouze vyhovovat definičnímu oboru. Například při odesílání e-mailu mohu zadat fixní e-mailovou adresu, kam se má upozornění posílat. Pokud je definiční obor parametru dán jako výběr (select), pak vybírám ze seznamu.
- Proměnnou z události Každá událost nad objektem vygeneruje sadu proměnných, které je možné následně používat jako vstupní parametry akce. Například při potřebě při změně procesu poslat e-mailové upozornění na e-mail uložený v parametru procesu je možné se na něj takto jednoduše odkázat.
- Uživatelská proměnná Funguje stejně jako proměnná z události, jen se používá ve složitějších případech, kdy není proměnná dostupná v seznamu. Umožňuje použít libovolnou proměnnou uvozenou znakem '%', hlavní použití je doposud při přístupu k indexovaným parametrům zápisem %PROMENNA[%INDEX]. Vyžaduje dobrou interní znalost workflow.
- Výraz Umožňuje zadat vstup akce jako výraz, který bude před předáním parametru vyhodnocen. Používat lze jak matematické operace (5 + 5, 2 * 5), tak i operace s řetězci REPLACE('AADDCC', 'DD', 'BB') či dokonce volat speciální funkce. Vyhodnocení se provádí v MySQL stejným způsobem, jakým by jej provedl uživatel zadáním SQL příkazu SELECT <výraz>;
Z toho plyne, že je možné používat všechny funkce dostupné v MySQL, například pro získání největšího čísla z dvojice lze použít GREATEST(1,5). Zároveň pokud to implementace vyžaduje a je potřeba vytvořit hodně specifický vstup parametru, může Mango Vývoj vytvořit novou SQL funkci a tu pak ve workflow jednoduše volat jako funkce(parametry).
Některé vestavěné funkce MySQL jsou zakázány, konkrétně se jedná o sleep(), benchmark(), get_lock(), je to z důvodu ochrany databáze před nesmyslným vytížením serveru.
Ve výrazech je možné používat i proměnné z objektu (viz sekce Promenné události), je nutné znát jejich interní název a zadávat je s procentem na začátku.
Chování při chybě
Akce workflow se v případě spuštění stává nedílnou součástí události, která jej vyvolala, a v případě chyby akce workflow dojde k
vrácení všech změn případných předchozích úspěšných workflow akcí i události samotné (vše běží v databázové transakci a dojde k jejímu rollbacku). Workflow také používá
standardní chybový mechanizmus, takže vypíše ve frontend uživateli konkrétní chybovou hlášku.