我重寫了URL中的示例,如下面的LINQPad 4查詢。我發現LINQPad是一種很好的實驗方法,因爲它非常靈活,可以快速進行實驗,並且可以使用擴展方法輕鬆查看數據。購買智能感知支持是完全有價值的。
而且,我注意到有很多小字一樣的:
登錄的用戶必須對這個方法返回一個AddressEntries收集在線;否則,GetDirectReports返回空引用。對於生產代碼,必須使用_NameSpace.ExchangeConnectionMode屬性或多個Exchange方案的_Account.ExchangeConnectionMode屬性來測試脫機用戶。
和
如果當前用戶有一個經理,GetDirectReports()被調用返回一個AddressEntries集合,表示對用戶的經理的所有直接報告的地址表項。如果管理器沒有直接報告,GetDirectReports將返回一個計數爲零的AddressEntries集合。
因此,有很多假設像Exchange直接報告關係正確配置,並且當前用戶在線...我認爲這會將Lync帶入等式中。希望這個LINQPad查詢對你有用。只需將其複製並粘貼到文本編輯器中,並使用.linq文件擴展名命名即可。然後你就可以在LINQPad 4中打開它了。順便說一句:你的問題引起了我的注意,因爲最近在我從Active Directory提取直接報告的工作中有人談論。我希望我能更有幫助......祝你好運。
<Query Kind="Program">
<Reference><ProgramFilesX86>\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Outlook.dll</Reference>
<Reference><ProgramFilesX86>\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.OutlookViewCtl.dll</Reference>
<Namespace>Microsoft.Office.Interop.Outlook</Namespace>
</Query>
void Main()
{
GetManagerDirectReports();
}
// Define other methods and classes here
private void GetManagerDirectReports()
{
var app = new Microsoft.Office.Interop.Outlook.Application();
AddressEntry currentUser = app.Session.CurrentUser.AddressEntry;
if (currentUser.Type == "EX")
{
ExchangeUser manager = currentUser.GetExchangeUser().GetExchangeUserManager();
manager.Dump();
if (manager != null)
{
AddressEntries addrEntries = manager.GetDirectReports();
if (addrEntries != null)
{
foreach (AddressEntry addrEntry in addrEntries)
{
ExchangeUser exchUser = addrEntry.GetExchangeUser();
StringBuilder sb = new StringBuilder();
sb.AppendLine("Name: " + exchUser.Name);
sb.AppendLine("Title: " + exchUser.JobTitle);
sb.AppendLine("Department: " + exchUser.Department);
sb.AppendLine("Location: " + exchUser.OfficeLocation);
sb.Dump();
}
}
}
}
}