ルールの入力
factモデルが登録され、ようやくルールを定義できるようになりました。
Drools4.0入門で用いたサンプルルールファイルを以下に再掲します。これにしたがいルールを定義してしまいましょう。
sample.drl
package com.sample rule “日当C” rule “日当B” rule “日当A” |
まずは、ルール「日当なし」です。左ナビゲーションの 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を選択します。
下の画面が表示されるので
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を押し、
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部をそのまま入力して、
最後に左上の「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のテストシナリオの機能を用います。