Aracılığıyla paylaş


Microsoft Rules Composer kullanarak kural yürütmeyi iyileştirmek için eylemlere denetim işlevleri ekleme

Şunlar için geçerlidir: Azure Logic Apps (Standart)

Bu kılavuzda, Microsoft Rules Composer'ı kullanarak kurallarınızdaki eylemlere denetim işlevleri ekleyerek kuralların yürütülmesini iyileştirme işlemi gösterilmektedir. Denetim işlevleri, uygulamanızın veya kural kümesinin kural altyapısının çalışma belleğindeki olguları denetlemesine yardımcı olur. Bu işlevler, olgu olarak kullanabileceğiniz .NET nesnesi ve TypedXmlDocument varlıkları için Assert, Clear, Halt, Retract, RetractByType, Reassert ve Update işlevlerini içerir. Çalışma belleğinde olguların varlığı, motorun değerlendirdiği koşulları ve yürütülen eylemleri yönlendirir.

Önkoşullar

  • Microsoft Rules Composer'ı indirip yükleyin.

  • Üzerinde çalışmak istediğiniz kural kümesini içeren XML dosyası.

    Olgu eklemek için RuleSet Explorer penceresinde işaret ettiğiniz XML belgelerinde değerlerini belirtin. Ya da kural altyapınıza olgu olarak .NET nesneleri içeren bir dizi sağlamak için olgu oluşturucu kullanabilirsiniz. Daha fazla bilgi için bkz . Olgu oluşturucuları ve retriever'ları oluşturma.

Assert işlevi

Kural altyapısının çalışma belleğine nesne örnekleri eklemek için Microsoft Kural Oluşturucu'daki Assert işlevini kullanın. Motor, her nesne örneğini, nesnenin türüne göre belirlenen koşul ve eylemleri kullanarak eşleşme-çakışma çözümleme-eylem aşamalarında işler.

Aşağıdaki tabloda, onaylanan her varlık için altyapıda oluşturulan sonuç örneklerinin sayısı ve tanımlama için her örneğe uygulanan tür de dahil olmak üzere desteklenen onaylanan varlıklar ve örnek türleri için Assert işlevi davranışı özetlenmektedir.

Varlık Onaylanan örnek sayısı Örnek türü
.NET nesnesi 1 (nesnenin kendisi) Tam nitelikli .NET sınıfı
Türü Belirtilmiş Xml Belgesi 1-N TypedXmlDocument(lar): Oluşturulan seçici bağlamalarına ve belge içeriğine göre DocumentType.Seçici

.NET nesnesini doğrula

Kural altyapısı, başvuru türleri için temel .NET skaler türlerini ve nesnelerini yerel olarak destekler. Onaylanan .NET nesne işleme, işleme türlerinin en basitidir.

Microsoft Kural Oluşturucu'da bir kural içinden bir .NET nesnesi onaylayabilirsiniz.

  1. Microsoft Kural Oluşturucu'da, üzerinde çalışmak istediğiniz kural depoyu içeren XML dosyasını yükleyin.

  2. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  3. SONRA bölmesinde, Eylemler altında, Assert yerleşik işlevini bir eylem olarak ekleyin.

  4. Olgu Gezgini penceresinde .NET Sınıfları'nı seçin.

  5. .NET Sınıfları sekmesinden, nesnenin oluşturucu yöntemini Assert eylemindeki bağımsız değişkene sürükleyin.

    Microsoft Rules Composer, oluşturucu yöntemini kural tanımında createObject çağrısına çevirir.

    Not

    Kural altyapısı bir CreateObject işlevine sahip olsa da, işlev Microsoft Kural Oluşturucu'da ayrı bir işlev olarak gösterilmez.

Her nesne, ayrı bir nesne örneği olarak çalışma belleğine eklenir; başka bir deyişle, nesnenin türüne başvuran her predikat, IF Object.Property = 1 örneğini analiz eder. Örnek, kural koşullarının sonuçlarına göre türü referans alan kural eylemleri için de kullanılabilir.

