.NET3.0:WF:CompensatableSequenceActivity
この文書はVisual Studio 2005 SP1 + Vista Upgrade Beta + Windows Vista RTM + .NET Framework 3.0 RTMで作成されています。
この補正アクティビティは非常に便利なアクティビティです。
何らかの処理を行った場合でも、そのあとに処理が続行できないエラーが発生したときに補正を行うことができます。
まずはツールボックスからこのアクティビティを配置します。
このアクティビティはただのコンテナですので、さらに中に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>