2015-04-01 7 views
2

У меня есть объект Customer. Объект клиента состоит из списка объектов запаса, а запас состоит из списка котировок и внутренней цитаты, это поле называется статусом. Вот мой объектный граф.Итерация через список перечня объектов

class Customer{ 
List<Stock> stocks; 
//getter and setters 
} 

class Stock{ 
List<Quote> quotes; 
//getter and setters 
} 

class Quote{ 
String status; 
//getter and setters 
} 

Теперь мне нужно написать правило в DRL, чтобы проверить, если статус «инициировать» в любом из списка цитатой объекта в акции, то все остальные значения для состояния котировок во всех акций для клиента, как предполагается, быть только «инициатором».

Значение, если статус «инициирован», тогда только инициирование является действительным значением для всех котировок для всех акций для клиента. Это только для статуса «инициировать».

Я потратил целый день, чтобы написать правило, но безуспешно. Я могу передать весь объект Customer только в механизм правил. Может ли кто-нибудь помочь?

ответ

0

Следующее правило срабатывает один раз, если Клиент имеет статус «Инициализировать» во всех котировках для всех акций или вообще не имеет «Инициализировать», то есть когда Клиент «чист».

rule checkini 
    dialect "java" 
when 
    $c: Customer($ss: stocks) 
    Boolean(booleanValue) 
    from accumulate(Stock($qs: quotes) from $ss, 
    init(int notini = 0; int isini = 0;), 
    action(for(Object q: $qs) 
       if("Initiate".equals(((Quote)q).getStatus())) isini++; 
       else notini++; ), 
    result(notini == 0 || isini == 0)) 
then 
    System.out.println("clean"); 
end 

Чтобы посмотреть, есть ли у клиента в мешанину «Начать» и что-нибудь еще, отрицают состояние результата.

+0

Мы используем диалект mvel. Делает, если и еще работает внутри действия ??? – user2997551

+0

Диалект «mvel» нарушен во многих версиях Drools, хотя многое сделано для улучшения ситуации. Используйте «диалект» java »в этом правиле, чтобы вернуться к упорядоченной компиляции. Или используйте статический метод Java для проверки этого свойства, как это делает накопитель. Или реализуйте заказное накопление, как описано в документации Drools. – laune

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