我在流口水的会话中插入了两个事实。我想检查以下内容:
(shipment1!=null&&shipment1.shipToCustomerNo==waypoint1.shipToNumber)|| shipment1==null
如何在基于网络的决策表中添加此条件?我尝试过使用谓词,waypoint1和shipment1是绑定变量,它们正在成功插入会话中。如果我使用谓词并添加上面的内容,我的测试用例就可以正常工作,但当我在java应用程序中实际运行这些规则时,即使数据是等效的,条件也永远不会计算为true。我已经尝试了许多不同的方法来构建这个查询。以下是生成的来源:
//from row number: 1
rule "Row 1 Arrive Destination"
salience 3
activation-group "arrive-destination"
dialect "mvel"
when
waypoint1 : Waypoint( type == "Destination" )
clm1 : CarLocationMessage( sightCode == "Z" , loaded == true )
shipment1 : Shipment( eval( (shipment1 != null && shipment1.shipToCustomerNo == waypoint1.shipToNumber) || shipment1 == null ))
then
TripEventRuleResult tripEventRuleResult1 = new TripEventRuleResult();
tripEventRuleResult1.setEventType( "Arrive" );
insert( tripEventRuleResult1 );
end
如果我正确理解了您的域和问题描述,您应该能够执行这样的规则。
//from row number: 1
rule "Row 1 Arrive Destination"
salience 3
activation-group "arrive-destination"
dialect "mvel"
when
waypoint1 : Waypoint( type == "Destination" )
clm1 : CarLocationMessage( sightCode == "Z" , loaded == true )
Shipment( shipToCustomerNo == waypoint1.shipToNumber) or
not Shipment()
then
TripEventRuleResult tripEventRuleResult1 = new TripEventRuleResult();
tripEventRuleResult1.setEventType( "Arrive" );
insert( tripEventRuleResult1 );
end
简而言之,您不需要对Shipment对象进行null检查。它在或不在工作内存中