Általános működési leírás

Adatbázis leírás

Rendszer architektúra

Fejlesztői kézikönyv 6.2

XML Referencia 6.2

Effector Studio 3.2 összefoglaló

Effector Studio 3.2 kézikönyv

Fejlesztői kézikönyv 5.5

XML referencia 5.5

Effector Studio 2.0 kézikönyv

Effector Studio 2.0 összefoglaló

Szabályok 6.1

A szabályok (RuleValueType-ok) valójában egy-egy változó kifejezés kiértékelésére alkotott mini algoritmusoknak tekinthetőek. Gyakorta egy vagy több létező objektum adataiból a megfelelő módon számított értékekre van szükségünk, ezeket a számításokat a szabályok megadásával definiálhatjuk.

Gyakori, hogy például az aktuális felhasználó csoportjának függvényében kell egy-egy dolgot megjeleníteni, vagy éppen elrejteni a rendszerben, esetleg a munkafolyamatok során kell ellenőrizni az adatok kitöltöttségét, vagy éppen el kell döntenünk, hogy engedélyezett-e módosítani egy adatot, adathalmazt.

Ezeket a feladatokat egy-egy szabály definiálásával oldhatjuk meg. A szabályok leggyakrabban egy true vagy false értékkel térnek vissza kiértékelésük során, de lehetőség van más adattípusú érték kiszámítására is az alkalmazási helytől függően. Később részletesen tárgyaljuk a szabályok paraméterezését.

Szabályok

A szabályok feldolgozásának általános folyamata:

  • 1: Adott szabály(ok) eredményének lekérése a szabály kiértékelőtől.
  • 2,3: Szabály definíció lekérése
  • 4,5: A definíció alapján a rendelkezésre álló adatok segítségével a szabály kiértékelése
  • 6: Eredmény szolgáltatása a kiértékelést kérő feldolgozó-egységnek.

Elhelyezkedése a rendszerben

A szabályok mintegy átfogják a rendszer működését, külön definíciós állományuk így nem is létezik, a felhasználás helyén kell őket definiálni. Elhelyezkedését kapcsolati ábra segítségével szemléltethetjük a legjobban.

Szabályok a rendszerben

Kapcsolatain túl a szabályokat csoportosíthatjuk felhasználási módjuk szerint is. A csoportokat az adott felhasználáshoz tartozó node nevével adjuk meg. Ezek a következőek:

  • Visible: Láthatósági szabály. Kiértékelésével eldönthető, hogy a részegység látható vagy elrejtett állapotba kerül-e. Visszatérési értéke kötelezően boolean típusú. true érték esetén az adott részegység látható lesz.
  • Readonly: Olvashatósági szabály. Meghatározza, hogy az adott adat írható-e vagy csak olvasható. Visszatérési értéke kötelezően boolean típusú. true érték esetén csak olvasható az adat.
  • Required: Kötelezőségi szabály. Segítségével beállítható, hogy az adatot kötelező-e kitölteni, vagy kitöltése opcionális. Visszatérési értéke kötelezően boolean típusú. true érték esetén kötelezően kitöltendő az adat.
  • WorkflowRequired: Folyamathoz kapcsolt kötelezőségi szabály. Működése megegyezik a Required szabállyal, azzal a különbséggel, hogy kiértékelése az adott folyamat lépés készre állítása (azaz a Done mező értékének true-ra állítása) előtt történik. Fontos megjegyezni, hogy ebben az esetben a szerkesztő képernyőn szerepelnie kell a Task mezőnek is (akár láthatatlanná téve)!
  • DefaultValue: Alapértelmezett érték szabály. Visszatérési értéke az adat típusának megfelelő. A folyamatok és üzleti objektumok létrehozásakor értékelődik ki. Ezzel kell beállítani a táblázat alapú megjelenítők (és diagram) esetén a PSearch szűrőmező alapértelmezett értékét.
  • SessionValue: Beviteli mezőn található "fej" ikon (saját érték) kiértékeléséhez használt szabály. Ez a szabály az adott munkamenetre vonatkozó alapértelmezett adatokat szolgáltathatja. Visszatérési értéke hasonlóan a DefaultValue szabályhoz az adat típusának megfelelő.
  • ComputedValue: Számított mező kiértékeléséhez használt szabály. Visszatérési értéke az adat típusának megfelelő. Kiértékelése akkor történik, mikor a kontroll értéke, amely a számítást triggereli változik. (Ha a "B" mezőn van egy ComputedValue szabály, amely hivatkozik az "A" mező értékére, akkor az "A" mező változásakor lefut a "B" mezőn definiált ComputedValue szabály.)
  • ComputedValueList: Csak lenyíló lista esetén értelmezett szabály, amely lényegében a kiértékelt szövegre cseréli a lenyíló lista értékkészletét leíró fájlban (ComboDefinition) levő SQL mondatban az 1=1 szöveget.
  • PlaceHolder: Az üres mezőbe írt helykitöltő szöveget lehet megadni vele.
  • ValidateRule: A beviteli mező adat tartalmának ellenőrzésére szolgáló szabály. Ennek a szabálynak alapvetően csak Form típusú megjelenítők esetén van létjogosultsága. Ha a szabály visszatérési típusa boolean, akkor a message attribútumban megadott üzenet jelenik meg akkor, ha invalid(false) az érték. Ha a szabály visszatérési értéke string, akkor azt az üzenetet jeleníti meg az Effector, amit a szabály visszaad. Ebben az esetben üres szöveg azt jelenti, hogy az érték valid.
  • Condition: Folyamatok esetében az egyik állapotból a másikba léptetésnél használható szabály, amely segítségével az egyes lépések feltételhez köthetők. Illetve még Form-on használható fel, de ekkor egy Question node fogja össze a "Message" szabállyal. Ebben az esetben a "Condition" mondja meg, hogy az adott üzenet mikor jelenjen meg.
  • Tooltip: Egy üzenet megjelenítésére ad lehetőséget a rendszerben. Akkor aktiválódik, mikor a felhasználó az egeret fölé viszi.
  • Warning: Egy üzenet megjelenítésére ad lehetőséget a rendszerben. Akkor aktiválódik, mikor a felhasználó az egeret fölé viszi. Más az ikonja, mint a Tooltip-nek.

