Drools 5.0 入門 1C (サンプル-ルール)

ルールの作成

ルールの入力

 factモデルが登録され、ようやくルールを定義できるようになりました。

Drools4.0入門で用いたサンプルルールファイルを以下に再掲します。これにしたがいルールを定義してしまいましょう。

sample.drl

 package com.sample
 
rule “日当なし”
    when
        BusinessTrip ( h:hour < 4.0 , n:name)
    then
        System.out.println(n+”さんの出張時間は、”
          +h+”時間なので、日当はありません。 (ルール:日当なし)”);
end

rule “日当C”
    when
        BusinessTrip ( h:hour >= 4.0 , hour < 8.0 ,n:name)
    then
        System.out.println(n+”さんの出張時間は、”
         +h+”時間なので、日当は1000円です。 (ルール:日当C)”);
end

rule “日当B”
    when
        BusinessTrip ( h:hour >= 8.0 , hour < 12.0, n:name )
    then
        System.out.println(n+”さんの出張時間は、”
        +h+”時間なので、日当は2000円です。 (ルール:日当B)”);
end

rule “日当A”
    when
        BusinessTrip ( h:hour >= 12.0 ,n:name)
    then
        System.out.println(n+”さんの出張時間は、”
        +h+”時間なので、日当は3000円です。 (ルール:日当A)”);
end

まずは、ルール「日当なし」です。左ナビゲーションの Knowledge Bases → Create New → New Rule を選択します。 下のウィンドウが開くので以下のように入力、選択、設定し「OK」を押します。

ルールの作成

「OK」を押すと以下の画面となるので、まずはWhen部から。右の緑の「+」を押して

ルール定義

条件を加えます。ルールは

rule “日当なし”
    when
        BusinessTrip ( h:hour < 4.0 , n:name)
    then
        System.out.println(n+”さんの出張時間は、”
          +h+”時間なので、日当はありません。 (ルール:日当なし)”);
end

となっているので、まずはBusinessTripをWhen部(条件部)に加えます。
以下のウィンドウが表示されるので、BusinessTripを選択します。 

条件部facttype設定

 下の画面が表示されるので

ルール定義2

 BusinessTripをクリックします。

フィールド条件追加

制約として加えるフィールド、

BusinessTrip ( h:hour < 4.0 , n:name)

の順番にしたがって、まずは「hour」を選択します。

フィールドの変数束縛へ

 hourフィールドは、Then部でも参照するので、「h」という変数名で参照できるように変数を束縛します。

 BusinessTrip ( h:hour < 4.0 , n:name)

 上の画面で「hour」の部分をクリックして、以下のウィンドウを開き

フィールドの変数束縛入力

hを入力して、hourフィールドに h という変数を束縛(bind)させます。束縛すると以下の表示に変わります。

フィールドの変数束縛

次に

BusinessTrip ( h:hour < 4.0 , n:name)

 の部分は、隣のコンボボックスから <(is less than)を選択。

ルール条件入力

 さらに

BusinessTrip ( h:hour < 4.0 , n:name)

4.0の部分は、上の画面の鉛筆アイコンをクリックして

ルール条件-値入力

Literal Valueを押し、

ルール条件-値入力2

4.0を入力します。

さらに、

BusinessTrip ( h:hour < 4.0 , n:name)

nameの部分を加えるには、再度BusinessTripをクリックし上と同様の手順で変数の束縛を行っておきます。

ルール条件-名前入力

WHEN部は、これで入力が済んだので次にTHEN部を入力します。

    then
        System.out.println(n+”さんの出張時間は、”
          +h+”時間なので、日当はありません。 (ルール:日当なし)”);

THEN部は、WHEN部と同様に緑の「+」を押し、ウィンドウで自由入力(Add free form drl)を選択します。

 THEN部入力

 THEN部に表示された入力欄にTHEN部をそのまま入力して、

THEN部入力2

 最後に左上の「Save changes」を押し、チェックインすれば日当なしのルールが登録されます。

日当なしルール入力完了

同様にして、他のルールを追加していきます。なお、日当B,日当Cのルールについては、WHEN部(条件部)で

BusinessTrip ( h:hour >= 4.0 , hour < 8.0 ,n:name)

のようにひとつのフィールド「hour」に対し複数の条件が指定されています。この場合は最初の条件を加えた後、その右についている小さな左向き矢印のアイコンをクリックすると新たなコンボボックスが右に追加されるので、コンボボックスからand,or条件も含めて指定します。

条件の追加

 

 以上でルールの登録が完了しました。Knowledge BasesのdefaultPackage-Business rule assetsを選択すると登録されたルールが確認できます。

ルール入力完了

最後に実行をしてみましょう。そのためにはGuvnorのテストシナリオの機能を用います。