#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)
Я не тестировал его, но вам следует посмотреть в этом направлении, если вы не можете вставить больше типизированных фактов.
Приветствия