6

現在、LyncClient.ContactManager.BeginSearch メソッドを使用して連絡先を検索しています。ただし、すべての連絡先を取得する方法を理解できませんでした。「*」と「%」をワイルドカード文字として渡そうとしましたが、うまくいきませんでした。今ここに私の関数呼び出しがあります。

_lyncClient.ContactManager.BeginSearch("*", SearchProviders.GlobalAddressList, SearchFields.DisplayName, SearchOptions.ContactsOnly, 400, SearchCallback, "Searching Contacts");
4

2 に答える 2

8

Lync の連絡先はグループに編成されるため、グループ レベルから開始する必要があります。グループを取得したら、その連絡先を列挙できます

foreach(var group in _client.ContactManager.Groups)
{
    foreach (var contact in group)
    {
        MessageBox.Show(contact.Uri);
    }
}

この記事は、バックグラウンドとより高度な機能に適しています

編集:具体的には、配布グループの拡張に関する質問については、ここのサンプルに欠陥があると思います.

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...
}

これは私にとって完璧に機能します。

于 2011-03-28T15:34:31.783 に答える
1

すべての連絡先を取得するために、今のところ複数の検索を行うことになりました。アルファベットの各文字を調べて見つけます。ロード時間は十分に速いので、グリッド上にロード中の画像を表示するだけです。これは、私たちが持っている 200 ほどの連絡先ではうまく機能しましたが、150 以下の場合は Paul のソリューションをお勧めします。これが私がしたことです:

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.
  }
}
于 2011-03-29T19:51:52.183 に答える