Példa: Alapértelmezett érték (DefaultValue) számításának módja:

<DefaultValue type="Constant" return="int" default="0">Szabály, vagy érték definíció</DefaultValue>

Szabályok definiálása

A type attribútum meghatározza a kiértékelendő szabály típusát, értéke a következők egyike lehet:

-    `Constant`: konstans szabály definiálása konkrét értékkel, vagy a hivatkozások segítségével.
-    `Simple`: Egyszerű feltételt tartalmazó szabály, a JavaScript motor értékeli ki.
-    `SQL`: Adatbázis szerveren lefutó szabály.

A közös attribútumok a következőek:

  • A return attribútum a szabály kiértékelése után kapott eredmény típusát tartalmazza. A rendszer erre a típusra próbálja meg konvertálni az eredményt. Értéke lehet:
    • int: egyszerű egész szám.
    • boolean: logikai érték (True/False).
    • string: Szöveg.
    • datetime: Dátum és Idő.
    • float: lebegőpontos szám.
  • A default attribútumban beállított értéket a rendszer arra használja, hogy ha a szabály kiértékelése közben valamilyen hiba lép fel, akkor azt adja eredményül. Ha nincs kitöltve, akkor a visszatérési értékként megadott típus alapértelmezett értéket veszi fel.

  • Az isDecision attribútum speciálisan a WorkflowRequired szabályok által használt tulajdonság. Itt megadható, hogy a folyamatlépés adott mezője döntési pontot definiál-e. Ezt az Effector Studio használja fel arra, hogy az ebben a mezőben beállított értéktől függően hogyan haladjon tovább a folyamat.

  • A message attribútum speciálisan a ValidateRule szabályok által használt tulajdonság. Itt megadható, hogy milyen üzenet jelenjen meg, ha a kiszámított érték nem megfelelő (False) vagy a szabály olyan eredményt hozott, amely nem konvertálható "boolean" értékké.

       <ValidateRule type="SQL" return="boolean" default="True" message="Ehhez a céghez ilyen nevű kontakt már létezik!">
       <![CDATA[    
           SELECT CASE WHEN
               (SELECT COUNT(*) FROM People WITH (NOLOCK) WHERE Name =`[##Field.Name##]` AND CompanyID = `[##Field.CompanyID##]` AND Deleted = 0 AND PeopleID != `[##Field.PeopleID##]`) > 0
                   THEN `False`
                   ELSE `True`
                   END
       ]]>
       </ValidateRule>
    

Használat

Szabályok definiálásához a típusnak megfelelő nodeot használhatjuk, ezek különböző értékeket vehetnek fel, de felépítésük egységesen kezelt a rendszer egészében. Erre a szabály definícióra egységesen RuleValueType-ként fogunk hivatkozni a dokumentációban és a tankönyvben egyaránt.

Egy szabálynak három kiértékelési módja van (type attribútum értékeiről van szó)

  • Constant: Egyszerűen kicseréli a szabályban a hivatkozásokat. Az ilyen típusú szabály kliens és szerver oldalon is ki tud értékelődni. Példa:
    • <Visible type="Constant" return="boolean">false</Visible>
    • <DefaultValue type="Constant" return="boolean">[##Session.UserID##]</DefaultValue>
  • Simple: A szabályban található hivatkozások lecserélése után azt átfuttatja a rendszer egy JavaScript értelmezőn. Az értelmező által visszaadott értéket alakítja át a rendszer a megadott (return) típusra. Lehetőség van két vagy több érték összehasonlítására ('[##Field.Mezo##]' != 200). Gyakori paraméterezési hiba szokott lenni, hogy az egyszerű értékkicseréléses szabályokat is Simple-nek állítják be, ami nem jó. Például az egyszerűen leírt: <Visible type="Simple" return="boolean">'[##Field.Mezo##]'</Visible> helytelen. Ebben az esetben használjuk inkább a <Visible type="Constant" return="boolean">[##Field.Mezo##]</Visible> kifejezést. A <Visible type="Simple" return="boolean">false</Visible> szabály szintén helytelen. Helyette inkább a <Visible type="Constant" return="boolean">false</Visible> kifejezést használjuk. Az ilyen típusú szabály kliens és szerver oldalon is ki tud értékelődni. Példa:
    • <Required type="Simple" return="boolean" default="false">'[##Field.Description##]' == '' || '[##Field.Description##]' == '0'</Required>
    • <ValidateRule type="Simple" return="boolean" default="false" message="1 és 10 közötti érték a helyes!"><![CDATA['[##Field.Osztalyzat##]' > 0 && '[##Field.Osztalyzat##]' < 11 ]]></ValidateRule>
  • SQL: A legtágabb lehetőségekkel az SQL típusú szabály definíciók rendelkeznek, gyakorlatilag minden SQL-ben és a rendszer által biztosított hivatkozásokkal elérhető logika megvalósítható. Szabadon használhatóak az SQL-es utasítások, akár tárolt eljárások vagy függvények segítségével is. Az itt kialakított lekérdezések az adatbázist tartalmazó SQL szerveren érékelődnek ki. Példa:
    • <DefaultValue type="SQL" return="datetime">SELECT GETDATE()</DefaultValue>
    • <ValidateRule type="SQL" return="boolean" default="" message="Nem lehet a felelős egy csoport!">SELECT CASE when IsGroup=1 and '[##Field.Done##]'='True' THEN 'false' ELSE 'true' END FROM People WHERE PeopleID ='[##Field.Felelos##]'</ValidateRule>

Használható hivatkozások

A hivatkozásokat [##<csoport>.<mező>##] formátumban lehet megadni. A csoportonként használható mezőneveket a következő bekezdés tárgyalja csoportonkénti bontásban:

  • Field - az üzleti objektum egyik mezőjének értékére lehet hivatkozni a segítségével

    Például: [##Field.PeopleID##] az aktuális üzleti objektum PeopleID mezőjét jelenti.

  • Session: A bejelentkezett felhasználó adatai érhetőek el a csoporton belül, melyek a következőek:
    • UserID (Integer) - A felhasználó egyedi azonosítója.
    • UserName (String) - A felhasználó bejelentkezési neve.
    • CompanyID (Integer) - A felhasználóhoz rendelt cég egyedi azonosítója.
    • CompanyName (String)- A felhasználóhoz rendelt cég neve.
    • HostName (String) - A bejelentkezéshez használt számítógép DNS neve.
    • ComputerName (String) - A bejelentkezéshez használt számítógép neve.
    • Language (String) - Az aktív locale azonosítója.
    • LongSessionID (Integer) - A felhasználó LongSession azonosítója.
    • IsDeveloper (Boolean) - Rendelkezik-e a felhasználó fejlesztői licensszel.
    • IsGuest (Boolean) - A felhasználó vendég fiókkal van-e bejelentkezve.
  • Special: Egyéb nem felhasználó specifikus konstansok. Lehetséges mező értékek:
    • Today (DateTime) - Az aktuális timestamp (dátummal, idővel együtt) a jelenlegi locale szerint formázva.
    • Date (DateTime) - Az aktuális dátum (idő nélkül) a jelenlegi locale szerint formázva.
    • Time (DateTime) - Az aktuális idő (dátum nélkül) a jelenlegi locale szerint formázva.
    • ObjectEditList (String) - Ha a DBConnection XML-ben be van kapcsolva a ObjectEditList funkció, akkor egy vesszővel elválasztott listát tartalmaz az objektumot jelenleg szerkesztő felhasználók neveivel.
    • ClickedButton (String) - A kattintott gomb azonosítója azon szabályok esetében melyek kiértékelésére egy gombra való kattintás után kerül sor.
  • Filter: Egy adott bejövő filter értéke.

    Például: [##Filter.Project_ID##]

  • Triggered: csak folyamatlépéseknél használt. Ilyenkor a Field mindig annak a BO-nak az értékeit tartalmazza, ahonnan jön a folyamat, a Triggered pedig a létrehozandó folyamat BO mezőit.

  • Legutóbb frissítve: 1 hét 3 napja
  • Effector