CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Dataverse Driver(Dynamics 365 CRM)が SchemaName によるテーブル名表示に対応しました

f:id:sugimomoto:20211019160740p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

今回は分かる人にはわかる、嬉しい人にはとても嬉しい(私も嬉しい)CData Dataverse Driverの重要なアップデート「SchemaName」対応を紹介します!

www.cdata.com

f:id:sugimomoto:20211019160500p:plain

SchemaName とは?

まず、Dataverse(Dynamics 365 CRM)にまつわるスキーマ名について解説しておきましょう。

Dataverseでは定義したテーブルの内部名をいくつかの種類で持っています。例えば取引先企業だと、以下のようになっていますね。(実はもうちょっとあるんですが違いもいまいちわからないので、省略)

プロパティ名 値の例 備考
LogicalName account
SchemaName Account
CollectionSchemaName accounts
DisplayCollectionName Accounts
DisplayName 取引先企業(日本語の場合)

このLogicalNameとDisplayNameが主にUI上で確認できる名前ですが

f:id:sugimomoto:20211019160508p:plain

実は、Web API(OData)ではCollectionSchemaName、つまり複数形の値が使われていたりします。

以下のaccountsの部分がそうですね。

docs.microsoft.com

GET [Organization URI]/api/data/v9.1/accounts?$select=name
&$top=3 HTTP/1.1  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

このような仕様であるため、以前までのCData Dataverse DriverではCollectionSchemaNameがテーブル名として使われていました。

f:id:sugimomoto:20211019160516p:plain

しかし、この新しい接続設定を使うことで、SchemaNameをテーブル名として利用できるようになりました!

使い方

使い方は簡単です。以下のSchemaという接続プロパティがデフォルトでは「System」になっているのですが、「Entities」に変更してください。

cdn.cdata.com

これでテーブル名がSchemaNameに変更されます。

f:id:sugimomoto:20211019160522p:plain

もちろん、SQLも以下の通り。

// Schema=Entities;
SELECT * FROM Account;

// Schema=System;
SELECT * FROM accounts;

f:id:sugimomoto:20211019160528p:plain

SchemaNameのポイント

さて、なぜここまでSchemaName対応が嬉しいのかといえば、SOAP APIの内部名で利用しているのがSchemaNameだからだったりします。

CDataで初期の頃から提供している Dynamics CRM Driverでは、内部的にSOAP APIを利用していたため

www.cdata.com

f:id:sugimomoto:20211019160534p:plain

以下のようにTableの名称はSchema名で生成されていました。

cdn.cdata.com

f:id:sugimomoto:20211019160539p:plain

このため、以前までは複数形のテーブル名であったため、もしバージョンアップした場合テーブル名を調整する必要があったのですが、今回のアップデートにより、よりスムーズにドライバーの変更も対応できるかと思います。

もし利用にあたって気になる点があれば、テクニカルサポートデスクまでお気軽にお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx