Как проверить эквивалентность в таблице решений guvnor web?

У меня есть два факта, которые я вставляю в свой сеанс слюни. Я хочу проверить следующее:

(shipment1! = null && shipment1.shipToCustomerNo == waypoint1.shipToNumber) || shipment1 == null

Как мне добавить это условие в веб-таблицу решений guvnor? Я пробовал использовать предикат, а waypoint1 и shipment1 - это связанные переменные, которые успешно вставляются в сеанс. Если я использую предикат и добавляю то, что у меня есть выше, мои тестовые примеры работают нормально, но когда я действительно запускаю эти правила в своем java-приложении, условия никогда не оцениваются как истинные, даже если данные эквивалентны. Я пробовал много разных способов структурировать этот запрос. Ниже приведен сгенерированный источник:

//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

person Brett McLain    schedule 21.11.2013    source источник


Ответы (1)


Если я правильно понял ваш домен и описание проблемы, у вас должно получиться такое правило.

//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. Это либо есть, либо нет в рабочей памяти

person kaskelotti    schedule 22.11.2013