デザイナーのコマンド群
ワークフローデザイナーでは標準機能として数々のコマンドがあらかじめ実装されており、右クリックによるコンテキストメニューや、上下部にそれぞれ用意されているボタンよりさまざまな機能を特にコーディングすることなく利用できます。それらの機能はWorkflowDesignerクラスのCommandプロパティを通して提供されており、例えばツールバーやリボン状に同等機能のボタンを用意することが容易になっています。 提供されるコマンドはMSDNに記載されていますのでそちらも参照してください。
以下はMSDNより一部を抜粋したものです。
| コマンド名 | 説明 |
| CollapseCommand | 現在の要素のユーザーインターフェースを折りたたむために使用されるコマンドです。 |
| CopyAsImageCommand | 現在のワークフローデザイン画面をスクリーンショットとしてコピーし、それをクリップボードに配置するために使用されるコマンドです。 |
| CopyCommand | 選択しているアクティビティをコピーするために使用されるコマンドです。 |
| ExpandCommand | 複合アクティビティの選択された子に移動し、その子アクティビティを展開してワークフローデザイナー画面全体に表示されるようにするために使用されるコマンドです。[全画面表示] コンテキストメニューコマンドによってこのアクションが開始されます。 |
| ExpandInPlaceCommand | 現在の要素のリストを現在の表示内で展開するために使用されるコマンドです。 |
| FitToScreenCommand | 現在の要素を画面に合わせるために使用されるコマンドです。 |
| GoToParentCommand | 選択された子アクティビティの親アクティビティに移動し、その親アクティビティを展開してワークフローデザイナー画面全体に表示されるようにするために使用されるコマンドです。[上位を表示] コンテキストメニューコマンドによってこのアクションが開始されます。 |
| MoveFocusCommand | フォーカスを移動するために使用されるコマンドです。 |
| PasteCommand | 貼り付けるために使用されるコマンドです。 |
| RedoCommand | 操作をやり直すために使用されるコマンドです。 |
| ResetZoomCommand | ズームをリセットするために使用されるコマンドです。 |
| SaveAsImageCommand | 現在のワークフローデザイン画面をイメージとして保存するために使用されるコマンドです。 |
| SelectAllCommand | ビュー内のすべてのオブジェクトを選択するために使用されるコマンドです。 |
| UndoCommand | バッファー内の最後の操作を元に戻すために使用されるコマンドです。 |
| ZoomInCommand | 現在のワークフローデザイナー画面でズームインを行うために使用されるコマンドです。 |
| ZoomOutCommand | 現在の画面でズームアウトを行うために使用されるコマンドです。 |
これらコマンドを利用するには次のようなコードを記述します。
‘XAML 側のボタン記述で利用するコマンドを指定しておく ‘Command="sapv:DesignerView.UndoCommand" Dim view = designer.Context.Services.GetService(Of DesignerView)() ‘アンドゥ用に配置したボタン btnUndo.CommandTarget = view
var view = designer.Context.Services.GetService(); //アンドゥ用に配置したボタン btnUndo.CommandTarget = view;
作成したワークフローデザイナーよりサービスとして提供されるDesignerViewを取得し、コマンドを割り付けるボタンなどのコントロールに対してCommandTargerプロパティで操作対象となるUIElement(この場合はワークフローデザイナー)を設定します。このように記述することで、ボタンなどを操作した際にワークフローデザイナーを操作できます。
ワークフローの保存
ここまででワークフローデザイナーを利用する実装を行いましたので、次は作成したワークフローの保存を行います。ワークフローの保存もWorkflowDesignerクラスでメソッドが用意されており、非常に簡易に行うことができます。
designer.Flush designer.Save(“testworkflow.xaml”)
designer.Flush(); designer.Save(“testworkflow.xaml”);
ワークフローデザイナーで現在表示されている内容をファイルに出力するSaveメソッドを利用すると、ワークフローの内容がxaml形式のファイルとして保存されます。ただしその前に、現在編集している内容を一度確定させる必要がありますので、WorkflowDesigner.Flushメソッドを先に呼び出しておくのが良いでしょう。 このようにメソッド1つで編集しているワークフローをファイルに保存することができます。
便利なWorkflowDesigner.Saveメソッドですが、メソッド呼び出し時に例外が発生することがあります。これは作成されるxamlにおいて、名前空間の解決がうまく行えなかった場合に発生するもので、本来であれば無視してもよい部分をxamlプロセッサがなんとか解析しようとしてしまうために発生してしまうものです。これに対応するには、明示的に無視してよい名前空間の指定を行う必要があります。Xaml上でignorable属性を用いて無視してよい名前空間の指定を行うのですが、その場合には少し多めの処理が必要となります。詳しくは私のBlogにまとめてありますので、そちらを参考にしてみてください。
