こんにちは。CData Software Japan リードエンジニアの杉本です。
今回は分かる人にはわかる、嬉しい人にはとても嬉しい(私も嬉しい)CData Dataverse Driverの重要なアップデート「SchemaName」対応を紹介します!
SchemaName とは?
まず、Dataverse(Dynamics 365 CRM)にまつわるスキーマ名について解説しておきましょう。
Dataverseでは定義したテーブルの内部名をいくつかの種類で持っています。例えば取引先企業だと、以下のようになっていますね。(実はもうちょっとあるんですが違いもいまいちわからないので、省略)
プロパティ名 | 値の例 | 備考 |
---|---|---|
LogicalName | account | |
SchemaName | Account | |
CollectionSchemaName | accounts | |
DisplayCollectionName | Accounts | |
DisplayName | 取引先企業(日本語の場合) |
このLogicalNameとDisplayNameが主にUI上で確認できる名前ですが
実は、Web API(OData)ではCollectionSchemaName、つまり複数形の値が使われていたりします。
以下のaccountsの部分がそうですね。
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がテーブル名として使われていました。
しかし、この新しい接続設定を使うことで、SchemaNameをテーブル名として利用できるようになりました!
使い方
使い方は簡単です。以下のSchemaという接続プロパティがデフォルトでは「System」になっているのですが、「Entities」に変更してください。
これでテーブル名がSchemaNameに変更されます。
もちろん、SQLも以下の通り。
// Schema=Entities; SELECT * FROM Account; // Schema=System; SELECT * FROM accounts;
SchemaNameのポイント
さて、なぜここまでSchemaName対応が嬉しいのかといえば、SOAP APIの内部名で利用しているのがSchemaNameだからだったりします。
CDataで初期の頃から提供している Dynamics CRM Driverでは、内部的にSOAP APIを利用していたため
以下のようにTableの名称はSchema名で生成されていました。
このため、以前までは複数形のテーブル名であったため、もしバージョンアップした場合テーブル名を調整する必要があったのですが、今回のアップデートにより、よりスムーズにドライバーの変更も対応できるかと思います。
もし利用にあたって気になる点があれば、テクニカルサポートデスクまでお気軽にお問い合わせください。