4.2. DRL ルールへの THEN アクションの追加
ルールの then 部分には、ルールの条件部分に一致したときに実行するアクションが含まれます。たとえば、ローンの申込者が 21 歳に満たない場合は、Underage ルールの then アクションが setApproved( false ) となり、年齢が基準に達していないためローンの申し込みが承認されません。アクションは、ルールの条件と、パッケージで利用可能オブジェクトに基づいて結果を実行します。
前提条件
-
packageは DRL ファイルに定義されます。これは、ファイルの作成時に行われます。 -
ルールで使用したデータオブジェクトの
importリストが、DRL ファイルのpackage行の下に定義されます。データオブジェクトは、このパッケージ、または別の Business Central パッケージから使用できます。 -
rule名は、package、import、または DRL ファイル全体に適用されるその他の行の下に、rule "name"という形式で定義されます。同じパッケージでルール名を重複させることはできません。ルールの動作 (salience、no-loopなど) を定義する任意のルール属性は、ルール名の下、whenセクションの前に定義します。
手順
-
DRL デザイナーで、ルールの
whenセクションの後にthenを入力して、アクション命令文を追加します。 ルールの条件に基づいて、ファクトパターンに対して実行するアクションを 1 つ以上入力します。
次は、DRL アクションを定義するキーワードオプションの例です。
and: アクションコンポーネントを論理積に分類します。インフィックスおよびプリフィックスのandがサポートされます。デフォルトでは、結合演算子を指定しないと、リストされている条件またはアクションがすべてandと結合します。application.setApproved ( false ) and application.setExplanation( "has been bankrupt" ); application.setApproved ( false ); and application.setExplanation( "has been bankrupt" ); application.setApproved ( false ); application.setExplanation( "has been bankrupt" ); // All of the above are the same.set: フィールドの値を設定します。application.setApproved ( false ); application.setExplanation( "has been bankrupt" );modify: ファクトに対して修正するフィールドを指定し、変更をデシジョンエンジンに通知します。modify( LoanApplication ) { setAmount( 100 ) }update: フィールドと、修正される関連ファクト全体を指定して、その変更をデシジョンエンジンに通知します。ファクトが変更したら、更新した値の影響を受ける可能性がある別のファクトを変更する前に、updateを呼び出す必要があります。modifyキーワードには、この追加手順がありません。update( LoanApplication ) { setAmount( 100 ) }delete: デシジョンエンジンからオブジェクトを削除します。キーワードretractも DRL デザイナーでサポートされ、同じアクションを実行しますが、キーワードinsertとの一貫性を保つためにdeleteが推奨されます。delete( LoanApplication );insert:新しいファクトを挿入し、ファクトに必要な結果フィールドと値を定義します。insert( new Applicant() );insertLogical:新しいファクトをデシジョンエンジンに論理的に挿入し、ファクトに必要な結果フィールドと値を追加します。デシジョンエンジンは、ファクトの挿入および取り消しに対して論理的な決断を行います。定期的な挿入、または指定した挿入の後に、ファクトを明示的に取り消す必要があります。論理挿入の後に、ファクトをアサートした条件が TRUE ではなくなると、ファクトは自動的に取り消されます。insertLogical( new Applicant() );高度な DRL オプションこれは、アクションを定義する基本的なキーワードオプションおよびパターン構築の例です。さらに高度な DRL オプションと構文が DRL デザイナーでサポートされています。オンラインのDrools ドキュメンテーションを参照してください。
- ルールのアクションコンポーネントをすべて定義したら、DRL デザイナーの右上のツールバーの Validate をクリックして、DRL ファイルの妥当性を確認します。ファイルの妥当性確認に失敗したら、エラーメッセージに記載された問題に対応し、DRL ファイルの構文およびコンポーネントをすべて見直し、エラーが表示されなくなるまで再度、ファイルを検証します。
- DRL デザイナーで Save をクリックして、設定した内容を保存します。
4.2.1. ルールの属性 リンクのコピーリンクがクリップボードにコピーされました!
ルール属性は、ルールの動作を修正するビジネスルールを指定する追加設定です。次の表では、ルールに割り当て可能な属性の名前と、対応する値を紹介します。
| 属性 | 値 |
|---|---|
|
| ルールの優先順位を定義する整数。顕著性の値が高いルールは、アクティベーションキューの順番で、優先度が高くなります。
例: |
|
| ブール値。このオプションを選択すると、ルールが有効になります。このオプションを選択しないと、ルールは無効になります。
例: |
|
|
日付定義および時間定義を含む文字列。現在の日時が
例: |
|
|
日付定義および時間定義を含む文字列。現在日時が
例: |
|
| ブール値。このオプションが選択される場合は、ルールの結果が以前一致した条件を再度トリガーすると、ルールは再アクティブ化 (ループ) されません。条件を選択しないと、この状況でルールがループされます。
例: |
|
| ルールを割り当てるアジェンダグループを指定する文字列。アジェンダグループを使用すると、アジェンダをパーティションで区切り、ルールのグループに対する実行をさらに制御できます。フォーカスを取得したアジェンダグループのルールだけがアクティブになります。
例: |
|
| ルールを割り当てるアクティベーション (または XOR) グループを指定する文字列。アクティベーショングループでは、1 つのルールのみをアクティブ化できます。最初のルールが実行すると、アクティベーショングループの中で、アクティベーションが保留中のルールはすべてキャンセルされます。
例: |
|
| ルールの条件が一致している場合に、ルールがアクティブになってからの時間をミリ秒で定義する長整数値。
例: |
|
|
ルールのスケジュールに対する
例: |
|
| ルールのスケジュールを指定する Quartz カレンダーの定義。
例: |
|
| アジェンダグループ内のルールにのみ適用可能なブール値。このオプションが選択されている場合は、次にルールがアクティブになった場合に、そのルールが割り当てられたアジェンダグループにフォーカスが自動的に指定されます。
例: |
|
|
ルールフローグループまたはアジェンダグループ内のルールにのみ適用可能なブール値。このオプションを選択すると、次回、ルールのルールフローグループがアクティブになるか、ルールのアジェンダグループがフォーカスを受け取ると、(ルールフローグループがアクティブでなくなるか、アジェンダグループがフォーカスを失うまで) ルールをアクティブにすることができません。これは、
例: |
|
| ルールフローグループを指定する文字列。ルールフローグループで、関連するルールフローによってそのグループがアクティブになった場合に限りルールを発行できます。
例: |
|
|
ルールのコード表記に使用される言語を指定する文字列 (
例: 注記
実行可能モデルなしで Red Hat Decision Manager を使用する場合、 |