我有以下两条规则:
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
当我通过REST访问Drools发送以下请求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中接收所有被解雇的规则的结果。
谢谢
答案 0 :(得分:1)
如果规则数量限制为2并且将来不会扩展,则可以分别为每个规则创建2个全局响应对象。 否则,您可以通过引用传递List对象到DRL文件。
rule "rule1"
when
Loan(processId == "1")
$list: ArrayList<Response>
myResponse:Response()
then
myResponse.setRuleId("rule1");
myResponse.setPmtStatus("valid");
$list.add(myResponse);
端