Drools工作台:如何在规则文件内使用全局变量

时间:2019-07-08 11:27:54

标签: drools kie-workbench

我正在使用与Kie执行服务器集成的Drools工作台7.17。我已经使用工作台创建了项目,该工作台由数据模型,规则文件和全局定义组成。

如果执行规则,我想使用全局变量在其中设置一些值并检索全局变量值。我可以使用Spring Boot应用程序来实现这一点,在该应用程序中,我们使用kieSession.setGlobal("response", response);在会话内添加全局变量,然后使用kieSession.getGlobal("response")进行检索。我尝试使用Workbench复制相同的内容,但是在尝试在全局变量中设置值时却出现 null指针异常。以下是我的规则文件:

package com.myspace.drools_ruleengine;
import com.myspace.drools_ruleengine.Person;
global com.myspace.drools_ruleengine.Response response;
dialect "mvel"
rule "If person age >= 18 then person is adult"
no-loop
when
    $p: Person(age >= 18)
then
    response.setMessage("Adult");  // throwing error- null pointer exception
end

我创建了全局定义,并添加了响应作为Response类的别名。除此之外还需要什么吗?我正在使用 Kie Server Rest API 插入事实。

1 个答案:

答案 0 :(得分:1)

您需要在发送规则执行请求时初始化全局变量,例如:

<batch-execution>
<set-global identifier="obj">
  <com.sample.Test/>
</set-global>
<insert>
  <com.Person>
     <name>abc</name>
   </com.Person>
</insert>
<fire-all-rules/>
</batch-execution>

尝试这种方法