правило drools получает значение из карты

#drools #drools-flow #drools-planner

#drools #drools-flow #drools-планировщик

Вопрос:

Как получить пертикулярное значение в блоке drools when.

Я ищу что-то подобное, но оно не работает:

Я вставил Hashmap в рабочую память и пытаюсь извлечь его, когда

 $expiry_date:HashMap(get("CREDIT_CARD_EXPIRATION_DATE"));
eval(ageInDays($expiry_date)>10) ;
  

Я получаю ошибку ниже

 [42,37]: [ERR 101] Line 42:37 no viable alternative at input '"CREDIT_CARD_EXPIRATION_DATE"' in rule "Rule1" in pattern HashMap
  

Ответ №1:

Для карт / списков / массивов вы можете использовать синтаксис [] для доступа к элементам. Кроме того, если вы используете Drools 5.3 , оценки в настоящее время в основном не имеют значения.

 rule X
when
    HashMap( ageInDays(this["CREDIT_CARD_EXPIRATION_DATE"]) > 10 )
then
    ...
end
  

С Drools 5.1 / 5.2 вы могли бы сделать:

 rule X
when
    HashMap( eval( ageInDays(this["CREDIT_CARD_EXPIRATION_DATE"]) > 10 ) )
then
    ...
end
  

Ответ №2:

Обычно лучше вставлять больше типизированных объектов, чем просто хэш-карту. Можете ли вы объяснить информацию, которую вы пытаетесь обработать, и почему вы решили вставить a hashmap вместо a typed object ?

Я почти уверен, что вы можете сделать что-то вроде:

 HashMap($expire: keys["CREDIT_CARD_EXPIRATION_DATE"] )
eval(ageInDays($expire) > 10)
  

Я не тестировал его, но вам следует посмотреть в этом направлении, если вы не можете вставить больше типизированных фактов.
Приветствия