Ситуация:
У нас есть старое приложение, которое создает события в 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.
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 Не знаю, важно ли это, но для нашего приложения установлены следующие разрешения: введите описание изображения здесь