Örneğin, aşağıdaki kurallara sahip olduğunuzu varsayalım:

Kural 1

IF A.Value = 1
THEN A.Status = "good"

Kural 2

IF B.Value = 1
THEN A.Status = "good"

Kural 1'de yalnızca değeri 1 olan A örneklerinin Status özelliği güncelleştirilir. Ancak Kural 2'de koşul true olarak değerlendirilirse tüm A örneklerinin durumu güncelleştirilir. Aslında, birden çok B örneği varsa, koşul bir B örneği için doğru olarak değerlendirildiğinde A örnekleri güncelleştirilir.

TypedXmlDocument varlığını onaylama

Microsoft Kurallar Besteci'de, bir kuralın içinden bir TypedXmlDocument varlığı oluşturabilirsiniz.

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler'in altında, Assert yerleşik işlevini bir eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden, istediğiniz düğümü Assert eylemindeki bağımsız değişkene sürükleyin.

XML belgeleri temelde metindir, ancak alan değerleri herhangi bir türde olabilir ve kural oluşturulduğunda belirtilen türü temel alır. Alanlar XPath ifadeleridir, bu nedenle bir düğüm kümesi döndürebilirler; bu da kümedeki ilk öğenin değer olarak kullanıldığı anlamına gelir.

Bir TypedXmlDocument varlığı bir olgu olarak onaylandığında kural altyapısı, kuralda tanımlanan seçicileri temel alarak TypedXmlDocument alt örnekleri oluşturur. Seçicileri bir XML belgesindeki düğümleri yalıtmak için bir yol olarak ve alanları seçici içindeki belirli öğeleri tanımlamak olarak düşünebilirsiniz. Kural altyapısı, bir seçici içindeki tüm alanları nesne olarak gruplandırr.

Seçiciler ayrıca XPath ifadeleridir. Bilgi Gezgini'nde, XML Şemaları sekmesinde bir düğüm seçtiğinizde, Microsoft Kural Oluşturucusu tüm düğümler için XPath Seçici özelliğini ve alt düğüm içermeyen tüm düğümler için XPath Alanı özelliğini otomatik olarak doldurur. Alternatif olarak, gerekirse XPath Seçicisi ve XPath Alanı için kendi XPath ifadelerinizi girebilirsiniz. Seçici, XML belgesindeki birden fazla bölümle eşleşiyorsa, bu türden birden fazla nesne kurallar motorunun çalışma belleğine eklenir veya oradan geri çekilir.

Aynı belge içinde birden çok seçici kullanabilirsiniz. Bu şekilde, belgenin farklı bölümlerini görüntüleyebilirsiniz; örneğin, bir bölümün sipariş olduğunu ve başka bir bölümün sevkiyat adresini içerdiğini varsayalım. Ancak, oluşturulan nesnelerin onları oluşturan XPath dizesi tarafından tanımlandığını unutmayın. Farklı bir XPath ifadesi kullanıyorsanız, ifade aynı düğüme çözümlense bile sonuç benzersiz bir TypedXmlDocument varlığıdır.

Örneğin, aşağıdaki XML'e sahip olduğunuzu varsayalım:

<root>
    <order customer="Joe">
        <item name="router" quantity="10" cost="550" />
        <item name="switch" quantity="3" cost="300" />
    </order>
    <order customer="Jane">
        <item name="switch" quantity="1" cost="300" />
        <item name="cable" quantity="23" cost="9.99" />
    </order>
</root>

Eğer /root/order veya //order seçicisini kullanırsanız, motorun çalışma belleğine aşağıdaki nesneler eklenir:

Nesne 1

<order customer="Joe">
    <item name="router" quantity="10" cost="550" />
    <item name="switch" quantity="3" cost="300" />
</order>

Nesne 2

<order customer="Jane">
    <item name="switch" quantity="1" cost="300" />
    <item name="cable" quantity="23" cost="9.99" />
</order>

Her seçicinin içinde XPath'ler tek tek alanlara başvurur. Bu nedenle, seçici /root/order/item, order/item veya öğeyi kullanırsanız, aşağıdaki nesneler Joe için iki öğe ve Jane için iki öğeyle altyapının çalışma belleğine eklenir:

