Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Pre-Requisites:
- You will need some experience using the Business Rules Composer (some basic staff is taken for obvious)
Benefits:
- There is no need to call a .NET component with SQL database helper functions or whatever
- Business rules engine will catch the results.
- If the requirement change, you can adapt the business rules on the fly with no need to redeploy the orchestration.
Use Case
The application must retrieve the picture path of a given customer from table tblCustomers on database Test and then perform several actions (no matter what)
Table looks like:
How to do it using Business Rules:
Steps
#1# You must create the XSD to call the Business rule engine in our case could be:
Where CustomerID will be an input parameter and Picture and Output.
#1# Add a New Definition to the desired already created vocabulary
#2# The vocabulary Definition Wizard will appear. Select the option Database Table or Colum and click Next
#3# Give a Definition Name a description
#4# Click on browse button to select the binding field in the database
#5# Click OK and the definition wizard window will change to reflect:
#6# Select Perform a Get Operation since we are just querying the database
#7# Click on Finish and do the same steps for the Picture field
#8#Save the vocabulary definition and publish it.
Let’s create the policy!
#1# Add a new Policy called BRCustomers
#2# Add a new Rule to the policy and call it BRCustomers
#3# under the Facts Explorer, got to XML Schemas tab and right click the Schemas node to browse for the BR_Customers.XSD file
This is the fact we are going to use with the policy.
#4# This is what we are going to:
What is this?
Textual this means:
If the CustomerId field of the incoming BizTalk Message is equal to CustomerID Field on the table i will return the corresponding Picture field
So.. it is just a seek for the Customer ID Field.
The magic in here: the BusinessRule enginge will perform internally the T-QUERY :
SELECT Picture FROM tblCustomers
WHERE CustomerID = @CustomerId
And you do not need to do nothing :-)
So…
#5# From the Facts Explorer Drag the CustomerID Field and drop in the first argument of the is equal to predicate (already inserted)
#6# Now Click on vocabularies and Drag the CustomerID database field in the second argument of the is equal to predicate .
#7# Now Go to XML Schemas again, drag the Picture field and drop it in the THEN Actions Section
#8# Go to Vocabularies TAB , drag the Picture database field to the assignment side of the THEN expression.
#9# Save Everything, publish and deploy de Business Rule
How to call this Business rule form BizTalk
Overall picture:
#1# add the Following references to the BizTalk project:
- (Microsoft.RuleEngine) C:\Program Files (x86)\Common Files\Microsoft BizTalk\Microsoft.RuleEngine.dll
- (System.Data) C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
#2# Create the BusinessRule Scope (transactiontype = Atomic)
#3# At BusinessRule scope level create the following variables:
- RulesDataConn of type Microsoft.RuleEngine.DataConnection
- SQLconn of type System.Data.SqlClient.SqlConnection
- SQLTran of type System.Data.SqlClient.SqlTransaction
#4# IN the BusinessRulesConnect Expresion:
SQLconn = new System.Data.SqlClient.SqlConnection(Connection string value);
SQLconn.Open();
SqlTran = SQLconn.BeginTransaction();
RulesDataConn =new Microsoft.RuleEngine.DataConnection ("DataBaseName", "TableName", SQLconn,SqlTran);
#5# Insert a call BusinessRule Shape and configure it:
#6# Insert the UpdateComClose Expresion and type:
RulesDataConn.Update();
SqlTran.Commit();
SQLconn.Close();
Done! Enjoy BusinessRule querying! ;-)
Comments
- Anonymous
May 03, 2010
Hello,In Step #5# I only see one parameter (RuleDataConn) in BTS 2009. In BTS 2006 I saw 2 (RuleDataConn & SQLConn).When I profile my database, my query never gets launched and I don't get a valid result or error. Am I missing something?Greetings,Sven - Anonymous
May 03, 2010
Hey Sven,Have you try to test the bussines rule?I'm assuming you are not getting event log errors or whatever!Thankyou for taking the time!Agustín - Anonymous
May 25, 2012
Is there any way I can access a view instead of a table?