18.2. DRL ルールへの THEN アクションの追加
ルールの then
部分には、ルールの条件部分に一致したときに実行するアクションが含まれます。たとえば、ローンの申請者が 21 歳に満たない場合は、"Underage"
ルールの then
アクションが setApproved( false )
となり、年齢が基準に達していないためローンの申し込みは承認されません。アクションは、ルールの条件とパッケージで利用可能オブジェクトに基づいて結果を実行する 1 つ以上のメソッドで構成されます。ルールアクションの主な目的は、デシジョンエンジンのワーキングメモリーでデータの挿入、削除、または変更を行うことです。
前提条件
-
package
は DRL ファイルに定義されます。これは、ファイルの作成時に行われます。 -
ルールで使用したデータオブジェクトの
import
リストが、DRL ファイルのpackage
行の下に定義されます。データオブジェクトは、このパッケージ、または別の Business Central パッケージから使用できます。 -
rule
名は、package
、import
、または DRL ファイル全体に適用されるその他の行の下に、rule "name"
という形式で定義されます。同じパッケージでルール名を重複させることはできません。ルールの動作 (salience
、no-loop
など) を定義する任意のルール属性は、ルール名の下、when
セクションの前に定義します。
手順
-
DRL デザイナーで、ルールの
when
セクションの後にthen
を入力して、アクション命令文を追加します。 ルールの条件に基づいて、ファクトパターンに対して実行するアクションを 1 つ以上入力します。
次は、DRL アクションを定義するキーワードオプションの例です。
set
: フィールドの値を設定します。$application.setApproved ( false ); $application.setExplanation( "has been bankrupt" );
modify
: ファクトに対して修正するフィールドを指定し、変更をデシジョンエンジンに通知します。このメソッドは、ファクトの更新に対する構造化されたアプローチを提供します。このメソッドは、update
操作とオブジェクトフィールドを変更する setter 呼び出しを組み合わせたものです。modify( LoanApplication ) { setAmount( 100 ), setApproved ( true ) }
update
: フィールドと、更新される関連ファクト全体を指定して、その変更をデシジョンエンジンに通知します。ファクトが変更したら、更新した値の影響を受ける可能性がある別のファクトを変更する前に、update
を呼び出す必要があります。この追加設定を回避するには、modify
メソッドを代わりに使用します。LoanApplication.setAmount( 100 ); update( LoanApplication );
insert
:new
ファクトをデシジョンエンジンに挿入します。insert( new Applicant() );
insertLogical
: デシジョンエンジンにnew
ファクトを論理挿入する場合に使用します。デシジョンエンジンは、ファクトの挿入および取り消しに対して論理的な決断を行います。通常の挿入または記述による挿入の後には、ファクトは明示的に取り消される必要があります。論理挿入の後、挿入されたファクトは、ファクトを挿入したルールの条件が true でなくなると自動的に取り消されます。insertLogical( new Applicant() );
delete
: デシジョンエンジンからオブジェクトを削除します。キーワードretract
も DRL でサポートされており、同じアクションを実行しますが、DRL のコードでは、キーワードinsert
との整合性を考慮してdelete
が通常推奨されます。delete( Applicant );
注記DRL ルールアクションの詳細は、「DRL におけるルールアクション (THEN)」 を参照してください。
- ルールのアクションコンポーネントをすべて定義したら、DRL デザイナーの右上のツールバーの Validate をクリックして、DRL ファイルの妥当性を確認します。ファイルの妥当性確認に失敗したら、エラーメッセージに記載された問題に対応し、DRL ファイルの構文およびコンポーネントをすべて見直し、エラーが表示されなくなるまで再度、ファイルを検証します。
- DRL デザイナーで Save をクリックして、設定した内容を保存します。