<root>
    <order customer="Joe">
    </order>
    <order customer="Jane">
    </order>
</root>

Her nesne üç alana erişebilir: @name, @quantity ve @cost. Nesne, özgün belgeye bir referans olduğundan üst alanlara başvurabilirsiniz, örneğin, ../@customer.

Arka planda, kural altyapısı XmlConvert işlevi aracılığıyla bir metin alanı değerini desteklenen türlerden herhangi birine dönüştürebilir. Türü Microsoft Kural Oluşturucu'da ayarlayarak bu seçeneği belirtebilirsiniz. Dönüştürme mümkün değilse, motor bir istisna atar. bool ve double türlerini yalnızca kendi türleri olarak, yani dize veya nesne olarak alabilirsiniz.

Clear işlevi

Bir kural altyapısı örneğinin çalışma belleğini ve ajandasını sıfırlamak için Microsoft Rules Composer'daki Clear işlevini kullanın. Çalışma belleği ve ajanda hakkında daha fazla bilgi için bkz. Kurallar motoru optimizasyonu.

Kurallar motorunuz için çalışma belleğini ve ajandayı sıfırlayın

  1. RuleSet Explorer penceresinde, kural altyapınızın çalışma belleğini ve ajandasını temizlemek istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında, eylem olarak Temizle yerleşik işlevini ekleyin.

    Clear işlevi bağımsız değişken almaz.

Halt işlevi

Kural altyapısı tarafından geçerli yürütmeyi durdurmak için Microsoft Rules Composer'daki Halt işlevini kullanın.

Kural kümesi yürütmeyi durdurma

  1. RuleSet Explorer penceresinde, kural kümesi yürütmesini durdurmak istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesindeki Eylemler'in altında Yerleşik durdurma işlevini eylem olarak ekleyin.

Halt işlevi tek bir Boole bağımsız değişkeni alır. Değeri true olarak belirtirseniz, kurallar motoru bekleyen aday kuralları içeren ajandayı siler.

Ruleset.Execute yöntemi RuleEngine.Execute yönteminin etrafındaki bir sarmalayıcıdır ve aşağıdaki koda benzer bir kod kullanır:

RuleEngine.Assert(facts);
RuleEngine.Execute();
RuleEngine.Retract(facts);

Kural kümesi yürütmek için Ruleset.Execute yöntemini kullanırsanız, Kural altyapısı, Halt işlevi yürütürken denetimi Ruleset.Execute yöntemine döndürür. Ruleset.Execute yöntemi olguları geri alır ve denetimi çağırana döndürür. Bu durumda, durdurulan kural kümesi yürütmesi sürdürülemez.

Ancak kural kümesini yürütmek için ruleEngine.Execute yöntemini doğrudan kullanırsanız, iki çağrı arasında gerekli nesneleri geri çekmediğiniz takdirde RuleEngine.Execute komutunu yeniden çağırarak bir sonraki bekleyen kural tetiklenerek durdurulan kural kümesi yürütmesini sürdürebilirsiniz.

Not

Ruleset.Execute yöntemi, daha iyi performans için kural altyapısı örneklerini önbelleğe alır. RuleEngine.Execute yöntemini doğrudan kullanırsanız, kural altyapısı örnekleri önbelleğe alınmaz.

Aşağıdaki örnek kod, durdurulan kural kümesi yürütmesinin nasıl sürdürülür gösterir:

// Assert facts into working memory of the rules engine instance.
RuleEngine.Assert(facts);

// Execute the ruleset.
RuleEngine.Execute();

// The ruleset invokes the Halt method when executing actions.
// Control returns here when the Halt function is called. 
// When engine halts, do the following tasks.

// Add your code here.

// Resume the halted rules engine execution.
RuleEngine.Execute();

// Retract or remove facts from working memory in the rules engine.
RuleEngine.Retract(facts);

geri çekme işlevi

