【问题标题】:C# exchange server get meeting room appointment listC#交换服务器获取会议室约会列表
【发布时间】:2017-07-21 00:11:31
【问题描述】:

我正在尝试与EWS Managed API 合作以获取会议室列表, 并为每个房间查看一周的预约清单。

我看到Get room lists by using EWS in Exchange 还有Get appointments and meetings by using EWS in Exchange

我已经测试了第一个链接,我得到了 0 个房间。
同样对于第二个链接,它提供了当前用户日历但不提供会议。

我需要三样东西:

1) 获取我组织中的会议室列表。
2) 获取每个房间的会议日历(X 天)。
3) 对于每次会议,由谁组织会议。

我找不到获取此信息的 API。

【问题讨论】:

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


    【解决方案1】:

    经过大量搜索并感谢this post 我找到了问题 #1 和 #2 的答案

    1) 获得组织中的所有会议室:

     string filter = "(&(objectClass=*)(msExchRecipientDisplayType=7))";
     //Assembly System.DirectoryServices.dll
     DirectorySearcher search = new DirectorySearcher(filter);
     List<AttendeeInfo> rooms = new List<AttendeeInfo>();  
     foreach (SearchResult result in search.FindAll())
                {
                    ResultPropertyCollection r = result.Properties;
                    DirectoryEntry entry = result.GetDirectoryEntry();
                    // entry.Properties["displayName"].Value.ToString() will bring the room name
                    rooms.Add(new AttendeeInfo(entry.Properties["mail"].Value.ToString().Trim()));                 
                }
    

    2) 获取每个房间的会议日历(2 天):

    List<AttendeeInfo> attend = new List<AttendeeInfo>();
    foreach (AttendeeInfo inf in rooms)
         {
           attend.Clear();
           attend.Add(inf.SmtpAddress);
    
           AvailabilityOptions options = new AvailabilityOptions();
           options.MaximumSuggestionsPerDay = 48;
           // service is ExchangeService object contains your authentication with exchange server
           GetUserAvailabilityResults results = service.GetUserAvailability(attend, new TimeWindow(DateTime.Now, DateTime.Now.AddDays(2)), AvailabilityData.FreeBusyAndSuggestions, options);
    
            foreach (AttendeeAvailability attendeeAvailability in results.AttendeesAvailability)
                    {
                        Console.WriteLine();
                        Console.WriteLine();
                        if (attendeeAvailability.ErrorCode == ServiceError.NoError)
                        {
                            foreach (Microsoft.Exchange.WebServices.Data.CalendarEvent calendarEvent in
                            attendeeAvailability.CalendarEvents)
                            {
                                Console.WriteLine("Calendar event");
                                Console.WriteLine(" Starttime: " + calendarEvent.StartTime.ToString());
                                Console.WriteLine(" Endtime: " + calendarEvent.EndTime.ToString());
                                if (calendarEvent.Details != null)
                                {
                                    Console.WriteLine(" Subject:" + calendarEvent.Details.Subject);
    
                                }
                            }
                        }
                    }
                }
    

    关于问题 #3,获取此信息并不简单,因为它是私人信息,作为普通用户,您无权查看它。

    【讨论】:

    • 仅当 Exchange 位于本地并绑定到域时,才可按所示获取房间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多