Esemény feldolgozás

Profil építés esemény feldolgozással

2022.09.15 — Posted by Webb & Flow


Az események feldolgozásához meg kell adni a rendszernek, hogy melyik esemény hatására pontosan mit csináljon. Minden esemény célja az, hogy létrehozzon, vagy módosítson egy profilt. Egy adott esemény mindig azt a profilt érinti, aminek az email címe meg van adva az esemény email mezejében.

Ezt a Config / Tools / Script menü alatt tehetjük meg.

Script szintaxis

A script-ben fel tudjuk sorolni az összes eseményt, és azt, hogy azok a hatására mit csináljon.

A script több script elem halmaza. Egy script elem a következőképp néz ki:

ON {eventName}
USE {entityName}
DO
{parancs1} [{parancs2} …]
IF
{feltetel1} [AND {feltetel2} …]
;
  • eventName
    • az adott esemény neve, aminek a hatására ezt a konkrét script elemet le kell futtatni
  • entityName
    • melyik entitás alá tartozik a profil, amit az esemény érint
  • parancsN
    • a módosító parancsok listája
  • feltetel1, feltetel2, …
    • opcionális feltételek, amiknek teljesülnie kell ahhoz, hogy a script elem lefusson

Változók

A parancsoknál és a feltételeknél hivatkozhatunk különböző változókra. Ezek a változók vagy az adott eseményből, vagy az adott profilból jönnek.

A rendszer nem tesz különbséget a változók neveiben a kis és nagy betűk között.

Esemény változók

EVENT.EMAIL

Az esemény email paraméterét adja vissza.

EVENT.NAME

Az esemény nevét adja vissza.

EVENT.DATE

Az esemény dátumát adja vissza datetime értékként.

Ha az esemény küldéskor meg volt adva konkrét dátum, akkor azt, különben az esemény beérkezési idejét.

EVENT.PARAMS.{X}

Az esemény paraméterei közül az {X} paraméter értékét adja vissza. Ha ez az érték struktúrált, akkor az egész értéket adja vissza, nem lehet a struktúrán belül egy konkrét értéket megcímezni.

Ha az adott paramétert valamilyen dátum vagy idő formátumban szeretnénk használni (lásd később), akkor az értéket megpróbálja a rendszer datetime értékként kezelni. Ehhez a következő formátumok közül az egyikben kell szerepelnie az értéknek:

  • W3C (Y-m-dTH:i:sP)
  • U
    • kizárólag 2000.01.01 utáni dátumok esetén használható
  • Ymd
    • az idő rész 00:00:00 lesz
  • Y-m-d
    • az idő rész 00:00:00 lesz
  • His
    • csak az idő rész lesz használható
  • H:i:s
    • csak az idő rész lesz használható

Amennyiben bármilyen más formátumban érkezik, és dátumként próbáljuk használni, null értéket kapunk.

Profil változók

A profilból elérhető változók listájához lásd a Profilokból származó változók dokumentációt.

Az ott felsorolt változók nevei elejére mindenképpen be kell illeszteni a PROFILE. prefixet, például: PROFILE.PROPERTIES.{X}.

Parancsok

A parancsok határozzák meg, hogy pontosan hogyan módosul az adott profil.

Minden parancsnak egyedi szintaxisa van.

A script elemben az egyes parancsok vesszővel vannak egymástól elválasztva.

SET

Beállít egy property mezőt a profilon.

SET {propertyName} = "{konstans}"
SET {propertyName} = {valtozo}
SET {propertyName} = {valtozo} AS {formatum}
  • propertyName
    • annak a property mezőnek a neve, vagy az azonosítója, amit be kell állítani
  • konstans
    • az új konstans érték, amit be kell állítani
    • ha szám mezőt állítunk, akkor is "" közé kell tenni az értéket
  • valtozo
    • az új változó érték, amit be kell állítani
    • ez lehet:
      • eseményből származó változó
      • profilból származó változó
  • formatum

Az új értéknél figyelni kell, hogy csak az adott property típusának megfelelő értéket állítsunk be:

  • nem struktúrált string típusú property bármilyen értéket kaphat
  • minden más típus csak a vele azonos típusú értékeket kaphatják

ADD

Hozzáad egy flag-et a profilhoz, ha most épp nincs nála.

ADD {flagName}
  • flagName
    • annak a flag-nek a neve, vagy az azonosítója, amit hozzá kell adni

REMOVE

Elvesz egy flag-et a profiltól, ha most épp nála van.

REMOVE {flagName}
  • flagName
    • annak a flag-nek a neve, vagy az azonosítója, amit el kell venni