Bir kural kümesinden ve kural altyapısının çalışma belleğinden nesneleri kaldırmak için Microsoft Rules Composer'daki Retract işlevini kullanın.

.NET nesnesini geri çekme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesindeki Eylemler'in altında Yerleşik geri çekme işlevini eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde .NET Sınıfları'nı seçin.

  4. .NET Sınıfları sekmesinden, derlemeyi veya yöntemi değil, istediğiniz sınıfı Retract parametresinin bağımsız değişkenine sürükleyin.

    Bir yöntemi Retract işlevine sürüklerseniz, motor yöntemi tarafından döndürülen nesneyi geri almaya çalışır.

.NET nesnesinin geri çekilmesi aşağıdaki etkiye sahiptir:

  • Ajandada nesneleri kullanan eylemler ajandadan kaldırılır.

    Not

    Ajandada daha üst sırada yer alan diğer eylemler, Geri Çek işlevini kullanmadan önce zaten yürütülmüş olabilir.

  • Yüklemde nesneyi kullanan kurallar, eğer ajandada herhangi bir eylem varsa, eylemlerini ajandadan kaldırır.

  • Motor artık nesneyi değerlendirmez.

TypedXmlDocument varlığını veya varlıklarını geri alma

Kural motoruna onaylanan özgün TypedXmlDocument varlığını geri çekebilir veya ana XmlDocument varlığından oluşturulan TypedXmlDocument alt varlıklarından birini geri çekebilirsiniz.

Aşağıdaki örnek XML'ye sahip olduğunuzu varsayalım:

<order>
    <orderline customer="Joe" linenumber="001">
        <product name="router" quantity="10" cost="550" />
    </orderline>
    <orderline customer="Jane" linenumber="002">
        <product name="switch" quantity="1" cost="300" />
    </orderline>
</order>

Bir sipariş nesnesiyle ilişkili TypedXmlDocument varlığını geri çekebileceğiniz gibi, sipariş satırı nesnesiyle ilişkili TypedXmlDocument varlıklarından birini veya her ikisini de geri çekebilirsiniz. Tüm TypedXmlDocument varlıkları, XML ağacı hiyerarşisindeki en üst düzey TypedXmlDocument düğümünü aşan TypedXmlDocument varlığıyla değil, başlangıçta onaylanan en üst düzey TypedXmlDocument varlığıyla ilişkilendirilir.

Örneğin, ürün, TypedXmlDocument varlığı olup sipariş satırı nesnesinin altındadır ve sipariş için TypedXmlDocument varlığıyla ilişkilendirilmiştir, sipariş satırı için TypedXmlDocument varlığıyla değil. Çoğu durumda bu ayrım önemli değildir. Ancak, order nesnesini geri alırsanız, sipariş çizgisi ve ürün nesneleri de geri çekilir. Orderline nesnesini geri çekerseniz, sadece bu nesne geri çekilir, ürün nesnesi değil.

Motor yalnızca, TypedXmlDocument nesne örneklerini işler ve izler, bu nesneler TypedXmlDocument varlığı ilk oluşturulduğunda motor tarafından oluşturulmuştur. Kural kümesindeki bir seçici aracılığıyla seçilen bir düğüm için eşdüzey düğümler gibi ek düğümler oluşturursanız, TypedXmlDocument varlıkları oluşturulmadığı ve bunlar için onaylanmadığı sürece bu düğümler kurallarda değerlendirilmez. Bu yeni, alt düzey TypedXmlDocument örneklerini onaylarsanız, altyapı kurallardaki örnekleri değerlendirir, ancak en üst düzey TypedXmlDocument varlığı bunlar hakkında bilgi sahibi değildir. Üst düzey TypedXmlDocument geri çekildiğinde, bağımsız olarak onaylanan yeni TypedXmlDocument varlıkları otomatik olarak geri çekilmez. Sonuç olarak, yeni düğümler oluşturulursa, gerçekleştirilmesi gereken tipik ve en basit adımdır: Tam XmlDocument üzerinde Geri Çek ve Yeniden Yükle işlemi gerçekleştirin.

