Fonction getContactExchange() [Résolu]

Dedel209 29 Messages postés samedi 31 janvier 2009Date d'inscription 14 août 2014 Dernière intervention - 11 oct. 2013 à 10:06 - Dernière réponse : Dedel209 29 Messages postés samedi 31 janvier 2009Date d'inscription 14 août 2014 Dernière intervention
- 7 déc. 2013 à 13:16
Bonjour à tous,

voici mon code dans ma classe getAllContactExchange.cs
Je voudrais appeler la fonction getContactsExchange() lorsque je clique sur un bouton et que le résultat s'affiche dans un combobx. Seulement je ne sais pas le type de retour que je dois donner à ma fonction.

La modification ne doit pas être longue. Est ce que quelqu'un pourrait me donner une solution SVP?

Merci d'avance

class getAllContactsExchange
    {
        public List<Contact> getContactsExchange()
        {
            /*================================================================================================================================================*/
            /*==========================================================================VALIDATION CERTIFICAT=================================================*/
            /*================================================================================================================================================*/
            ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                // Si le certificat est un certificat valide, signée, retourner vrai
                if (errors == System.Net.Security.SslPolicyErrors.None)
                {
                    return true;
                }
                // Si erreur dans la chaine de certificat, Affiche chaque erreur pour déterminer la cause
                if ((errors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
                {
                    if (chain != null && chain.ChainStatus != null)
                    {
                        foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
                        {
                            if ((certificate.Subject == certificate.Issuer) &&
                               (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
                            {
                                // Self-signed certificates with an untrusted root are valid.
                                continue;
                            }
                            else
                            {
                                if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
                                {
                                    // If there are any other errors in the certificate chain, the certificate is invalid,
                                    // so the method returns false.
                                    return false;
                                }
                            }
                        }
                    }
                    //Lorsque le traitement atteint cette ligne, les seules erreurs dans la chaîne de certificats sont
                    //erreurs de racine non pour les certificats auto-signés. Ces certificats sont valables pour les installations de Exchange Server par défaut, de sorte return true.
                    return true;
                }
                else
                {
                    // Autres choix, return false.
                    return false;
                }
            };
            ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010);
            _service.Credentials = new WebCredentials("user", "password");
            _service.Url = new Uri("https://mail.domain.be/ews/exchange.asmx");
            
            //Contact mailbox
            ContactsFolder contactsfolder = ContactsFolder.Bind(_service, WellKnownFolderName.Contacts);

            // Set the number of items to the number of items in the Contacts folder or 50, whichever is smaller.
            int numItems = contactsfolder.TotalCount < int.MaxValue ? contactsfolder.TotalCount : int.MaxValue;

            // Instantiate the item view with the number of items to retrieve from the Contacts folder.
            ItemView view = new ItemView(numItems);

            // To keep the request smaller, request only the display name property.
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ContactSchema.DisplayName);

            // Retrieve the items in the Contacts folder that have the properties that you selected.
            FindItemsResults<Item> contactItems = _service.FindItems(WellKnownFolderName.Contacts, view);

            // Display the list of contacts. 
            foreach (Item item in contactItems)
            {

                if (item is Contact)
                {
                    Contact contact = item as Contact;
                    //comboBox1.Items.Add(contact.DisplayName);
                }
            }
        }
}



--
Afficher la suite 

Votre réponse

25 réponses

nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 11 oct. 2013 à 11:15
0
Merci
salut.

Tu peux gérer l'évenement "onClick", le plus simple étant, dans vs, de double cliquer dessus.
Tu auras par exemple :

private void button1_Click(object sender, EventArgs e)
{
    List<string> maList = getContactsExchange();
    foreach(string s un maList) 
    {
         maCombo.items.Add(s);
    }
}


"maCombo" étant le nom de ta combobox cible.

naga
Commenter la réponse de nagaD.scar
Dedel209 29 Messages postés samedi 31 janvier 2009Date d'inscription 14 août 2014 Dernière intervention - 11 oct. 2013 à 14:59
0
Merci
Merci pour votre réponse mais je ne sais pas quoi mettre dans ma classe getAllContactsExchange.cs comme RETURN.

Je fais appel à cette classe en cliquant sur un bouton pour remplir ma combobox comme vous l'avez compris.

Ma classe getAllContactsExchange est développé dans mon premier post.

Donc pour le moment j'ai ceci :

private void button1_Click(object sender, EventArgs e)
{
    getAllContactsExchange getContact = new getAllContactsExchange();
    List<string> maList = getContact.getContactsExchange();
    foreach(string s un maList) 
    {
         maCombo.items.Add(s);
    }
} 




--
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 5 nov. 2013 à 07:56
Pour le premier avec StreamWriter, aucun fichier est créé. 
Pour le second rien ne s'affiche non plus.


dans ce cas là c'est que
resolution.Contact != null
est faut, et donc que
resolution.Contact == null
... car même s'il était vide, le fichier serai tout de même créé dans le cas ou la valeur serai différente de null.

Le problème ne vient donc pas ici de la lecture de infos, mais plutot de là où tu implémente tes contacts.

Tu peux vérifier manuellement via le debugg histoire de voir le contenu de ton contact.

naga
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 6 nov. 2013 à 00:31
Voici mon code pour afficher les infos..Où pourrais-je vérifier via le debugg pour tester svp? J'essaye d'afficher les infos du contact qui a été créé dans Outlook Web Access lui même donc il ne devrait pas y avoir d'erreur au niveau de la création.

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;
//string test = comboBoxClient.Items.ToString();
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)
{
foreach(PhoneNumberDictionaryEntryType pnEntry in resolution.Contact.PhoneNumbers)
{
MessageBox.Show(pnEntry.ToString());
}
foreach(PhysicalAddressDictionaryEntryType paEntry in resolution.Contact.PhysicalAddresses)
{
MessageBox.Show(paEntry.ToString());
}
}
}
}
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 6 nov. 2013 à 07:57
j'ai regardé là où je pouvais trouver des infos, mais la seule chose à modifier dans ton code est de remplacer
pnEntry.ToString()
par
 pnEntry.Value
