Dynamics CRM Online 2015 Update 1 SDK 新機能: プラグインおよびユーザー定義ワークフロー活動の追跡

みなさん、こんにちは。

今回は Dynamics CRM Online 2015 Update 1 で提供されるプラット
フォームと SDK の新機能より、プラグインおよびユーザー定義
ワークフロー活動の追跡を紹介します。

概要

同期のプラグインやユーザー定義ワークフロー活動の処理が失敗
した場合、これまではユーザーの画面にしかエラーが出力されず
開発者が後から詳細を確認するには、ユーザーがエラーを保存
しておく必要がありました。

今回のリリースではそれらのエラーをサーバー側に保存しておき、
開発者が後から簡単に確認できる機能が提供されます。

設定方法

プラグインおよびユーザー定義ワークフロー活動の追跡は既定で
無効となっており、以下の手順で有効にできます。尚、ログは
他エンティティのレコード同様にディスクを消費するため、必要
に応じて有効/無効を変更してください。

1. ブラウザで Dynamics CRM Online に接続します。

2. 設定 | 管理 | システムの設定よりカスタマイズタブを開きます。

3. 「プラグイントレースログへのログ記録を有効化」を「例外」
または「すべて」に変更して、「OK」をクリックします。

image

例外: エラーが発生した場合のみトレースを保存。
すべて: エラーおよび一般的なトレースを保存。

今回は検証のため「すべて」を選択します。

事前準備

まずはプラグインを開発して、登録します。

プラグインの開発

1. Visual Studio を開きます。

2. 新規プロジェクトよりクラスライブラリを選択し、プロジェクト
名を「TraceSample」と入力します。また .NET Framework 4.5.2 が
選択されている事を確認します。

※この記事では C# を利用しますが VB.NET でも基本は同じです。

image

3. プロジェクトを右クリックして「NuGet パッケージの管理」
を選択します。

image

4. 左ペインで「オンライン」を選択して、crmsdk を検索します。
「Microsoft Dynamics CRM 2015 SDK core assemblies を選択して
インストールします。

image

5. プロジェクトを右クリックして、プロパティをクリックします。
署名タブより「アセンブリに署名する」にチェックを入れます。
ドロップダウンより「新規作成」をクリックします。

image

6. 任意のキーファイル名とパスワードを指定して「OK」クリック
します。

7. Class1.cs の中身を以下のコードと差し替えます。

using Microsoft.Xrm.Sdk;
using System;

namespace TraceSample
{
    public class TraceSample : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {           
            ITracingService tracingService =
                (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            IPluginExecutionContext context = (IPluginExecutionContext)
                serviceProvider.GetService(typeof(IPluginExecutionContext));
           
            IOrganizationServiceFactory serviceFactory =
                (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
           
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
           
            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {               
                Entity entity = (Entity)context.InputParameters["Target"];

                if (entity.LogicalName != "account")
                    return;

                // 名前に「失敗」が含まれていると例外を出す
                if(entity["name"].ToString().Contains("失敗"))
                {
                    tracingService.Trace("失敗をトレースに記述");
                    throw new InvalidPluginExecutionException("エラー発生");
                }
                else
                    tracingService.Trace("成功をトレースに記述");
            }

        }
    }
}

8. プロジェクトをビルドします。

プラグインの登録

1. 以下の URL より Dynamics CRM 2015 用の SDK を取得します。

http://www.microsoft.com/en-us/download/details.aspx?id=44567

2. ダウンロードしたファイルを任意のフォルダに解凍します。

3. SDK\Tools\PluginRegistration\PluginRegistration.exe を実行します。

4. 「CREATE NEW CONNECTION」をクリックして接続を設定します。
「Login」をクリックして組織に接続します。

image

5. 「Register」より「Register New Assembly」をクリックします。

image

6. 開発したプラグインを選択して登録します。

7. 登録したプラグインを展開後、右クリックより 「Register New
Step」をクリックします。

image

8. Create メッセージ、account エンティティの Pre-operation を
選択します。その他は既定のままです。

image

9. 「Register New Step」をクリックして登録を完了します。

動作確認

最後に動作を確認します。

1. 「トレーステスト」という名前で取引先企業を作成します。

2. 続いて「トレーステスト失敗」と名前でも作成します。
意図したとおり、画面にエラーが表示されます。「ファイル
のダウンロード」よりログを保存しておきます。

image

3. 設定 | プラグイン トレース を選択します。

image

4. ログが 2 件出ています。1 つ目のログを開きます。メッセージ
ブロックにトレースのメッセージが、例外の詳細に例外が出て
いることを確認します。

image

5. 2 つ目のログを開きます。メッセージブロックにトレースの
メッセージが出ていることを確認します。

image

まとめ

プラグインやユーザー定義ワークフロー活動で発生した問題の
トレースをサーバー側に保存できることは、開発者にとっては
非常に便利です。是非ご活用ください!

- 中村 憲一郎