我使用Drools模板(.drt文件),在这里我想比较事实的某些参数是小于还是大于某个double值。但是事实参数是字符串表示形式(该对象的参数都是字符串类型)。因此,我尝试将其解析为以下形式的两倍: 什么时候
$pile: Resource(Double.valueOf(amount) < 30.0) //or next
//$pile: Resource(Double.parseDouble(amount) < 30.0)//both don't work in drt
然后 ... 问题在于,在其他规则中,该规则正常运行,但是这里给出了例外:
java.lang.RuntimeException:错误评估约束 [Rule中的'Double.parseDouble(name)== Double.parseDouble(“ 5.0”)' “ pileDriverRates.xls中的“打桩机的机器hours_5的计算”]
在drl文件中,这种比较工作正常,也许在.drt文件中必须使用另一种方法? 我使用intellij的想法,Ubuntu 我的pom.xml:
<dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-test</artifactId>
<version>${runtime.version}</version>
</dependency>
</dependencies>
模板头
code
name
weightMin
weightMax
boom
打包rules.drivenPiles;
import com.sample.Work;
import com.sample.Resource;
import com.sample.ResourceParameter;
dialect "mvel"
“选择起重机吊臂”模板
rule "Choose crane boom_@{row.rowNumber}"
salience -20
activation-group "second"
when
$pile: Resource(Double.parseDouble(amount) > @{weightMin}, Double.parseDouble(amount) < @{weightMax})
then
String boomLength = "@{boom}";
它给出了一个错误,但是当我将when语句设为: 什么时候
$pile: Resource(amount == "50")
它触发规则(如果金额为50,则我手动进行检查)。 因此,我的猜测是,解析无法在.drt文件中进行,但是我的朋友告诉我他在.drt文件中进行了制作,例如Double.valueOf(amount)== 50.0这样的行就可以了。
答案 0 :(得分:0)
问题出在Drools中的规则评估和规则执行阶段。我试图在评论中描述它,但是我认为它完全弄乱了整个画面,所以我创建了一个新问题: How to control rule evaluation (or rule execution) stages in Drools? 因此,如果您在尝试将事实的参数从Double更改为String或类似方法时遇到异常-这可能是原因之一