【问题标题】:GetUserAvailabilityResults shows result outside working hours in Exchange web serviceGetUserAvailability 结果在 Exchange Web 服务中显示工作时间以外的结果
【发布时间】:2015-03-10 13:05:58
【问题描述】:

GetUserAvailabilityResults 在 Exchange 网络服务中显示超出工作时间的结果,尽管我已设置 MaximumNonWorkHoursSuggestionsPerDay = 0 另外,我想知道如何获取和设置工作时间。此外,results.AttendeesAvailability 返回 null

    private static void GetSuggestedMeetingTimes(ExchangeService service)
    {
        // Create a list of attendees.
        List<AttendeeInfo> attendees = new List<AttendeeInfo>();
        attendees.Add(new AttendeeInfo()
        {
            SmtpAddress = "vrr@e.edu.sa",
            AttendeeType = MeetingAttendeeType.Organizer
        });
        attendees.Add(new AttendeeInfo()
        {                
            SmtpAddress = "abc@e.edu.sa",
            AttendeeType = MeetingAttendeeType.Required
        });

        AvailabilityOptions meetingOptions = new AvailabilityOptions();
        meetingOptions.MeetingDuration = 30;
        meetingOptions.MaximumNonWorkHoursSuggestionsPerDay = 0;
        meetingOptions.GoodSuggestionThreshold = 49;
        meetingOptions.MinimumSuggestionQuality = SuggestionQuality.Good;
        meetingOptions.DetailedSuggestionsWindow = new TimeWindow(DateTime.Now, DateTime.Now.AddDays(2));
        meetingOptions.MaximumSuggestionsPerDay = 48;

        // Return a set of of suggested meeting times. 
        GetUserAvailabilityResults results = service.GetUserAvailability(attendees,
                                                                             new TimeWindow(DateTime.Now, DateTime.Now.AddDays(2)),
                                                                                 AvailabilityData.Suggestions,
                                                                                 meetingOptions); 

      //  Console.WriteLine(results.AttendeesAvailability[0].WorkingHours.EndTime); 
        // Display available meeting times.
        Console.WriteLine("Availability for {0} and {1}", attendees[0].SmtpAddress, attendees[0].SmtpAddress);
        Console.WriteLine();

        //foreach (AttendeeAvailability aa in results.AttendeesAvailability)
        //{
        //    //Console.WriteLine(aa.Result.Date);
        //    Console.WriteLine(aa.CalendarEvents.Count);
        //}
        foreach (Suggestion suggestion in results.Suggestions)
        {
            Console.WriteLine(suggestion.Date);
            Console.WriteLine();
            foreach (TimeSuggestion timeSuggestion in suggestion.TimeSuggestions)
            {
                Console.WriteLine("Suggested meeting time:" + timeSuggestion.MeetingTime);
                Console.WriteLine();
            }
        }
    }

【问题讨论】:

    标签: c# calendar exchangewebservices exchange-server-2010


    【解决方案1】:

    在 Exchange 中,为每个用户单独维护工作时间。每个用户都可以有自己的工作时间。(虽然这对于 1 个组织的员工来说似乎并不合理)

    GetUserAvailabilityResults 在工作时间之外提供建议,因为参加者的一个工作时间与另一个不同

    您无法为用户设置工作时间(据我所知),但是每个用户都可以使用 Outlook 更改工作时间 Outlook Change working hour

    您可以使用 results.AttendeesAvailability 查看每个与会者的工作时间

    如果 AvailabilityData.FreeBusyAndSuggestions 而不是 AvailabilityData.Suggestions,则 results.AttendeesAvailability 不会给出 null 用来 以下是修改后的代码

     private static void GetSuggestedMeetingTimes(ExchangeService service)
        {
            // Create a list of attendees.
            List<AttendeeInfo> attendees = new List<AttendeeInfo>();
            attendees.Add(new AttendeeInfo()
            {
                SmtpAddress = "shomaail@kfupm.edu.sa",
                AttendeeType = MeetingAttendeeType.Required,
                ExcludeConflicts = false
            });
            attendees.Add(new AttendeeInfo()
            {                
                SmtpAddress = "vrr@kfupm.edu.sa",
                AttendeeType = MeetingAttendeeType.Required
            });
    
            AvailabilityOptions meetingOptions = new AvailabilityOptions();
            meetingOptions.MeetingDuration = 30;
            meetingOptions.MaximumNonWorkHoursSuggestionsPerDay = 0;
            meetingOptions.GoodSuggestionThreshold = 49;
            meetingOptions.MinimumSuggestionQuality = SuggestionQuality.Excellent;
            meetingOptions.DetailedSuggestionsWindow = new TimeWindow(DateTime.Now, DateTime.Now.AddDays(2));
            meetingOptions.MaximumSuggestionsPerDay = 48;
    
            // Return a set of of suggested meeting times. 
            GetUserAvailabilityResults results = service.GetUserAvailability(attendees,
                                                                                 new TimeWindow(DateTime.Now, DateTime.Now.AddDays(2)),
                                                                                     AvailabilityData.FreeBusyAndSuggestions,
                                                                                     meetingOptions); 
    
          //  Console.WriteLine(results.AttendeesAvailability[0].WorkingHours.EndTime); 
            // Display available meeting times.
            Console.WriteLine("Availability for {0} and {1}", attendees[0].SmtpAddress, attendees[1].SmtpAddress);
            Console.WriteLine();
    
            foreach (AttendeeAvailability aa in results.AttendeesAvailability)
            {
                Console.WriteLine("=============================================");
                Console.WriteLine(aa.Result.ToString());
                Console.WriteLine(aa.ViewType.ToString());
                Console.WriteLine(aa.CalendarEvents.Count);
                Console.WriteLine(aa.WorkingHours.StartTime);
                Console.WriteLine(aa.WorkingHours.EndTime);
                Console.WriteLine(aa.WorkingHours.DaysOfTheWeek.Count);
                Console.WriteLine(aa.WorkingHours.DaysOfTheWeek[0]);
                Console.WriteLine(aa.WorkingHours.DaysOfTheWeek[aa.WorkingHours.DaysOfTheWeek.Count-1]);
                foreach (DayOfTheWeek dow in aa.WorkingHours.DaysOfTheWeek)
                {
                    Console.WriteLine(dow);
                }
            }
            foreach (Suggestion suggestion in results.Suggestions)
            {
                Console.WriteLine(suggestion.Date);
                Console.WriteLine();
                foreach (TimeSuggestion timeSuggestion in suggestion.TimeSuggestions)
                {
                    Console.WriteLine("Suggested meeting time:" + timeSuggestion.MeetingTime);
                    Console.WriteLine();
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多