はじめてのWindows Workflow Foundation

一部で注目されているWFに手を出してみることに。

WFってどんなモノかイメージが掴みにくいですが、フローチャートを絵で描いて処理を埋め込んだらプログラムが完成するよーな感じです・・・が、多分、さっぱり通じないので、絵付きで。(^^;

これはWFを使って書いたものです。さて、このフローを使ってどんな処理をさせるかというと、initでユーザに入力を促すメッセージをコンソールに出力します。例えば、数字を入力してください等です。次に、isEvenがあって矢印が分岐しています。なんとなく想像が付くと思いますが、if〜elseを表しています。branchEvenには条件を設定し、真になったらshowHelloが実行されます。偽の場合は、branchOddに移動します。今回はbranchOddに条件を設定していないので無条件にshowWorldが実行されます。最後に赤い円にたどり着いて終了となります。では、コードを見てみましょう。

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace WorkflowConsoleApplication2
{
    using System.Collections.Generic;

    public sealed partial class Workflow1: SequentialWorkflowActivity
    {
        public Workflow1()
        {
            InitializeComponent();
        }

        private void initCode(object sender, EventArgs e)
        {
            Console.Write("Input Number! ");
        }

        private void EvenCode(object sender, ConditionalEventArgs e)
        {
            e.Result = Int32.Parse(Console.ReadLine()) % 2 == 0;
        }

        private void ShowHelloCode(object sender, EventArgs e)
        {
            Console.WriteLine("Hello");
        }

        private void ShowWorldCode(object sender, EventArgs e)
        {
            Console.WriteLine("World");
        }
    }
}

initCodeはワークフローのinit部分に当たります。数値の入力を促すメッセージを表示しているだけですね。次に、EvenCodeですが、ここがワークフロー上のbranchEvenとなり、ここで真偽が決定します。

e.Result = Int32.Parse(Console.ReadLine()) % 2 == 0;

この結果によって、ShowHelloCodeもしくは、ShowWorldCodeが実行されます。

この程度のサンプルだと何が嬉しいのか分かりませんが、複雑な条件分岐になると自分でワークフローを管理しなくて済むメリットが感じられると思います。多分。(^^;