ルールを実行するには、スプレッドシート形式でdroolsのデシジョン·テーブルを使用する方法?

次のコード例では、2つの方法がありますrules.Thereを実行するために、デシジョン·テーブルを使用するプロセスを説明します

A) ルールを直接実行するためにスプレッドシートのAPIを使用して、.
B) drlファイルにExcelのスプレッドシートに変換してから、ルールを実行.

私は2番目のプロセスを説明します (B).







** メインのJavaクラスは、 'DroolExcelDemo.java'です。まずそれがにExcelシートに変換されます (.DRL) ファイル、次にルールを実行.




package DROOLS;

輸入java.io.BufferedWriter;
輸入java.io.FileInputStream;
輸入java.io.FileNotFoundExceptionが;
輸入java.io.FileWriter;
輸入java.io.IOExceptionが;
java.io.InputStreamをインポート;
輸入java.util.Collectionの;

輸入org.drools.KnowledgeBase;
輸入org.drools.KnowledgeBaseFactory;
輸入org.drools.builder.KnowledgeBuilder;
輸入org.drools.builder.KnowledgeBuilderFactory;
輸入org.drools.builder.ResourceType;
輸入org.drools.decisiontable.InputType;
輸入org.drools.decisiontable.SpreadsheetCompiler;
org.drools.definition.KnowledgePackageインポート;
輸入org.drools.event.rule.DebugAgendaEventListener;
輸入org.drools.event.rule.DebugWorkingMemoryEventListener;
輸入org.drools.io.ResourceFactory;
輸入org.drools.runtime.StatefulKnowledgeSession;

/**
* このクラスは、Excelシートからdrlファイルを作成します
* その後ルールを実行.
*/
publicクラスDroolExcelDemo {
公共の静的な最終的な無効メイン(最後の文字列[] argsに) {
// 知識ビルダーを作成
最終KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

// Excelシートからdrlファイルを作成します。
InputStreamは、= NULLである;
試す {
=新しいFileInputStreamはある(“D:/ワークスペース/ DroolsDemo / srcに/ Droolsの/ DroolExcel.xls”);

} キャッチ (FileNotFoundExceptionが電子) {
e.printStackTrace();
}
// コンパイラクラスのインスタンスを作成します
SpreadsheetCompilerのSC =新しいSpreadsheetCompilerの();

// 生成するためにExcelをコンパイル (.DRL) ファイル
StringBufferにDRL =新しいStringBuffer(sc.compile(です, InputType.XLS));

// drlファイルに方言値を挿入
drl.insert(drl.indexOf(“Droolsの”)+40,”方言”MVEL ””+”\N”);

// 生成されたdrlファイルをチェックして
System.out.printlnは(“DRLファイルは、以下の表示されて生成する–: “);
System.out.printlnは(DRL);

// drlファイルに文字列を書き込む
試す {
=新しいBufferedWriterの外にBufferedWriterの(新しいFileWriter(“D:/ワークスペース/ DroolsDemo / srcに/ Droolsの/ RuleFile.drl”));
out.write(drl.toString());
out.close();
}
キャッチ (IOExceptionが電子){
System.out.printlnは(“例外 “);
}
// 次のセクションでdrlファイルを使用する前に待つ.
試す {
のThread.sleep(10000);
} キャッチ (InterruptedExceptionある電子) {
e.printStackTrace();
}
// Excelシートからdrlファイルの最後の作成

// DRLファイルを使用して
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

// エラーのビルダーをチェック
場合 ( kbuilder.hasErrors() ) {
System.out.printlnは(“kbuilderにエラーがあります”);
System.out.printlnは( kbuilder.getErrors().toStringメソッド());
}
// コンパイルされたパッケージを取得 (これは直列化可能です)
最後のコレクションPKGS = kbuilder.getKnowledgePackages();

// ナレッジベースにパッケージを追加する (知識パッケージを配備).
最後のナレッジkbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);

// ステートフルセッションを作成
最終StatefulKnowledgeSessionのksession = kbase.newStatefulKnowledgeSession();

// イベントリスナーを設定する
ksession.addEventListener(新しいDebugAgendaEventListener());
ksession.addEventListener(新しいDebugWorkingMemoryEventListener());

// メッセージテキストを作成
DroolMessage messageTxtは=新しいDroolMessage();
messagetxt.setMessage(“フライトナンバー”);

DroolMessage messagetxt1 =新しいDroolMessage();
messagetxt1.setMessage(“FlightCode”);

// セッションと火ルールに挿入
System.out.printlnは(“セッションに挿入”);
ksession.insert(messageTxtは);
ksession.insert(messagetxt1);
System.out.printlnは(“ルールの起動前に”);
ksession.fireAllRules();
System.out.printlnは(“ルールを焼成後”);
ksession.dispose();
System.out.printlnは(“処分後”);
}
}








