16.9. DRL におけるルールアクション (THEN)
ルールの then 部分 (または、ルールの 右辺 (RHS)) には、ルールの条件部分が満たされる場合に実行されるアクションが含まれます。アクションは、1 つ以上の メソッド で設定されます。これらのメソッドは、ルール条件とパッケージ内で使用できる利用可能なデータオブジェクトに応じて結果を実行します。たとえば、銀行がローン申請者が 21 歳を超えていることが要件となっているにもかかわらず (ルール条件が Applicant( age < 21 ))、ローン申請者が 21 歳未満の場合は、"Underage" ルールの then アクションが setApproved( false ) となり、年齢が基準に達していないためローンの申し込みは承認されません。
ルールアクションの主な目的は、デシジョンエンジンのワーキングメモリーでデータの挿入、削除、または変更を行うことです。有効なルールアクションは小規模かつ宣言的で、可読性があるものです。ルールアクションで必須または条件付きコードを使用する必要がある場合は、ルールを小規模かつより宣言的な複数のルールに分割します。
申込者の年齢制限に関するルールの例
rule "Underage"
when
application : LoanApplication()
Applicant( age < 21 )
then
application.setApproved( false );
application.setExplanation( "Underage" );
end
16.9.1. DRL でサポートされるルールアクションメソッド リンクのコピーリンクがクリップボードにコピーされました!
DRL では DRL ルールアクションで使用できる以下のルールアクションメソッドがサポートされます。これらのメソッドを使用することで、最初にワーキングメモリーインスタンスを参照せずに、デシジョンエンジンのワーキングメモリーを変更できます。これらのメソッドは Red Hat Decision Manager ディストリビューションに用意されている KnowledgeHelper へのショートカットとして機能します。
すべてのルールアクションメソッドについては、Red Hat カスタマーポータル から ZIP ファイル Red Hat Decision Manager 7.11.0 Source Distribution をダウンロードし、~/rhdm-7.11.0-sources/src/drools-$VERSION/drools-core/src/main/java/org/drools/core/spi/KnowledgeHelper.java に移動してください。
setこれを使用してフィールドの値を設定します。
set<field> ( <value> )ローン申し込みの承認の値を設定するルールアクションの例
$application.setApproved ( false ); $application.setExplanation( "has been bankrupt" );modifyファクトの変更するフィールドを指定し、デシジョンエンジンに変更を通知します。このメソッドは、ファクトの更新に対する構造化されたアプローチを提供します。このメソッドは、
update操作とオブジェクトフィールドを変更する setter 呼び出しを組み合わせたものです。modify ( <fact-expression> ) { <expression>, <expression>, ... }ローン申し込み件数および承認を変更するルールアクションの例
modify( LoanApplication ) { setAmount( 100 ), setApproved ( true ) }updateフィールドと更新される関連ファクト全体を指定して、その変更をデシジョンエンジンに通知します。ファクトが変更したら、更新した値の影響を受ける可能性がある別のファクトを変更する前に、
updateを呼び出す必要があります。この追加設定を回避するには、modifyメソッドを代わりに使用します。update ( <object, <handle> ) // Informs the decision engine that an object has changed update ( <object> ) // Causes `KieSession` to search for a fact handle of the objectローンの申し込み件数および承認を更新するルールアクションの例
LoanApplication.setAmount( 100 ); update( LoanApplication );注記property-change リスナーを指定する場合は、オブジェクトの変更時にこのメソッドを呼び出す必要はありません。property-change リスナーの詳細は、Red Hat Decision Manager のデシジョンエンジン を参照してください。
insertnewファクトをデシジョンエンジンのワーキングメモリーに挿入し、ファクトに必要な結果として生成されるフィールドと値を定義します。insert( new <object> );新しいローン申請者オブジェクトを挿入するルールアクションの例
insert( new Applicant() );insertLogicalデシジョンエンジンに
newファクトを論理挿入する場合に使用します。デシジョンエンジンは、ファクトの挿入および取り消しに対して論理的な決断を行います。通常の挿入または記述による挿入の後には、ファクトは明示的に取り消される必要があります。論理挿入の後、挿入されたファクトは、ファクトを挿入したルールの条件が true でなくなると自動的に取り消されます。insertLogical( new <object> );新しいローン申請者オブジェクトを論理的に挿入するルールアクションの例
insertLogical( new Applicant() );deleteデシジョンエンジンからオブジェクトを削除します。キーワード
retractも DRL でサポートされており、同じアクションを実行しますが、DRL のコードでは、キーワードinsertとの整合性を考慮してdeleteが通常推奨されます。delete( <object> );ローン申請者オブジェクトを削除するルールアクションの例
delete( Applicant );