Dynamics CRM 2011 XAML ワークフロー

みなさん、こんにちは。

前回に引き続き、ワークフローのカスタマイズより XAML ワークフローのサポートを
紹介します。こちらの機能も設置型のみサポートされます。

XAML ワークフロー

Dynamics CRM 2011 のワークフロー機能は、.NET Framework 4.0 WF エンジンで
実行されています。よって定義は全て XAML と呼ばれるマークアップ言語で記述され、
保存されています。

実際にワークフローをエクスポートすると、.xaml 拡張子のファイルがエクスポートされ、
Visual Studio 2010 やメモ帳でも編集することが可能です。また正しく編集された
XAML ファイルは、再度インポートして利用することが可能です。

XAML ワークフローのエクスポート

ワークフローは単体でエクスポートできないため、ソリューション機能を利用して
エクスポートします。以下の手順でサンプルワークフローの作成およびエクスポートを
行ってください。

ワークフローの作成

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. 設定 | プロセスセンター | プロセスをクリックします。

3. 新規ボタンをクリックします。

4. 以下のように設定して、OK をクリックします。

image

5. ステップの追加 | レコードの作成をクリックします。

6. メモを選択して、プロパティの設定をクリックします。

7. 「ワークフローで作成されたメモ」 とタイトルに入力して、保存して閉じます。

8. 実行可能なワークフローで、オンデマンド プロセスとしてにチェックを入れます。

9. 開始時期のレコードの作成チェックをオフにして、保存します。

10. アクティブ化をクリックしてワークフローを有効にします。

11. ワークプレース | 取引先担当者をクリックして任意のレコードを開きます。

12. ワークフローの実行ボタンをクリックして、XAML サンプルワークフローを実行します。

13. ナビゲーションペインのプロセス | ワークフローをクリックします。

14. ワークフローの完了を確認して、レコードを開きなおします。
メモが 1 件作成されていることを確認してください。

image

ソリューションを利用したワークフローのエクスポート

1. 設定 | カスタマイズ | ソリューションをクリックします。

2. 新規ボタンをクリックします。

3. 以下のように設定して、保存をクリックします。

image

4. プロセスをクリックして、既存の追加をクリックします。

5. XAML サンプルワークフローを選択して OK をクリックします。

6. 不足している必須のコンポーネントで、「いいえ、必須コンポーネントを含めません」
を選択して、OK をクリックします。

7. 保存をクリックして、ソリューションのエクスポートをクリックします。

8. 全て既定値のまま、ウィザードを完了し、ファイルの保存を選択します。

9. 任意の場所に保存します。

10. 圧縮ファイルを開いて、Workflows フォルダーより xaml 拡張子ファイルを
任意の場所に解凍します。

XAML ワークフローを開く

エクスポートした XAML ワークフローは Visual Studio 2010 で開きます。

1. Visual Studio 2010 を開きます。

2. 新しいプロジェクトを以下の内容で作成します。名前は SampleXAML としました。

image

3. 参照設定を右クリックして、参照の追加をクリックします。

4. 参照タブをクリックして、sdk\bin より Microsoft.Xrm.Sdk.dll および
Microsoft.Xrm.Sdk.Workflow.dll を追加します。

5. プロジェクトを右クリックして、追加より既存の項目をクリックします。

6. 先ほどエクスポートした xaml ファイルを指定して追加をクリックします。

7. ソリューション エクスプローラーより追加した XAML ファイルを開きます。

8. ワークフローエディターではメモの追加を選択しただけですが、実際には
数多くのステップが追加されていることが確認できます。

XAML ワークフローを編集する

開いた XAML ワークフローは、そのまま編集することが可能です。既存の
ワークフローはメモを追加するものですが、今回はこれをループして 10 個の
メモを追加するワークフローに変更します。

1. ツールボックスより While 制御フローを、Workflow コンテナの直下に追加します。

image

2. CreateStep1 をクリックして、 While の Body 部分にドラッグアンドドロップします。これで
メモ追加の部分が、While 制御フローの実行部分として登録されました。

image

3. ここでは処理を 10 回繰り返したいので、回数カウント用の変数を追加します。
While コンテナを選択してから、画面左下の変数をクリックします。

4. 変数の作成をクリックして、名前、変数の型および既定値を入力します。

image

5. While コンテナの Condition にある 「VB の式を入力してください」 をクリックします。

6. 式として count < 10 と入力します。

image

