【问题标题】:Search for an event according to a specific value of a singleValueExtendedProperty根据 singleValueExtendedProperty 的特定值搜索事件
【发布时间】:2020-08-03 13:24:01
【问题描述】:

情况:

我们有一个旧应用程序正在 Outlook 中创建事件(通过 MAPI)。为了识别事件,自定义属性“CTOID”设置了一个特定值,通过该值可以再次找到事件。

对于较新的应用程序,我们希望使用 Graph API,但该应用程序应该仍然能够读取/查找旧应用程序创建的事件。因此,我创建了一个具有特定 CTOID 的测试事件,并且我已经可以使用图形客户端来获取具有相应属性及其值的提到的事件(queryOptions 只是一些开始/结束日期限制)。

// Initialize the GraphServiceClient.
GraphServiceClient client = await m_MicrosoftGraphClient.GetGraphServiceClient();

// Load user events.
var request = client.Users[userId].CalendarView.Request(queryOptions).Expand("singleValueExtendedProperties($filter=id%20eq%20'Double%20{00020329-0000-0000-C000-000000000046}%20Name%20CTOID')");
var result = await request.GetAsync();
var calendarEvents = result.CurrentPage;

结果:

正确获取事件,包括 CTOID 属性的值。

问题:

我可以“扩展”事件,使它们包含 CTOID 属性的值。但是如何找到具有特定 CTOID 值的事件?具体来说,如何使用 C# 中的 Graph 客户端执行此操作?

根据documentationStackoverflow post,以下 REST 调用应该可以工作:

GET /users/{id|userPrincipalName}/events?$filter=singleValueExtendedProperties/Any(ep: ep/id eq '{id_value}' and ep/value eq '{property_value}')

所以我在在线图形资源管理器中尝试了这个:

https://graph.microsoft.com/v1.0/users/[MY_USER_ID]/events?$filter=singleValueExtendedProperties/Any(ep: ep/id eq 'Double {00020329-0000-0000-C000-000000000046} Name CTOID' and ep/value eq '229236')

但我得到的回应是:

{
    "error": {
        "code": "ErrorInvalidUrlQueryFilter",
        "message": "The filter expression for $filter does not match to a single extended property and a value restriction.",
        "innerError": {
            "date": "2020-08-03T12:44:05",
            "request-id": "33e82c77-92ea-4865-a8d0-00cfc2f99154"
        }
    }
}

我做错了什么?我没有想法,任何帮助将不胜感激。 (此外,如果您知道如何使用 C# 中的 Graph 客户端执行此操作,而不仅仅是单纯的 REST 调用)。

其他信息:

不知道是否重要,但是为我们的应用设置了以下权限:

【问题讨论】:

    标签: microsoft-graph-api microsoft-graph-sdks microsoft-graph-calendar


    【解决方案1】:

    在您的过滤器中,您需要将值转换为 Double 例如

    https://graph.microsoft.com/v1.0/users/[MY_USER_ID]/events?$filter=singleValueExtendedProperties/Any(ep: ep/id eq 'Double {00020329-0000-0000-C000-000000000046} Name CTOID' and cast(ep/value, Edm.Double) eq 229236)
    

    对于过滤器中除字符串之外的任何内容,您都需要这样做

    【讨论】:

    • 啊,这很好用,非常感谢!在这种情况下,MS 文档(请参阅上面问题中的链接)似乎非常具有误导性。 “获取包含与过滤器匹配的数字扩展属性的资源实例”部分没有提到任何关于强制转换的内容。奇怪。
    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 2020-03-23
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多