有没有办法在jbpm6脚本任务中访问drools规则引擎的工作内存事实?
我有一个模型类:Application.java 规则:检查工资是否> 10000(规则组的一部分:salaryCheck)
jbpm流程:开始->salaryCheck(规则任务,与规则组关联:salaryCheck)->updateScore(脚本任务)->结束
updateScore - 脚本 rask 代码:
System.out.println(System.out.println((Application)(kcontext.getKieRuntime().getFactHandles().toArray()[0]));
错误:
java.lang.ClassCastException: org.drools.core.common.DefaultFactHandle cannot be cast to org.model.Application
更新的脚本任务:
import org.model.Application
import org.drools.runtime.rule.QueryResults
import org.drools.runtime.rule.QueryResultsRow
QueryResults results = kcontext.getKieRuntime().getQueryResults( "getObjectsOfApplication" );
for ( QueryResultsRow row : results ) {
Application applicantion = ( Application ) row.get( "$result" );
application.setScore(700);
System.out.println("Application object :: "+ application);
}
向规则 drl 文件添加了查询
query "getObjectsOfApplication"
$result: Application()
end
最佳答案
getFactHandles()
绝对不是您正在寻找的方法。您正在寻找的方法是getObjects()
。不管怎样,在没有任何验证的情况下获取返回集合的第一个元素对我来说似乎很危险。您甚至无法保证返回集合中元素的顺序在不同调用之间保持相同。
更好的方法是使用接受 ObjectFilter
参数的 getObjects()
版本。更好、更“声明性”的方法是定义一个查询,返回您正在查找的确切对象。然后,您可以使用 kcontext.getKieRuntime().getQueryResults()
执行查询。
您可以在此线程中更好地了解这两种方法中的任何一种(使用 ObjectFilter
或查询):Retrieving facts of a specific type from working memory
编辑:
我建议的有关使用查询或 ObjectFilter
的帖子是 Drools 5 代码。在 Drools 6 中,API 类被移至不同的包中。如果您想在代码中调用查询,则应该使用这些导入:
org.kie.api.runtime.rule.QueryResults
org.kie.api.runtime.rule.QueryResultsRow
这些类都是 kie-api
项目的一部分。
关于java - 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存事实吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854650/