7. 次に、メモ追加の処理が終わるたび count 変数をインクリメントするために
CreateStep1 内の一番最後の Persist の前部分に、ツールボックスのプリミティブより
Assign をドラッグアンドドロップします。

image

8. Assign に以下のような式を入力します。

image

9. 編集した XAML ファイルを保存します。

XAML ワークフローのインポート

編集した XAML ファイルを再度システムにインポートします。

既定では編集した XAML ワークフローのインポートは無効に設定されているため、
以下の手順で設定を有効にします。

XAML ワークフローサポートの有効化

1. Dynamics CRM 2011 サーバー上で PowerShell を開きます。

2. Add-PSSnapin Microsoft.Crm.Powershell コマンドを実行します。

3. Get-CRMSetting CustomCodeSettings コマンドを実行します。

4. 結果が表示されたら、AllowDeclarativeWorkflows の値が False で
あることを確認します。True の場合は以下の作業は不要です。

5. $setting = Get-CRMSetting CustomCodeSettings コマンドを実行します。

6. $setting.AllowDeclarativeWorkflows = $true コマンドを実行します。

7. Set-CrmSetting $setting コマンドを実行します。

ソリューションのインポート

XAML ワークフローサポート有効化後、ソリューションをインポートします。

1. 作成したプロジェクトのフォルダより、編集した XAML ファイルをコピーして
エクスポートしたソリューションの Workflows フォルダにペーストします。

2. Dynamics CRM 2011 の画面より、設定 | カスタマイズ | ソリューションを
クリックします。

3. インポートをクリックして、エクスポートされたソリューションを選択します。

4. 既定の設定のまま、ウィザードを完了します。

5. 設定 | プロセス センター | プロセスより XAML サンプル ワークフローを
開きます。ステップが表示されないことを確認します。

image

6. アクティブ化をクリックして、ワークフローを有効にします。

7. ワークプレース | 取引先担当者から任意のレコードを選択して、
編集したワークフローを実行します。

8. 1 度のワークフロー実行で、10 個のメモが追加されていることを確認します。

image

Dynamics CRM 2011 のアクティビティ利用

次に、Dynamics CRM 2011 独自のアクティビティを利用したカスタマイズを
紹介します。上記のワークフローは、時間差なく 10 件のメモを追加するように
作成されましたが、今回は 1 分ごとにメモを追加するようにします。

尚、通常の .NET Framework 4.0 WF では Delay アクティビティを利用して
待機を実現しますが、Dynamics CRM 2011 のワークフローでは、専用の
アクティビティを利用する必要があります。

ツールボックスアイテムの追加

既定では、Dynamics CRM 2011 のアクティビティは、Visual Studio 2010 の
ツールボックスに表示されませんが、以下の手順で追加が可能です。

1. Visual Studio 2010 のツール | ツールボックス アイテムの選択を
クリックします。

2. System.Activities コンポーネントタブをクリックして、参照をクリックします。

3. sdk\bin\Microsoft.Crm.Sdk.Workflow.dll を指定します。

4. Dynamics CRM のアイテムが選択されている状態で、OK をクリックします。 

image

5. ツールボックスにアイテムが追加されたことを確認します。

image

XAML ワークフローの編集

以下の手順で、1 分間の待ち処理を追加します。

1. ツールボックス | ランタイムより、Postpone を最後の Assign の後に
追加します。

image

2. Postpone を右クリックして、プロパティをクリックします。

3. プロパティの PostponeUntil 横の [...] をクリックします。

4. 現在の時刻より 1 分後に値をするため、以下の式を入れます。
※この場合、メモに追加の処理が完了した時点から 1 分後です。
処理が開始してから 1 分後にしたい場合には変数を作成し、処理の
初めで時刻を保持しておく必要があります。

image

5. ファイルを保存します。

6. 上記ソリューションのインポートと同じ手順で、再度ワークフローを
インポートします。

7. ワークフローをアクティブにして実行し、動作を確認します。

image

現時点での制限

現状で 「条件の確認」 と 「待機状態」 のステップは XAML でサポートされて
いません。エクスポートは可能ですが、詳細のステップが表示されません。
同等の機能を利用したい場合には、.NET Framework 4.0 WF のフローを利用
する必要があります。

まとめ

XAML ワークフローのカスタマイズ機能を利用すれば、.NET Framework
4.0 WF の機能を十分に活用したワークフローを作成することが可能です。
編集も GUI で行えますし、各アクティビティの情報も SDK にありますので
是非活用してください。

- Dynamics CRM サポート 中村 憲一郎