Drools: как присвоить значение переменной «из» предопределенного метода при использовании PackageDescr для генерации правила?

#drools

#drools

Вопрос:

Как я могу сгенерировать что-то подобное в моем правиле, используя PackageDescr?

 $var: Number (doubleValue > 100 ) from myPredefinedFunction()

 

Я попробовал следующее :

 PatternDescr pt = new PatternDescr("Number","$var");
RelationalExprDescr ex = new RelationalExprDescr(">", false, null, new ExprConstraintDescr("myPredefinedFunction()"), new ExprConstraintDescr("100"));
pt.addConstraint(ex);
 

но это то, что я получаю :

  $var : Number( myPredefinedFunction() > 100 )  
 

Ответ №1:

Вы пытаетесь установить myPredefinedFuntion() как ограничение. Ограничения являются частью объявления drools между круглыми скобками, например. MyObject( foo == "bar" ) … это foo == "bar" ограничение.

Вместо этого вам нужно установить источник с помощью setSource метода. Это часть объявления «из». Этот метод использует экземпляр PatternSourceDescr подкласса — вероятно, a FromDescr для данного конкретного сценария.

(В качестве альтернативы, вам может понадобиться setResource вместо setSource . Проблема с использованием только внутренних API заключается в том, что они не документированы и могут быть изменены без предварительного уведомления. Я настоятельно рекомендую не идти по этому пути.)