Я некоторое время работал с правилами drools и только недавно начал работать над dsl, чтобы упростить разработку правил для конечных пользователей. Хотя я смог получить простой dsl, определенный и правильно скомпилированный в drl, как и ожидалось, я не могу заставить работать функцию dsl «добавления ограничений к предыдущему выражению». Я даже пробую самые простые примеры из руководства drools dsl, и это не скомпилирует условия, которые я определил, начиная с '-', в предыдущее выражение. Я продолжаю получать «несоответствующую входную цену» в правиле «Rule1Sample_0», ошибка при его компиляции. как я сказал, у меня это работает для простых выражений условий и выражений следствий. но добавление ограничений после документов просто не работает вообще. Я использую drools версии 7.0.0. Наконец, это не поддерживается до более поздней версии?
В простом примере, который я тестирую, мой файл dsl просто содержит:
[condition][]There is a {ShoppingCart} that=${ShoppingCart!lc} : ${ShoppingCart!ucfirst}()
[condition][]- total price is greater than 1000 =totalPrice > 1000
[consequence]Update {ShoppingCart}=System.out.println("{ShoppingCart}" + " test")
Вот условие
"There is a ShoppingCart that total price is greater than 1000"
и действие, которое я указываю для части и когда мой шаблон:
"Action" "Update ShoppingCart"
Вот скомпилированный drl, прежде чем я передам его DrlParser:
rule "Test1"
dialect "mvel"
when
"There is a ShoppingCart that total price is greater than 1000"
then
"Update ShoppingCart"
end
Это то, что содержит строка extendedDrl после выполнения приведенного выше фрагмента кода:
package com.sample.test
rule "Test1"
dialect "mvel"
when
$shoppingcart : $Shoppingcart() total price is greater than 1000
then
System.out.println("ShoppingCart" + " test")
end
И вот сгенерированный drl для этого, когда я анализирую его с помощью DRLParser:
(фрагмент кода здесь, некоторые опущены)
DrlParser parser = new DrlParser();
DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dsl));
String expandedDrl = parser.getExpandedDRL(dslr, resolver);
Вот что содержит строка extendedDrl после запуска приведенного выше фрагмента кода:
package com.sample.test
rule "Test1"
dialect "mvel"
when
$shoppingcart : $Shoppingcart() total price is greater than 1000
then
System.out.println("ShoppingCart" + " test")
end
И ошибка компилятора, которую я вижу в консоль:
[[13,43]: [ERR 102] Line 13:43 mismatched input 'price' in rule "Test1" ....