有没有一种方法可以访问jbpm6脚本任务中drools规则引擎的工作记忆事实?
我有一个模型类: Application.java规则:检查工资是否大于10000 (规则组的一部分: salaryCheck )
jbpm流:启动-> salaryCheck(规则任务,关联规则组: salaryCheck) -> updateScore(脚本任务) -> end
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发布于 2015-09-30 14:08:32
getFactHandles()绝对不是您要寻找的方法。认为您正在寻找的方法是getObjects()。无论哪种方式,在没有任何验证的情况下获得返回集合的第一个元素对我来说都是危险的。您甚至不能保证返回集合中元素的顺序在不同调用之间保持不变。
更好的方法是使用接受getObjects()参数的ObjectFilter版本。一种更好、更“声明式”的方法是定义一个查询,返回您要寻找的确切对象。然后可以使用kcontext.getKieRuntime().getQueryResults()执行查询。
您可以在以下线程中更好地理解这2种方法(使用ObjectFilter或查询):Retrieving facts of a specific type from working memory
编辑:
我建议使用查询或ObjectFilter的帖子是Drools 5代码。在Drools 6中,API类被移到不同的包中。如果要在代码中调用查询,应该使用以下导入:
org.kie.api.runtime.rule.QueryResultsorg.kie.api.runtime.rule.QueryResultsRow这些类都是kie-api项目的一部分。
https://stackoverflow.com/questions/32854650
复制相似问题