package com.example.drools;
global Integer count; // I want to initialize this count variable with some
default value.
rule "Initialize"
when
then
count= 1; // Locally it's possible but want it to set globally which can
be use in any other rules just simply by calling it.
System.out.println("count="+count);
end
rule "Drools Introduction"
when
then
System.out.println("count="+count); // Here output is coming null which in
want some default value set for
global value.
end
因此,只想在DRL文件中初始化计数变量?
您从规则内部更新全局的方式是使用自动变量kcontext
:
global Integer count;
rule "Initialize"
salience 100
when
then
kcontext.getKieRuntime().setGlobal("count", 1);
end
一些笔记:
- 您应该在规则中使用较高的显着性,以便在使用全局的任何其他规则之前被执行。
- 如果您在规则的LHS中使用全局,则此方法将无法使用。如果是这样,我建议使用事实而不是全局。
希望它有帮助,
java代码
public void loanApplication(LoanApplication loanApplication) {
KieSession kieSession = kieContainer.newKieSession();
kieSession.insert(loanApplication);
kieSession.fireAllRules();
// get your variable from .drl file
kieSession.getGlobal("myString");
}
.drl
文件
import com.example.demo.LoanApplication
global java.lang.String myString;
rule "Approval rule"
when
$loanApplication : LoanApplication()
LoanApplication(creditScore >= 600, income >= 30000, debtToIncomeRatio <= 50, employmentStatus != EmploymentStatus.UNEMPLOYED)
then
System.out.println("Loan application approved!");
kcontext.getKieRuntime().setGlobal("myString", "Loan application approved!");
$loanApplication.setLoan(true);
update($loanApplication);
end