2016-05-03 15 views
0

私はASP.NETでoffice365 REST APIを使用して1つのアプリケーションを開発しています。私はoffice365でチームイベントをスケジュールする必要がありますが、そのイベントをスケジュールする前に、私はすべてのチームメンバーの利用可能な時間をチェックする必要があります。スロットが空いている場合は、チームのイベントをセットアップする必要があります。Office365カレンダーイベントチームミーティングの場合

私は、[email protected][email protected][email protected]のような3人のメンバーチームがあると仮定します。私はチームの全メンバーの利用可能な時間をチェックする必要があり、互換性のある時間だけを表示する必要があります。 user1が午前9時〜午前9時30分にスケジュール会議を開催すると仮定し、user1に空き時間がないため、その時間を非表示にする必要があります。

どうすればいいですか?何か案が?

+0

これは役に立ちますか? https://msdn.microsoft.com/en-us/library/office/dn643673(v=exchg.150).aspx –

答えて

0

会議タイムズ(=取引所FreeBusy)は、プレビューhttps://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations#Findmeetingtimespreviewであるが、あなたはhttps://outlook.office.com/api/beta

乾杯 グレン

+0

これらからすべてのメンバーデータを取得できますか? – user3463733

+0

OutlookやOWAのFreeBusyと同じように動作しますので、これらのメンバーがテナント内にいる場合は正常に動作します。そのプレビューAPIは最高のものですので、自分で試してみて、好きなものをフィードバックしたり、好きではないと思われる方はデモをhttps://www.youtube.com/watch?v=CcN5f4L-p4E –

+0

実際に試してみてください私はマルチテナントではなく、シングルテナントを探しています。 – user3463733

0

最終的に私はフリー/ビジー状態のコードを使用しようとしました経由でそれを使用することができるはず下さい。私のコードは以下の通りです...私はこの手順に従っていますが、正しいかどうかわかりません。私はoffice365のアカウントを持っており、静かに資格を渡すことによって私は交換サーバーサービスを作成しています。その後、次のようにORGANIZERとREQUIREDとして異なるドメイン出席者の情報を渡しています。しかし、それらのユーザーのスケジュールされた会議をスキップしないすべての値が返されます。

[email protected]はORGANIZERで、[email protected]は会議に参加する必要があります。 User1は毎日7:00-7:30pmに予定されている会議を持っていますが、次のスクリプトを実行すると、会議のために7:00-7:30pmが表示されます。その時間をブロックするはずです。あなたはコードにいくつかの変更を提案し、正しい方法で進めていますか?

private static void GetSuggestedMeetingTimes(ExchangeService service) 
    { 


     List<AttendeeInfo> attendees = new List<AttendeeInfo>(); 

     attendees.Add(new AttendeeInfo() 
     { 
      SmtpAddress = "[email protected]", 
      AttendeeType = MeetingAttendeeType.Organizer 
     }); 

     attendees.Add(new AttendeeInfo() 
     { 
      SmtpAddress = "[email protected]", 
      AttendeeType = MeetingAttendeeType.Required 
     }); 

     // Specify options to request free/busy information and suggested meeting times. 
     AvailabilityOptions availabilityOptions = new AvailabilityOptions(); 
     availabilityOptions.GoodSuggestionThreshold = 49; 
     availabilityOptions.MaximumNonWorkHoursSuggestionsPerDay = 0; 
     availabilityOptions.MaximumSuggestionsPerDay = 40; 
     // Note that 60 minutes is the default value for MeetingDuration, but setting it explicitly for demonstration purposes. 
     availabilityOptions.MeetingDuration = 30; 
     availabilityOptions.MinimumSuggestionQuality = SuggestionQuality.Good; 
     availabilityOptions.DetailedSuggestionsWindow = new TimeWindow(DateTime.Now.AddDays(1), DateTime.Now.AddDays(2)); 
     availabilityOptions.RequestedFreeBusyView = FreeBusyViewType.FreeBusy; 

     // Return free/busy information and a set of suggested meeting times. 
     // This method results in a GetUserAvailabilityRequest call to EWS. 
     GetUserAvailabilityResults results = service.GetUserAvailability(attendees, 
                     availabilityOptions.DetailedSuggestionsWindow, 
                     AvailabilityData.FreeBusyAndSuggestions, 
                     availabilityOptions); 
     // Display suggested meeting times. 
     Console.WriteLine("Availability for {0} and {1}", attendees[0].SmtpAddress, attendees[1].SmtpAddress); 
     Console.WriteLine(); 

     foreach (Suggestion suggestion in results.Suggestions) 
     { 
      Console.WriteLine("Suggested date: {0}\n", suggestion.Date.ToShortDateString()); 
      Console.WriteLine("Suggested meeting times:\n"); 
      foreach (TimeSuggestion timeSuggestion in suggestion.TimeSuggestions) 
      { 
       Console.WriteLine("\t{0} - {1}\n", 
            timeSuggestion.MeetingTime.ToShortTimeString(), 
            timeSuggestion.MeetingTime.Add(TimeSpan.FromMinutes(availabilityOptions.MeetingDuration)).ToShortTimeString()); 



      } 
     } 

     int i = 0; 

     // Display free/busy times. 
     foreach (AttendeeAvailability availability in results.AttendeesAvailability) 
     { 
      Console.WriteLine("Availability information for {0}:\n", attendees[i].SmtpAddress); 

      foreach (CalendarEvent calEvent in availability.CalendarEvents) 
      { 
       Console.WriteLine("\tBusy from {0} to {1} \n", calEvent.StartTime.ToString(), calEvent.EndTime.ToString()); 
      } 

      i++; 
     } 
関連する問題