Поиск события по заданному c значению singleValueExtendedProperty - PullRequest
1 голос
/ 03 августа 2020

Ситуация:

У нас есть старое приложение, которое создает события в Outlook (через MAPI). Чтобы идентифицировать события, настраиваемое свойство CTOID устанавливается с заданным значением c, по которому события могут быть найдены снова.

Для нового приложения мы хотели бы использовать Graph API, но приложение должно по-прежнему иметь возможность читать / находить события, созданные старым приложением. Итак, я создал тестовое событие с определенным c 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. enter image description here

Problem:

I can "Expand" events so they contain the value for the CTOID property. But how do I find an event with a specific CTOID value? And specifically, how do I do this with the Graph client in C#?

According to the документация и этот сообщение Stackoverflow , следующий вызов 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"
        }
    }
}

Что я делаю не так? У меня нет идей, и любая помощь будет принята с благодарностью. (Также, если у вас есть идеи, как это сделать с помощью клиента Graph в C#, а не только с помощью простого вызова REST).

Дополнительная информация:

Don Не знаю, важно ли это, но для нашего приложения установлены следующие разрешения: введите описание изображения здесь

1 Ответ

1 голос
/ 04 августа 2020

В вашем фильтре вам нужно преобразовать значение в 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)

Для чего-либо, кроме String в фильтре, вам нужно сделать это

...