BizTalk開發小技巧-.Net 調用BizTalk Business Rule Engine
BizTalk Business Rule Engine:BizTalk商務規則引擎,它的主要功能和特點是在不改變流程,不重新部署工程的情況下,動態配置策略資訊,修改策略邏輯.達到動態業務配置目的。類似WF的工作原理類似。
這次就是講在.net windows form的應用程式中調用BizTalk Business Rule Engine配置好商務規則。
實驗的情境:
類比報銷審批的簡單樣本,報銷金額<多少,審批通過。
原始碼
private
void button1_Click(object sender, RoutedEventArgs e)
{
BizTalkRules.Expenses.ExpenseClaim claim = new BizTalkRules.Expenses.ExpenseClaim()
{
Amount = Convert.ToInt32( this.textAmount.Text),
Category = this.cobCategory.Text,
Department = this.cboDepartment.Text,
Description = this.textDescription.Text,
Name = this.textName.Text,
Project = this.textProject.Text
};
if (claim.Category == "Software" && claim.Amount <= 500)
{
claim.Status = "Approved";
}
else
if (claim.Category == "Book" && claim.Amount <= 300)
{
claim.Status = "Approved";
}
else
{
claim.Status = "Require Approval";
}
//Microsoft.RuleEngine.Policy policy = new Microsoft.RuleEngine.Policy("ExpensesApproval");
//policy.Execute(claim);
this.textStatus.Text = claim.Status;
}
使用.net無非就是寫幾行IF Else IF Else 搞定的事情,但如果修改修改審批金額那就必須重新編譯發布。
為了達到這個目的,簡化代碼,作為一個BizTalk開發人員。就想到了類似的簡單判斷可以通過BizTalk商務規則引擎來實現。
如何整合和調用BizTalk商務規則引擎
1建立一個業務實體物件BizTalkRules.Expenses.ExpenseClaim在BizTalk商務規則引擎中稱Facts(事實類型)判斷的依據。因為這個Dll需要配置到GAC中才會被BizTalk 商務規則引擎擷取因此需要簽名
2編譯BizTalkRules.Expenses 將Dll部署到GAC中 運行 gacutil –i BizTalkRules.Expenses.dll
3配置BizTalk Business Rule Engine 開啟Business Rule Composer開始配置
配置(Conditions)條件和(Actions)步驟
說明一下Priority這個屬性如果這值越大就優先執行。
4.net中調用此規則。引用Microsoft.RuleEngine.dll,這個檔案在C:\Program Files (x86)\Common Files\Microsoft BizTalk或C:\Program Files (x86)\Microsoft BizTalk Server 2010
代碼如下
private
void button1_Click(object sender, RoutedEventArgs e)
{
BizTalkRules.Expenses.ExpenseClaim claim = new BizTalkRules.Expenses.ExpenseClaim()
{
Amount = Convert.ToInt32( this.textAmount.Text),
Category = this.cobCategory.Text,
Department = this.cboDepartment.Text,
Description = this.textDescription.Text,
Name = this.textName.Text,
Project = this.textProject.Text
};
Microsoft.RuleEngine.Policy policy = new Microsoft.RuleEngine.Policy("ExpensesApproval");
policy.Execute(claim);
this.textStatus.Text = claim.Status;
}
功能就是這樣,如果需要修改規則直接發布和部署新的Policies和Rules,而前端應用程式不需要重新便宜
擴充
可以對Microsoft.RuleEngine進行封裝後發布webService或WCF這樣就可以給更多的應用使用。