2017-10-24 11 views
0

私はdroolsを初めて使っていて、APIのドキュメントを検索しようとしましたが、比較キーワード 'LIKE'について何も見つかりませんでした。私は<、>、< =、> =、==、!=でルールを作成しましたが、今は 'LIKE'キーワードを使ってルールを作成しようとしています。私は先輩から、SQLのようなキーワードのように動作するはずだと言われました。以下は、DRLファイルからの私のルールはあるが、私はDroolsの5.6.0DROOL 'LIKE'条件 - それは存在するのですか?

**From DRL File:** 
rule "5495Y" 
agenda-group "1" 
date-effective "04-Sep-2017" 
when 
JournalEntry : JournalEntry((ledgerCd=="COMN") && accountNumber LIKE 1234 
&& entryTypeCode == "Y"); 
DroolsUtil : DroolsUtil(); 
then 
JournalEntry.addConsequence("rejectReason","kk like test"); 
JournalEntry.addConsequence("sendToLedger","N"); 
DroolsUtil.reclassEntry(JournalEntry,"NOCHG", "5495Y"); 
end 

**Exact Error I am getting:** 
[38583,71]: [ERR 102] Line 38583:71 mismatched input 'LIKE' in rule "5495R" 
[38596,71]: [ERR 102] Line 38596:71 mismatched input 'LIKE' in rule "5495Y" 
[0,0]: Parser returned a null Package 

11:09:17,118 ERROR main ReclassAccountingRuleJob:132 - java.lang.Exception: Know 
ledgeBuilder has errors. DRL File parsing error 
java.lang.Exception: KnowledgeBuilder has errors. DRL File parsing error 
+0

あなたは何をすると思いますか? 「1234が好き」はどういう意味ですか? - SQLの "like"はパターンマッチングを行い、Droolsマニュアルはパターンマッチングのための "matches"演算子があることを伝えます。 – laune

+0

は「like 1234 *」または「like 1234%」と表示されます。これは1234で始まるものを意味します。正しい構文については確信しています。 –

答えて

0

Droolsのは、(正規表現のマッチングをサポートしていますを使用して、ルール5495Y

にはるかに強力な不一致入力「LIKE」に関するエラーを取得しています文字列型のためのSQLでLIKEオペレータ)属性より:

rule "5495Y" 
when 
    JournalEntry : JournalEntry(
     ledgerCd == "COMN", 
     accountNumber matches ".*1234.*", //accountNumber must be of type String. Otherwise, you will need to convert it first. 
     entryTypeCode == "Y" 
    ) 
    DroolsUtil : DroolsUtil() 
then 
    ... 
end 

matchesオペレータの詳細については、あなたは、ドキュメントのthis sectionを読むことができます。

希望すると、

+0

恐ろしい!エステバンに感謝します。とても有難い。 –

+0

それはうまくいきました。質問に回答したことを必ずマークしてください。 –

+0

accountNumberが "1234. *"に一致するルールを作成しようとしましたが、1234で始まるアカウント番号と一致しませんでした。 –