Morning Girl

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

【Dynamics CRM】【Web API】FetchXMLを利用したレコードの取得

Dynamics CRM Web APIのTipsです。

Dynamics CRMではFetchXMLというクエリ用XMLが内部で利用されています。

https://msdn.microsoft.com/ja-jp/library/gg328332.aspx

これを用いて、データ取得のリクエストが投げられます。

メリットとしては、通常のSelectではJoinできない、1:N、N:1のJoin等が利用できる点にあるでしょう。

気をつけたい点として、HTTP Requestの文字数制限があるかと思います。

取得先フィールドがあまり多くないのであれば、attribue allなどを指定してあげれば、少しは省略できる感じでしょうか。

(その分Resultの量は増えますが)

【Request】

GET https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?fetchXml=<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='account'><attribute name='name' ></attribute><attribute name='address1_city' ></attribute><attribute name='primarycontactid' ></attribute><attribute name='telephone1' ></attribute><attribute name='accountid' ></attribute><order attribute='name' descending='false' ></order><filter type='and'><condition attribute='statecode' operator='eq' value='0' ></condition></filter><link-entity name='contact' from='contactid' to='primarycontactid' visible='false' link-type='outer' alias='accountprimarycontactidcontactcontactid'><attribute name='emailaddress1' ></attribute></link-entity></entity></fetch>

【Result】

{
    "@odata.context": "https://***.api.crm7.dynamics.com/api/data/v8.0/$metadata#accounts(name,_primarycontactid_value,accountid)",
    "value": [
        {
            "@odata.etag": "W/\"712017\"",
            "name": "test",
            "_primarycontactid_value": "049b0510-9cc0-e511-80de-c4346bc4ecf4",
            "accountid": "2b102e4d-7ca8-e511-80dd-c4346bc51088"
        },
        {
            "@odata.etag": "W/\"558908\"",
            "name": "アドベンチャー ワークス (サンプル)",
            "_primarycontactid_value": null,
            "accountid": "2fb50cdf-71a5-e511-80de-c4346bc4ef3c",
            "address1_city": "世田谷区",
            "telephone1": "03-2232-019x",
            "address1_composite": "世田谷区"
        },

ちなみにFetchXMLは集計にも対応しているので、以下の様なRequestも可能です。

https://msdn.microsoft.com/ja-jp/library/gg309565.aspx

【Request】

GET https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?fetchXml=<fetch version='1.0' output-format='xml-platform' mapping='logical' aggregate='true'><entity name='account'> <attribute name='name' aggregate='count' alias='countResult'></attribute></entity></fetch>

【Result】

{
    "@odata.context": "https://***.api.crm7.dynamics.com/api/data/v8.0/$metadata#accounts",
    "value": [
        {
            "countResult": 10
        }
    ]
}