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

まとめ

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

- 中村 憲一郎

Comments (9)

  1. 徐 林山 より:

    以下の手順を実施しても、[設定]-[カスタマイズ]の下に4行目の[プラグイントレース]が表示されない現象が起きています。原因と対策をご教授いただけますでしょうか?

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

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

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

  2. コメントありがとうございます。

    こちらの機能は Dynamics CRM Online 2015 Update 1 からの機能ですので、念のためブラウザで Dynamics CRM に接続いただいた後、画面右上の設定アイコン(ネジのアイコン)より情報をご覧いただき、組織のバージョンが 7.1.xxx となっていることをご確認ください。

    中村 憲一郎

  3. 徐 林山 より:

    組織のバージョンは7.1.0.1086です。(DBも同じ)

    引き続き

    どうぞよろしくお願いいたします。

  4. コメントありがとうございます。

    サイトマップからメニューが消えてしまっている可能性が高いです。

    権限が不足しているか、サイトマップに根本的にメニューが存在しないかの

    どちらかになりますので、以下をご確認ください。

    1. 管理者権限でもメニューが見えないか。

    2. サイトマップに以下の要素があるかご確認ください。

    <SubArea Id="nav_plugintrace" ResourceId="Homepage_PluginTraceLog" Icon="/_imgs/area/Plugin_TraceLog_32.png" Entity="plugintracelog" Client="Web" IntroducedVersion="7.1.0.0">

               <Privilege Entity="plugintracelog" Privilege="Read" />

             </SubArea>

    SiteMap を使用したアプリケーション ナビゲーションの変更

    msdn.microsoft.com/…/gg309259.aspx

    中村 憲一郎

  5. 徐 林山 より:

    サイトマップを確認したところ、”メニューが存在しない”でした。

    ご教授の通り、サイトマップにメニューを追加したら、”プラグイン トレースログ”が表示されるようになりました。

    誠にありがとうございました!

    またどうぞよろしくお願いいたします。

  6. コメントありがとうございます。

    無事メニューが出たようで安心しました。

    中村 憲一郎

  7. 徐 林山 より:

    ”プラグイン トレースログ”の件とは異なりますが、情報があればご案内いただけますでしょうか?

    CRM Online 上、(プラグインやワークフロー等で)集計処理を毎日夜24時に実行することは実現できますか?

    どうぞよろしくお願いいたします。

  8. コメントありがとうございます。

    残念ながらプラグインやプロセスのスケジュール処理は既定でサポートしていないため

    全てオンラインで完結する場合は Azure Automation などクラウドでスケジューリングできる

    サービスから操作をトリガーすることをご検討ください。

    azure.microsoft.com/…/automation

    中村 憲一郎

  9. 徐 林山 より:

    お知らせ、ありがとうございました!

    またどうぞよろしくお願いいたします。

Skip to main content