【问题标题】:Odata $filter for the date in the Office 365 REST APIOffice 365 REST API 中日期的 Odata $filter
【发布时间】:2014-08-29 18:41:52
【问题描述】:

我正在尝试使用 REST API 从用户的 Office 365 帐户中检索用户的事件,但由“开始”字段过滤。例如,检索将在日期之后发生的所有事件: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()"
      }
    }
  }
}

我尝试过的所有东西都在这里:

[资源]=https://outlook.office365.com/

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

网址:[资源]EWS/OData/Me/Events?$filter=Start%20eq%20DateTime'20141231'

网址:[资源]EWS/OData/Me/Events?$filter=month(Start)%20eq%2012

我已经尝试了字符串字段上的 $filter 或字段 Start 上的 $select 并且效果很好,所以我认为我的错误是由日期格式引起的,但我不知道如何解决它,所以如果有人可以帮助我,那就太好了!

谢谢!

【问题讨论】:

  • 根据 API 文档,似乎不支持 $filtermsdn.microsoft.com/en-us/library/office/…
  • @wdosanjos 感谢您的回答,但在其文档中,微软似乎说它是受支持的:quote: "or a filtered list by using the $filter OData query parameter" from msdn.microsoft.com/EN-US/library/office/…
  • 你是对的。我确实尝试过,尽管 url 语法是正确的,但我得到了完全相同的错误。我还尝试了其他(非日期)属性,结果相同。
  • 我在这个博客 (blogs.msdn.com/b/exchangedev/archive/2014/06/19/…) 上看到 cmets 声明 $filter 尚未实现。
  • 例如,这个对我有用:[re​​ssource]/EWS/OData/Me/Events?$filter=Subject%20eq%20'Meeting' 所以恐怕日期格式不是还支持

标签: ms-office odata exchangewebservices office365


【解决方案1】:

过滤日期确实有效,但您无法完成 OData v4 规范中的所有操作。例如,这些都对我有用:

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

在它前面添加“DateTime”会使其失败。与月份功能相同。如果你坚持上面的格式,它应该适合你。

【讨论】:

  • 萨米尔,你能扩展你对我的回答的编辑吗? Event 实体上没有名为“DateTimeStart”的属性。
  • 啊,我的错误是我误读了您的答案-其他实体上的某些属性名称为DateTimeX,我以为您引用了这些属性。我将恢复编辑
【解决方案2】:

在 O365 REST API V2 中,您应该使用:

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

【讨论】:

    【解决方案3】:

    嗨,只要增加 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多