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)

デザイナーのコマンド群

 ワークフローデザイナーでは標準機能として数々のコマンドがあらかじめ実装されており、右クリックによるコンテキストメニューや、上下部にそれぞれ用意されているボタンよりさまざまな機能を特にコーディングすることなく利用できます。それらの機能はWorkflowDesignerクラスのCommandプロパティを通して提供されており、例えばツールバーやリボン状に同等機能のボタンを用意することが容易になっています。 提供されるコマンドはMSDNに記載されていますのでそちらも参照してください。

 以下はMSDNより一部を抜粋したものです。

ワークフローのコマンド
コマンド名 説明
CollapseCommand 現在の要素のユーザーインターフェースを折りたたむために使用されるコマンドです。
CopyAsImageCommand 現在のワークフローデザイン画面をスクリーンショットとしてコピーし、それをクリップボードに配置するために使用されるコマンドです。
CopyCommand 選択しているアクティビティをコピーするために使用されるコマンドです。
ExpandCommand 複合アクティビティの選択された子に移動し、その子アクティビティを展開してワークフローデザイナー画面全体に表示されるようにするために使用されるコマンドです。[全画面表示] コンテキストメニューコマンドによってこのアクションが開始されます。
ExpandInPlaceCommand 現在の要素のリストを現在の表示内で展開するために使用されるコマンドです。
FitToScreenCommand 現在の要素を画面に合わせるために使用されるコマンドです。
GoToParentCommand 選択された子アクティビティの親アクティビティに移動し、その親アクティビティを展開してワークフローデザイナー画面全体に表示されるようにするために使用されるコマンドです。[上位を表示] コンテキストメニューコマンドによってこのアクションが開始されます。
MoveFocusCommand フォーカスを移動するために使用されるコマンドです。
PasteCommand 貼り付けるために使用されるコマンドです。
RedoCommand 操作をやり直すために使用されるコマンドです。
ResetZoomCommand ズームをリセットするために使用されるコマンドです。
SaveAsImageCommand 現在のワークフローデザイン画面をイメージとして保存するために使用されるコマンドです。
SelectAllCommand ビュー内のすべてのオブジェクトを選択するために使用されるコマンドです。
UndoCommand バッファー内の最後の操作を元に戻すために使用されるコマンドです。
ZoomInCommand 現在のワークフローデザイナー画面でズームインを行うために使用されるコマンドです。
ZoomOutCommand 現在の画面でズームアウトを行うために使用されるコマンドです。

 これらコマンドを利用するには次のようなコードを記述します。

サンプルコード(Visual Basic)
‘XAML 側のボタン記述で利用するコマンドを指定しておく
‘Command="sapv:DesignerView.UndoCommand"

Dim view = designer.Context.Services.GetService(Of DesignerView)()
‘アンドゥ用に配置したボタン
btnUndo.CommandTarget = view
サンプルコード(C#)
var view = designer.Context.Services.GetService(); 
//アンドゥ用に配置したボタン
btnUndo.CommandTarget = view; 

 作成したワークフローデザイナーよりサービスとして提供されるDesignerViewを取得し、コマンドを割り付けるボタンなどのコントロールに対してCommandTargerプロパティで操作対象となるUIElement(この場合はワークフローデザイナー)を設定します。このように記述することで、ボタンなどを操作した際にワークフローデザイナーを操作できます。

ワークフローの保存

 ここまででワークフローデザイナーを利用する実装を行いましたので、次は作成したワークフローの保存を行います。ワークフローの保存もWorkflowDesignerクラスでメソッドが用意されており、非常に簡易に行うことができます。

サンプルコード(Visual Basic)
designer.Flush
designer.Save(“testworkflow.xaml”)
サンプルコード(C#)
designer.Flush();
designer.Save(“testworkflow.xaml”);

 ワークフローデザイナーで現在表示されている内容をファイルに出力するSaveメソッドを利用すると、ワークフローの内容がxaml形式のファイルとして保存されます。ただしその前に、現在編集している内容を一度確定させる必要がありますので、WorkflowDesigner.Flushメソッドを先に呼び出しておくのが良いでしょう。 このようにメソッド1つで編集しているワークフローをファイルに保存することができます。

Saveメソッド実行時の例外

 便利なWorkflowDesigner.Saveメソッドですが、メソッド呼び出し時に例外が発生することがあります。これは作成されるxamlにおいて、名前空間の解決がうまく行えなかった場合に発生するもので、本来であれば無視してもよい部分をxamlプロセッサがなんとか解析しようとしてしまうために発生してしまうものです。これに対応するには、明示的に無視してよい名前空間の指定を行う必要があります。Xaml上でignorable属性を用いて無視してよい名前空間の指定を行うのですが、その場合には少し多めの処理が必要となります。詳しくは私のBlogにまとめてありますので、そちらを参考にしてみてください。

次のページ
まとめ

修正履歴

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー