Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Azure Logic Apps (Standard)
Ez az útmutató azokat az alapvető fogalmakat ismerteti, amelyek bemutatják, hogyan működik az Azure Logic Apps szabálymotorja a feltételek kiértékelése, a műveletek végrehajtása és a szabályok közötti ütközések feloldása során. Az Azure Logic Apps szabálymotorja biztosítja egy szabálykészlet végrehajtási környezetét, amelyet a Microsoft Rules Composerrel hoz létre.
Megismerheti a motor háromfázisú végrehajtási algoritmusát, azt, hogy a napirend és a prioritási rendszer hogyan határozza meg a szabály végrehajtási sorrendjét, és hogy a mellékhatások hogyan befolyásolják a gyorsítótárazási viselkedést. Ez az útmutató teljesítményoptimalizálási stratégiákat is tartalmaz, beleértve a ténytípusok, a logikai operátorok, a frissítési hívások és az osztályöröklés támogatásának kezelésére vonatkozó tippeket, így hatékonyan futtatható szabálykészleteket hozhat létre.
Alapösszetevők
Szabálykészlet-végrehajtó
Ez az összetevő implementálja a szabályfeltételek kiértékeléséért és a műveletek végrehajtásáért felelős algoritmust. Az alapértelmezett szabálykészlet-végrehajtó egy hálózati alapú, továbbítási láncolású következtetési motor, amely a memóriabeli működés optimalizálására lett tervezve.
Szabálykészlet-fordító
Ez az összetevő bemenetként egy RuleSet objektumot használ, és végrehajtható módon jeleníti meg a szabálykészletet. Az alapértelmezett memóriabeli fordító lefordított megkülönböztetési hálózatot hoz létre a szabálykészlet definíciójából.
Szabálykészlet-követési elfogó
Ez az összetevő a szabálykészlet-végrehajtótól kapja a kimenetet, és továbbítja a kimenetet a szabálykészlet-követési és monitorozási eszközöknek.
Állapot kiértékelése és művelet végrehajtása
Az Azure Logic Apps szabálymotorja egy rendkívül hatékony következtetési motor, amely szabályokat csatolhat .NET-objektumokhoz vagy XML-dokumentumokhoz. A szabálymotor egy háromfázisú algoritmust használ a szabálykészletek végrehajtásához a következő fázisokkal:
Egyezés
Az egyeztetési szakaszban a szabálymotor a szabályfeltételekben meghatározott predikátumok használatával összeveti a tényeket azokkal a predikátumokkal, amelyek a ténytípust használják. Ezek az objektumhivatkozások a szabálymotor munkamemóriájában vannak fenntartva. A hatékonyság érdekében a mintaegyeztetés a szabálykészlet összes szabályára kiterjed, és a szabályok között megosztott feltételek csak egyszer egyeznek meg. a szabálymotor részleges feltételegyezéseket tárolhat a munkamemóriában, hogy felgyorsítsa a mintaegyeztetési műveleteket. A mintaegyeztetési fázis kimenete tartalmazza a szabálymotor napirendjének frissítéseit.
Ütközésfeloldás
Az ütközésfeloldási szakaszban a szabálymotor megvizsgálja a végrehajtásra jelölt szabályokat, hogy meghatározza a következő futtatandó szabályműveleteket egy előre meghatározott megoldási séma alapján. A szabálymotor a megfelelő szakasz során talált összes jelölt szabályt hozzáadja a szabálymotor napirendjére.
Az alapértelmezett ütközésfeloldási séma a szabálykészleten belüli szabályprioritásokon alapul. A prioritás egy szabálytulajdonság, amelyet a Microsoft Rules Composerben konfigurálhat. Minél nagyobb a szám, annál magasabb a prioritás. Ha több szabály is aktiválódik, a szabálymotor először a magasabb prioritású műveleteket futtatja.
Művelet
A műveleti szakaszban a szabálymotor a feloldott szabályban futtatja a műveleteket. A szabályműveletek új tényeket állíthatnak be a szabálymotorba, ami miatt a ciklus folytatódik, és továbbítási láncolásnak is nevezik.
Fontos
Az algoritmus soha nem előzi meg az éppen futó szabályt. A szabálymotor az éppen futó szabály összes végrehajtandó műveletét végrehajtja, mielőtt az egyeztetési fázis megismétlődik. A szabálymotor napirendjén szereplő egyéb szabályok azonban nem futnak, mielőtt a mérkőzés fázisa újraindulna. Az egyeztetési fázis miatt a szabálymotor eltávolíthatja ezeket a szabályokat az ütemezésből, mielőtt még futnának.
Példa
Az alábbi példa bemutatja, hogyan működik az egyezés, az ütközésfeloldás és a művelet háromfázisú algoritmusa:
1. szabály: Jövedelem értékelése
Deklaratív ábrázolás
A kérelmező hitelminősítését csak akkor szerezheti meg, ha a kérelmező jövedelem-kölcsön aránya kisebb, mint 0,2.
HA – AKKOR képviselet üzleti objektumokkal
IF Application.Income / Property.Price < 0.2 THEN Assert new CreditRating( Application)
2. szabály: Hitelminősítés értékelése
Deklaratív ábrázolás
Csak akkor hagyja jóvá a kérelmezőt, ha a kérelmező hitelminősítése meghaladja a 725-öt.
HA–AKKOR Képviselet üzleti objektumokkal:
IF Application.SSN = CreditRating.SSN AND CreditRating.Value > 725 THEN SendApprovalLetter(Application)
Az alábbi táblázat összefoglalja a tényeket:
| Tény | Leírás | Mezők |
|---|---|---|
| Alkalmazás | Egy olyan XML-dokumentum, amely egy lakáshitel-alkalmazást jelöl. | - Bevétel: $65,000 - SSN: XXX-XX-XXXX |
| Tulajdonság | A megvásárolni kívánt tulajdonságot képviselő XML-dokumentum. | - Ár: $225,000 |
| CreditRating | A hiteligénylő hitelminősítését tartalmazó XML-dokumentum. | - Érték: 0-800 - SSN: XXX-XX-XXXX |
A munkamemória és a napirend frissítései
Kezdetben a szabálymotor munkamemóriája és napirendje üres. Miután az alkalmazás hozzáadja az Alkalmazás és a Tulajdonság tényeket, a szabálymotor a munka memóriáját és a napirendet az alábbi módon frissíti:
| Munkamemória | Napirend |
|---|---|
| - Alkalmazás -Ingatlan |
1. szabály |
A szabálymotor hozzáadja az 1. szabályt a napirendhez, mert az Application.Income / Property.Price < 0.2 feltétel igaz értékre van kiértékelve a meccs fázisában.
A munkamemóriában nem létezik CreditRating tény, ezért a 2. szabály feltétele nem kerül kiértékelésre.
Az 1. szabály az egyetlen szabály a napirenden, így a szabály végrehajtódik, majd eltűnik a napirendről.
Az 1. szabály egyetlen olyan műveletet határoz meg, amely egy új tényt eredményez, amely a kérelmező CreditRating-dokumentuma, amelyet hozzáadnak a munkamemória számára.
Miután az 1. szabály végrehajtása befejeződik, a kontroll visszatér az egyeztetési fázisba.
Az egyetlen új objektum, amelyhez illeszkedni kell, a CreditRating adat, így az illesztési fázis eredménye a következő.
Munkamemória Napirend - Alkalmazás
-Tulajdonság
- Hitelminősítés2. szabály A 2. szabály végre van hajtva, amely meghív egy függvényt, amely jóváhagyó levelet küld a kérelmezőnek.
A 2. szabály befejeződése után a vezérlő visszatér az egyeztetési fázisba. Azonban nincs több új tény, amely megfeleltethető, és a napirend üres, így a továbbítási láncolás leáll, és a szabálykészlet végrehajtása befejeződött.
Napirend és prioritás
Annak megértéséhez, hogy az Azure Logic Apps szabálymotorja hogyan értékeli ki a szabályokat és hajt végre műveleteket, ismernie kell a napirend és a prioritás fogalmait is.
Napirend
A szabálymotor napirendje egy ütemezés, amely sorba állítja a végrehajtási szabályokat. A napirend egy motorpéldány esetében létezik, és egyetlen szabálykészleten működik, nem szabálykészletek sorozatán. Ha egy tény a munkamemóriába kerül, és egy szabály feltételei teljesülnek, a motor napirendre helyezi a szabályt, és prioritás alapján végrehajtja a szabályt. A motor felülről lefelé hajtja végre a szabály műveleteit, majd végrehajtja a következő szabály műveleteit a napirenden.
A szabálymotor blokkként kezeli a szabály műveleteit, így az összes művelet lefut, mielőtt a motor a következő szabályra lép. A szabályblokk összes művelete a blokk többi műveletétől függetlenül fut. Az állítással kapcsolatos további információkért lásd : Szabálymotor optimalizálása vezérlőfüggvényekkel.
Az alábbi példa a napirend működését mutatja be:
1. szabály
IF
Fact1 == 1
THEN
Action1
Action2
2. szabály
IF
Fact1 > 0
THEN
Action3
Action4
Ha az 1 értékű Tény1 tény be van adva a motorba, az 1. és a 2. szabálynak is teljesülnek a feltételei. A motor tehát mindkét szabályt a napirendre helyezi a műveletek végrehajtásához.
| Munkamemória | Napirend |
|---|---|
| 1. tény (érték=1) |
1. szabály: - Művelet1 - Művelet2 2. Szabály: - Művelet3 - Művelet4 |
Prioritás
Alapértelmezés szerint minden szabály 0-ra van állítva a végrehajtás prioritásaként. Ezt a prioritást azonban minden egyes szabály esetében módosíthatja. A prioritás a 0 mindkét oldalára terjedhet, nagyobb számokkal magasabb prioritással. A motor a legmagasabb prioritástól a legalacsonyabb prioritásig hajt végre műveleteket.
Az alábbi példa bemutatja, hogy a prioritás hogyan befolyásolja a szabályok végrehajtásának sorrendjét.
1. szabály (prioritás = 0)
IF
Fact1 == 1
THEN
Discount = 10%
2. szabály (prioritás = 10)
IF
Fact1 > 0
THEN
Discount = 15%
Bár mindkét szabály feltételei teljesülnek, a 2. szabály a magasabb prioritás miatt hajtja végre először. A végső kedvezmény 10 százalék az 1. szabályhoz végrehajtott művelet eredménye miatt, az alábbi táblázatban látható módon:
| Munkamemória | Napirend |
|---|---|
| Tény1 (érték=1) |
Szabály 2: Kedvezmény: 15% Szabály 1: Kedvezmény: 10% |
A művelet mellékhatásai és gyorsítótár viselkedése
Ha egy művelet végrehajtása hatással van egy objektum állapotára vagy a feltételekben használt kifejezésre, a művelet "mellékhatásként" jelenik meg az adott objektumon vagy kifejezésen. Ez a kifejezés nem azt jelenti, hogy a műveletnek vannak mellékhatásai, hanem az objektumra vagy kifejezésre egy vagy több művelet is hatással lehet.
Tegyük fel például, hogy a következő szabályokkal rendelkezik:
1. szabály
IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "Important"
2. szabály
IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("Important")
Ebben a példában az OrderForm.UpdateStatus "mellékhatással" rendelkezik az OrderForm.Status állapotra, ami azt jelenti, hogy az OrderForm.Status állapotot egy vagy több művelet befolyásolhatja.
A .NET osztálytagok SideEffects tulajdonságának alapértelmezett értéke true, ami megakadályozza, hogy a szabálymotor a mellékhatásokat okozó tagokat gyorsítótárazza. Ebben a példában a szabálymotor nem gyorsítótárazza az OrderForm.Status parancsot a munkamemória számára. Ehelyett a motor az OrderForm.Status legújabb értékét kapja minden alkalommal, amikor a motor kiértékeli az 1. szabályt. Ha a SideEffects tulajdonság értéke hamis, a szabálymotor gyorsítótárazza az értéket, amikor a motor először kiértékeli az OrderForm.Status értéket. A továbbláncolásos forgatókönyvek későbbi kiértékelése esetén azonban a motor a gyorsítótárazott értéket használja.
A Microsoft Rules Composer jelenleg nem biztosít módot a SideEffects tulajdonság értékének módosítására. A SideEffects tulajdonság értékét azonban programozott módon is beállíthatja az üzleti szabályok keretrendszerén keresztül, amely egy Microsoft. NET-kompatibilis osztálykódtár. Ezt az értéket kötésre állítja a ClassMemberBinding osztály használatával a szabályfeltételekben és műveletekben használt objektummetódusok, tulajdonságok és mezők megadásához. A ClassMemberBinding osztálynak van egy SideEffects nevű tulajdonsága, amely egy logikai értéket tartalmaz, amely jelzi, hogy a tag elérése módosítja-e az értékét.
A teljesítménnyel kapcsolatos megfontolások
Ez a szakasz azt ismerteti, hogyan működik az Azure Logic Apps szabálymotorja különböző forgatókönyvekben, valamint a konfigurációs és finomhangolási paraméterek különböző értékeivel.
Ténytípusok
A szabálymotor kevesebb időt vesz igénybe a .NET-tények eléréséhez, mint az XML-tények eléréséhez. Ha választhat a .NET-tények vagy az XML-tények használata között egy szabálykészletben, fontolja meg a .NET-tények használatát a jobb teljesítmény érdekében.
Szabály prioritása
Egy szabály prioritási beállítása a 0 mindkét oldalára terjedhet, nagyobb számokkal magasabb prioritással. A műveletek a legmagasabb prioritástól a legalacsonyabb prioritásig haladva hajtanak végre. Amikor a szabálykészlet a Assert vagy Update hívásokkal hajtja végre a forward-chaining viselkedést, a Priority tulajdonság használatával optimalizálhatja a láncolást.
Tegyük fel például, hogy a 2. szabály függőséget mutat az 1. szabály által beállított értékhez. Ha az 1. szabály magasabb prioritással rendelkezik, a 2. szabály csak az 1. szabály végrehajtása és az érték frissítése után hajtódik végre. Ezzel szemben, ha 2. szabály magasabb prioritással rendelkezik, a szabály egyszer aktiválható, majd újra aktiválható, amikor 1. szabály aktiválódik, és frissíti a feltételhez kapcsolódó tényt a 2. szabály esetében. Ez a forgatókönyv lehet, hogy helyes vagy helytelen eredményt hoz, de egyértelmű, hogy a kétszeri futtatás hatással van a teljesítményre, szemben az egyszeri futtatással.
További információ: Szabályok létrehozása a Microsoft Rules Composer használatával.
Logikai VAGY operátorok
A szabálymotor úgy van optimalizálva, hogy logikai ÉS operátorokat hajtson végre, és rekonstruálja azt a szabályt, amelyet a motor eloszlató normál formában elemez, hogy a logikai VAGY operátor csak a legfelső szinten legyen használva.
Ha több logikai vagy operátort használ a körülmények között, a növekedés további permutációkat hoz létre, amelyek kibővítik a szabálymotor elemzőhálózatát. Ennek eredményeképpen a szabálymotor hosszú időt vehet igénybe a szabály normalizálásához.
Az alábbi lista a probléma lehetséges áthidaló megoldásait tartalmazza:
Módosítsa a szabályt egy disjunctive normal formára, hogy az OR operátor csak a legfelső szinten legyen.
Érdemes lehet programozási úton létrehozni a szabályt, mert lehet, hogy egy szabály létrehozása diszjunktív normál formában a Microsoft Rules Composerben bonyolult lehet.
Dolgozzon ki egy segédösszetevőt, amely végrehajtja az OR műveletet, és logikai értéket ad vissza, majd használja az összetevőt a szabályban.
Ossza fel a szabályt több szabályra, és ellenőrizze, hogy a szabályok egy korábban végrehajtott szabály által beállított jelölőt keresnek-e, vagy használjon egy objektumot, amelyet egy korábban végrehajtott szabály érvényesített, például:
1. szabály:
IF (a == 1 OR a == 3) THEN b = trueSzabály 2:
IF (b == true) THEN …Szabály 1:
IF (a == 1 OR a == 3) THEN Assert(new c())Szabály 2:
IF (c.flag == true) THEN …
Hívások frissítése
Az Update függvény frissíti a szabálymotor munkamemóriában található tényt, ami a frissített tényt feltételek között használó összes szabály újraértékelését okozza. Ez a viselkedés azt jelenti, hogy a frissítési függvényhívások költségesek lehetnek, különösen akkor, ha számos szabály újraértékelést igényel a frissített tények miatt. Bizonyos helyzetekben elkerülheti a szabályok újraértékelését.
Vegyük például a következő szabályokat:
1. szabály
IF PurchaseOrder.Amount > 5
THEN StatusObj.Flag = true; Update(StatusObj)
2. szabály
IF PurchaseOrder.Amount <= 5
THEN StatusObj.Flag = false; Update(StatusObj)
A szabálykészlet többi szabálya a StatusObj.Flag jelölőt használja a feltételekben. Amikor meghívja a StatusObj objektum Frissítés függvényét, a rendszer az összes szabályt újraértékeli. Bármi legyen is az érték az Összeg mezőben, az 1. és a 2. szabály kivételével az összes szabály kétszer lesz kiértékelve: egyszer a frissítésihívás előtt, egyszer pedig a frissítési hívás után.
Ehelyett a szabálykészlet meghívása előtt a Jelölő értékét hamis értékre állíthatja, majd a szabálykészletben csak az 1. szabályt használhatja a jelölő beállításához. Ebben az esetben a Frissítés függvény csak akkor lesz meghívva, ha az Összeg érték nagyobb, mint 5. A Frissítés függvény nem lesz meghívva, ha az összeg kisebb vagy egyenlő 5-nél. Így az 1. és a 2. szabály kivételével az összes szabályt csak kétszer értékeli ki a rendszer, ha az Összeg érték nagyobb, mint 5.
A SideEffects tulajdonság viselkedése és a gyorsítótárazás viselkedése
Az XmlDocumentFieldBinding és ClassMemberBinding osztályokban a SideEffects tulajdonság határozza meg, hogy gyorsítótárazza-e a kötött mező, tag vagy oszlop értékét.
Az XmlDocumentFieldBinding osztályban a SideEffects tulajdonság alapértelmezett értéke hamis. A ClassMemberBinding osztályban azonban a SideEffects tulajdonság alapértelmezett értéke igaz.
Ha tehát a motor a szabálykészleten belül másodszor vagy később fér hozzá egy XML-dokumentum egyik mezőjéhez, a motor lekéri a mező értékét a gyorsítótárból. Ha azonban a motor másodszor vagy később fér hozzá egy .NET-objektum egy tagához a szabálykészleten belül, a motor nem a gyorsítótárból, hanem a .NET-objektumból szerzi be az értéket.
Ez a viselkedés azt jelenti, hogy ha a .NET ClassMemberBindingben a SideEffects tulajdonságot hamis értékre állítja, javíthatja a teljesítményt, mert a motor a második alkalommal és a következő időponttól kezdve lekéri a tag értékét a gyorsítótárból. A tulajdonságértéket azonban csak programozott módon állíthatja be, mert a Microsoft Rules Composer nem teszi elérhetővé a SideEffects tulajdonságot .
Példányok és szelektivitás
Az XmlDocumentBinding és a ClassBinding osztály mindegyike a következő tulajdonságokkal rendelkezik, amelyeket a szabálymotor az értékükkel optimalizál a feltétel kiértékeléséhez. Ezek a tulajdonságértékek lehetővé teszik, hogy a motor először a lehető legkevesebb példányt használja a feltételértékelésekben, majd használja a többi példányt.
Példányok: A munkamemória osztálypéldányainak várt száma.
Ha előre ismeri az objektumpéldányok számát, a teljesítmény javítása érdekében beállíthatja a Példányok tulajdonságot erre a számra.
Szelektivitás: Azon osztálypéldányok százalékos aránya, amelyek sikeresen megfelelnek a szabályfeltételeknek.
Ha ismeri a feltételeknek korábban megfelelő objektumpéldányok százalékos arányát, a teljesítmény javítása érdekében a Selectivity tulajdonságot erre a százalékra állíthatja be.
Ezeket a tulajdonságértékeket csak programozott módon állíthatja be, mert a Microsoft Rules Composer nem teszi elérhetővé őket.
Az osztályöröklés támogatása
Az öröklés az a képesség, amely egy meglévő osztály összes funkcióját képes használni, és ezeket a képességeket az eredeti osztály újraírása nélkül is kiterjesztheti, ami az Objektumorientált programozás (OOP) nyelv egyik kulcsfontosságú funkciója.
Az Azure Logic Apps szabálymotorja az alábbi osztályöröklési típusokat támogatja:
Implementálás öröklése: Az alaposztály tulajdonságainak és metódusainak más kódolás nélküli használatára való képesség.
Interfészöröklés: Csak a tulajdonságnevek és a metódusnevek használhatók, de a gyermekosztálynak biztosítania kell a megvalósítást.
A szabálymotorral szabályokat írhat egy közös alaposztályra vonatkozóan, de a szabálymotorban érvényesített objektumok származtatható osztályokból is származhatnak.
Az alábbi példában egy Employee nevű alaposztály található, míg a származtatott osztályok neve RegularEmployee és ContractEmployee.
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
Ebben a példában tegyük fel, hogy a következő szabályokkal rendelkezik:
1. szabály
IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"
At run time, if you assert two objects, a **ContractEmployee** instance and a **RegularEmployee** instance, the engine evaluates both objects against the Rule 1.
You can also assert derived class objects in actions by using an **Assert** function. This function causes the engine to reevaluate rules that contain the derived object and the base type in their conditions as shown in the following example, which demonstrates implementation inheritance:
**Rule 2**
```text
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())
Az állítás után a motor újraértékel minden olyan szabályt, amely az Alkalmazott vagy a ContractEmployee típust tartalmazza a feltételek között. Annak ellenére, hogy csak a származtatott osztály van érvényesítve, az alaposztály akkor is érvényes lesz, ha a szabályok az alaposztály metódusaival vannak megírva, nem pedig a származtatott osztályban.