Merhaba, bu yazımda Pega’da otomatik hesaplamalar yapmak için kullanılan ‘Declare Expression’ı ve bu hesaplamaları yaparken hangi yöntemlerin izlenebileceğini anlatacağım.

 

Declare Expression, expressions’lara dayalı olarak property değerlerinin otomatik olarak hesaplanması için kullanılmaktadır. Ancak basit expressions’lardan ziyade; sabit içeren syntax, function çağrıları, operatörler ve property referansları gibi birçok ek durumlarda başvurulmaktadır.

 

Declare Expression rule’ları 2 yönteme göre tetiklenmektedir:

 

1.Forward Chaining

 

2.Backward Chaining

 

Forward Chaining: Bir property değerindeki değişikliklerin diğer taget property’ler üzerine otomatik olarak yayılarak hesaplanmasını sağlayan yapıdır. Default olarak expression’lar Forward chaining ile çalışmaktadır.

 

Backward Chaining: Girdiler değiştiğinde değil, bir property için bir değer gerektiğinde kullanılan yapıdır.

 

Declare Expression oluştururken, ‘Change Tracking’ sekmesinden manuel olarak farklı hesaplama metotları kullanılarak forward veya backward chaining seçilebilmektedir.

 

Metotlar ve hangi chaining yapısına ait oldukları şu şekildedir:

 

 

Whenever input changes: Forward chaining tipindedir. Source property her değiştiğinde target property değeri de değişmektedir.

 

When used, if property is missing: Backward chaining tipindedir. Target property yalnızca sistem clipboard’da property’nin eksik olduğunu tespit ettiğinde hesaplanacaktır.

 

When used, if no value present: Backward chaining tipindedir. Değer sıfır, null, boş veya sayfada henüz görünmediğinde hesapla yapılır ve hesaplama yapıldıktan sonra giriş değişse bile tekrar çalışmayacaktır.

 

Whenever used: Backward chaining tipindedir. Sistem, giriş değişmemiş olsa bile target property değerini yeniden hesaplayan herhangi bir rule’da target property’ye başvurulduğunda hesaplamaları çalıştırır.

 

When applied by a rule collection: Backward chaining tipindedir. Sistem, bir property’nin değerini yalnızca söz konusu özelliğe Collection Rule tarafından başvuruluyorsa hesaplama yapar.

 

When invoked procedurally: Backward chaining tipindedir. Target property yalnızca bağımsız bir Collection Rule, target property’yi çağırdığında hesaplanır. Bu da bir Collection Rule’da bu ifade prosedürel olarak çağrılırsa chained ifadenin çalışmayacağı anlamına gelmektedir.

 

Hesaplamalar yapılırken hangi chaining yapısının seçilmesi gerektiği, değerlerin değişme sıklıkları ve kullanımlarına bağlı olarak değişebilmektedir.

 

Örnek olarak X = Y + Z şeklindeki bir toplama ifadesinde hem forward hem de backward chaining kullanılabilir.

 

Y ve Z değerleri sık sık değişiyorsa ve X değeri sonraki adımlarda birkaç yerde kullanılıyorsa Backward Chaining seçilmesi daha kullanışlıdır.

 

Eğer girdi değerleri (Y,Z) sık değişmiyorsa ve target property (A) uygulamada sık kullanılıyorsa da Forward Chaining daha kullanışlı olacaktır.

 

Uygulama Üzerinde Forward ve Backward Chaining

 

Forward ve Backward Chaining’in bir arada kullanıldığı ve değerlerin aşağıdaki gibi olduğu bir uygulamaya göz atalım.

 

  1. Total price = Quantity * Price

 

    Grand total = Total price + Packaging Charge

 

2. Click Create >> Decision >> DeclareExpression yolunu izleyerek target property’si Total Price olan Declare Expression’ı oluşturalım.

 

 

3. Expressions sekmesinde ifade girişlerini yapalım.

 

 

4. Change Tracking sekmesinde Forward Chaining tetiklenmesi için ‘Whenever inputs change’i seçelim.

 

 

5. Expression’ı save ederek, aynı işlemleri -Backward Chaining tetiklenmesi için Change Tracking sekmesinde ‘Whenever used’ kullanarak- Grand Total target property’sine de uygulayarak case’i save and run edelim.

 

6. Price ve Quantity değerleri değiştiğinde otomatik olarak Total Price değerinin de değiştiğini görüyoruz. Forward chaining’in işleyişini görmek için Submit etmiyoruz.

 

 

7. Clipboard’u açarak PyWorkPage sayfasında TotalPrice ve GrandTotal propertyleri’nin değerlerini kontrol edelim.

 

 

 

TotalPrice değerinin hesaplandığını ancak GrandTotal değerinin gerekli değerler mevcut olduğu halde tabloda olmadığını görüyoruz. Bunun sebebi GrandTotal’in sadece property’ye başvurulduğunda tetiklenmesidir (backward chaining).

 

8. GrandTotal değerinin hesaplanması için Submit ederek tetiklenmesini sağlarız. Bu sayede Submit edildikten sonra UI’da ve Clipboard’da GrandTotal değerinin listelendiğini görebiliriz.

 

 

 

Forward ve Backward Chaining Arasındaki Farklar

 

Forward Chaining

1) Hesaplama; çağrılan property’nin uygulamada herhangi bir yerde referans verilip verilmediğine bakılmaksızın yapılacaktır.

2) Sistemin kullanılıp kullanılmadığına bakılmaksızın hesaplamaya devam edilmesi gerektiğinden yüksek performans gerektirir.

3) Basit hesaplamalar ve kullanıcının daha az sıklıkta değer değiştirdiği durumlarda kullanılabilir.

Backward Chaining

1) Hesaplama; rule veya decision table’da, UI’da veya uygulamanın herhangi bir yerinde property’ye başvurulduğunda yapılmaktadır.

2) Gerekli olmayan hesaplamaları yapmak için kaynakları kullanmak yerine; sistemden her kullanıldığında hesaplama yapması isteneceğinden daha performans odaklıdır.

3) Karmaşık hesaplamalarda ve birden fazla durum söz konusu olduğunda kullanmak daha uygundur.

Sonuç

Declare Expression kullanımı;

-Gerekli olan verileri dinamik olarak alma,

-Karmaşık prosedür mantığı ve manuel işleme ihtiyacını azaltma,

-Karmaşık süreçlerin otomatikleştirilmesini sağlayarak kolaylaştırma,

-BPM ve BRM çözümleri için zaman ve maliyet tasarrufu sağlama,

-Declarative processing için gerekli olan yetenekleri sağlama gibi birçok konuda avantaj sağlamaktadır.

Zaman ayırdığınız ve okuduğunuz için teşekkürler, bir sonraki yazımda görüşmek dileğiyle…

Referanslar

https://www.linkedin.com/pulse/forward-chaining-backward-pega-shailendra-sankhala

https://www.pegaforengineers.com/post/declare-expression

https://community.pega.com/sites/default/files/help_v722/rule-/rule-declare-/rule-declare-expressions/main.htm

https://pegalive.wordpress.com/tag/declarative-rules/

https://collaborate.pega.com/question/backward-chaining-vs-forward-chaining