现在我正在使用LyncClient.ContactManager.BeginSearch方法来查找联系人。但是,我无法弄清楚如何获得所有联系人。我已经尝试将“*”和“%”作为外卡字符传递但是没有用。现在这是我的函数调用。
_lyncClient.ContactManager.BeginSearch("*", SearchProviders.GlobalAddressList, SearchFields.DisplayName, SearchOptions.ContactsOnly, 400, SearchCallback, "Searching Contacts");
答案 0 :(得分:8)
Lync联系人按组分组,因此您需要从组级别开始。一旦你有了一个小组,你就可以通过它的联系人
进行枚举foreach(var group in _client.ContactManager.Groups)
{
foreach (var contact in group)
{
MessageBox.Show(contact.Uri);
}
}
This article适用于后台和更高级的功能
修改:具体来说,对于通讯组扩展问题,我认为示例here存在缺陷。
不是调用BeginExpand并等待WaitHandle,而是提供一个回调方法来处理Expand回调。所以,而不是:
asyncOpResult = DGGroup.BeginExpand(null, null);
asyncOpResult.AsyncWaitHandle.WaitOne();
DGGroup.EndExpand(asyncOpResult);
试试这个:
...
asyncOpResult = DGGroup.BeginExpand(ExpandCallback, DGGroup);
...
public void ExpandCallback(IAsyncResult ar)
{
DistributionGroup DGGroup = (DistributionGroup)ar.AsyncState;
DGGroup.EndExpand(ar);
etc...
}
这对我来说很有效。
答案 1 :(得分:1)
我现在最终进行多次搜索以获取所有联系人。我仔细检查字母表中的每个字母。加载时间足够快,我只需在网格上显示加载图像一段时间即可启动。这对我们拥有的200个左右的联系人来说效果很好,但我建议Paul的解决方案不超过150个。这是我做的:
private static char[] Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
...
public void GetAllContacts()
{
int initialLetterIndex = 0;
_lyncClient.ContactManager.BeginSearch(
Alphabet[initialLetterIndex].ToString();
SearchProviders.GlobalAddressList,
SearchFields.FirstName,
SearchOptions.ContactsOnly,
300,
SearchAllCallback
new object[] { initialLetterIndex, new List<Contact>() }
);
}
private void SearchAllCallback(IAsyncResult result)
{
object[] parameters = (object[])result.AsyncState;
int letterIndex = (int)parameters[0] + 1;
List<Contact> contacts = (List<Contact>)parameters[1];
SearchResults results = _lyncClient.ContactManager.EndSearch(result);
contacts.AddRange(results.Contacts);
if (letterIndex < Alphabet.Length)
{
_lyncClient.ContactManager.BeginSearch(
Alphabet[letterIndex].ToString(),
SearchAllCallback,
new object[] { letterIndex, contacts }
);
}
else
{
//Now that we have all the contacts
//trigger an event with 'contacts' as the event arguments.
}
}