et remplacer
 paEntry.ToString()
par
 paEntry.Value
. Mais ce n'est pas ca le problème (enfin je pense pas, vu que tu aurai quand même eu des messagebox).

Là du coup le problème ne vient pas du code mais du côté d'exchange à mon avis, et je ne peux pas t'aider là dessus, je ne connais pas du tout ^^
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 6 nov. 2013 à 13:56
J'ai peut être trouvé une autre méthode pour afficher les résultats.

Le problème est qu'il me met à nouveau l'erreur au niveau du foreach:
La référence d'objet n'est pas définie à une instance d'objet.
Je dois donc refaire un
if(??? != null)
.
Mais je ne vois pas comment tester ça...

Voici mon code :
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.contactsGivenName;



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);



if (findItemResponse.ResponseMessages.Items.Length > 0)
{

FindItemResponseMessageType responseMessage =

findItemResponse.ResponseMessages.Items[0] as FindItemResponseMessageType;

ArrayOfRealItemsType realItems =

responseMessage.RootFolder.Item as ArrayOfRealItemsType;


foreach (ContactItemType contact in realItems.Items)
{


// Do work with data returned for each contact

Console.WriteLine("Name: {0} {1}\nEmail: {2}\nPhone: {3}",

contact.GivenName, contact.Surname,

(contact.EmailAddresses != null && contact.EmailAddresses.Length > 0 ?

contact.EmailAddresses[0].Value : ""),

(contact.PhoneNumbers != null && contact.PhoneNumbers.Length > 0 ?

contact.PhoneNumbers[0].Value : ""));


}

}
Dedel209 29 Messages postés samedi 31 janvier 2009Date d'inscription 14 août 2014 Dernière intervention - 7 déc. 2013 à 13:16
Voici la solution pour extraire les numéros de téléphone :

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 correspondante :

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());

}
}
}

Commenter la réponse de Dedel209

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.