Outlook-чтение календаря другого пользователя
Я разрабатываю приложение для Android на основе Outlook-SDK-Android. Приложение разговаривает с Outlook Calendar REST API чтобы получить, забронировать и удалять события (см. примеры кода здесь и здесь). Теперь мне нужно прочитать чей-то календарь, и мне предоставили учетную запись Office365 с доступом делегата (уровень разрешения автора) по отношению к другим пользователям.
Я зарегистрировал свое приложение, используя предоставленную учетную запись на новый портал. В моем приложении я использую область"https://outlook.office.com/Calendars.ReadWrite". (Область используется в com.Microsoft.ава.Адал.Класс authenticationcontext.acquireToken () инициализации клиент Office REST для Android OutlookClient, общий клиентский стек, предоставляемый orc-for-android)
когда я пытаюсь прочитать календарь другого пользователя, на котором у меня есть доступ делегата, я просто получаю 403 ответ:
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again."
}
}
помочь?
является ли это ограничением API? Если да, то почему предоставляется следующая цепочка вызова метода?
outlookClient.getUsers()
.getById("meetingRoom@company.com")
.getCalendarView()
обновление:
Кажется, что есть работает в что позволит этот сценарий, как сообщается здесь: Office 365 REST API - доступ к конференц-залам календари
Итак, если прогресс в этом направлении был достигнут, могу ли я достичь своей цели без использования "администратора службы приложение"? (см. API Office 365 или API Azure AD Graph-получить кто-то Elses календарь)
могу ли я использовать базовую аутентификацию, как предложено здесь?
2 ответов
делегирование календаря-это функция Exchange, API Graph и API Outlook не позволяют пользователю получить доступ к делегированному календарю. В настоящее время альтернативным обходным путем может быть использование EWS. И вот образец для вашей справки:
static void DelegateAccessSearchWithFilter(ExchangeService service, SearchFilter filter)
{
// Limit the result set to 10 items.
ItemView view = new ItemView(10);
view.PropertySet = new PropertySet(ItemSchema.Subject,
ItemSchema.DateTimeReceived,
EmailMessageSchema.IsRead);
// Item searches do not support deep traversal.
view.Traversal = ItemTraversal.Shallow;
// Define the sort order.
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
try
{
// Call FindItems to find matching calendar items.
// The FindItems parameters must denote the mailbox owner,
// mailbox, and Calendar folder.
// This method call results in a FindItem call to EWS.
FindItemsResults<Item> results = service.FindItems(
new FolderId(WellKnownFolderName.Calendar,
"fx@msdnofficedev.onmicrosoft.com"),
filter,
view);
foreach (Item item in results.Items)
{
Console.WriteLine("Subject: {0}", item.Subject);
Console.WriteLine("Id: {0}", item.Id.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine("Exception while enumerating results: { 0}", ex.Message);
}
}
private static void GetDeligateCalendar(string mailAddress, string password)
{
ExchangeService service = new ExchangeService();
service.Credentials = new WebCredentials(mailAddress, password);
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.AutodiscoverUrl(mailAddress, RedirectionUrlValidationCallback);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(AppointmentSchema.Subject, "Discuss the Calendar REST API"));
DelegateAccessSearchWithFilter(service, sf);
}
и если вы хотите, чтобы Outlook и Graph API поддерживали эту функцию, вы можете попробовать связаться с командой разработчиков Office по ссылке ниже:
FindMeetingTimes в настоящее время в предварительном просмотре! Для просмотра сведений используйте эту ссылку, а затем измените ее для просмотра бета-версии статьи (вверху справа в главном столбце): https://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations#Findmeetingtimespreview
подробности ниже из статьи, но, пожалуйста, используйте ссылку, чтобы получить последнюю:
найти время встречи (предварительный просмотр)
найти время встречи предложения, основанные на доступность организатора и участника, а также ограничения по времени или местоположению.
эта операция в настоящее время находится в предварительном просмотре и доступна только в бета-версии.
все поддерживаемые сценарии используют действие FindMeetingTimes. FindMeetingTimes принимает ограничения, указанные в качестве параметров в теле запроса, и проверяет состояние занятости в основных календарях организатора и участников. Ответ включает предложения по времени встречи, каждое из которых определяется как MeetingTimeCandidate, с участниками, имеющими в среднем уровень доверия 50% шанс или выше, чтобы присутствовать.