Я хотел бы написать условие для оценки, если любое из установленных значений в фактах соответствует условию.
Это определение моего правила:
public void evaluateRule(Facts facts, String ruleNum) {
SpRuleDefinition spRuleDefinition = spRuleDefinitionService.findByRuleNum(ruleNum);
System.out.println("Invoke Action : " + spRuleDefinition.getActionNum());
facts.put("action", "ACTION1");
MVELRule rule = new MVELRule()
.name("Rule1")
.description("My Rule")
.priority(1)
.when("shipment.orgNum=='ORG1' && (shipment.fromAddress.country=='IN' || shipment.toAddress.country=='IN') && shipment.shipmentLines.itemDetail.active==false")
.then("shipment.setOutcome(action);");
Rules rules = new Rules();
rules.register(rule);
//Fire rules on known facts
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
Входные данныечто я передаю, может быть что-то вроде этого:
{"orgNum": "ORG1", "fromAddress": {"country": "SGP"}, "shipmentLines": [{"itemDetail": {"active": true, "countryOfOrigin": "IN"}, "itemNum": "I1", "amount": 10}, {"itemDetail": {"active": false, "countryOfOrigin": "US"}, "itemNum": "I2", "amount": 1}], "toAddress": {"country": "IN"}}
Я хотел бы оценить, имеет ли какая-либо из строк отгрузкиitemDetail с активным флагом, установленным в false.Вышеуказанное правило не выполняется со следующим исключением:
org.mvel2.PropertyAccessException: [Error: could not access: itemDetail; in class: java.util.HashSet]
[Near : {... s.country=='IN') && shipment.shipmentLines.itemDet ....}
]