2017-03-01 81 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