SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Workflow Foundation 4が導く新しい開発スタイル

非常に簡単! 自作アプリでのワークフローデザイナー利用

Workflow Foundation 4が導く新しい開発スタイル(3)

ダウンロード WF4_3_VB.zip (38.6 KB)
ダウンロード WF4_3_CS.zip (28.3 KB)

ActivityBuilderによる機能追加

 こうして実現した先ほどのリホスティングデザイナですが、実はVisual Studioでのワークフローデザイナーとは一か所違いがあります。

Visual Studio環境とリホスティング環境
Visual Studio環境とリホスティング環境

 上記画像を見てもらうと分かりますが、Visual Studio上では「引数」と表示がされていますが、リホスティングデザイナではその表示がありません。この点に対応するためにはActivityBuilderクラスという、アクティビティにプロパティデータを追加するクラスを利用します。利用方法は簡単で、ActivityBuilder.Implementation プロパティに、プロパティデータを追加するワークフロー(親となるアクティビティ)を指定します。

サンプルコード(Visual Basic)
Dim actBld As New ActivityBuilder With {
    .Implementation = New Sequence}
wfDesign.Load(actBld)
サンプルコード(C#)
var seq = new Sequence();
seq.Activities.Add(new WriteLine {Text = "CodeZine"});
var actBld = new ActivityBuilder {Implementation = seq};
wfDesign.Load(actBld);

 先ほどのサンプルコードではwfDesign.Load(New Sequence)として、ワークフローデザイナーに直接Sequenceアクティビティを読み込ませていましたが、ActivityBuilderクラスを利用する場合は、Implementationプロパティでアクティビティを指定した状態にしてから、ワークフローデザイナーに読み込ませます。

表示された引数タブ
表示された引数タブ

 実行した際の画面は上記のようになります。先ほどのVisual Studio上でのワークフローデザイナーと同じく、「引数」も表示されているのが分かると思います。

 ここで設定する内容ですが、ワークフロー実行時に受け取ることができる値、まさしく引数についての設定を行います。

WorkflowServiceへのActivityBuilder

 ActivityBuilderクラスによるプロパティデータの追加ですが、ワークフローサービスの際には利用できません。これは通常のプログラムと異なり、サービスアプリケーションとしてはそれほど引数で値をやりとりする必要性が薄いためだと思われます。

引数を利用したワークフローのサンプル
引数を利用したワークフローのサンプル

 上図は引数を利用した単純なワークフローのサンプルです。argument1という文字型の引数を1つ設定し、規定値として“WF4!”と設定しています。ワークフロー自体は、WriteLineアクティビティを利用してargument1の中身を標準出力に出力しています。このワークフローをそのまま実行すると、標準出力には規定値として設定したWF4!という文字列が表示されますが、ワークフローの実行時に以下のようにして引数を渡すことができます。

サンプルコード(Visual Basic)
Dim args As New Dictionary(Of String, Object)
args.Add("argument1", "CodeZine WF4!")
WorkflowInvoker.Invoke(New Workflow1(), args)
Console.ReadKey()
サンプルコード(C#)
var argments =  new Dictionary< String, Object>();
argments.Add("argument1", "CodeZine WF4!");
WorkflowInvoker.Invoke(new Workflow1(), argments);
Console.ReadKey();
サンプルコードの実行結果
サンプルコードの実行結果

 サンプルコードを実行すると上図のような結果になります。引数として渡した値がWriteLineアクティビティを通して標準出力より出力されているのが分かると思います。

 このような形で引数を用いてワークフローへと値を渡すことができますが、注意点があります。WorkflowInvoker.Invokeメソッドの引数として、値を受け渡していますがそこで利用できるのはDictionary(Of String, Object)ジェネリックコレクション(C#であれば Dictionary<string, object>)のように、キー名がstring、値はobjectである必要があります。そしてキー名の文字列は大文字小文字を区別しますので、指定の際には注意が必要です。ここで引数の名前指定を誤ると実行時例外が発生しますので、利用する際には大文字小文字には特に注意を払ってください。

次のページ
デザイナーのコマンド群

修正履歴

この記事は参考になりましたか?

Workflow Foundation 4が導く新しい開発スタイル連載記事一覧

もっと読む

この記事の著者

小尾 智之(オビ トモユキ)

地方企業に勤めるインディープロレス好きなエンジニア。VB + SQL Server のシステム構築を主な業務としていましたが、元々の性格もあり色々な物に目移り中。Ahf というハンドルネームで所属する北海道の技術コミュニティ CLR/H(http://clr-h.jp) での活動など行っていましたが、最近か...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6729 2012/08/29 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー