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 по ссылке ниже:

https://officespdev.uservoice.com/


FindMeetingTimes в настоящее время в предварительном просмотре! Для просмотра сведений используйте эту ссылку, а затем измените ее для просмотра бета-версии статьи (вверху справа в главном столбце): https://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations#Findmeetingtimespreview

подробности ниже из статьи, но, пожалуйста, используйте ссылку, чтобы получить последнюю:

найти время встречи (предварительный просмотр)

найти время встречи предложения, основанные на доступность организатора и участника, а также ограничения по времени или местоположению.

эта операция в настоящее время находится в предварительном просмотре и доступна только в бета-версии.

все поддерживаемые сценарии используют действие FindMeetingTimes. FindMeetingTimes принимает ограничения, указанные в качестве параметров в теле запроса, и проверяет состояние занятости в основных календарях организатора и участников. Ответ включает предложения по времени встречи, каждое из которых определяется как MeetingTimeCandidate, с участниками, имеющими в среднем уровень доверия 50% шанс или выше, чтобы присутствовать.