Dynamics CRM 2016 SDK 新機能: Web API その 10: 現状の制限

みなさん、こんにちは。

前回に引き続き、Dynamics CRM 2016 SDK の新機能として、正式版と
なった Web API について紹介します。

今回は現時点での Web API の制限について紹介します。

概要

Web API は今回のリリースで正式版となりましたが、まだ一部機能に
制限があります。以下に主な制限の内容を紹介します。

ナビゲーションプロパティ値でのフィルターが行えない

参照フィールドのように特定できる関連の値であっても現時点では
ナビゲーションプロパティの値を利用したフィルターは行えません。

例えば以下の例では、取引先責任者の名前 ’Renee' で取引先企業の
レコードのフィルターをしますが、失敗して501 エラーが返されます。

 GET  [Organization URI] /api/data/v8.0/accounts?$select=name&$filter=primarycontactid/firstname eq 'Renee' HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

一部の組織サービス要求に対応する Function か Action がない

以下の組織サービスに対応する Function や Action がまだ存在しません。

BookRequest
CalculateRollupFieldRequest
CheckIncomingEmailRequest
FindParentResourceGroupRequest
GetQuantityDecimalRequest
IncrementKnowledgeArticleViewCountRequest
InitializeFromRequest
IsValidStateTransitionRequest
QualifyLeadRequest
QueryMultipleSchedulesRequest
ReactivateEntityKeyRequest
RemoveItemCampaignActivityRequest
RemoveItemCampaignRequest
RemoveMemberListRequest
RescheduleRequest
RetrieveByResourcesServiceRequest
RetrieveDuplicatesRequest
RetrieveFilteredFormsRequest
RetrieveLocLabelsRequest
RetrievePrincipalAccessRequest
RetrieveRecordWallRequest
SearchByBodyKbArticleRequest
SearchByKeywordsKbArticleRequest
SearchByTitleKbArticleRequest
ValidateRecurrenceRuleRequest

$expand クエリにおける $select クエリが無視される

2 つ以上のナビゲーションプロパティをクエリした際、最後のナビゲーション
プロパティで $select を利用しないと、1 つ目のナビゲーションプロパティは
すべての列を返します。

例えば以下のクエリは取引先企業の名前、関連する担当者の名前、関連する
営業案件の名前だけを返します。

GET [Organization URI] /api/data/v8.0/accounts(D05B5D26-2F99-E511-80DB-C4346BC51068)?$select=name&$expand=contact_customer_accounts($select=fullname),opportunity_customer_accounts($select=name)

しかし最後の select を省略すると、関連する取引先担当者の列も fullname
だけではなく、すべてが返されます。

GET [Organization URI] /api/data/v8.0/accounts(D05B5D26-2F99-E511-80DB-C4346BC51068)?$select=name&$expand=contact_customer_accounts($select=fullname),opportunity_customer_accounts

公開前のメタデータが取得できない

Web API を利用してメタデータを取得することができますが、公開済みの
メタデータのみ取得可能です。メタデータの操作については次回以降で
紹介します。

ナビゲーションプロパティの値がない場合、Null が返されない

OData 4.0 の仕様では、ナビゲーションプロパティの値が存在しない場合
Null が返されるべきですが、現状は項目が返されません。

ActivityPointer をリンクした FetchXML の制限

ActivityPointer をリンクエンティティとして指定した FetchXML を利用
した場合、リンクエンティティ側のフィールド値が返りません。

例えば以下の FetchXML を利用した場合、subject フィールドの値は
返りません。

 <fetch version="1.0"
       output-format="xml-platform"
       mapping="logical"
       distinct="true">
  <entity name="account">
    <attribute name="name" />
    <link-entity name="activitypointer"
                 from="regardingobjectid"
                 to="accountid"
                 link-type="inner">
      <attribute name="subject" />
    </link-entity>
  </entity>
</fetch>

まとめ

Web API で開発する場合に、現時点でいくつか制限があることを知っておく必要が
あります。期待した動作をしない場合にはそれが制限であるか、まず SDK をご確認ください。

- 中村 憲一郎

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります