Question

En ce moment, j'utilise la méthode LyncClient.ContacTanager.beginsearch pour trouver des contacts.Cependant, je n'ai pas pu savoir comment obtenir tous les contacts.J'ai essayé de passer "*" et "%" comme des personnages de carte sauvage, mais cela n'a pas fonctionné.En ce moment, voici mon appel de fonction.

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

Était-ce utile?

La solution

Les contacts Lync sont organisés en groupes. Vous devez donc commencer au niveau des groupes.Une fois que vous avez un groupe, vous pouvez alors énumérer à travers ses contacts

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

Cet article est bon pour l'arrière-plan et des fonctionnalités plus avancées

EDIT : Spécifiquement, pour la question de l'expansion des groupes de distribution, je pense que l'échantillon ici est défectueux.

Au lieu d'appeler Beginexpand et d'attendre le WAITHANDLE, fournissez une méthode de rappel pour gérer le rappel Développer.Donc, au lieu de:

asyncOpResult = DGGroup.BeginExpand(null, null);
asyncOpResult.AsyncWaitHandle.WaitOne();

DGGroup.EndExpand(asyncOpResult);

Essayez ceci:

...
asyncOpResult = DGGroup.BeginExpand(ExpandCallback, DGGroup);
...

public void ExpandCallback(IAsyncResult ar)
{
    DistributionGroup DGGroup = (DistributionGroup)ar.AsyncState;
    DGGroup.EndExpand(ar);

    etc...
}

Cela fonctionne parfaitement pour moi.

Autres conseils

J'ai fini par faire plusieurs recherches pour maintenant obtenir tous les contacts.Je passe à travers chaque lettre de l'alphabet pour les trouver.Le temps de chargement est suffisamment rapide et je vais simplement montrer une image de chargement sur la grille pendant un peu de temps lorsqu'elle tire.Cela a bien fonctionné pour les 200 ou plus de contacts que nous avons bien que je recommanderais la solution de Paul pour 150 ou moins.Voici ce que j'ai fait:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top