* *二番目のファイルは 'DroolMessage.javaです’ POJOクラス. これは、上述の主要なJavaクラスによって設定された値を保持している.

package DROOLS;
/**
* This is a POJO for messages.It will be used by the drl file.
* The message values will be set from the DroolExcelDemo class
*/
public class DroolMessage {
// Create variable
private String message;

// ビルダー
公共DroolMessage() {
System.out.printlnは(“メッセージを初期化する”);
}
// setterメソッドとgetterメソッド
パブリック文字列のgetMessage() {
メッセージを返す;
}
公共ボイドもしも、setMessage(文字列メッセージ) {
this.message =メッセージ;
}
// ルールの実行をテストするための試験方法
公共ボイド試験(文字列test) {
System.out.printlnは(“開始位置と終了位置を解析する: “+テスト);
}
}

** 以下は 'DroolExcelDemo.javaによって生成されたルールファイルです’ クラス.

package DROOLS;
//generated from Decision Table
dialect "mvel"
import DroolMessage;
// rule values at B12, header at B7
rule "DroolExcelRule_12"
when
msg:DroolMessage(message == "FlightNumber")
then
msg.test("1,6");
end

// B13でのルールの値, B7のヘッダー
支配 “DroolExcelRule_13”

MSG:DroolMessage(メッセージ== “FlightCode”)
その後
msg.test(“7,8”);
終わり

** 以下に、入力が 'DroolExcelDemo.javaに基づくルール·ファイルをExcelです’ 上記のクラス.


15 thoughts on “ルールを実行するには、スプレッドシート形式でdroolsのデシジョン·テーブルを使用する方法?

    1. kaushik Post author

      Hi Daniel,

      Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.

      Cheers
      /KP

    1. kaushik Post author

      Hi Aakash,

      Please send me your exact requirement. I will try my best to help you out.

      Thanks,
      Techalpine

  1. Manideepa

    Hi,
    Can you please share the DroolExcel.xls file?
    I wanted to execute this program. I am new to Drools and wanted to understand how it works.
    My email address: b4umani2003@gmail.com

    Thanks,
    Mani

  2. kaushik Post author

    Hi Manideepa,

    The excel sample is already shown in the post. You can use it as it is. If you have some other requirement, do let me know. I would love to help you sort the issues.

    Thanks
    /KP

  3. Nithya Kathiresan

    Hi,
    あなたがルールを実行するために直接スプレッドシートのAPIを使用する方法を知っていますか?

    Thanks,
    Nithya

  4. ディーパック

    あなたがExcelファイルを送信してくださいすることができます ,私は実行して結果を取得したいです..??

  5. スニル

    私は、データベースからデータを取得し、事実を更新できDRLの例を提供してもらえ .

    1. kaushik Post author

      こんにちはスニル,

      あなたは少しの変更で同じプログラムを使用することができます.

      私に連絡してください@ techalpineit@gmail.com さらに支援のための.

      Thanks
      /KP

  6. Ananya

    Hi,

    あなたは、Excelを共有していただけません ? 私は数字の文字列に一致するか、むしろ別の文字列内の文字列を検索します

    Thanks

    1. kaushik Post author

      こんにちはAnanya,

      あなたは、サンプル・ファイルに示すように、同じデータを使用して、自分でものを作ることができます.

      私にメールしてください@ techalpineit@gmail.com さらに支援のための.

      Thanks
      /KP

  7. Shekhar Shaw

    Hello,
    While I am trying to execute, it is raising a file not found error while processing below line.

    // DRLファイルを使用して
    kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

    Could you please suggest what else I need to do.

    Regards,
    Shekhar Shaw

    1. kaushik Post author

      Hello Shekhar,

      You need to ensure that both the .drl and .class files are available. Please check and let me know if you face any problem.

      私にメールしてください@ techalpineit@gmail.com

      Thanks
      Kaushik

  8. ラーフルパンディ

    こんにちは
    それは私が実行非常に良いブログです. しかし、私は、任意のルール・ファイルを追加することなく、自動的にルール・ファイル・テンプレートを生成したいです.

============================================= ============================================== Amazonで最高のTechAlpine Booksを購入してください,en,電気技師CT栗,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share