В приведенном ниже правиле логика в then-части выполняется для всех дочерних объектов, которые передают данное условие, я хочу прервать цикл после логики в then-часть выполняется только один раз, как это сделать
rule "test"
when
Parent( $childList : childList != null, childList.empty == false)
Child('testing'.equalsIgnoreCase(attribute)) from $childList
then
// testLogic
end
Если вам не нужна ссылка на объект Child
(или любой из его атрибутов) в RHS
, вы можете использовать оператор exists
:
rule "test"
when
Parent( $childList : childList != null, childList.empty == false)
exists Child('testing'.equalsIgnoreCase(attribute)) from $childList
then
// testLogic
end
Если по какой-то причине вам нужен объект Child
или любой из его атрибутов, вы можете сделать что-то вроде этого (хотя это не очень хорошо):
rule "test"
when
Parent( $childList : childList != null, childList.empty == false)
$c: Child('testing'.equalsIgnoreCase(attribute)) from $childList.get(0)
then
// testLogic
end
Надеюсь, поможет,
Причина бесконечного цикла должна быть известна путем определения того, является ли он самозависимым или сложным.
Вы можете использовать 'no-loop' рядом с именем правила как no-loop true
Вы также можете ограничить, используя группу повестки дня, проверяя условия или как флаг. Это зависит от вашей сложности.
Вопрос не в бесконечных циклах, а в том, как запустить один раз, когда у вас несколько активаций.
Хорошо. Не могли бы вы отметить вопрос как отвеченный? Спасибо