使用Microsoft.Office.Interop.Outlook

时间:2018-02-05 17:01:28

标签: c# outlook office-interop outlook-addin

我正在开发一个应用程序,我想从outlook地址簿的“All Rooms”中检索可用的房间。我可以从“所有房间”地址条目列表中检索所有房间条目。然后通过调用AddressEntry.GetFreeBusy()来搜索单个房间的可用性。 但我面临的问题是代码的时间性能。如果房间数量很高(比方说500),那么搜索房间可用性的时间(可用房间位于列表最后位置附近的最坏情况)非常高。

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application()
var allRooms = app.Session.AddressLists["All Rooms"].Cast<Microsoft.Office.Interop.Outlook.AddressEntry>().ToLis();
DateTime today = DateTime.Today;
foreach(var room in allRooms)
{
    //the below function will return the room status in a string of 1&0 for an interval of 1 min
    string status = room.GetFreeBusy(today, 1, true); //sequentially calling this method is costly. What improvement can I do here?
    //process the status and make some if free for certain time period add to list of available list
}

2 个答案:

答案 0 :(得分:1)

如果您是.Net Developer,请为此使用Microsoft Graph API。我用过

POST / me / calendar / getSchedule POST / users / {id | userPrincipalName} / calendar / getSchedule

从实现这一点。您可以作为用户ID登录并使用ME选项,也可以使用应用程序模式登录登录并使用{id | userPrincipalName}获取会议室的日历详细信息。

此链接提供了有关如何登录的基础知识,并提供了有关Graph的一般示例。

https://developer.microsoft.com/en-us/graph/graph-explorer

参考: https://docs.microsoft.com/en-us/graph/api/calendar-getschedule?view=graph-rest-1.0&tabs=http

答案 1 :(得分:0)

GetFreeBusy方法接受三个参数,MinPerChar参数的默认值为30分钟。但是您的代码只检查约会的第一分钟。您需要经历整个会议期间(至少30分钟)。看看similar论坛帖子。