INC

Növeli egy coin mezőnek az értékét. Ha a coin mező még nem lett módosítva, azaz az értéke null, akkor azt nullaként kezeli.

INC {coinName}
INC {coinName} BY "{konstans}"
INC {coinName} BY {valtozo}
  • coinName
    • annak a coin mezőnek a neve, vagy az azonosítója, amit módosítani kell
  • konstans
    • a konstans érték, amivel a mezőt növelni kell
    • "" közé kell tenni az értéket
  • valtozo
    • a változó érték, amivel a mezőt növelni kell
    • ez lehet:
      • eseményből származó változó
        • csak az integer-ként kezelhető, paraméter értékek használhatók
      • profilból származó változó
        • csak a coin, illetve az integer típusú property mezők értékei használhatók

Ha nem adjuk meg, hogy mennyivel változzon a mező, akkor 1-el fog.

A módosítás értéke lehet negatív, ebben az esetben csökkenni fog a mező értéke.

DEC

Csökkenti egy coin mezőnek az értékét. Ha a coin mező még nem lett módosítva, azaz az értéke null, akkor azt nullaként kezeli.

DEC {coinName}
DEC {coinName} BY "{konstans}"
DEC {coinName} BY {valtozo}
  • coinName
    • annak a coin mezőnek a neve, vagy az azonosítója, amit módosítani kell
  • konstans
    • a konstans érték, amivel a mezőt csökkenteni kell
    • "" közé kell tenni az értéket
  • valtozo
    • a változó érték, amivel a mezőt növelni kell
    • ez lehet:
      • eseményből származó változó
        • csak az integer-ként kezelhető, paraméter értékek használhatók
      • profilból származó változó
        • csak a coin, illetve az integer típusú property mezők értékei használhatók

Ha nem adjuk meg, hogy mennyivel változzon a mező, akkor 1-el fog.

A módosítás értéke lehet negatív, ebben az esetben növekedni fog a mező értéke.

Feltételek

A feltételek megadása nem kötelező. Amennyiben nincs megadva, akkor a kezdő IF kulcsszó is elhagyható.

A feltételekkel meghatározhatjuk, hogy milyen esetben lehet a megadott parancsokat lefuttatni. Az összes megadott feltételnek teljesülnie kell ahhoz, hogy a parancsok lefussanak.

A feltételek megadásának módjához lásd a Feltételek megadása dokumentációt.

Megjegyzések

A script elemekbe rakhatunk megjegyzéseket, a következő szintaxissal:

ON … #komment
DO …
;
ON …
#komment
DO …
;

Minden komment a # kezdő karaktertől a sor végéig tart.

Amennyiben a kommenteket az ON kezdő kulcsszó és a ; záró karakter közé rakjuk, akkor a Visual Editor felismeri azokat, és egy külön mezőben megjeleníti. Figyelni kell azonban, hogy ha egy script elemen belül több komment is van, akkor azokat a Visual Editor össze fogja fűzni.

Különböző parancsok futtatása ugyanannak az eseménynek a hatására

Amennyiben ugyanannak az eseménynek a hatására különböző parancsokat akarunk futtatni attól függően, hogy épp milyen értékek jöttek az eseményben, vagy épp mi van beállítva a profilban, fel kell venni annyiszor az eseményt egy-egy script elemként, ahány különböző eset van, és mindegyikben meg kell adni

  • azokat a feltételeket, amik teljesülésekor kell futtatni a parancsokat
  • azokat a parancsokat, amiket futtatni kell

Például ha egy adott esemény hatására egy flag-et ki-be kell kapcsolni (toggle), akkor ahhoz két script elemet kell felvenni:

ON event
USE ENTITY1
DO
ADD FLAG1
IF
FLAG1 IS NOT ADDED
;
ON event
USE ENTITY1
DO
REMOVE FLAG1
IF
FLAG1 IS ADDED
;

Több entitás alá tartozó profil módosítása ugyanannak az eseménynek a hatására

Amennyiben több entitást kezelünk, és egy esemény hatására több különböző entitásban, ugyanazzal az email címmel szereplő profilt is módosítani szeretnénk, mindegyik entitáshoz fel kell venni a külön script elemet, az adott entitásnak megfelelő parancsokkal és esetleges feltételekkel.

Például ha két különböző entitásom van, és az egyikben lévő profilnak egy flag-et akarok adni, a másiknál pedig egy coin-t növel, akkor a következő script-et kell alkalmazni:

ON event
USE ENTITY1
DO
ADD FLAG1
;
ON event
USE ENTITY2
DO
INC COIN1
;