C#交换服务器获取会议室约会列表

che*_*zer 2 c# exchange-server exchange-server-2007 exchangewebservices exchange-server-2010

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

我看到在Exchange使用EWS取得房间列表通过在Exchange使用EWS获得约会和会议

我测试了第一个链接,得到0个房间。
同样对于第二个链接,它给了当前用户日历,但没有开会。

我需要三件事:

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

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

che*_*zer 5

经过大量搜索并感谢这篇文章, 我找到了问题#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()));                 
            }
Run Code Online (Sandbox Code Playgroud)

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);

                            }
                        }
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

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