IT tutorials
 
Applications Server
 

BizTalk Server 2009 : Testing Business Rules

6/20/2013 7:53:23 PM
- Free product key for windows 10
- Free Product Key for Microsoft office 365
- Malwarebytes Premium 3.7.1 Serial Keys (LifeTime) 2019

Once all business policies and their required vocabularies are defined, you need to test and debug them before deploying them in production.

Because of the nonsequential nature of business processes, the Business Rules Composer doesn't provide the same testing, tracing, and debugging functionality as procedural development environments such as Visual Studio. Nonetheless, it does provide a testing tool, shown in Figure 1.

Figure 1. The Business Rule Composer testing tool interface

You can simply select fact instances for the testing tool to assert into the engine for your policy or select a FactCreator[] that the testing tool will instantiate and call to create the facts required for the policy execution. The testing tool then uses the DebugTrackingInterceptor[] to track the execution of the Business Rule Engine and display it in the output window.

[] A fact creator, used to generate facts for policy testing, implements the Microsoft.RuleEngine. IFactCreator interface. The fact creator needs to implement the GetFactTypes and CreateFacts methods, which return an array of object types and objects respectively for a given rule set.

[] The Business Rule Engine allows for the registration of tracking interceptors that implement the Microsoft.RuleEngine.IRuleSetTrackingInterceptor interface to be notified along with the execution of the engine and track its progress.

The following extract of output was produced by the Business Rule Composer testing tool when testing the Loans Processing policy from the Loans Sample in the SDK. It shows the details of the tracked information by the DebugTrackingInterceptor.

RULE ENGINE TRACE for RULESET: LoanProcessing 5/19/2009 12:46:13 PM

FACT ACTIVITY 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Operation: Assert


Object Type: DataConnection:Northwind:CustInfo
Object Instance Identifier: 782

FACT ACTIVITY 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 778

FACT ACTIVITY 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:Root
Object Instance Identifier: 777

CONDITION EVALUATION TEST (MATCH) 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Test Expression: NOT(TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:
                                                    Root.Income/BasicSalary > 0)
Left Operand Value: 12
Right Operand Value: 0
Test Result: False

CONDITION EVALUATION TEST (MATCH) 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Test Expression: NOT(TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:
                                                    Root.Income/OtherIncome > 0)
Left Operand Value: 10
Right Operand Value: 0
Test Result: False

CONDITION EVALUATION TEST (MATCH) 5/19/2009 12:46:13 PM
Rule Engine Instance Identifier: fb330399-15f0-4dc7-9137-4463a32f580e
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:
                                            Root.PlaceOfResidence/TimeInMonths >= 3
Left Operand Value: 15
Right Operand Value: 3
Test Result: True
[.. cut for brevity ..]

					  

If you are testing or executing policies outside of BizTalk or in a component consumed within BizTalk, you can specify an alternative custom interceptor that implements the IRuleSetTrackingInterceptor interface.[] Creating your custom interceptor allows you to track and log as much information as your application requires. It allows you to step through the rule processing and view fact details through the facts you pass to the policy. The following code snippet demonstrates how to invoke your custom interceptor—MyInterceptorClass.

[] A custom tracking interceptor that implements the Microsoft.RuleEngine. IRuleSetTrackingInterceptor interface needs to implement the SetTrackingConfig, TrackAgendaUpdate, TrackConditionEvaluation, TrackFactActivity, TrackRuleFiring, and TrackRuleSetEngineAssociation methods, which allow it to intercept the execution sequence, agenda, and facts updates for a specified rule set.

...
xmlDocument = IncomingXMLMessage.XMLCase;
typedXmlDocument = new
Microsoft.RuleEngine.TypedXmlDocument("Microsoft.Samples.BizTalk.LoansProcessor.
                                                                 Case",xmlDocument);
policy = new Microsoft.RuleEngine.Policy("LoanProcessing");
policy.Execute(typedXmlDocument,new MyInterceptorClass());
OutgoingXMLMessage.XMLCase = xmlDocument;
policy.Dispose();
...

					  

The RuleTesterApp project accompanying this book implements a simple rule testing tool. The tool's user interface allows the user to load XML policy definitions, specify the destination trace output file, and then execute those policies. To experiment with your own custom tracking interceptor, instantiate your interceptor in the method FireRule RulesTesterFrm class on line 267 instead of the current instantiation of the DebugTrackingInterceptor.

...
 // Change the following line to instantiate your own custom Tracking Interceptor
DebugTrackingInterceptor dti = new DebugTrackingInterceptor(traceFileName);
try
{
   for( int i = 0 ; i < policies.Length; i++ )
  {
      string PolicyName = policies[i].Trim();
      lblProcessing.Text = PolicyName;
      ProcessingTxtBx.Text = ProcessingTxtBx.Text + "Processing ... " + policies[i]
                             + " " + DateTime.Now + "\r\n";
      Application.DoEvents();
      Microsoft.RuleEngine.Policy tstPolicy = new
                                            Microsoft.RuleEngine.Policy(PolicyName);
      ArrayList shortTermFacts = null;
      shortTermFacts =GetFacts(PolicyName);
      shortTermFacts.Add(doc1);
      // Change the following line to pass in your own custom Tracking Interceptor
      // to the rule set Execute method
      tstPolicy.Execute(shortTermFacts.ToArray(), dti);
      tstPolicy = null;
   }
}
...		  
 
Others
 
- Migrating to Configuration Manager 2007 : Migrating Hardware Inventory Customizations, Troubleshooting Upgrade Issues
- Migrating to Configuration Manager 2007 : Side-by-Side Migrations
- Microsoft Dynamic GP 2010 : System and Company Setup (part 7) - Company setup - Posting setup, E-mail setup
- Microsoft Dynamic GP 2010 : System and Company Setup (part 6) - Company setup - Shipping Methods, Credit Cards
- Microsoft Dynamic GP 2010 : System and Company Setup (part 5) - Company setup - Company setup, Fiscal Periods
- Microsoft Dynamic GP 2010 : System and Company Setup (part 4) - Company setup - Multicurrency, Taxes
- Microsoft Dynamic GP 2010 : System and Company Setup (part 3) - Company setup - Account setup
- Microsoft Dynamic GP 2010 : System and Company Setup (part 2)
- Microsoft Dynamic GP 2010 : System and Company Setup (part 1)
- Administering with Windows PowerShell and Active Directory Administrative Center (part 4)
 
 
Top 10
 
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 2) - Wireframes,Legends
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 1) - Swimlanes
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Formatting and sizing lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Adding shapes to lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Sizing containers
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 3) - The Other Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 2) - The Data Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 1) - The Format Properties of a Control
- Microsoft Access 2010 : Form Properties and Why Should You Use Them - Working with the Properties Window
- Microsoft Visio 2013 : Using the Organization Chart Wizard with new data
Technology FAQ
- Is possible to just to use a wireless router to extend wireless access to wireless access points?
- Ruby - Insert Struct to MySql
- how to find my Symantec pcAnywhere serial number
- About direct X / Open GL issue
- How to determine eclipse version?
- What SAN cert Exchange 2010 for UM, OA?
- How do I populate a SQL Express table from Excel file?
- code for express check out with Paypal.
- Problem with Templated User Control
- ShellExecute SW_HIDE
programming4us programming4us