Meilleures pratiques pour l'extraction et la définition des propriétés
N'oubliez pas de respecter les meilleures pratiques recommandées pour l'extraction et la définition des propriétés :
- Référencez une propriété directement à partir de l’objet parent pour obtenir et définir les propriétés intégrées explicites des objets item, par exemple MailItem.Subject.
- Utilisez ItemProperties et ItemProperty pour énumérer les propriétés intégrées explicites et les propriétés personnalisées, et obtenir et définir des propriétés personnalisées pour les éléments (à l’exception de l’objet DocumentItem ).
- Utilisez UserProperties et UserProperty pour énumérer, obtenir et définir des propriétés personnalisées pour les éléments (à l’exception de l’objet DocumentItem ).
- Utilisez PropertyAccessor pour obtenir et définir des propriétés personnalisées pour l’objet DocumentItem , les propriétés intégrées au niveau de l’élément qui ne sont pas exposées dans le modèle objet Outlook ou les propriétés des objets suivants : AddressEntry, AddressList, Attachment, ExchangeDistributionList, ExchangeUser, Folder, Recipient et Store.
- Pour obtenir ou définir plusieurs propriétés personnalisées, utilisez l’objet PropertyAccessor au lieu de l’objet UserProperties pour de meilleures performances.
- Pour créer des propriétés personnalisées ou y accéder, utilisez l'espace de noms MAPI string pour plus de commodité dans l'espace de noms MAPI proptag ou id. Utilisez le GUID de votre macro complémentaire comme GUID de l'espace de noms.
- Lors du référencement des propriétés par des espaces de noms, n'oubliez pas que ces références dépendent des minuscules/majuscules. Par exemple, si n:schemas:contacts:givenName est un espace de noms valide, urn:schemas:contacts:givenname ne l’est pas.
- Pour obtenir ou définir plusieurs propriétés, utilisez PropertyAccessor.GetProperties et PropertyAccessor.SetProperties, par opposition à PropertyAccessor.GetProperty et PropertyAccessor.SetProperty répétés, pour de meilleures performances.
- Pour que l'événement CustomPropertyChange soit déclenché lorsque la valeur d'une propriété personnalisée de niveau d'élément change, la propriété personnalisée doit se trouver dans la collection UserProperties de l'élément. Une propriété au niveau de l’élément ajoutée implicitement par SetProperty ou SetProperties ne fait pas automatiquement partie de la collection UserProperties de l’élément. Un UserProperties.Add explicite est nécessaire pour l’inclure.
- Pour définir pour la première fois une propriété créée par la méthode UserProperties.Add , utilisez la propriété UserProperty.Value au lieu des méthodes SetProperties et SetProperty de l’objet PropertyAccessor .
Cette section décrit les meilleures pratiques pour l'enregistrement des propriétés dans un objet :
- Pour les objets item, l’appel de la méthode Save de l’élément pour enregistrer l’élément dans le dossier actif enregistre également ses propriétés sur l’élément.
- Pour les objets de niveau non élément qui n’ont pas de méthode Save (AddressList, Folder, Recipient et Store, l’appel de PropertyAccessor.DeleteProperty, PropertyAccessor.DeleteProperties, SetProperty ou SetPropertie enregistre implicitement les propriétés sur l’objet.
Cette section décrit les meilleures pratiques pour simplifier la conversion de type lors de l’utilisation de PropertyAccessor pour obtenir et définir des propriétés. Pour obtenir des définitions des types de propriétés MAPI tels que PT_SYSTIME, consultez Types de propriétés.
- Bien que la plupart des valeurs date-heure Outlook soient stockées au format UTC (Coordinated Universal Time), il n’existe aucune garantie que toutes les propriétés du type MAPI _SYSTIME retourneront toujours utc. L'extraction d'une propriété PT_SYSTIME renvoie une valeur VT_DATE. Lors de la définition d'une propriété PT_SYSTIME, assurez-vous que vous définissez la propriété comme valeur UTC plutôt que comme valeur date-heure locale. Les méthodes GetProperty, SetProperty, GetProerties et SetProperties n’effectuent pas de conversion de fuseau horaire. Utilisez les méthodes d’assistance PropertyAccessor.LocalTimeToUTC et PropertyAccessor.UTCToLocalTime pour effectuer une conversion de fuseau horaire explicite.
- Une propriété à valeurs multiples (type Microsoft Visual Basic _ARRAY) est stockée sous la forme d’un tableau à deux dimensions qui contient le même nombre d’éléments que les valeurs de la propriété . L’obtention d’une propriété à valeurs multiples renvoie une valeur ARRAY . Lors de la définition d'une propriété à valeurs multiples, transmettez un tableau à deux dimensions (VT_ARRAY) avec un élément pour chaque valeur pour laquelle la propriété doit être définie.
- Une propriété binaire (type MAPI _BINARY) est stockée sous la forme d’un tableau d’octets plutôt que sous la forme d’une chaîne. L’obtention d’une propriété binaire renvoie une valeur de type ARRAY. Les méthodes GetProperty, SetProperty, GetProperties et SetProperties n’effectuent aucune conversion entre le tableau binaire et la chaîne. Utilisez les méthodes d’assistance PropertyAccessor.BinaryToString et PropertyAccessor.StringToBinary pour effectuer explicitement toute conversion.
- Certains types de propriétés MAPI, tels que _OBJECT, ne sont pas pris en charge par PropertyAccessor. Si vous tentez d'extraire ou de définir ces propriétés, une erreur « opération de propriété non prise en charge » est générée.
- Lors de l’obtention ou de la définition d’une propriété à l’aide d’une référence dans l’espace de noms proptag MAPI, assurez-vous que le type spécifié dans la propriété correspond au type sous-jacent de la propriété. Sauf dans le cas d’une propriété _STRING8 où vous pouvez spécifier un type 001E ou 001F dans le proptag pour obtenir ou définir la propriété en tant que VT_BSTR, l’obtention ou la définition d’une propriété n’implique aucune contrainte de type et une erreur est retournée en cas d’incompatibilité de type.
- Lors de la définition d'une propriété, il peut s'avérer moins restrictif d'utiliser une référence à une propriété dans l'espace de noms MAPI string que dans l'espace de noms MAPI proptag. Si vous spécifiez la propriété dans l'espace de noms MAPI string, la valeur n'a pas besoin de correspondre strictement au type de propriété sous-jacent. Par exemple, vous pouvez passer une valeur de chaîne comme _BSTR pour définir une propriété date-heure telle que PT_SYSTIME, et le type de la propriété devient le type de la valeur, qui est STR.
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.