Suche

über alle News und Events

 

Alle News

 

Sebastian Meyer, Microsoft & SAP...

Weiterlesen

Für Entwickler, Architekten, Projektleiter und...

Weiterlesen

In der Welt der Softwareentwicklung ist die...

Weiterlesen

QUIBIQ spendet für den guten Zweck – und für...

Weiterlesen

Eine bestimmte Antwort auf einen HTTP Request zu...

Weiterlesen

In einer Welt, die von stetigem Wandel geprägt...

Weiterlesen

In einem unserer Kundenprojekte, war das Ziel eine...

Weiterlesen

QUIBIQ Hamburg wird mit dem Hamburger...

Weiterlesen

Zwei Tage lang wurde vom 14.-15.11 wieder das...

Weiterlesen

Was ist ein Excel-Plugin – und wann ist es...

Weiterlesen

How-To: BizTalk Rules Engine – Chained Rules

Dieser Artikel zeigt das Vorgehen zum Erstellen von sogenannten Chained Rules – bestimmte Rules werden dabei nur ausgeführt, wenn eine Action einer anderen Rule gefired wurde. Zudem werden Grundkenntnisse wie z.B. das Testen von Policies im Business Rules Composer und das Lesen der Rule Engine Traces erläutert. Generelles Grundwissen bezüglich der Business Rules Engine wird allerdings in diesem Artikel vorausgesetzt.

Chained Rules sind ein fortgeschrittenes Szenario – komplizierte Anforderungen können hierüber gelöst werden. Hierzu muss man Befehle wie Assert/Update und Retract verstehen.

Vocabularies

Alle Beispiele benutzen folgendes Sample Schema:

Gemäß Best Practice wurden für die Beispiele Vocabularies benutzt, um Get/Set Accessors für die Schema-Elemente inklusive Aliases zu definieren.
Es wäre schön dasselbe öfters in der Praxis zu sehen …

Am Beispiel für Get Operation Field 1:

Assert/Retract Commands

Das erste Beispiel ist eine Kombination der Befehle Assert und Retract. In einem Dokument wird ein bestimmtes Element mit einem neuen Wert versehen, der Assert Befehl überführt das upgedatete Dokument in die Rule Engine Memory. Dies führt dann zur Evaluierung der zweiten Rule, welche dann in der Action zur Vermeidung einer endless loop das Dokument aus der Rule Engine Memory mit Retract entfernt.

Dies ist die Initial Rule. Falls Field1 den Wert „letschain“ enthält wird Feld2 mit dem Wert „chainit“ versehen, sodass die nachfolgende Rule mithilfe des Assert Command getriggert wird:

Anmerkung: In diesem und allen nachfolgenden Beispielen sollte in der Praxis mit der exists Expression gegen nicht vorhandene Elemente im bereitgestellten Xml Document getestet werden. Dies ist in diesem Artikel nicht erläutert.

Das Beispieldokument sieht so aus:

Und hier die ChainedRule:

Das Dokument, das in der InitialRule asserted wurde, muss wieder mit Retract aus der Rule Engine Memory entfernt werden – ansonsten implementiert man eine endless loop und bekommt eine out-of-memory bzw. execution loop exception:

Testen mit Rule Engine Composer

Beim Test im Rule Engine Composer kann man mittels Add Instance ein xml Dokument mitgeben.

Tipp: Auch .Net Objekte können für diese Tests verwendet werden durch Bereitstellung von FactCreators. Hierbei kann man zusätzlich custom code gesteuert durch die BRE ausführen.

Nach Testen der Policy sieht das Beispieldokument so aus:

Feld1 wurde durch die ChainedRule gesetzt und Feld 2 durch die InitialRule.

Policy Trace

Beim Entwickeln der Policy mit dem Rule Engine Composer lohnt sich ein Blick in den Rule Engine Trace nach dem Testen einer Policy. Hierbei kann man eventuelle Ungereimtheiten beim Ausführen der Policy studieren.

Tipp: Die Rule Engine Logik basiert auf dem Rete Algorithmus. Diesen muss man nicht unbedingt auswendig kennen aber ein Studium der Prinzipien lohnt sich.
https://de.wikipedia.org/wiki/Rete-Algorithmus

 

Tipp: Es ist möglich, Teile dieses Policy Traces nach Deployment einer Applikation in der BizTalk Admin Console einzusehen (z.B. welche Rules gefired wurden …). Hierzu muss die Policy in einer Orchestration aufgerufen werden und Tracking auf der Policy aktiviert sein. Der Message Flow enthält dann einen Link zur Policy Execution. Dies kann bei der Fehlersuche sehr hilfreich sein und bei Bedarf aktiviert werden (Host Instance Restart benötigt …).

Der folgende Screenshot zeigt den Policy Trace vom Business Rules Composer:

Die grün umrahmten Einträge beweisen, dass beide Rules gefired wurden (d.h. die Actions werden ausgeführt).

Die blau umrahmten Einträge zeigen Fact Assertions und Retracts.

Die Maximum Execution Loop Depth wurde für die Entwicklung (only) auf Minimal Wert gesetzt um das Testen zu beschleunigen und die eventuellen out-of-memory exceptions zu umgehen.

Update Command

Das Update Command re-asserted den angegebenen Fact (z.B. Xml Document) in die Rule Engine Memory. Dies führt zu einer Re-Evaluierung von Rules, welche dieses Fact benutzen.

In der InitialRule stellen wir sicher, dass die darauffolgende Rule getriggert, aber die jetzige Rule nicht mehr evaluiert wird.

Das Dokument haben wir für das Update Command nicht aus dem Vocabulary geholt, sondern ausnahmsweise über den Fact Explorer (XML Schemas) rübergezogen. Hierüber lassen sich auch einzelne Records auswählen (Root in dem Beispiel).

Voraussetzung für die Funktionsweise der beschriebenen Rule ist natürlich, dass wir den entsprechenden Input haben:

In der Chained Rule setzen wir dann einen neuen Wert für Feld 1. Die Chained Rule wird in diesem Fall nur ausgeführt wenn das Dokument mit dem Update Command in der Initial Rule zur Re-Evaluierung bereitgestellt wird:

Beide Rule Actions werden nun ausgeführt mit dem Resultat:

 

Senior Solution Architect QUIBIQ Schweiz AG

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz