はじめに
.NET Framework 3.0入門として、前回までGUIまわりのWPF、XAML、通信関係のWCFと解説してきました。今回は、業務に必要なワークフローの構築をサポートする「Windows Workflow Foundation(WF)」を紹介します。
対象読者
本記事は、C#でのプログラミングを行ったことがある方を対象としています。
サンプルを動作させるための環境設定等は『WPF(Windows Presentation Foundation)+XAML入門 前編』をご覧ください。
WF登場の歴史的経緯
WF(Windows Workflow Foundation)は、ワークフローをWindows上で扱うためのフレームワークです。
ワークフローという言葉は、通常のプログラミングではあまり扱わない言葉かもしれません。ワーク(Work;仕事)とフロー(Flow;流れ)を組み合わせたもの、というのが基本的な意味で、さまざまな処理を組み合わせて流れを作り出していくモデルであると言えます。なお、ワークフローの中の処理のことをアクティビティと呼びます。
例えば、よく引き合いに出されるのは会社内での購入申請や休暇申請などの際に行う処理です。これを擬似的なプログラムで表せば、次のようになるでしょう。
購入申請(申請者 , 購入金額){ switch(申請者.役職){ case 社長: return 許可; case マネージャ: if(購入金額 > マネージャ.裁量上限) return 社長の決裁(); else return 許可; case 社員: if(購入金額 > 社員.裁量上限) return マネージャの決裁(); else return 許可; } }
ここでは
- 社長であれば無条件で購入許可
- 社員の場合はそれぞれの裁量に任された金額以内であればそのまま許可が下りる
- マネージャか社員の場合に、裁量を超える場合は上長の許可を得る
というルールをコード化しています。
このソースコードはそれなりに分かりやすいものではありますが、以下の図のようにすれば、直感的に理解できるのではないでしょうか。
![開発資材購入申請フロー 開発資材購入申請フロー](http://cz-cdn.shoeisha.jp/static/images/article/1572/fig01.gif)
これは単なるフローチャートですが、もしこのようなモデルを直接コンピュータが実行することができれば、モデルからソースコードへと落とし込む作業が無くなり、煩雑な条件の見落としなどもなくなるでしょう。また、さまざまな条件が可視化されているため、見通しがよく、後になって設計を変更する場合にも変更しやすいでしょう。
ワークフローを使用することのメリットはさまざまですが、いくつかを挙げてみましょう。
- 可視化
- ドメイン固有言語(Domain-Specific Language:DSL)である
- 再利用性
- 監視
このように、適用分野によってはメリットの大きいワークフローですが、Microsoft社のBizTalkなどのエンタープライズ向けプロダクトや、社内システムなど特定分野向けの商用製品がほとんどで、プログラミングの際に汎用的に使用可能なワークフローライブラリはあまりありませんでした。.NET Framework 3.0で導入されたWFは、ワークフローを.NET Framework上で取り扱うためのフレームワークです。
WFは既にWindows SharePoint Services 3.0/SharePoint Server 2007において、ワークフローのためのフレームワークとして用いられており、BizTalk Serverの将来のバージョンでも使用される予定です。