我正在使用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函數,就像我在這裏的指導決策表中一樣?
這是相當粗略的:什麼是'$ tickCp','CurrTime'和'PrevTime'?您想要在決策表的各行中改變哪些值?你有沒有想過把「Java函數」隱藏爲類「CpClass」的方法? – laune
對不起,tickCp是一個錯字。 'CurrTime'和'PrevTime'是用戶定義的類'CpClass'的成員,'Cp'是同一個對象。如果我將這些函數作爲Class的一個方法,比如'parseTime()',我可以在引導表中使用它嗎? – ar7