Параметр фильтра Microsoft Dynamics REST API $ возвращает ошибку 400 - PullRequest
0 голосов
/ 13 мая 2019

Мы вытягиваем контакты из системы Microsoft Dynamics, используя REST API. Есть ок. 88K контактов, и мы хотели бы уменьшить объем передаваемых данных, используя фильтр, который проверяет поле «на основе». Когда мы добавляем фильтр к запросу, он возвращает ответ 400. Мы пытались фильтровать по нескольким полям, мы пытались фильтровать по значению с помощью одного тика, и мы пытались использовать двойной щелчок для переноса значения.

Запрос без параметра $ filter

Этот запрос не содержит параметр $ filter и вернет 5K из 88K контактов.

URL: https://[HOST].api.crm.dynamics.com/api/data/v9.0/contacts?$select=emailaddress1,fullname,nickname,telephone1,createdon,modifiedon,_parentcustomerid_value

Это вернет результаты 5K со следующей ссылкой, позволяющей перебрать все результаты в базе данных.

Ответ

(
    [@odata.etag] => *************
    [emailaddress1] => *************
    [fullname] => *************
    [nickname] => 
    [telephone1] => 
    [createdon] => 2018-12-18T22:17:23Z
    [modifiedon] => 2018-12-18T22:17:26Z
    [_parentcustomerid_value] => 
    [contactid] => *************
)

Запрос с параметром $ filter

Этот запрос содержит параметр $ filter. Когда это выполняется, динамика возвращает ошибку 400.

URL: https://[HOST].api.crm.dynamics.com/api/data/v9.0/contacts?$select=emailaddress1,fullname,nickname,telephone1,createdon,modifiedon,_parentcustomerid_value&$filter=modifiedon gt 2018-01-01

Ответ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>

Примечание. Мы также попробовали эти запросы и получили ответ 400

ПРИМЕЧАНИЕ. Следующие попытки также возвращают 400 ошибок:

https://[HOST].api.crm.dynamics.com/api/data/v9.0/contacts?$filter=modifiedon gt '2018-01-01'

https://[HOST].api.crm.dynamics.com/api/data/v9.0/contacts?$select=emailaddress1,fullname,nickname,telephone1,createdon,modifiedon,_parentcustomerid_value&$filter=modifiedon GT "2018-01-01"

https://[HOST].api.crm.dynamics.com/api/data/v9.0/contacts?$select=emailaddress1,fullname,nickname,telephone1,createdon,modifiedon,_parentcustomerid_value&$filter=fullname ноль ноль

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Я обнаружил проблему, и в результате возникли пробелы в запросе, которые PHP и cURL не кодировали. Спасибо AnkUser за предложение использовать другой инструмент для тестирования.

Это работает!

$ = фильтр modifiedon% 20gt% 20'2019-05-07'

Это НЕ работает.

$ filter = updatedon gt '2019-05-07'

0 голосов
/ 14 мая 2019

Я создал Trial Instance и устал вызывать Webapi с помощью Postman и смог отфильтровать записи.

 https://[host].api.crm4.dynamics.com/api/data/v9.1/contacts?$select=fullname&$filter=modifiedon gt '2019-05-13'

    Result

    "value": [
            {
                "@odata.etag": "W/\"1732225\"",
                "fullname": "test contact",
                "contactid": "9fb24443-1476-e911-a975-000d3ab0fc6e"
            }


    https://[host].api.crm4.dynamics.com/api/data/v9.1/contacts?$select=fullname&$filter=fullname ne null

    Result

     "value": [
            {
                "@odata.etag": "W/\"1732225\"",
                "fullname": "test contact",
                "contactid": "9fb24443-1476-e911-a975-000d3ab0fc6e"
            },
            {
                "@odata.etag": "W/\"1445929\"",
                "fullname": "Portal Customer",
                "contactid": "99db51a2-c34e-e111-bb8d-00155d03a715"
            },
            {
                "@odata.etag": "W/\"1445935\"",
                "fullname": "System Administrator",
                "contactid": "7469fd95-c0bd-4236-90bf-1d1100291df5"
            },
            {
                "@odata.etag": "W/\"1668674\"",
                "fullname": "Vincent Lauriant",
                "contactid": "465b158c-541c-e511-80d3-3863bb347ba8"
            },
            {
                "@odata.etag": "W/\"1437642\"",
                "fullname": "Adrian Dumitrascu",
                "contactid": "49a0e5b9-88df-e311-b8e5-6c3be5a8b200"
            },
            {
                "@odata.etag": "W/\"1667039\"",
                "fullname": "Cathan Cook",
                "contactid": "4ba0e5b9-88df-e311-b8e5-6c3be5a8b200"
            },

Объяснение для записей 5k доступно в Microsodt Docs

Укажите количество объектов для возврата на странице. Значение предпочтения odata.maxpagesize для запроса количества объектов возвращается в ответ.

Примечание

Вы не можете использовать значение предпочтения odata.maxpagesize больше 5000.

    Request
        GET [Organization URI]/api/data/v9.0/accounts?$select=name HTTP/1.1  
        Accept: application/json  
        OData-MaxVersion: 4.0  
        OData-Version: 4.0  
        Prefer: odata.maxpagesize=3 

Response
    HTTP/1.1 200 OK  
    Content-Type: application/json; odata.metadata=minimal  
    OData-Version: 4.0  
    Content-Length: 402  
    Preference-Applied: odata.maxpagesize=3  

    {  
       "@odata.context":"[Organization URI]/api/data/v9.0/$metadata#accounts(name)",
       "value":[  
          {  
             "@odata.etag":"W/\"437194\"",
             "name":"Fourth Coffee (sample)",
             "accountid":"7d51925c-cde2-e411-80db-00155d2a68cb"
          },
          {  
             "@odata.etag":"W/\"437195\"",
             "name":"Litware, Inc. (sample)",
             "accountid":"7f51925c-cde2-e411-80db-00155d2a68cb"
          },
          {  
             "@odata.etag":"W/\"468026\"",
             "name":"Adventure Works (sample)",
             "accountid":"8151925c-cde2-e411-80db-00155d2a68cb"
          }
       ],
       "@odata.nextLink":"[Organization URI]/api/data/v9.0/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b8151925C-CDE2-E411-80DB-00155D2A68CB%257d%2522%2520first%253d%2522%257b7D51925C-CDE2-E411-80DB-00155D2A68CB%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20/%3E"
    }
...