Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

<compensationhandlers>

以前の操作を元に戻すための一連のアクティビティを実行する補償ハンドラです。

Synopsis

<scope>   <throw fault='"BuyersRegret"'/>   <faulthandlers>     <catch fault='"BuyersRegret"'>       <compensate target="RestoreBalance"/>     </catch>   </faulthandlers>   <compensationhandlers>     <compensationhandler name="RestoreBalance">       <assign property='context.MyBalance' value='context.MyBalance+1'/>     </compensationhandler>   </compensationhandlers> </scope>

要素

要素 目的
<compensationhandler> ゼロ個以上の <compensationhandler> 要素を <compensationhandlers> コンテナ内に配置できます。各 <compensationhandler> 要素には、以前の処理を元に戻すための一連の BPL アクティビティが含まれます。

説明

ビジネス・プロセス管理では、一部のロジック・セグメントを元に戻す必要が頻繁に生じます。この処理を “補償” といいます。原則として、ビジネス・プロセスが何かを実行する場合、その操作を取り消すことができなければなりません。つまり、エラーが発生した場合、ビジネス・プロセスは失敗した操作を元に戻すことによって、そのエラーを補償できる必要があります。障害発生時点以降のすべての操作を取り消し、問題が発生しなかった場合と同じ状態に戻す必要があります。BPL では、補償ハンドラと呼ばれるしくみによってこれを実現します。

BPL <compensationhandler> ブロックはサブルーチンに似ていますが、一般的なサブルーチン・メカニズムを備えていません。これらのブロックを “呼び出す” ことは可能ですが、必ず <faulthandler> ブロックから呼び出すこと、かつ、必ずその <compensationhandler> ブロックと同じ <scope> 内から呼び出すことが条件となります。<compensate> 要素から <compensationhandler> ブロックを呼び出すときは、ターゲットとしてその名前を指定します。この構文では、引用符を追加する必要がありません

<compensate target="general"/>

補償ハンドラが役に立つのは、既に実行されている処理を元に戻せる場合だけです。例えば、預金を間違った口座に振り替えた場合、元の口座に振り替え直すことは可能ですが、元どおりの状態にできない処理もあります。したがって、適切な補償ハンドラを計画し、どの程度後退するのかに応じて、それらの補償ハンドラを構成する必要があります。

詳細は、"BPL プロセスの開発" の “BPL エラー処理規則” を参照してください。

Note:

<compensationhandlers> と <faulthandlers> の順序を逆にすることはできません。これら両方のブロックを記述する場合は、最初に <compensationhandlers>、次に <faulthandlers> を配置する必要があります。

<compensationhandler> 属性と要素

属性または要素 説明
namedisabledxposyposxendyend 属性 一般的な属性と要素” を参照してください。
<annotation> 要素

関連項目

<catch><catchall><compensate><faulthandlers><scope><throw>

FeedbackOpens in a new tab