Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Outlook > VBA Outlook

Réponse
 
Outils de la discussion
Vieux 23/04/2008, 10h50   #1 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut Accès nouveau champ Outlook

Bonjour à tous,
Est-ce que quelqu'un saurait si un objet de type CContactItem dispose d'un ID unique qui permettrait de l'identifier (type clé primaire) ?
Sinon je peux créer dans outlook un nouveau champ ("champ définis par l'utilisateur dans le dossier") faisant office de clé primaire mais dans ce cas la pourrais-je récupérer son contenu dans mon code (je pense que oui mais il va falloir implémenter les méthodes ? )

Une question plus précise serait : "Existe-t-il une collection d'objet de type CItem n'appartenant pas à Microsoft ?" (Donc que l'utilisateur a pu créer en rajoutant des champs, etc..)

Merci.
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/04/2008, 16h30   #2 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Je vais tenter d'être un peu plus précis :

J'ai créer un "champ définit par l'utilisateur dans le dossier" pour tout mes contacts. Je souhaiterais avoir accès à ce champ (via mon code).
Existe-t-il une collection d'objet qui gère ce type de champ (champ non microsoft) ?

Merci.

PS : Je code en C++.
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 01h14   #3 (permalink)
Membre régulier
 
Date d'inscription: août 2007
Localisation: France, Paris
Messages: 136
Envoyer un message via MSN à Laurent CUENET Envoyer un message via Skype™ à Laurent CUENET
Par défaut

Bonsoir,

ID : Le champs qui s'appelle EntryID

Dans les champs des fiches contacts natif outlook tu as 4 champs qui s'appellent User1, User2, User3, User4
ils sont disponible pour stocker des types valeurs à définir au niveau formulaire Outlook. (==> un déploiement du formulaire sur les dossiers où tu souhaites utiliser le formulaire)

Pour la création de champs personnalisés, tu as Userproperties.

A bientôt,
Laurent CUENET est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 08h57   #4 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Donc si j'ai bien compris, ces 4 champs User1..4 ne sont pas utilisés par Outlook et sont destinés à être utilisés dans les formulaires persos de l'utilisateur ?
Sinon sur le champ EntryID, j'ai déjà jetté un coup d'oeil la dessus et j'ai pas trouvé comment le remplir, car plusieurs classes ont cette méthode.
A quoi correspond exactement ce champ EntryID ? A quoi sert-il ? Et surtout une fois que je l'ai qu'est-ce que j'en fait ?

Merci.

PS : J'ai éssayé ça et il me dit "impossible d'exécuter l'opération, impossible de trouver un objet"

Code :
sTest = spFolder.get_EntryID();
AfxMessageBox(sTest);
CStorageItem spStorageItem = spFolder.GetStorage(sTest, 1);

Dernière modification par SmOkEiSBaD ; 24/04/2008 à 09h34
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 10h54   #5 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 492
Par défaut

SAlut,

Ce n'est pas toi qui alimente EntryID mais OULTOOK.
EntryID n'existe que sur les éléments enregistrés.

GetItemFromID permet de trouver un élément avec son EntryID

Code :
Dim StrEntryID As String
If ObjCurrentMessage.EntryID = "" Then ObjCurrentMessage.Save
StrEntryID = ObjCurrentMessage.EntryID
Dim olNS As Outlook.NameSpace
Dim msg As Outlook.MailItem
Set olNS = Application.GetNamespace("MAPI")
Set msg = olNS.GetItemFromID(StrEntryID )
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h10   #6 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Si j'ai créé et remplis le champ à la main et que je souhaite seulement le lire. Il ne considère pas cela comme un élément enregistré ?
Ou c'est le folder qui n'est pas enregistré ?
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h16   #7 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 492
Par défaut

Pas bien compris ta réponse mais EntryID est en lecture seule donc pas possible de le modifier.

EntryID correspond un peu à un ID automatique d'une bse de donnée.
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h22   #8 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Rebonjour,
Oui j'ai bien compris, mais je ne cherche pas à le modifier moi.
Je récupère le EntryID de mon folder (entre autre le folder des contacts) pour ensuite récupérer le StorageItem qu'il y a derrière le folder.

Le truc c'est que la fonction getStorage prend en paramètre l'EntryID et le mode d'accès.

voir : http://msdn2.microsoft.com/en-us/library/bb147821.aspx
http://msdn2.microsoft.com/en-us/library/bb208140.aspx

Apparement il faut utiliser les objets de type CStorageItem pour lire les champs perso (entre eux celui que j'ai rajouté à la main).

Merci.
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h30   #9 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 492
Par défaut

Je ne connais pas StorageItem c'est nouveau dans 2007 à quoi cela sert 'il à stocker des documents ?
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h36   #10 (permalink)
Membre régulier
 
Date d'inscription: août 2007
Localisation: France, Paris
Messages: 136
Envoyer un message via MSN à Laurent CUENET Envoyer un message via Skype™ à Laurent CUENET
Par défaut

Bonjour,

Il manque la définition de ton MAPIFolder (spFolder)

je connais rien en C++ mais je ne connais pas la fonction get_EntryID() et Getstorage.

Code :
sTest = spFolder.get_EntryID();
AfxMessageBox(sTest);
CStorageItem spStorageItem = spFolder.GetStorage(sTest, 1);
en vb

tu définis le chemin de ton MAPIFolder et sa collection Item. Ensuite il te suffit d'interroger la propriété EntryID.

A bientôt,

Dernière modification par Dolphy35 ; 25/04/2008 à 15h15
Laurent CUENET est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h37   #11 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

C'est une bonne question xD
J'ai découvert Outlook, son modèle, etc.. il y a deux semaines de cela, j'apprend donc tous les jours sur le sujet.
J'éspère que quelqu'un pourra nous renseigner.
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/04/2008, 11h51   #12 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Citation:
Envoyé par Laurent CUENET Voir le message
en vb

tu définis le chemin de ton MAPIFolder et sa collection Item. Ensuite il te suffit d'interroger la propriété EntryID.

A bientôt,
Bien le bonjour,
Moi je ne connais pas VB et c'est vrai que la plupart des exemples sur Outlook sont en VB

Sinon j'ai bien l'impression que je fait la même chose dans mon programme
1- Je récupère une appli. outlook
2- Je récupère le NameSpace de cette même appli.
3- Je récupère le répertoire des contacts (Type MAPIFolder)
4- Je parcourt tout mes contacts et récupère les champs qui m'intérressent, pour ce faire je récupère chacun de mes contacts dans un objet de type CContactItem

Le problème est là, je souhaite récupérer le contenu d'un champ que j'ai créé à la main dans Outlook en plus des champs de base.

Comment récupère-t-on ce champ perso. ?

Merci

PS : Mon code compile sans erreurs et sans warnings, c'est à l'exécution qu'il me dit "Impossible d'exécuter l'opération. Objet introuvable."

Dernière modification par SmOkEiSBaD ; 24/04/2008 à 17h18
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/04/2008, 11h09   #13 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Puisse mon code éclairer vos lanternes...

Code C++ / MFC :

Code :
        //Déclarations
	CApplication spAppli;
	CMAPIFolder spFolder;
	CNameSpace spNameSpace;
	CString sTest;

	//Création d'un smart pointer sur une application Outlook
	spAppli.CreateDispatch(_T("Outlook.Application"));
	AfxMessageBox(_T("Application Outlook ouverte"));
	
	//Récupération du Namespace
	spNameSpace = spAppli.GetNamespace(_T("MAPI"));

	//Récupération du répertoire des contacts
	spFolder = spNameSpace.GetDefaultFolder(10);

	//Récupération des contacts et de leurs informations
	AfxMessageBox(_T("Récupération des informations sur les contacts..."));
	CItems spItem(spFolder.get_Items());

	//On traite le premier contact
	CContactItem spContactItem(spItem.GetFirst());
	sTest = spFolder.get_EntryID();
	AfxMessageBox(sTest);
	CStorageItem spStorageItem = spFolder.GetStorage(sTest, 1);
C'est la ligne rouge qui génère l'erreur.

Dernière modification par SmOkEiSBaD ; 25/04/2008 à 12h01
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/04/2008, 13h54   #14 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 492
Par défaut

Bonjour
Si j'ai bien compris tu veux atteindre des champs de formulaires que tu as créé ?

regarde du coté de l'objet "UserProperty" de ton item.
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/04/2008, 09h01   #15 (permalink)
Membre Confirmé
 
Avatar de SmOkEiSBaD
 
Date d'inscription: avril 2008
Localisation: Lyon
Âge: 19
Messages: 225
Par défaut

Bonjour,
En fait j'ai rajouter les champs sur tout mes contacts à la main.
J'ai effectivement trouvé 2-3 indices du côté de "UserProperty" mais pour le moment rien de concret.
Merci.
SmOkEiSBaD est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Outlook > VBA Outlook

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide