none
Exchange Web Services Afficher les informations d'un contact RRS feed

  • Discussion générale

  • Bonsoir à tous,

    Ça fait trois jours que je suis sur ce problème et je n'ai pas trouvé de solution.

    Je sélectionne un contact dans un combobox et j'aimerais afficher ces informations correspondantes (email, adresse postal, n° téléphone).

    Pour l'email il me sort bien les deux adresses correspondantes au contact sélectionné. Mais pour l'adresse postal et le n° de téléphone rien ne s'affiche.

    Je précise que le contact a été créé dans OWA donc les champs sont remplis correctement.

    Vos idées sont les bienvenues et merci d'avance.

    Voici mon code:

    private void comboBoxClientExchange_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                
                ExchangeServiceBinding esb = new ExchangeServiceBinding();
                esb.Url = @"https://mail.domain.com/ews/exchange.asmx";
                esb.Credentials = new NetworkCredential(
                    "user",
                    @"password"
                    );
    
                // Create the ResolveNamesType and set
                // the unresolved entry.
                ResolveNamesType rnType = new ResolveNamesType();
                rnType.ReturnFullContactData = true;
                rnType.UnresolvedEntry = comboBoxClientExchange.SelectedItem.ToString();
    
                // Resolve names.
                ResolveNamesResponseType resolveNamesResponse = esb.ResolveNames(rnType);
                ArrayOfResponseMessagesType responses = resolveNamesResponse.ResponseMessages;
    
                // Check the result.
                if (responses.Items.Length > 0 && responses.Items[0].ResponseClass != ResponseClassType.Error)
                {
                    ResolveNamesResponseMessageType responseMessage = responses.Items[0] as ResolveNamesResponseMessageType;
    
                    // Display the resolution information.
                    ResolutionType[] resolutions = responseMessage.ResolutionSet.Resolution;
                    foreach (ResolutionType resolution in resolutions)
                    {
                            if (resolution.Mailbox != null)
                            {
                                MessageBox.Show("EmailAddress:" + resolution.Mailbox.EmailAddress);
                            }
                            if (resolution.Contact != null)
                            {
                                if(resolution.Contact.PhoneNumbers.Count()>0)
                                {
                                    MessageBox.Show("Phones:" + resolution.Contact.PhoneNumbers[0]);
                                }
                                if(resolution.Contact.PhysicalAddresses.Count()>0)
                                {
                                    MessageBox.Show("Addresses:" + resolution.Contact.PhysicalAddresses[0]);
                                }
                            }
                    }
                }
            }


    • Modifié Blackhox mardi 5 novembre 2013 23:41
    • Type modifié Aurel Bera mercredi 13 novembre 2013 07:25 disc
    mardi 5 novembre 2013 23:40