TypedXmlDocument sınıfı, bir eylemin parçası olarak özel bir .NET üyesi içinde çağırabileceğiniz yararlı yöntemler sağlar. Bu yöntemler, TypedXmlDocument veya üst TypedXmlDocument ile ilişkili XmlNode alma özelliğini içerir.

Üst düzey TypedXmlDocument varlığını geri çekme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında, Geri Çek adlı yerleşik işlevi bir eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden şemanın en üst düzey düğümünü Retract işlevinin bağımsız değişkenine sürükleyin.

    Bu üst düğüm .xsd uzantısıyla biter ve belge öğesi düğümünü değil belge kök düğümünü temsil eder. Düğümde, ilk TypedXmlDocument'a atıfta bulunan bir / seçici vardır. Üst TypedXmlDocument'ı geri çekdiğinizde, TypedXmlDocument ile ilişkili tüm TypedXmlDocument alt varlıkları, kural kümesinde kullanılan seçicilere göre Assert işlevi çağrılarak oluşturulan tüm TypedXmlDocument varlıkları da dahil olmak üzere çalışma belleğinden kaldırılır.

Bir alt öğe olan TypedXmlDocument varlığını geri çekme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında, Geri çekme yerleşik işlevini bir eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden alt düğümü, Geri Çek işlevinin bağımsız değişkenine sürükleyin.

RetractByType işlevi

Belirtilen türe sahip tüm nesneleri kural altyapısının çalışma belleğinden kaldırmak için Microsoft Rules Composer'daki RetractByType işlevini kullanın. Bu işlev, yalnızca belirli bir türe sahip belirli öğeleri kaldıran Geri Çek işlevinden farklıdır.

Belirli bir türe sahip tüm .NET nesnelerini geri çekme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında bir eylem olarak RetractByType yerleşik işlevini ekleyin.

  3. Olgu Gezgini penceresinde .NET Sınıfları'nı seçin.

  4. .NET Sınıfları sekmesinden sınıfı RetractByType işlevinin argümanına sürükleyin.

Belirli bir türe sahip tüm TypedXmlDocument varlıklarını geri çekme

RetractByType, aynı DocumentType.Selector ile tüm TypedXmlDocument varlıklarını kaldırır.

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında bir eylem olarak RetractByType yerleşik işlevini ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden uygun düğümü RetractByType işlevine sürükleyin.

Retract işleviyle tutarlı olarak, belge kök düğümünde RetractByType işlevini kullanırsanız, bu eylem, yalnızca o DocumentType ile onaylanmış tüm TypedXmlDocument varlıklarını değil, aynı zamanda o üst TypedXmlDocument varlıklarıyla ilişkili tüm alt TypedXmlDocument varlıklarını veya ağaç hiyerarşisindeki XmlNode düğümlerini de geri çeker.

İşlevi yeniden teyit etme

Altyapının çalışma belleğinde zaten var olan bir nesnede Assert işlevini çağırmak için Microsoft Rules Composer'daki Reassert işlevini kullanın. Davranış, nesne için Retract komutunun ve ardından Assert komutunun verilmesiyle eşdeğerdir.

Örneğin, bir .NET nesnesinde Reassert işlevini kullanırsanız, kural altyapısı aşağıdaki adımları uygular:

  1. .NET nesnesini çalışma belleğinden geri çekin.

  2. Bir koşulda veya eylemde nesnesini kullanan kurallar için ajandadaki tüm eylemleri kaldırın.

  3. .NET nesnesini çalışma belleğine geri onaylar ve yeni onaylanan bir nesne olarak değerlendirir.

  4. Bu nesneyi yüklemde kullanan herhangi bir kuralı yeniden değerlendirin ve bu kuralların eylemlerini uygun şekilde gündeme ekleyin.

  5. Daha önce 'doğru' olarak değerlendirilen ve eylemlerinde yalnızca nesne kullanan tüm kurallar için eylemleri yeniden gündeme al.

