Odata $фильтр для даты в Office 365 REST API



Я пытаюсь извлечь события для пользователя из его учетной записи Office 365 с помощью REST API, но фильтруется по полю "пуск". Например, получить все события, которые произойдут после даты: 2014-08-29T09: 13: 28 ' но я всегда получаю это сообщение об ошибке



{
"error": {
"code": "ErrorInvalidUrlQuery",
"message": "The query parameter '$filter' is invalid.",
"innererror": {
"message": "The query parameter '$filter' is invalid.",
"type": "Microsoft.Exchange.Services.OData.InvalidUrlQueryException",
"stacktrace": " at Microsoft.Exchange.Services.OData.Web.ODataQueryOptions.Populate()
at Microsoft.Exchange.Services.OData.ODataContext..ctor(HttpContext httpContext, Uri requestUri, ServiceModel serviceModel, ODataPathWrapper odataPath, ODataUriParser odataUriParser)
at Microsoft.Exchange.Services.OData.Web.RequestBroker.InitializeODataContext()
at Microsoft.Exchange.Services.OData.Web.RequestBroker.Process()",
"internalexception": {
"message": "A binary operator with incompatible types was detected. Found operand types 'Edm.DateTimeOffset' and 'Edm.Int32' for operator kind 'Equal'.",
"type": "Microsoft.OData.Core.ODataException",
"stacktrace": " at Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.PromoteOperandTypes(BinaryOperatorKind binaryOperatorKind, SingleValueNode& left, SingleValueNode& right)
at Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)
at Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)
at Microsoft.OData.Core.UriParser.Parsers.FilterBinder.BindFilter(QueryToken filter)
at Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilterImplementation(String filter, IEdmType elementType, IEdmNavigationSource navigationSource)
at Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilter()
at Microsoft.Exchange.Services.OData.Web.ODataQueryOptions.Populate()"
}
}
}
}


Вот все, что я пробовал:



[ressource]=https://outlook.office365.com/




Url: [ressource]EWS / OData / Me / Events?$filter=Start%20eq%20DateTime '2012-05-29T09: 13: 28'



Url: [ressource]EWS / OData / Me / Events?$filter=Start%20eq%20DateTime '20141231'



Url: [ressource]EWS / OData / Me / Events?$filter=месяц (начало)%20eq%2012




И я попробовал $filter on string field или $select on the field Start , и это сработало отлично, поэтому я думаю, что моя ошибка вызвана форматом даты, но я не знаю, как ее решить, так что если кто-нибудь может помочь мне в этом, это будет здорово!



Спасибо!

611   3  

3 ответов:

Фильтрация по датам действительно работает, но вы не можете сделать все в спецификации OData v4. Например, все это работает для меня:

/Me/Events?$filter=Start eq 2014-08-28T21:00:00Z
/Me/Events?$filter=Start ge 2014-08-28T21:00:00Z

Добавление "DateTime"перед ним приводит к сбою. То же самое и с функцией месяца. Если вы придерживаетесь формата выше, он должен работать для вас.

В версии 2 REST API O365 вы должны использовать:

URL encoded:     $filter=Start/DateTime%20ge%20%272017-03-15T00:00:00Z%27
Not URL encoded: $filter=Start/DateTime ge '2017-03-15T00:00:00Z'

Подробнее https://msdn.microsoft.com/en-us/office/office365/api/complex-types-for-mail-contacts-calendar#filter-requests

Привет просто увеличьте top=100 или больше, что вы хотите вытащить из своего почтового ящика.

https://outlook.office365.com/api/v2.0/me/MailFolders/Inbox/messages/?%24select=CreatedDateTime%2cLastModifiedDateTime%2cChangeKey%2cCategories%2cReceivedDateTime%2cSentDateTime%2cHasAttachments%2cSubject%2cBody%2cImportance%2cParentFolderId%2cSender%2cFrom%2cToRecipients%2cCcRecipients%2cBccRecipients%2cReplyTo%2cConversationId%2cIsDeliveryReceiptRequested%2cIsReadReceiptRequested%2cIsRead%2cIsDraft%2cWebLink&%24top=100&%24skip=0"

Comments

    Ничего не найдено.