【问题标题】:Microsoft EWS Get Available Conference RoomMicrosoft EWS 获取可用会议室
【发布时间】:2018-12-03 21:58:15
【问题描述】:

我正在使用 Microsoft Exchange Web 服务(托管 API)开发 ASP.NET Web 应用程序。我的目标是提供一个会议室地址列表作为输入,并使用GetUserAvailability 从 Exchange 服务器返回忙碌/空闲信息,以便我可以在给定的会议时间向用户建议一个开放的会议室。我有工作代码,但是当我尝试将 DetailedSuggestionsWindow 限制为会议持续时间时,出现错误:

FreeBusyViewOptions.TimeWindow 指定的持续时间无效。

我知道我可以扩大时间窗口 - 但是我得到的数据比我需要的多。任何人都可以提供在特定时间(通常 30 分钟 - 2 小时)内找到建议会议室的方法吗?

【问题讨论】:

  • 你想使用什么时间窗口?为什么过多的数据对您来说是个问题?如果您获得正确的数据,只需过滤掉客户端不需要的数据。我建议您在问题中包含您尝试的代码,因为这将有助于人们尝试回答。
  • @GlenScales 因为 EWS 似乎在选择最佳的会议窗口,其中有最多的与会者可用,而不是提供确切时间范围内的忙/闲信息。因此,如果我知道我想在 2 点到 3 点开会,并且我提供了 24 小时的窗口,那么如果这不是最好的结果之一,我不能保证在我关心的时间段内回来。我真的不在乎有多少与会者可用,只要至少有一名与会者(会议室)可用。我尝试了您的建议,并进行了后过滤以查看它是否返回了预期的结果,但没有。

标签: c# .net outlook calendar exchangewebservices


【解决方案1】:

您可以参考以下链接:

// Create a collection of attendees. 
List<AttendeeInfo> attendees = new List<AttendeeInfo>(); 

attendees.Add(new AttendeeInfo() 
{ 
    SmtpAddress = "mack@contoso.com", 
    AttendeeType = MeetingAttendeeType.Organizer 
}); 

attendees.Add(new AttendeeInfo() 
{ 
    SmtpAddress = "sadie@contoso.com", 
    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 = 2;
// Note that 60 minutes is the default value for MeetingDuration, but setting it explicitly for demonstration purposes.
availabilityOptions.MeetingDuration = 60; 
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); 

更多信息,请参考此链接:

Get appointments from coworker via EWS only with “Free / Busy time, subject, location” permission level

【讨论】:

  • 这是我正在使用的代码。当我将 DetailedSuggestionTimeWindow 减少到典型的会议持续时间时,我得到了所描述的错误。
  • 根据我的搜索,这实际上似乎是 GetUserAvailability 方法中的一个问题,而不是任何 DateTime 操作。更多信息请参考此链接:stackoverflow.com/questions/8750937/…
  • 谢谢。我希望有更好的方法来获取所需的信息,但看起来并不存在。我会将我的问题标记为重复。
【解决方案2】:

根据https://docs.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservices.data.exchangeservice.getuseravailability

方法仅支持至少 24 小时的时间段 开始和结束于上午 12:00。为了限制结果 方法要更短的时间段,你必须过滤上的结果 客户。

因此,您无法通过所需的时间窗口。尝试删除与会者并查询仅房间的可用性以获得更完整的结果集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多