microsoft-graph-api - 获取具有由外接程序设置的自定义属性的事件

标签 microsoft-graph-api office-js outlook-restapi outlook-web-addins

此问题是 Get custom property set in Outlook Add-In via Microsoft Graph 的后续问题。

我的 Outlook Office.js 加载项正在向事件添加一些自定义属性。它按预期工作,我可以使用 Microsoft Graph 通过以下 GET 请求访问这些属性:

/v1.0/me/events/{event-id}?$expand=SingleValueExtendedProperties($filter=id%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')

但现在我尝试通过将此类正文发布到推送通知端点(/v1.0/subscriptions)来订阅推送通知:

  {
    changeType: "created,updated,deleted",
    notificationUrl: `[...my url...]`,
    resource: `/users/${userData.id}/events?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')`,
    expirationDateTime: tomorrow,
    clientState: "SecretClientState"
  }

但我得到:

{
  "error": {
    "code": "ExtensionError",
    "message": "Operation: Create; Exception: [Status Code: BadRequest; Reason: Bad Request]",
    "innerError": {
      "request-id": "01dcece6-0103-4bef-8231-e9ab9480402a",
      "date": "2017-04-04T20:20:58"
    }
  }
}

尝试在请求中设置未转义的资源,但结果相同,接下来我尝试的是 $filter 功能,因此使用 MS Graph 浏览器以以下格式执行了获取请求:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')

但出现以下错误:

{
    "error": {
        "code": "ErrorInvalidUrlQueryFilter",
        "message": "The filter expression for $filter does not match to a single extended property and a value restriction.",
        "innerError": {
            "request-id": "aca7c8ed-6e30-4490-8feb-7f1d2aed6b88",
            "date": "2017-04-04T20:38:28"
        }
    }
}

这是否意味着我还必须按值进行过滤,而不仅仅是id

这将是一个问题,因为我想要设置了该属性的事件,但我事先不知道该值,我想在收到推送通知后读取它。

有没有办法获取仅具有由我的外接程序设置的自定义属性的事件,并订阅具有此自定义属性的事件的推送通知?

编辑:

当我按照我得到的答案中的建议将 id 更改为 PropertyId 时:

{
    "error": {
        "code": "BadRequest",
        "message": "Could not find a property named 'PropertyId' on type 'microsoft.graph.singleValueLegacyExtendedProperty'.",
        "innerError": {
            "request-id": "1d3db71e-6ee2-4680-9317-64687813c52a",
            "date": "2017-04-05T13:49:45"
        }
    }
}

编辑2:

现在,当我添加按进行过滤时,它可以工作:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value eq 'foo')

但我不想要所有具有该属性的事件,无论它的值如何......

EDIT-3

不尝试按过滤,而是使用不等于ne运算符:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value ne 'Foo')

似乎可以工作,但这次它看起来只是忽略过滤器并返回所有事件,无论是否从加载项设置了自定义属性。

最佳答案

经过几次尝试,我找到了一种过滤具有自定义属性的事件/消息的方法,无论其值如何:

https://graph.microsoft.com/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value ne null)

添加的重要部分是和ep/value ne null,而像和ep/value ne 'fooo'这样的东西不起作用,它只是返回所有内容.

上述过滤也适用于过滤我们想要订阅推送事件的事件。

关于microsoft-graph-api - 获取具有由外接程序设置的自定义属性的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217399/

相关文章:

excel - 使用 Office.js 从 Excel 加载项创建 Word 文档

Outlook 365 OAuth 535 5.7.3 认证不成功

rest - 检查 Microsoft 图形 token 是否过期

microsoft-graph-api - 在 OneDrive 图形 api 上为特殊 AppFolder 创建上传 session 时出错

javascript - 将消息从对话框(平均堆栈站点)发送到任务 Pane

javascript - 上下文菜单的宽度

office365 - 使用图形 API 读取可恢复项目隐藏文件夹

javascript - 使用 msal.js 时保持登录状态

c# - MS Graph API - 来自 C# 的 getPstnCalls

azure - 我无法使用 Microsoft Graph API 在 channel 或聊天中发送 chatMessage