Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Azure Logic Apps (Standart)
Bu kılavuzda koşulları değerlendirirken, eylemleri yürütürken ve kurallar arasındaki çakışmaları çözerken Azure Logic Apps Kural Altyapısı'nın nasıl çalıştığını açıklayan temel kavramlar açıklanmaktadır. Azure Logic Apps Kural Altyapısı, Microsoft Kural Oluşturucu ile oluşturduğunuz bir kural kümesi için yürütme bağlamı sağlar.
Altyapının üç aşamalı yürütme algoritması, ajanda ve öncelik sisteminin kural yürütme sırasını nasıl belirlediğini ve yan etkilerin önbelleğe alma davranışını nasıl etkilediğini öğreneceksiniz. Bu kılavuz ayrıca olgu türlerini yönetme ipuçları, mantıksal işleçler, güncelleştirme çağrıları ve sınıf devralma desteği de dahil olmak üzere performans iyileştirme stratejileri sağlar, böylece verimli bir şekilde çalışan kural kümeleri oluşturabilirsiniz.
Temel bileşenler
Kural kümesi yürütücüsü
Bu bileşen, kural koşulu değerlendirmesi ve eylem yürütmeden sorumlu algoritmayı uygular. Varsayılan kural kümesi yürütücüsü, bellek içi işlemi iyileştirmek için tasarlanmış ayrım ağı tabanlı, ilerlemeli zincirleme çıkarım motorudur.
Kural kümesi çeviricisi
Bu bileşen bir RuleSet nesnesini giriş olarak alır ve kural kümesinin yürütülebilir bir gösterimini oluşturur. Varsayılan bellek içi çevirici, kural kümesi tanımından derlenmiş bir ayrım ağı oluşturur.
Kural kümesi izleme durdurucusu
Bu bileşen, kural kümesi yürütücüsundan çıktı alır ve bu çıkışı kural kümesi izleme ve izleme araçlarına iletir.
Koşul değerlendirmesi ve eylem yürütme
Azure Logic Apps Kural Altyapısı, kuralları .NET nesnelerine veya XML belgelerine bağlayabilen son derece verimli bir çıkarım altyapısıdır. Kural altyapısı, aşağıdaki aşamalarla kural kümesi yürütmesi için üç aşamalı bir algoritma kullanır:
Maç
Eşleştirme aşamasında, kural motoru, kural koşullarında tanımlanan predikatları kullanarak, kural motorunun çalışma belleğinde tutulan ve olgu türlerini referans alan nesne başvurularına karşı olguları eşleştirir. Verimlilik için, kural kümesindeki tüm kurallarda desen eşleştirme gerçekleşir ve kurallar arasında paylaşılan koşullar yalnızca bir kez eşleştirilir. kural altyapısı, sonraki desen eşleştirme işlemlerini hızlandırmak için kısmi koşul eşleşmelerini çalışma belleğinde depolayabilir. Desen eşleştirme aşamasından alınan çıkış, kurallar motorunun gündemine yapılan güncellemeleri içerir.
Çakışma çözümü
Çakışma çözümleme aşamasında kural altyapısı, önceden belirlenmiş bir çözüm şemasına göre çalıştırılacak bir sonraki kural eylemi kümesini belirlemek için yürütme adayı olan kuralları inceler. Kurallar motoru, eşleştirme aşamasında bulunan tüm aday kuralları kurallar motorunun ajandasına ekler.
Varsayılan çakışma çözümleme düzeni, kural kümesi içindeki kural önceliklerini temel alır. Öncelik, Microsoft Kural Oluşturucu'da yapılandırabileceğiniz bir kural özelliğidir. Sayı ne kadar büyükse öncelik de o kadar yüksektir. Birden çok kural tetiklenirse, kural altyapısı önce yüksek öncelikli eylemleri çalıştırır.
Eylem
Eylem aşamasında kural altyapısı, çözümlenen kuraldaki eylemleri çalıştırır. Kural eylemleri kural altyapısına yeni olgular ekleyebilir ve bu da döngünün devam etmesine neden olur ve ileri zincirleme olarak da bilinir.
Önemli
Algoritma, halihazırda çalışan kuralı hiçbir zaman kesmez. Kurallar motoru, eşleştirme aşaması tekrarlanmadan önce o anda çalışan kuralın tüm eylemlerini yürütür. Ancak, eşleştirme aşaması yeniden başlamadan önce kurallar motorunun gündemindeki diğer kurallar çalışmaz. Eşleştirme aşaması, kural altyapısının bu kuralları çalışmadan önce gündemden kaldırmasına neden olabilir.
Örnek
Aşağıdaki örnekte eşleşme, çakışma çözümleme ve eylemin üç aşamalı algoritmasının nasıl çalıştığı gösterilmektedir:
Kural 1: Geliri değerlendirme
Bildirim temelli gösterim
Bir başvuru sahibinin kredi derecelendirmesini ancak başvuru sahibinin gelir-kredi oranı 0,2'den azsa alın.
EĞER-SONRA iş nesneleri kullanarak gösterim
IF Application.Income / Property.Price < 0.2 THEN Assert new CreditRating( Application)
Kural 2: Kredi derecelendirmeyi değerlendirme
Bildirimsel gösterim
Bir başvuru sahibini yalnızca başvuru sahibinin kredi notu 725'ten fazlaysa onaylayın.
IF—THEN İş nesnelerini kullanarak temsil:
IF Application.SSN = CreditRating.SSN AND CreditRating.Value > 725 THEN SendApprovalLetter(Application)
Aşağıdaki tabloda olgular özetlemektedir:
| Gerçek | Açıklama | Alanlar |
|---|---|---|
| Uygulama | Ev kredisi uygulamasını temsil eden xml belgesi. | - Gelir: 65.000 ABD doları - SSN: XXX-XX-XXXX |
| Özellik | Satın alınacak özelliği temsil eden bir XML belgesi. | - Fiyat: $225,000 |
| CreditRating | Kredi başvuru sahibinin kredi derecelendirmesini içeren bir XML belgesi. | - Değer: 0-800 - SSN: XXX-XX-XXXX |
Çalışma belleği ve ajanda güncelleştirmeleri
Başlangıçta, kural altyapısının çalışma belleği ve ajandası boş olur. Uygulamanız Uygulama ve Özellik olgularını ekledikten sonra, kural altyapısının çalışma belleğini ve ajandasını gösterildiği gibi güncelleştirir:
| Çalışma belleği | Ajanda |
|---|---|
| -Uygulama -Mülk |
Kural 1 |
Kural altyapısı, Application.Income / Property.Price < 0.2 koşulu eşleşme aşamasında doğru olarak değerlendirildiği için Kural 1'i gündemine ekler.
Çalışma belleğinde CreditRating olgu yok, bu nedenle Kural 2 koşulu değerlendirilmez.
1. kural ajandadaki tek kuraldır, bu nedenle kural yürütülür ve sonra gündemden kaybolur.
Kural 1, başvuranın çalışma belleğine eklenen CreditRating belgesi olan yeni bir olguyla sonuçlanan tek bir eylemi tanımlar.
Kural 1 yürütülmeyi tamamladıktan sonra, kontrol eşleşme fazına döner.
Eşleştirilmesi gereken tek yeni nesne CreditRating olgusdur, bu nedenle eşleştirme aşamasının sonuçları aşağıdaki gibidir:
Çalışma belleği Ajanda -Uygulama
-Mülk
- Kredi NotuKural 2 Kural 2 şimdi çalıştırılır ve başvuru sahibine onay mektubu gönderen bir fonksiyon çağrılır.
Kural 2 tamamlandıktan sonra, denetim eşleşme aşamasına döner. Ancak, eşleşmek için başka yeni olgu yoktur ve gündem boş olduğundan, ileri zincirleme sonlandırılır ve kural kümesi yürütmesi tamamlanır.
Ajanda ve öncelik
Azure Logic Apps Kural Altyapısı'nın kuralları nasıl değerlendirip eylemleri yürüttüğüni anlamak için ajanda ve öncelik kavramları hakkında da bilgi edinmeniz gerekir.
Ajanda
Kural altyapısının gündemi, yürütme için kuralları kuyruğa alan bir zamanlamadır. Ajanda bir altyapı örneği için vardır ve bir dizi kural kümesi üzerinde değil, tek bir kural kümesi üzerinde çalışır. Çalışma belleğine bir olgu onaylandığında ve kuralın koşulları karşılandığında, altyapı kuralı ajandaya yerleştirir ve bu kuralı önceliğe göre yürütür. Altyapı, bir kuralın eylemlerini yukarıdan aşağıya öncelik sırasına kadar yürütür ve ardından gündemdeki bir sonraki kural için eylemleri yürütür.
Kural motoru, bir kural içerisindeki eylemleri bir blok olarak ele alır, bu nedenle motor, bir sonraki kurala geçmeden önce tüm eylemler çalıştırılır. Bir kural bloğundaki tüm eylemler, bloktaki diğer eylemlerden bağımsız olarak yürütülür. Onaylama hakkında daha fazla bilgi için bkz. Denetim işlevleriyle kural altyapınızı iyileştirme.
Aşağıdaki örnekte ajandanın nasıl çalıştığı gösterilmektedir:
Kural 1
IF
Fact1 == 1
THEN
Action1
Action2
Kural 2
IF
Fact1 > 0
THEN
Action3
Action4
1 değerine sahip Olgu1 çalışma motoruna belirtildiğinde, hem Kural 1 hem de Kural 2 için koşullar karşılanır. Bu nedenle motor, her iki kuralı da eylemlerini gerçekleştirmek için gündeme taşır.
| Çalışma belleği | Ajanda |
|---|---|
| Olgu 1 (değer=1) |
Kural 1: - Eylem1 - Eylem2 Kural 2: - Eylem3 - Eylem4 |
Öncelik
Varsayılan olarak, tüm kurallar yürütme önceliği olarak 0 olarak ayarlanır. Ancak, her bir kuralda bu önceliği değiştirebilirsiniz. Öncelik, daha büyük sayılar daha yüksek önceliğe sahip olacak şekilde, 0'ın her iki tarafına doğru sıralanabilir. Motor, eylemleri en yüksek öncelikten en düşük önceliğe kadar gerçekleştirir.
Aşağıdaki örnekte önceliğin kurallar için sıra yürütmeyi nasıl etkilediği gösterilmektedir:
Kural 1 (öncelik = 0)
IF
Fact1 == 1
THEN
Discount = 10%
Kural 2 (öncelik = 10)
IF
Fact1 > 0
THEN
Discount = 15%
Her iki kural için de koşullar karşılanıyor olsa da, yüksek önceliği nedeniyle önce Kural 2 yürütülür. Aşağıdaki tabloda gösterildiği gibi Kural 1 için yürütülen eylemin sonucu nedeniyle son indirim yüzde 10'dur:
| Çalışma belleği | Ajanda |
|---|---|
| Olgu1 (değer=1) |
Kural 2: İndirim: %15 Kural 1: İndirim: %10 |
Eylem yan etkileri ve önbelleğe alma davranışı
Bir eylemin yürütülmesi bir nesnenin durumunu veya koşullarda kullanılan bir terimi etkiliyorsa, bu eylemin bu nesne veya terim üzerinde "yan etkisi" olduğu söylenir. Bu tümcecik, eylemin yan etkileri olduğu anlamına gelmez, bunun yerine nesnenin veya terimin bir veya daha fazla eylemden etkilendiği anlamına gelir.
Örneğin, aşağıdaki kurallara sahip olduğunuzu varsayalım:
Kural 1
IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "Important"
Kural 2
IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("Important")
Bu örnekte, OrderForm.UpdateStatus'un OrderForm.Status üzerinde bir "yan etkisi" vardır; yani OrderForm.Status bir veya daha fazla eylemden etkilenebilir.
.NET sınıf üyeleri için SideEffects özelliği varsayılan değer olarak true olarak ayarlanır ve bu da kural altyapısının yan etkileri olan bir üyeyi önbelleğe almalarını önler. Bu örnekte kural altyapısı, orderform.status dosyasını çalışma belleğinde önbelleğe almaz. Bunun yerine motor, Kural 1'i her değerlendirişinde OrderForm.Status değerinin en son değerini alır. SideEffects özellik değeri false ise, kurallar motoru OrderForm.Status değerini ilk kez değerlendirdiğinde değeri önbelleğe alır. Ancak, ileri zincirleme senaryolarında daha sonraki değerlendirmeler için altyapı önbelleğe alınmış değeri kullanır.
Microsoft Rules Composer şu anda SideEffects özellik değerini değiştirmeniz için bir yol sağlamamaktadır . Ancak, Microsoft .NET uyumlu bir sınıf kitaplığı olan İş Kuralları Çerçevesi aracılığıyla SideEffects özellik değerini programlı olarak ayarlayabilirsiniz. Kural koşullarında ve eylemlerde kullanılan nesne yöntemlerini, özellikleri ve alanları belirtmek için ClassMemberBinding sınıfını kullanarak bu değeri bağlama olarak ayarlarsınız. ClassMemberBinding sınıfı, üyeye erişimin değerini değiştirip değiştirmediğini gösteren bir Boole değeri içeren SideEffects adlı bir özelliğe sahiptir.
Performans değerlendirmeleri
Bu bölümde, Azure Logic Apps Kural Altyapısı'nın çeşitli senaryolarda ve yapılandırma ve ayarlama parametreleri için farklı değerlerle nasıl performans sergileytiği açıklanır.
Olgu türleri
Kural altyapısının .NET olgularına erişmesi XML olgularına erişmekten daha az zaman alır. Bir kural kümesinde .NET olgularını veya XML olgularını kullanma arasında seçim yaparsanız, daha iyi performans için .NET olgularını kullanmayı göz önünde bulundurun.
Kural önceliği
Bir kuralın öncelik ayarı, daha büyük sayılar daha yüksek önceliğe sahip olacak şekilde 0'ın her iki tarafında değişebilir. Eylemler en yüksek önceliğe ve en düşük önceliğe kadar sırayla yürütülür. Kural kümesi Assert veya Update çağrılarını kullanarak ileriye doğru zincirleme davranışı uyguladığında, Priority özelliğini kullanarak zinciri iyileştirebilirsiniz.
Örneğin, Kural 2'nin Kural 1 tarafından ayarlanan bir değere bağımlılığı olduğunu varsayalım. Kural 1'in önceliği daha yüksekse, Kural 2 yalnızca Kural 1 tetiklenip değeri güncelleştirdikten sonra yürütülür. Buna karşılık, Kural 2'nin önceliği daha yüksekse, kural bir kez tetiklenebilir ve ardından Kural 1 tetiklenip Kural 2 koşulundaki olguyu güncelleştirdikten sonra tekrar tetiklenebilir. Bu senaryo doğru sonuçları üretebilir veya üretmeyebilir, ancak açıkçası, iki kez tetiklemenin performansı ve yalnızca bir kez tetiklemesi üzerinde bir etkisi vardır.
Daha fazla bilgi için bkz . Microsoft Rules Composer kullanarak kural oluşturma.
Mantıksal OR işleçleri
Kural altyapısı, mantıksal AND işleçlerini çalıştırmak üzere optimize edilmiştir ve motorun ayrıştırdığı kuralı bir ayrışık normal formda yeniden yapılandırarak mantıksal OR işleci yalnızca en üst düzeyde kullanılır.
Koşullarda daha fazla mantıksal OR işleci kullanırsanız, artış kural altyapısının analiz ağını genişleten daha fazla permütasyon oluşturur. Sonuç olarak kural altyapısının kuralı normalleştirmesi uzun sürebilir.
Aşağıdaki liste, bu sorun için olası geçici çözümler sağlar:
Kuralı, OR işlecinin yalnızca en üst düzeyde olması için ayrık normal formuna dönüştürün.
Kuralı program aracılığıyla oluşturmayı düşünün çünkü Microsoft Rules Composer'da ayrık normal biçimde bir kural oluşturmanın karmaşık olabileceğini düşünebilirsiniz.
OR işlemlerini gerçekleştiren ve boole değeri döndüren bir yardımcı bileşen geliştirin ve ardından kuraldaki bileşeni kullanın.
Kuralı birden çok kurala bölün ve kuralların daha önce yürütülen bir kural tarafından ayarlanmış bir bayrağı denetlemesini veya daha önce yürütülen bir kuralın onayladığı bir nesneyi kullanmasını belirtin, örneğin:
Kural 1:
IF (a == 1 OR a == 3) THEN b = trueKural 2:
IF (b == true) THEN …Kural 1:
IF (a == 1 OR a == 3) THEN Assert(new c())Kural 2:
IF (c.flag == true) THEN …
Aramaları güncelleştirme
Update işlevi, kural altyapısının çalışma belleğinde bulunan bir olguyu güncelleştirir ve bu da koşullarda güncelleştirilmiş olguyu kullanan tüm kurallar için yeniden değerlendirmeye neden olur. Bu davranış, güncelleştirme işlevi çağrılarının pahalı olabileceği anlamına gelir; özellikle de güncelleştirilmiş olgular nedeniyle birçok kural yeniden değerlendirme gerektiriyorsa. Bazı durumlarda, kuralları yeniden değerlendirmekten kaçınabilirsiniz.
Örneğin, aşağıdaki kuralları göz önünde bulundurun:
Kural 1
IF PurchaseOrder.Amount > 5
THEN StatusObj.Flag = true; Update(StatusObj)
Kural 2
IF PurchaseOrder.Amount <= 5
THEN StatusObj.Flag = false; Update(StatusObj)
Kural kümesindeki kalan tüm kurallar, durumlarında StatusObj.Flag kullanır. StatusObj nesnesinde Update işlevini çağırdığınızda, tüm kurallar yeniden değerlendirilir. Tutar alanında değer ne olursa olsun, Kural 1 ve Kural 2 dışındaki tüm kurallar iki kez değerlendirilir: Güncelleştirme çağrısından önce ve Güncelleştirme çağrısından sonra bir kez.
Bunun yerine, kural kümesini çağırmadan önce Bayrak değerini false olarak ayarlayabilir ve ardından bayrağı ayarlamak için kural kümesinde yalnızca Kural 1'i kullanabilirsiniz. Bu durumda Update işlevi yalnızca Tutar değeri 5'ten büyükse çağrılır. Tutar 5'ten küçük veya buna eşitse Update işlevi çağrılmaz. Bu şekilde, Kural 1 ve Kural 2 dışındaki tüm kurallar yalnızca Tutar değeri 5'ten büyükse iki kez değerlendirilir.
SideEffects özellik davranışı ve önbelleğe alma davranışı
XmlDocumentFieldBinding ve ClassMemberBinding sınıflarında, SideEffects özelliği ilişkili alanın, üyenin veya sütunun değerinin önbelleğe alınıp alınmayacağını belirler.
XmlDocumentFieldBinding sınıfında, SideEffects özelliğinin varsayılan değeri false olur. Ancak, ClassMemberBinding sınıfında SideEffects özelliğinin varsayılan değeri true olur.
Bu nedenle, altyapı bir XML belgesindeki bir alana ikinci kez veya daha sonra kural kümesi içinde erişiyorsa, altyapı alanın değerini önbellekten alır. Ancak, altyapı bir .NET nesnesinin üyesine kural kümesi içinde ikinci kez veya daha sonra erişirse, altyapı değeri önbellekten değil .NET nesnesinden alır.
Bu davranış, .NET ClassMemberBinding içindeki SideEffects özelliğini false olarak ayarlarsanız, altyapı üyenin değerini ikinci ve sonrası işlemler için önbellekten aldığından performansı artırabileceğiniz anlamına gelir. Ancak, Microsoft Rules Composer SideEffects özelliğini kullanıma sunmadığından özellik değerini yalnızca program aracılığıyla ayarlayabilirsiniz.
Örnekler ve seçicilik
XmlDocumentBinding ve ClassBinding sınıflarının her biri, kural altyapısının koşul değerlendirmesini iyileştirmek için değerlerini kullandığı aşağıdaki özelliklere sahiptir. Bu özellik değerleri altyapının koşul değerlendirmelerinde önce mümkün olan en az örneği kullanmasına ve ardından kalan örnekleri kullanmasına olanak tanır.
Örnekler: Çalışma belleğinde beklenen sınıf örneği sayısı.
Nesne örneklerinin sayısını önceden biliyorsanız, performansı artırmak için Instances özelliğini bu sayıya ayarlayabilirsiniz.
Seçicilik: Kural koşullarını başarıyla geçen sınıf örneklerinin yüzdesi.
Koşulları önceden geçiren nesne örneklerinin yüzdesini biliyorsanız, performansı artırmak için Selectivity özelliğini bu yüzdeye ayarlayabilirsiniz.
Bu özellik değerlerini yalnızca program aracılığıyla ayarlayabilirsiniz çünkü Microsoft Kural Oluşturucu bunları kullanıma sunmaz.
Sınıf devralma desteği
Devralma, mevcut bir sınıftaki tüm işlevleri kullanma ve Nesne Odaklı Programlama (OOP) dillerindeki önemli bir özellik olan özgün sınıfı yeniden yazmadan bu özellikleri genişletme özelliğidir.
Azure Logic Apps Kural Altyapısı aşağıdaki tür sınıf devralmayı destekler:
Uygulama devralma: Temel sınıfın özelliklerini ve yöntemlerini başka kodlama olmadan kullanma özelliği.
Arabirim devralma: Yalnızca özellik adlarını ve yöntem adlarını kullanma özelliğidir, ancak alt sınıfın uygulamayı sağlaması gerekir.
Kural altyapısı ile ortak bir temel sınıf açısından kurallar yazabilirsiniz, ancak kural altyapısında onaylanan nesneler türetilmiş sınıflardan gelebilir.
Aşağıdaki örnekte Employee adlı bir temel sınıf bulunurken, türetilen sınıflar RegularEmployee ve ContractEmployee olarak adlandırılır:
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
Bu örnekte aşağıdaki kurallara sahip olduğunuzu varsayalım:
Kural 1
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())
Onaydan sonra motor, koşullarında Çalışan türünü veya ContractEmployee türünü içeren tüm kuralları yeniden değerlendirir. Yalnızca türetilmiş sınıf onaylanmış olsa da, kurallar türetilmiş sınıf yerine temel sınıftaki yöntemler kullanılarak yazılırsa temel sınıf da onaylanır.