Share via


補正

WF の補正は、エラーが発生した場合に、前に完了した作業を (アプリケーションで定義されるロジックに従って) 取り消したり補正したりできる機構です。トランザクションを使用することで、複数の操作を 1 つの作業単位にまとめることができます。アプリケーションでトランザクションを使用すると、トランザクションのプロセスでエラーが発生した場合、トランザクション内で実行されたすべての変更を中止 (ロールバック) できます。ただし、作業が長時間実行されている場合は、トランザクションの使用が適切でないことがあります。たとえば、旅行計画用アプリケーションはワークフローとして実装されます。このワークフローの手順は、フライトの予約、マネージャーによる承認の待機、およびチケットの支払いで構成されている場合があります。このプロセスには数日かかる場合があり、フライトの予約と支払いの手順を同じトランザクションに参加させるのは実用的ではありません。このシナリオでは、処理の後半でエラーが発生した場合、補正を使用してワークフローの予約の手順を取り消すことができます。

補正の使用

ワークフローを完了できないときに取り消しや補正が行われる必要があるロジックを実行するアクティビティがワークフローに含まれており、トランザクションが適切ではない場合、これらのアクティビティは CompensableActivity アクティビティに配置できます。CompensableActivity アクティビティには、Body および ConfirmationHandler を含む子アクティビティ セクションがいくつかあります。Body アクティビティが定義するのは通常のワークフローの実行中に実行される補正可能なビジネス ロジックの単位で、CompensationHandler アクティビティが定義するのは Body によって実行される作業を補正するロジックの単位です。補正が呼び出されると、CompensationHandler として指定されたアクティビティが、Compensate アクティビティを使用して明示的に実行されるか、ワークフローの既定の補正ロジックによって暗黙的に実行され、Body アクティビティのアクションが補正されます。CompensationHandler アクティビティが指定されていない場合は、Body で正常に実行された、Body 内で入れ子になっているすべての CompensableActivity アクティビティを完了順と逆の順序で補正することによって、既定の補正ロジックが実行されます。補正の詳細については、「補正のプログラミング モデル」を参照してください。

参照

リファレンス

CompensableActivity
Compensate