Слюни: Выполнять правило только после того, как другое было выполнено - PullRequest
0 голосов
/ 11 мая 2018

У меня есть два правила Drools в одном и том же файле drl, например:

rule "If critical"
when 
incident:Incident(state=CRITICAL)
then
incident.getIncidentValve().activateAlarm();
end;

rule "If alarm"
when 
valve:Valve(hasAlarm==true)
then
SMS.send(valve.getId());
end;

Моя идея состоит в том, чтобы обработать с первым правилом все инциденты, которые находятся в критическом состоянии.И затем со вторым правилом, если какой-либо клапан имеет сигнал тревоги, который был установлен по правилу «Если критично», отправьте SMS.

Проблема заключается в том, что при первом выполнении правил SMSне отправлено.Кажется, это так, потому что «когда» обоих правил проверяется одновременно.

Мой вопрос заключается в том, как я могу сообщить Drools, что я хочу сначала выполнить «Если критично», а затем, после того как были вызваны методы «activAlarm», выполнить правило «Если тревога», чтобы отправить SMS.

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

Также пробовал с повесткой группы и setFocus, но это никуда меня не привело.

Есть идеи?Это возможно с Drools?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Вы можете использовать ключевое слово Drools. Придайте положительное значение важности первому правилу. Смотри документацию здесь . Попробуйте определить ваше правило следующим образом

rule "If critical"
salience 100 
when 
incident:Incident(state=CRITICAL)
then
incident.getIncidentValve().activateAlarm();
end;

rule "If alarm"
when 
valve:Valve(hasAlarm==true)
then
SMS.send(valve.getId());
end;.
0 голосов
/ 24 мая 2018

Использовать атрибут extends исключение Если тревога распространяется Если критично

То есть Если сигнал тревоги правило сработает только после того, как ЕСЛИ критическое правило выполнено Это означает создание полной зависимости от предыдущего правила А также вы должны обновить факт в первом правиле, используя модифицировать или обновить, если во втором правиле требуется какое-либо обновленное значение. Надеюсь, мой ответ поможет вам. Дайте мне знать, если какие-либо запросы на то же самое.

0 голосов
/ 12 мая 2018

Проблема в том, что факты после выполнения 1-го правила не обновляются.Чтобы использовать значения, измененные в 1-м правиле, необходимо обновить значения с помощью функции обновления.

...