Получение событий из календаря с использованием C# и Microsoft Graph SDK
Я пытаюсь разработать консольное приложение для отображения, удаления и добавления событий в календарь конкретного пользователя. Я разрабатываю бизнес-процесс. Я начинаю с перечисления событий.
Calendar cal =
client
.Users["UserName@CompanyName.com"]
.Calendars["AAMkAGIzZDM4O...."]
.Request()
.GetAsync()
.Result;
Я получаю верный календарь, но коллекция событий пуста. В календаре 13 событий. У меня есть разрешения на чтение / запись календаря.
Есть идеи?
3 ответа
У меня нет среды для тестирования C# Graph SDK, но я подозреваю, что базовый запрос не запрашивает Graph для событий календаря, поэтому поле имеет нулевое значение.
Используя Graph Explorer ( https://developer.microsoft.com/en-us/graph/graph-explorer), мы можем попробовать эквивалентный запрос и отметить, что возвращаются только метаданные о календарях.
GET https://graph.microsoft.com/v1.0/me/calendars
В графическом проводнике есть несколько примеров календарных запросов. Они могут не отображаться по умолчанию, поэтому нажмите ссылку "показать больше образцов".
all events in my calendar
Пример запроса, вероятно, то, что вы ищете. Запрос:
GET https://graph.microsoft.com/v1.0/me/events?$select=subject,body,bodyPreview,organizer,attendees,start,end,location
(или /calendars/{calendar-id}/events, если вы хотите события для определенного календаря)
Следующим шагом является преобразование этого запроса API REST в синтаксис SDK для использования в вашем приложении.
Из этого примера отправной точкой является:
IUserEventsCollectionPage events = await graphClient.Me.Events.Request().GetAsync();
Помимо запросов к событиям, вы также можете изучить запросы к представлению календаря пользователей, в котором можно указать дату начала и окончания.
Здесь стоит отметить, что Calendars["..."].Events
даст вам только организаторов мероприятий.
Альтернативой является использование Calendars["..."].CalendarView
с параметрами запроса "startDateTime" и "endDateTime", которые предоставят вам все экземпляры событий за этот период времени.
Дэн, спасибо за пост. Я понял свою ошибку после прочтения вашего поста. Вот код, который работает:
string userEmail = "UserName@CompanyName.com";
string calId = "AAMkAGIzZDM4OWI0LWN...….";
ICalendarEventsCollectionPage events = client.Users[$"{userEmail}"]
.Calendars[$"{calId}"]
.Events.Request().GetAsync().Result;
Согласно вашему описанию, я предполагаю, что вы хотите перечислить события в календаре конкретного пользователя.
Основываясь на моем тесте, мы можем использовать следующий код:
public async Task<ICollection<Event>> EventsAsync(string calendarId)
{
var events = await _serviceClient.Me.Calendars[calendarId].Events.Request().GetAsync();
return events.CurrentPage;
}
Поскольку событие является связью календаря, событие будет нулевым, когда мы запросим календарь. Однако согласно этому документу:
Примечание. Не все отношения и ресурсы поддерживают параметр запроса $ expand. Например, вы можете расширить отношения directReports, manager и memberOf для пользователя, но вы не можете расширить его события, сообщения или фотографии. Не все ресурсы или отношения поддерживают использование $select для расширенных элементов
Поэтому нам нужно запросить GET /users/{id | userPrincipalName}/calendars/{id}/events
конечная точка