.NET nesnesini yeniden birleştirme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında, bir eylem olarak Reassert yerleşik işlevini ekleyin.

  3. Olgu Gezgini penceresinde .NET Sınıfları'nı seçin.

  4. .NET Sınıfları sekmesinden sınıfı, Reassert işlevinin bağımsız değişkenine sürükleyin.

TypedXmlDocument varlığını yeniden doğrulama

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında yerleşik Yeniden Oluştur işlevini eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden, istediğiniz varlık düğümünü Reassert işlevindeki bağımsız değişkene sürükleyin.

Bir üst düzey TypedXmlDocument varlığını yeniden bir araya getirirseniz, üst düzey TypedXmlDocument varlığı ilk kez onaylandığında oluşturulan TypedXmlDocument alt varlıkları, her TypedXmlDocument alt varlığının durumuna bağlı olarak farklı davranabilir.

Örneğin, yeni veya var olan bir alt varlık "kirli" ise, yani kural kümesinde en az bir alan bir eylem kullanılarak değiştirildiyse, söz konusu alt öğede assert işlevi veya Reassert işlevi gerçekleştirilir. Kirli olmayan tüm mevcut çocuklar çalışma belleğinde kalır.

Not

Bir düğüm, altyapının bilmediği dış işlemlerden kirli olarak işaretlenmez; örneğin, bir dış uygulama bu düğümü program aracılığıyla ekler, siler veya güncelleştirir.

Aşağıdaki örnek, bağlı varlık yeniden doğrulandığında alt varlıkların davranışlarını açıklayan basitleştirilmiş bir senaryo göstermektedir. Çalışma belleğinde şu TypedXmlDocument varlıklarına sahip olduğunuzu varsayalım: Parent, Child1, Child2 ve Child3.

  • Ebeveyn, üst düzey TypedXmlDocument varlığıdır.
  • Her alt öğe, değerin 1 olarak ayarlandığı ExampleField adını taşıyan bir alan içerir, örneğin, = 1.

Bir kural eyleminin, alt varlıklarda aşağıdaki işlemleri gerçekleştirdiğini varsayalım:

  • Child2 için ExampleField değeri 1'den 0'a güncelleştirilir.
  • Kullanıcı kodu Child3'i siler.
  • Kullanıcı kodu, Parent öğesine TypedXmlDocument adlı yeni bir NewChild alt öğesi ekler.

Aşağıdaki örnek, çalışan bellekteki nesnelerin yeni gösterimini gösterir:

Parent
Child1 // Where Child1.ExampleField = 1
Child2 // Where Child2.ExampleField = 0
NewChild

Şimdi, Üst varlığını yeniden tanımladığınızı varsayın, bu da aşağıdaki alt varlık davranışlarıyla sonuçlanmaktadır:

  • Child2 alanı güncellendikten sonra kirli olduğundan yeniden işleme alındı.
  • Child3 çalışma belleğinden geri çekilir.
  • NewChild çalışan belleğe eklenir.
  • Alt öğe1, Üst öğe yeniden teyit edilmeden önce güncellenmediği için çalışma belleğinde değişmeden kalır.

güncelleme işlevi

Bir nesneyi, yeni verilere ve duruma göre yeniden değerlendirme için kural altyapısına yeniden eklemek için Microsoft Kural Oluşturucu'daki Update işlevini kullanın. Nesnenin .NET sınıf türü veya TypedXmlDocument türü olabilir. Altyapı performansını geliştirmek ve sonsuz döngü senaryolarını önlemek için Update işlevini de kullanabilirsiniz.

Önemli

Kuralları yeniden değerlendirme için varsayılan en yüksek döngü sayısı 2^32'dir, bu nedenle belirli kurallar için kural kümesi yürütmesi uzun sürebilir. Döngü sayısını azaltmak için kural kümesi sürümündeki En Fazla Yürütme Döngüsü Derinliği özelliğini değiştirin.

.NET nesnesini güncelleştirme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesinde, Eylemler altında, eylem olarak Güncelleştir yerleşik işlevini ekleyin.

  3. Olgu Gezgini penceresinde .NET Sınıfları'nı seçin.

  4. .NET Sınıfları sekmesinden sınıfı, Update işlevinin bağımsız değişkenine sürükleyin.

