2015-08-03 112 views
1

我使用Drools創建決策表,並且遇到大於字符('>')的問題。 我在Drools文檔中看到,您可以使用'>'和'<',但我似乎出錯了。Drools決策表,「規則中輸入不匹配」>'

列是(我沒有足夠的聲譽還沒有發表圖片):

  • |條件|
  • | | (空單元格)
  • | duration> |
  • |時長|
  • | 50 |
  • | 200 |

問題是,架構不允許我得到完整的對象。我只能從RemoteObject獲得一些字段。 所以我可以做的事情是:

Integer duration = getRemoteObjectDuration(); 
kSession.insert(duration); 
kSession.fireAllRules(); 

導致:

[6,2]: [ERR 102] Line 6:2 mismatched input '>' in rule "RuleTable_11" 
[14,2]: [ERR 102] Line 14:2 mismatched input '>' in rule "RuleTable_12" 
[0,0]: Parser returned a null Package 

我可以創建一個包含我的領域爲虛擬對象,但必須有更好的東西做的。 有沒有人有這個想法?

+0

CONDITION下面不能有空單元格。 field(!)'duration'所在類的名稱是什麼?沒有什麼像「Java方面的整數」。將Integer對象作爲事實插入除非在特殊情況下才有用。 – laune

+0

謝謝,我編輯了這篇文章。我試着用一個只包含我的領域的虛擬對象,它的工作原理,也許這是唯一的解決方案... –

回答

1

要匹配一個整數,你可以使用規則像

rule findInt 
when 
    Integer($iv: intValue > 42) 
then 
    System.out.println("got an Integer > 42: " + $iv); 
end 

,因此,根據

CONDITION 
Integer 
intValue > 
- ... - 
42 

電子表格列這是當然的,註定當你有幾個失敗整數對象在工作內存中浮動,無法識別什麼是內容。

爲了您的困境,我會創建一個陰影對象來保存遠程對象的所有字段,而不是單獨包裝字段。

0

感謝laune的評論,我終於完成了它的工作,但我不得不創建一個只包含我需要的字段的自定義對象,並且我在CONDITION下面寫了這個新類的名稱。