Toutes les réponses

  • Bonjour

    Vous avez dans le code:

           ResolveNamesResponseMessageTyperesponseMessage =responses.Items[0]asResolveNamesResponseMessageType;

    Donc vous prenez seulement responses.Items[0] . Essayez d’utiliser une boucle pour voir s'il y a plusieurs objets.

    Aussi, utilisez le debugger pour voir autres propriétés du resolution.Contact.

    Souvent on a vu dans Exchange que les propriétés sont utilisées d'une manière différente de la logique.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 7 novembre 2013 08:27
  • Bonjour

    Vous avez dans le code:

           ResolveNamesResponseMessageTyperesponseMessage =responses.Items[0]asResolveNamesResponseMessageType;

    Donc vous prenez seulement responses.Items[0] . Essayez d’utiliser une boucle pour voir s'il y a plusieurs objets.

    Aussi, utilisez le debugger pour voir autres propriétés du resolution.Contact.

    Souvent on a vu dans Exchange que les propriétés sont utilisées d'une manière différente de la logique.

    Cordialement,



    Pouvez-vous me montrer la boucle que je dois faire car j'ai essayé et une exception est levée en disant que je dépasse la valeur de l'index.

    Merci d'avance


    • Modifié Damilien samedi 9 novembre 2013 15:40
    samedi 9 novembre 2013 15:40
  • Essayez avec :

          if (responses.Items.Length > 0 && responses.Items[0].ResponseClass != ResponseClassType.Error)
                {
    		 for (int compteur = 0 ; compteur < responses.Items.Length; compteur ++  )
                    	ResolveNamesResponseMessageType responseMessage = responses.Items[compteur] as ResolveNamesResponseMessageType
    
    .....................................................................................................................
    

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 11 novembre 2013 10:53
  • Essayez avec :

          if (responses.Items.Length > 0 && responses.Items[0].ResponseClass != ResponseClassType.Error)
                {
    		 for (int compteur = 0 ; compteur < responses.Items.Length; compteur ++  )
                    	ResolveNamesResponseMessageType responseMessage = responses.Items[compteur] as ResolveNamesResponseMessageType
    
    .....................................................................................................................

    Cordialement,



    Effectivement avec votre solution il me sort les adresses mails correspondantes au client sélectionné.

    Mais rien ne s'affiche au niveau du numéro de téléphone...

    Voici mon code et merci d'avance pour votre réponse

    ExchangeServiceBinding esb = new ExchangeServiceBinding();
                esb.Url = @"https://mail.domain.com/EWS/Exchange.asmx";
                esb.Credentials = new NetworkCredential(
                    "login",
                    @"password",
                    @"domain");
    
                // Create the ResolveNamesType and set
                // the unresolved entry.
                ResolveNamesType rnType = new ResolveNamesType();
                rnType.ReturnFullContactData = true;
                rnType.UnresolvedEntry = "Nom Prenom";
    
                // Resolve names.
                ResolveNamesResponseType resolveNamesResponse
                = esb.ResolveNames(rnType);
                ArrayOfResponseMessagesType responses
                = resolveNamesResponse.ResponseMessages;
    
                // Check the result.
                if (responses.Items.Length > 0 && responses.Items[0].ResponseClass != ResponseClassType.Error)
                {
                    for (int compteur = 0; compteur < responses.Items.Length; compteur++)
                    {
                        ResolveNamesResponseMessageType responseMessage = responses.Items[compteur] as ResolveNamesResponseMessageType;
    
    
                        // Display the resolution information.
                        ResolutionType[] resolutions = responseMessage.ResolutionSet.Resolution;
                        foreach (ResolutionType resolution in resolutions)
                        {
                            if (resolution.Mailbox != null)
                            {
                                Console.WriteLine("EmailAddress:" + resolution.Mailbox.EmailAddress);
                            }
                            if (resolution.Contact != null)
                            {
                                if (resolution.Contact.PhoneNumbers.Count() > 0)
                                {
                                    Console.WriteLine("Phones:" + resolution.Contact.PhoneNumbers[0]);
                                }
                            }
                        }
                    }                
                }
                Console.ReadLine();

    mardi 3 décembre 2013 10:14
  • Voici la solution pour extraire les numéros de téléphone associés à un contact :

    ExchangeServiceBinding esb = new ExchangeServiceBinding();
     
                    esb.Credentials = new NetworkCredential("user", "password", "domain");
     
                    esb.Url = @"https://mail.domain.com/EWS/Exchange.asmx";
     
     
     
                    // Tell it you want all the item properties
     
                    ItemResponseShapeType itemProperties = new ItemResponseShapeType();
     
                    itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
     
     
     
                    // Tell it you only want to look in the contacts folder
     
                    DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
     
                    folderIDArray[0] = new DistinguishedFolderIdType();
     
                    folderIDArray[0].Id = DistinguishedFolderIdNameType.contacts;
     
     
     
                    PathToUnindexedFieldType field = new PathToUnindexedFieldType();
     
                    field.FieldURI = UnindexedFieldURIType.contactsDisplayName;
     
     
     
                    ConstantValueType fieldValue = new ConstantValueType();
     
                    fieldValue.Value = comboBoxClient.SelectedItem.ToString();
     
     
     
                    // Look for contacts which have a given name that begins with 'wes'
     
                    ContainsExpressionType expr = new ContainsExpressionType();
     
                    expr.ContainmentModeSpecified = true;
     
                    expr.ContainmentMode = ContainmentModeType.Prefixed;
     
                    expr.ContainmentComparisonSpecified = true;
     
                    expr.ContainmentComparison = ContainmentComparisonType.IgnoreCase;
     
                    expr.Constant = fieldValue;
     
                    expr.Item = field;
     
     
     
                    RestrictionType restriction = new RestrictionType();
     
                    restriction.Item = expr;
     
     
     
                    // Form the FindItem request
     
                    FindItemType findItemRequest = new FindItemType();
     
                    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
     
                    findItemRequest.ItemShape = itemProperties;
     
                    findItemRequest.ParentFolderIds = folderIDArray;
     
                    findItemRequest.Restriction = restriction;
     
     
     
                    // Send the request and get the response
     
                    FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);
                    FindItemResponseMessageType responseMessage = findItemResponse.ResponseMessages.Items[0] as FindItemResponseMessageType;
                    ArrayOfRealItemsType realItems = responseMessage.RootFolder.Item as ArrayOfRealItemsType;
     
                    if (findItemResponse.ResponseMessages.Items.Length > 0)
                    {
     
     
                        foreach (ContactItemType contact in realItems.Items)
                        {
                            for (int compteur = 0; compteur < contact.PhoneNumbers.Length; compteur++)
                            {
     
     
                                if (contact.PhoneNumbers[compteur] != null)
                                {
                                    comboBoxASms.Items.Add(contact.PhoneNumbers[compteur].Value);
     
                                }
                            }
                        }
                    }

    Pour l'adresse postal correspondante à un contact:

    ExchangeServiceBinding esb = new ExchangeServiceBinding();
     
                esb.Credentials = new NetworkCredential("user", "password", "domain");
     
                esb.Url = @"https://mail.domain.com/EWS/Exchange.asmx";
     
     
     
                // Tell it you want all the item properties
     
                ItemResponseShapeType itemProperties = new ItemResponseShapeType();
     
                itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
     
     
     
                // Tell it you only want to look in the contacts folder
     
                DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
     
                folderIDArray[0] = new DistinguishedFolderIdType();
     
                folderIDArray[0].Id = DistinguishedFolderIdNameType.contacts;
     
     
     
                PathToUnindexedFieldType field = new PathToUnindexedFieldType();
     
                field.FieldURI = UnindexedFieldURIType.contactsDisplayName;
     
     
     
                ConstantValueType fieldValue = new ConstantValueType();
     
                fieldValue.Value = "Prenom Nom";
     
     
     
                // Look for contacts which have a given name that begins with 'wes'
     
                ContainsExpressionType expr = new ContainsExpressionType();
     
                expr.ContainmentModeSpecified = true;
     
                expr.ContainmentMode = ContainmentModeType.Prefixed;
     
                expr.ContainmentComparisonSpecified = true;
     
                expr.ContainmentComparison = ContainmentComparisonType.IgnoreCase;
     
                expr.Constant = fieldValue;
     
                expr.Item = field;
     
     
     
                RestrictionType restriction = new RestrictionType();
     
                restriction.Item = expr;
     
     
     
                // Form the FindItem request
     
                FindItemType findItemRequest = new FindItemType();
     
                findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
     
                findItemRequest.ItemShape = itemProperties;
     
                findItemRequest.ParentFolderIds = folderIDArray;
     
                findItemRequest.Restriction = restriction;
     
     
     
                // Send the request and get the response
     
                FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);
                FindItemResponseMessageType responseMessage = findItemResponse.ResponseMessages.Items[0] as FindItemResponseMessageType;
                ArrayOfRealItemsType realItems = responseMessage.RootFolder.Item as ArrayOfRealItemsType;
     
                if (findItemResponse.ResponseMessages.Items.Length > 0)
                {
                    foreach (ContactItemType contact in realItems.Items)
                    {
                        if (contact != null)
                        {
     
                            // Do work with data returned for each contact
                            Console.WriteLine("Street : {0}", contact.PhysicalAddresses[1].Street.ToString());
                            Console.WriteLine("PostalCode : {0}", contact.PhysicalAddresses[1].PostalCode.ToString());
                            Console.WriteLine("City : {0}", contact.PhysicalAddresses[1].City.ToString());
                            Console.WriteLine("Country : {0}", contact.PhysicalAddresses[1].CountryOrRegion.ToString());
     
                        }
                    }
                }

    samedi 7 décembre 2013 12:26