DRL文件中的流口水全局变量初始化


 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

最新更新