この文書の最新版は
http://naka.wankuma.com/site/column/dotnet/00039.htm
この補正アクティビティは非常に便利なアクティビティです。
何らかの処理を行った場合でも、そのあとに処理が続行できないエラーが発生したときに補正を行うことができます。
まずはツールボックスからこのアクティビティを配置します。
このアクティビティはただのコンテナですので、さらに中にCodeActivityを配置します。
アクティビティを抜けた先に例外を発生させることにします。
処理自体はうまく終了しました。でも、その先の処理で失敗してしまいましたという場合ですね。
注文の約定は処理したけど、倉庫への出荷指示に失敗した場合とかそんな感じでしょうか。
ただしこのままでは補正処理を記述していませんので、補正処理を記述します。
CompensatableSequenceActivityを右クリックして、コンテキストメニューを表示します。
その中の補正ハンドラの表示を選択すると、別のコンテナが現れます。

ここにCodeActivity2を作成して、コードを以下のように記述します。
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("処理しました");
}
private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("補正");
}
実行すると
このように補正処理が動くことがわかると思います。
ちなみにこの例外を無効にして(アクティビティを右クリックして無効を選択できます。2番目の画像の下から4つ目にもあります。) 実行すると、補正処理が動かないことがわかると思います。
ちなみにこのXOMLは
<CompensatableSequenceActivity x:Name="compensatableSequenceActivity1">
<CodeActivity x:Name="codeActivity1" ExecuteCode="codeActivity1_ExecuteCode" />
<CompensationHandlerActivity x:Name="compensationHandlerActivity1">
<CodeActivity x:Name="codeActivity2" ExecuteCode="codeActivity2_ExecuteCode" />
</CompensationHandlerActivity>
</CompensatableSequenceActivity>