Genellikle, kural altyapısının çalışma belleğine yeni bir nesne yerleştirmek için Assert kullanırsınız ve çalışma belleğinde zaten var olan bir nesneyi güncelleştirmek için Güncelleştir'i kullanırsınız. Bir gerçek olarak yeni bir nesne onayladığınızda, motor tüm kurallardaki koşulları yeniden değerlendirir. Ancak, mevcut bir nesneyi güncelleştirdiğinizde, altyapı yalnızca güncelleştirilmiş olguyu kullanan koşulları yeniden değerlendirir ve bu koşullar doğru olarak değerlendirilirse ajandaya eylemler ekler.

Örneğin, aşağıdaki kurallara sahip olduğunuzu ve ItemA ve ItemB adlı nesnelerin çalışma belleğinde zaten bulunduğunu varsayalım.

  • Kural 1, ItemA'daki Id özelliğini değerlendirir, ItemB'de Id özelliğini ayarlar ve değişiklik sonrasında ItemB'yi yeniden değerlendirir. ItemB yeniden öne sürüldüğünde, motor ItemB'yi yeni bir nesne olarak değerlendirir ve ItemB'yi koşul veya eylemlerde kullanan tüm kuralları yeniden değerlendirir. Bu davranış, mekanizmanın Kural 1'de ayarlandığı gibi Kural 2'yi ItemB.Id'nin yeni değeriyle yeniden değerlendirmesini sağlar.

    Kural 1

    IF ItemA.Id == 1
    THEN ItemB.Id = 2
    Assert(ItemB)
    
  • Kural 2 ilk değerlendirmede başarısız olabilir, ancak ikinci değerlendirme sırasında true olarak değerlendirilir.

    Kural 2

    IF ItemB.Id == 2
    THEN ItemB.Value = 100
    

Nesneleri çalışma belleğine yeniden birleştirme özelliği, ileri zincirleme senaryolarındaki davranış üzerinde açık denetim sağlar. Ancak bu örnek, Kural 1'in de yeniden değerlendirildiği yeniden beyan etme işleminin bir yan etkisini ortaya koyuyor. ItemA.Id değişmeden, Kural 1 yine true olarak değerlendirilir ve Assert(ItemB) eylemi yeniden tetiklenir. Sonuç olarak kural sonsuz bir döngü durumu oluşturur.

Sonsuz döngüleri önleme

Sonsuz döngüler oluşturmadan nesneleri yeniden birleştirebilmeniz gerekir. Bu tür senaryoları önlemek için Update işlevini kullanabilirsiniz. Reassert işlevi gibi Update işlevi de kural eylemleriyle değiştirilen ilişkili nesne örneklerinde Retract ve Assert işlevlerini gerçekleştirir, ancak aşağıdaki temel farklarla:

  • Örnek türü yalnızca eylemlerde kullanıldığında, kural eylemleri ajandada kalır.

  • Yalnızca eylemlerde örnek türünü kullanan kurallar yeniden değerlendirilmez.

Sonuç olarak, yalnızca koşullarda veya her iki koşulda ve eylemde örnek türlerini kullanan kurallar yeniden değerlendirilir ve kuralların eylemleri uygun şekilde gündeme eklenir.

Önceki örneği Update işlevini kullanacak şekilde değiştirerek, ItemB'yi kullanan Kural 2 için yalnızca Kural 2'nin motor tarafından yeniden değerlendirilmesini sağlayabilirsiniz. Motor, ÖğeB yalnızca Kural 1'in eylemlerinde kullanıldığından ve bu da döngü senaryosunu ortadan kaldırdığından Kural 1'i yeniden değerlendirmez.

Kural 1

IF ItemA.Id == 1
THEN ItemB.Id = 2
Update(ItemB)

Kural 2

IF ItemB.Id == 2
THEN ItemB.Value = 100

Update işlevini bu şekilde kullanmalarına rağmen döngü senaryoları oluşturma olasılığı hala mevcuttur. Örneğin, aşağıdaki kuralı göz önünde bulundurun:

