2017-03-01 58 views
0

我正在使用drools 6.5.0.Final来创建我的drools项目。我试图在工作台中使用指导决策表(.gdst)。我想在规则的WHEN,然后部分使用一些Java代码,如允许我在.drl文件,如下图所示:如何在drools工作台中创建的规则中使用java代码

rule "filter rule" 
when 
    //conditions 
    $Cp : CpClass(name == "Tom", 
        Math.abs(score) > 10 
       && 
        // How do I use functions like below? 
        ($Cp.parseTime(CurrTime).getTime() - 
         $Cp.parseTime(PrevTime).getTime())/1000 > 120 
       ) 
then 
    //actions 
    System.out.println("Rule passed for : "+ $Cp.toString()); 
    $Cp.isGoodCp = true; 
end 

在上面的例子中使用的对象:

public class CpClass { 

    public String name; 
    public String currTime; 
    public String prevTime; 
    public boolean isGoodCp = false; 

    // Function to parse string to date 
    public Date parseTime(String time) { 
     SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
     Date parsedDate = null; 
     try { 
      if(time != null) 
       parsedDate = sdf.parse(time.substring(11)); 
      else 
       parsedDate = sdf.parse("00:00:00"); 
     } catch (Exception e) { 
      System.out.println("Error parsing:"+e); 
     } 
     return parsedDate; 
    } 
} 

有没有一种方法来使用用户定义/内置的java函数,就像我在这里的指导决策表中一样?

+0

这是相当粗略的:什么是'$ tickCp','CurrTime'和'PrevTime'?您想要在决策表的各行中改变哪些值?你有没有想过把“Java函数”隐藏为类“CpClass”的方法? – laune

+0

对不起,tickCp是一个错字。 'CurrTime'和'PrevTime'是用户定义的类'CpClass'的成员,'Cp'是同一个对象。如果我将这些函数作为Class的一个方法,比如'parseTime()',我可以在引导表中使用它吗? – ar7

回答

0

有没有一种方法来使用用户定义/内置的Java函数,就像我在这里的指导决策表一样?

是的,在所有的规则。他们的关键是让代码对他们可用。

KIE WorkBench和KIE Execution Server都使用Maven构建工具进行依赖性管理;因此,答案是Maven的配置和使用。 [0]

基本上,您将补充代码构建到jar并将其部署到KWB和KES可用的远程Maven存储库。如何构建,打包并将jar部署到远程repo是您的选择;通常使用Maven或Gradle。这是在KWB外部完成的。

然后,编辑KWB项目的pom.xml文件,添加jar依赖项。 KWB“项目编辑器”具有添加依赖项的功能,或者您可以手动添加它[1]。

KWB项目编辑器没有用于添加该部分的UI功能,因此请更改到cog设置图标上的“存储库视图”并直接编辑pom.xml文件[2]。另外,如果使用具有凭据的远程Maven存储库,请为该KWB的每个Maven插件页面配置settings.xml以访问它。

现在该jar的内容可用于规则的使用与任何Drools代码一样。

[0] http://maven.apache.org/guides/index.html

[1] https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

[2] http://maven.apache.org/plugins/maven-deploy-plugin/usage.html

+0

我明白我可以从maven dependencies导入这些函数,但是我的问题是如何在引用的决策表中使用这些函数,其中源不是真正可编辑的。方言MVEL有帮助吗? – ar7

+1

哦,我错误地推断了你的问题。在导入课程后,如果基本条件/操作类型不适合您的情况,请使用BRL条件/操作类型并使用DRL作为内容。 – Jeff

+0

但是,如果我这样做,我将无法为不同的行设置不同的值吗?有没有办法从公式或其他东西中使用对象的成员函数? – ar7

相关问题