2015-09-29 100 views
0

響應XML我有以下兩條規則:Drools的 - 從多個規則執行

global Response myResponse; 

rule "rule1" 
    when 
     Loan(processId == "1") 
    then 
     myResponse.setRuleId("rule1"); 
     myResponse.setPmtStatus("valid"); 
end 

rule "rule2" 
when 
    Loan(amount > 1000) 
then 
    myResponse.setRuleId("rule2"); 
    myResponse.setPmtStatus("invalid"); 
end 

當我訪問的Drools通過REST發送下面的請求XML,根據插入的數據,這兩個規則應該解僱。

<batch-execution lookup="testsession"> 
    <set-global identifier="myResponse" out-identifier="response"> 
     <com.sample.Response></com.sample.Response> 
    </set-global> 

    <insert out-identifier = "loan"> 
    <com.sample.Loan> 
     <loanId>11112222</loanId> 
     <processId>1</processId> 
     <amount>2000.00</amount> 
    </com.sample.Loan> 
    </insert> 
<fire-all-rules/> 
</batch-execution> 

在我的迴應XML中,我想從兩個規則中收到結果信息。例如,我想獲得一個ruleID = rule1和pmtStatus = valid的響應節點,另一個節點的ruleId = rule2和pmtStatus = invalid。

現在,我只從最後執行的規則中獲得結果。請你提醒我應該如何提出我的請求,以便在我的返回XML中接收所有解僱規則的結果。

感謝

+1

請求是沒有問題的,但是,全球響應myResponse只能容納從一個規則執行的數據很明顯。如何使用'List '? – laune

+0

謝謝laune。這有幫助。 – efuller

回答

1

如果規則的數量被限制爲兩個,並不會在未來的擴展,你可以有分別針對每個規則的創建2個全球響應對象。 否則,您可以通過引用DRL文件傳遞List對象。

rule "rule1" 
when 
    Loan(processId == "1") 
    $list: ArrayList<Response> 
    myResponse:Response() 
then 
    myResponse.setRuleId("rule1"); 
    myResponse.setPmtStatus("valid"); 
    $list.add(myResponse);