7

Pracuję nad aplikacją na Androida opartą na numerze Outlook-SDK-Android. Aplikacja rozmawia z Outlook Calendar REST API, aby pobrać, zarezerwować i usunąć zdarzenia (patrz przykłady kodów here i here). Teraz muszę przeczytać czyjś kalendarz i dostałem konto Office365 z dostępem delegowanym (author permission level) w stosunku do innych użytkowników.Outlook - Przeczytaj kalendarz innego użytkownika

Zarejestrowałem swoją aplikację przy użyciu podanego konta na new portal. W mojej aplikacji używam zakresu "https://outlook.office.com/Calendars.ReadWrite". (Zakres jest stosowany w com.microsoft.aad.adal.AuthenticationContext.acquireToken() aby zainicjować Office REST Client for Android OutlookClient, wspólny stos klienta dostarczone przez orc-for-android)

Kiedy próbuję czytać kalendarz innego użytkownika, na którym Mam dostęp do delegatów Właśnie otrzymuję odpowiedź zwrotną 403:

{ 
    "error": { 
    "code": "ErrorAccessDenied", 
    "message": "Access is denied. Check credentials and try again." 
    } 
} 

Każda pomoc?

Czy to jest ograniczenie API? Jeśli tak, to dlaczego podany jest następujący łańcuch wywołania metody?

outlookClient.getUsers() 
      .getById("[email protected]") 
      .getCalendarView() 

UPDATE:

Wydaje się, że istnieją prace w toku, które pozwolą ten scenariusz, jak opisano tutaj: Office 365 REST API - Access meeting rooms calendars

Więc jeśli postęp w tym kierunku poczyniono mogę osiągnąć mój cel: bez używania "admin service app"? (zobacz Office 365 API or Azure AD Graph API - Get Someone Elses Calendar)

Czy mogę użyć podstawowego uwierzytelnienia zgodnie z sugestią here?

+0

Wygląda na to, że dostęp do programu Outlook API będzie dostępny pod koniec tego miesiąca - Zobacz odpowiedź na komentarz. Http://stackoverflow.com/a/30596328/4317945 –

Odpowiedz

4

Delegacja kalendarza to funkcja programu Exchange, interfejs Graph API i interfejs API programu Outlook nie pozwalają użytkownikowi na dostęp do delegowanego kalendarza. Obecnie rozwiązaniem alternatywnym może być użycie wbudowanego serwera internetowego. I tu jest próbka celach:

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, 
      "[email protected]"), 
      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); 
} 

i jeśli chcesz, Outlook i Graph API, aby obsługiwać tę funkcję, można spróbować skontaktować się z zespołem Office Developer z linku poniżej:

https://officespdev.uservoice.com/

+0

Dzięki za podpowiedź. Spróbuję .. –

+0

Czy EWS na Androida jest niezawodny/stabilny? (https://github.com/faisons/EWS-For-Android, https://github.com/OfficeDev/ews-java-api) Dzięki –

+1

Ja też myślę, że EWS to sposób, aby przejść tutaj. W rzeczywistości interfejs API O365 jest naprawdę tylko otoką na serwerze EWS, więc nie powinno być żadnych strat w stabilności/funkcjonalności. Oto kilka dodatkowych informacji na temat dostępu delegatów EWS: https://msdn.microsoft.com/en-us/library/office/dn641956(v=exchg.150).aspx – jstruzik

1

FindMeetingTimes jest obecnie na podglądzie! Aby wyświetlić szczegóły, użyj tego linku, a następnie zmień go, aby wyświetlić wersję beta artykułu (w prawym górnym rogu w głównej kolumnie): https://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations#Findmeetingtimespreview

Szczegóły poniżej z artykułu, ale skorzystaj z linku, aby uzyskać najnowsze:

razy konferencyjnych znalezienia (Preview)

wyjątkowe spotkanie propozycje czasowe oparte na organizatora i dostępności uczestników tego spotkania, a ograniczenia czasowe lub lokalizacji.

Ta operacja jest obecnie w podglądzie i dostępna tylko w wersji beta.

Wszystkie obsługiwane scenariusze używają akcji FindMeetingTimes.FindMeetingTimes akceptuje ograniczenia określone jako parametry w treści żądania i sprawdza status wolny/zajęty w głównych kalendarzach organizatora i uczestników. Odpowiedź zawiera sugestie dotyczące czasu spotkania, z których każdy jest zdefiniowany jako MeetingTimeCandidate, przy czym uczestnicy mają na średnim poziomie ufności 50% szansy lub wyższą, aby wziąć udział.

+0

FindMeetingTimes nie pozwala mi na spotkanie innych użytkowników, ale tylko dostępne czasy. Dzięki, użyteczne i tak –