2016-11-10 4 views
1

Есть ли способ получить последнее событие, которое удовлетворяет определенному предикату?Получение последнего события, удовлетворяющего условию

Например, если я пишу это правило:

rule 1: 
    when 
    myObject: MyObject(id == "id1" && name == "name1" && type == "type1") 
    then 
    myObject.doSomething(); 

Я хочу, чтобы правило уволят, только если MyObject объект вставляется в последнее время с идентификатором "id1" имеет имя и тип. Обратите внимание, что за один раз может быть несколько MyObject с этим id.

В сущности, я хочу сделать что-то вроде этого:

rule 1: 
    when 
    myObject: (Get the latest MyObject with its id == "id1") and 
    (myObject.name == "name1" && myObject.type == "type1")) 
    then 
    myObject.doSomething(); 

Я использую Drools 6.2.0.

ответ

2

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

declare MyObject 
    @role(event) 
end 

вы можете написать это правило:

rule "latest id1-name1-type1" 
when 
    myObj: MyObject(id == "id1", name == "name1", type == "type1") 
    not MyObject(this after myObj, id == "id1") 
then 
    myObj.doSomething(); 
end 
+0

Я сделал некоторые изменения в ответ, чтобы сделать это отражает то, что я хотел точно. –

Смежные вопросы