Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Dynamics 365 9.0 新機能 仮想エンティティの使い方 その1 概要

最近Dynamics から若干離れ気味でしたが、久しぶりにDynamics 365 の新機能ネタを一つ。

個人的に一番注目している仮想エンティティの使い方を紹介したいと思います。

■外部データ ソースからのデータを格納する仮想エンティティの作成および編集

https://docs.microsoft.com/ja-jp/dynamics365/customer-engagement/customize/create-edit-virtual-entities

仮想エンティティってどんなことができるの?

Dynamics 365 外部の環境で公開されているWeb API(ODataプロトコルのみ)データを、あたかもDynamics 365の一つのエンティティかのうように扱うことができるのが、仮想エンティティの機能です。

例えば以下のDynamics 365の画面、通常のDynamics 365上に存在しているレコードのように見えますが、実態はODataで公開されている、外部データベースに存在しているデータです。

f:id:sugimomoto:20171117205340p:plain

元ネタはODataの公式リファレンスで公開されている

www.odata.org

以下のODataサービスです。

http://services.odata.org/V4/OData/OData.svc

以下のようなJsonを返してくれるものですね。

f:id:sugimomoto:20171117205415p:plain

このWeb APIで公開されている特定のリソースとその項目をDynamics 365のエンティティとフィールドにマッピングして使用します。

基本的にはDynamics 365上のエンティティと同じ扱いなので、他のエンティティから検索フィールドで紐付けることができますし

f:id:sugimomoto:20171117205423p:plain

レポートで表示することもできます。

f:id:sugimomoto:20171117205432p:plain

SDKとしてPlugin内部で参照したり、Dynamics 365内部のJavascriptから呼び出すためのWeb APIとして扱うこともできます。(Web APIを変換して、Web APIで呼び出すというね)

f:id:sugimomoto:20171117205438p:plain

そもそもなんで仮想エンティティなんて使うのか?

Dynamics 365・CRMも昨今のクラウドサービスのご多分にもれず、様々な各種外部データに依存しているフシがあります。このあたりは、以前SharePoint勉強会でも触れていました。

f:id:sugimomoto:20171117210633p:plain

kageura.hatenadiary.jp

顧客データはマーケティングアプリケーションから持ってきますし

製品データは基幹システムや生産管理システムにあります。

人事や社員データは人事システムやActiveDirectoryにあるでしょう。

基本的なアプローチでは、ETLツール等を用いてDynamics 365に連携するパターンが最も多いかと思いますが、基本的には疎結合・非同期的ですので、メリットデメリットそれなりにあると思います。

(もちろん、そのほうが全体のシステムアーキテクチャとして望ましい場合があることは否定しませんし、そうあるべきというアーキテクチャのデザイン思想も理解しています)

そんなデータの依存関係に対する一つの解決方法として、提供されているのが今回の仮想エンティティというアプローチかなと個人的には捉えています。

利用上の注意点・考慮事項

MSDNの考慮事項が充実しているので、使う前には一通り目を通しておいたほうがいいです。

https://docs.microsoft.com/ja-jp/dynamics365/customer-engagement/customize/create-edit-virtual-entities#considerations-when-you-use-virtual-entities

そんな中でも特に注意するべきなのは

「仮想エンティティは読み取り専用」というところと、「レコード単位のセキュリティレベルに対応していない」というところでしょうか。

あくまで外部の独立したデータであるということを認識の上で利用する必要があります。

・すべての仮想エンティティは読み取り専用です。

・既存のエンティティは、仮想エンティティに変換できません。

・仮想エンティティは監査をサポートしていません。

・仮想エンティティ フィールドは、ロールアップまたは計算フィールドでは使用できません。

・仮想エンティティは、エンティティの活動の種類になることはできません。

・エンティティ テーブル行に影響する多くの機能が仮想エンティティでは有効にできません。 これには、キュー、ナレッジ マネージメント、SLA、重複データ検出、変更の追跡、Mobile offline 機能、フィールド セキュリティ、関連性検索、Dynamics 365 Web ポータル ソリューションのポータル、N:N の関連付けが含まれます。

・仮想エンティティは組織によって所有され、行レベルの Dynamics 365 セキュリティ概念はサポートされません。 外部データ ソースには独自のセキュリティ モデルを実装することをお勧めします。

・高度な検索で仮想エンティティを使用するとき、単一のデータ ソースを対象にすることをお勧めします。 たとえば、Dynamics 365 ネイティブ データと仮想エンティティ外部データ間に最終的に結合を作成する、高度な検索の作成はお勧めしません。

・更新で検証されるフィールド メタデータ プロパティは仮想エンティティには適用されません。 たとえば、仮想エンティティ フィールドの整数フィールドには、最小値のゼロに設定できます。 ただし、値は外部データ ソースから取得されるため、仮想エンティティから取得した場合、クエリはゼロ未満の値を返します。 クエリでは最小値のプロパティは示唆されていません。 0を超える値が望ましい場合は、値をそのようにフィルター処理する必要があります。

・仮想エンティティでは変更の追跡がサポートされておらず、データ エクスポート サービス などの Dynamics 365 機能を使用して同期することができません。

次回、実際の仮想エンティティの構築手順を書いていきたいと思います。

参考

2017 年 7 月の更新プログラムの開発者向けの新機能

https://docs.microsoft.com/ja-jp/dynamics365/get-started/whats-new/customer-engagement/new-in-july-2017-update-for-developers

Interact with data from external systems using the new virtual entities

https://blogs.technet.microsoft.com/lystavlen/2017/09/08/virtual-entities/

OData v4 データ プロバイダーの構成、要件、ベスト プラクティス

https://docs.microsoft.com/ja-jp/dynamics365/customer-engagement/customize/virtual-entity-odata-provider-requirements