IF ItemA.Id == 1
THEN ItemA.Value = 20
Update(ItemA)

Koşul ItemA kullanır, bu nedenle motor, Update çağrısı ItemA üzerinde yapıldığında kuralı yeniden değerlendirir. ItemA.Id değeri başka bir yerde değiştirilmezse, Kural 1 true olarak değerlendirilmeye devam eder ve bu da ÖğeA'da Update'in yeniden çağrılmalarına neden olur.

Kural tasarımcısı olarak, bu tür döngü senaryoları oluşturmaktan kaçınmanız gerekir. Bu sorunu çözmek için uygun yaklaşım, kuralların doğasına göre farklılık gösterir.

Aşağıdaki örnekte, kuralın eylemleri ilk kez yürütüldükten sonra kuralın yeniden doğru olarak değerlendirilmesini engelleyen ItemA.Value üzerinde bir denetim ekleyerek önceki örnekteki sorunu çözmenin basit bir yolu gösterilmektedir.

IF ItemA.Id == 1 and ItemA.Value != 20
THEN ItemA.Value = 20
Update(ItemA)

TypedXmlDocument varlığını güncelleştirme

  1. RuleSet Explorer penceresinde, istediğiniz kuralı bulun ve seçin.

  2. SONRA bölmesindeki Eylemler altında yerleşik Güncelleştirme işlevini eylem olarak ekleyin.

  3. Olgu Gezgini penceresinde XML Şemaları'nı seçin.

  4. XML Şemaları sekmesinden, istediğiniz varlık düğümünü Update işlevindeki bağımsız değişkene sürükleyin.

Örneğin, aşağıdaki kurallara sahip olduğunuzu varsayalım:

  • Kural 1 , bir satınalma siparişi iletisindeki öğelerin toplam sayısını değerlendirir.

    IF 1 == 1
    THEN ProcessPO.Order:/Order/Items/TotalCount = (ProcessPO.Order:/Order/Items/TotalCount + ProcessPO:/Order/Items/Item/Count)  
    
  • Kural 2, toplam sayı 10'dan büyük veya buna eşitse durumu "Onay gerekiyor" olarak ayarlar.

    Kural 2

    IF ProcessPO.Order:/Order/Items/TotalCount >= 10
    THEN ProcessPO.Order:/Order/Status = "Needs approval"
    

Bu kural kümesine aşağıdaki satın alma siparişi mesajını giriş olarak geçirirseniz, ToplamSayısı 14 olsa bile, durumun "Onay Bekliyor" olarak ayarlanmadığını fark edeceksiniz. Bu davranış, Kural 2'nin yalnızca Başlangıçta TotalCount değeri 0 olduğunda değerlendirildiğinden ortaya çıkar. TotalCount her güncelleştirildiğinde kural değerlendirilmez.

<ns0:Order xmlns:ns0="http://ProcessPO.Order">
    <Items>
        <Item>
            <Id>ITM1</Id>
            <Count>2</Count>
        </Item>
        <Item>
            <Id>ITM2</Id>
            <Count>5</Count>
        </Item>
        <Item>
            <Id>ITM3</Id>
            <Count>7</Count>
        </Item>
        <TotalCount>0</TotalCount>
    </Items>
    <Status>No approval needed</Status>
</ns0:Order>

TotalCount her güncellendiğinde koşulları yeniden değerlendirmesi için, güncellenen düğüm TotalCount için üst düğüm Öğeler üzerinde Update işlevini çağırmanız gerekir. Kural 1'i aşağıdaki gibi değiştirir ve kuralı bir kez daha test ederseniz, Durum alanı "Onay gerekiyor" olarak ayarlanır:

Kural 1 (güncelleştirildi)

IF 1 == 1
THEN ProcessPO.Order:/Order/Items/TotalCount = (ProcessPO.Order:/Order/Items/TotalCount + ProcessPO:/Order/Items/Item/Count) AND
Update(ProcessPO.Order:/Order/Items)