Partager via


IABLogon::OpenTemplateID

S’applique à : Outlook 2013 | Outlook 2016

Ouvre une entrée de destinataire contenant des données résidant dans un fournisseur de carnet d’adresses hôte.

HRESULT OpenTemplateID(
  ULONG cbTemplateID,
  LPENTRYID lpTemplateID,
  ULONG ulTemplateFlags,
  LPMAPIPROP lpMAPIPropData,
  LPCIID lpInterface,
  LPMAPIPROP FAR * lppMAPIPropNew,
  LPMAPIPROP lpMAPIPropSibling
);

Paramètres

cbTemplateID

[in] Nombre d’octets dans l’identificateur de modèle vers lequel pointe le paramètre lpTemplateID .

lpTemplateID

[in] Pointeur vers l’identificateur de modèle, ou PR_TEMPLATEID propriété (PidTagTemplateid), de l’entrée de destinataire à ouvrir.

ulTemplateFlags

[in] Masque de bits d’indicateurs utilisés pour indiquer comment ouvrir l’entrée représentée par l’identificateur du modèle. L’indicateur suivant peut être défini :

FILL_ENTRY

Le fournisseur d’hôte crée une entrée dans son conteneur en fonction de l’entrée représentée par l’identificateur de modèle. La méthode IABLogon ::OpenTemplateID doit soit effectuer une initialisation spécifique de l’entrée du fournisseur d’hôte à l’aide de l’implémentation IMAPIProp : IUnknown dans le paramètre lpMAPIPropData , soit retourner une implémentation d’interface IMAPIProp personnalisée dans le paramètre lppMAPIPropNew .

lpMAPIPropData

[in] Pointeur vers l’objet de propriété du fournisseur d’hôte et l’implémentation d’une interface dérivée de IMAPIProp.

lpInterface

[in] Pointeur vers l’identificateur d’interface (IID) qui représente le type de pointeur d’interface à retourner dans le paramètre lppMAPIPropNew . La transmission de la valeur Null renvoie l’interface utilisateur de messagerie standard, IMailUser : IMAPIProp.

lppMAPIPropNew

[out] Pointeur vers l’objet de propriété lié et implémentation d’une interface dérivée de IMAPIProp.

lpMAPIPropSibling

[out] Réservés au; doit être null.

Valeur renvoyée

S_OK

Le code approprié a été lié avec succès aux données associées dans le fournisseur d’hôte.

MAPI_E_NO_SUPPORT

L’objet ne prend pas en charge les ID de modèle.

MAPI_E_UNKNOWN_ENTRYID

L’identificateur de modèle passé dans le paramètre lpTemplateID n’est pas reconnu par le fournisseur de carnet d’adresses.

Remarques

La méthode IABLogon ::OpenTemplateID est implémentée uniquement par les fournisseurs de carnets d’adresses qui doivent conserver le contrôle sur les copies de leurs entrées situées dans les conteneurs des fournisseurs hôtes. Les fournisseurs qui implémentent OpenTemplateID sont appelés fournisseurs de carnets d’adresses étrangers. Les fournisseurs d’hôtes appellent IMAPISupport ::OpenTemplateID pour créer une entrée copiée ou ouvrir l’entrée copiée, et MAPI transmet l’appel à IABLogon ::OpenTemplateID. IABLogon ::OpenTemplateID ouvre l’entrée et lie le code qui la contrôle aux données du fournisseur d’hôte.

Au lieu d’utiliser un identificateur d’entrée, IABLogon ::OpenTemplateID utilise une autre propriété, l’identificateur de modèle de l’entrée , PR_TEMPLATEID. Les identificateurs de modèle doivent être pris en charge pour les entrées dont le code doit être lié à des données dans un fournisseur hôte.

Voici quelques exemples de cas où un fournisseur de carnets d’adresses doit implémenter IABLogon ::OpenTemplateID :

  • Pour mettre à jour régulièrement les données d’une entrée copiée afin qu’elle reste synchronisée avec l’entrée d’origine.

  • Pour implémenter des fonctionnalités que le fournisseur d’hôte ne peut pas implémenter, telles que le remplissage dynamique d’une liste qui apparaît dans la table de détails de l’entrée à partir de données sur un serveur.

  • Pour contrôler l’interaction entre les propriétés dans l’entrée du fournisseur d’hôte et l’entrée d’origine, comme le calcul de la PR_EMAIL_ADDRESS (PidTagEmailAddress) à partir des valeurs des contrôles de modification dans l’affichage des détails qui contiennent différents composants de l’adresse.

Remarques pour les responsables de l’implémentation

Lorsqu’un fournisseur hôte copie ou crée une entrée à partir de votre fournisseur et que vous fournissez une implémentation d’objet de propriété via IABLogon ::OpenTemplateID, vous gérez la plupart des appels pour conserver l’entrée. Toutefois, étant donné qu’il revient au fournisseur d’hôte de vous transférer ces appels, le fournisseur d’hôte peut intercepter n’importe quel appel et effectuer un traitement personnalisé avant de transférer l’appel.

Vous devez utiliser les instructions suivantes dans vos implémentations d’objets de propriété :

  • Lorsque IMAPIProp ::GetProps est appelé, déterminez si la requête concerne une propriété calculée et, si elle l’est, gérez-la. Transférez toutes les demandes de propriétés non calculées au fournisseur d’hôte.

  • Lorsque IMAPIProp ::OpenProperty est appelé pour ouvrir une table à l’exception de la table d’affichage des détails, gérez la requête. La plupart des tables ne peuvent pas être copiées avec précision vers le fournisseur d’hôte. Vous devez générer l’implémentation IMAPITable pour ces tables demandées. La table de détails PR_DETAILS_TABLE propriété (PidTagDetailsTable) doit être copiée dans le fournisseur d’hôte. Cela permet à ce fournisseur de générer la table localement. Vous souhaiterez peut-être encapsuler l’implémentation de la table d’affichage pour générer des notifications de table d’affichage.

  • Lorsque IMAPIProp ::SetProps est appelé, le fournisseur d’hôte peut valider les données avant de vous permettre de définir les propriétés. Vous pouvez vérifier que toutes les propriétés nécessaires ont été définies ou calculées. Si une erreur est détectée, retournez la valeur d’erreur appropriée et, si possible, toute autre explication via IMAPIProp ::GetLastError.

  • Lorsque IMAPIProp ::SaveChanges est appelé, le fournisseur d’hôte peut souhaiter effectuer le traitement avant d’enregistrer l’entrée. Vous devez enregistrer toutes les données affectées par les propriétés modifiées, telles qu’une nouvelle adresse, dans l’entrée du fournisseur d’hôte.

En général, faites en sorte que votre implémentation de l’entrée que vous transmettez au fournisseur d’hôte intercepte toutes les méthodes pour effectuer une manipulation spécifique au contexte des propriétés pertinentes. Si l’indicateur FILL_ENTRY est passé dans le paramètre ulTemplateFlags , définissez toutes les propriétés de l’entrée.

Si vous retournez un nouvel objet de propriété dans le paramètre lppMAPIPropNew , appelez la méthode IUnknown ::AddRef de l’objet de propriété du fournisseur d’hôte pour conserver une référence. Tous les appels via l’objet lié que l’implémentation IMAPIProp retournée dans lppMAPIPropNew doivent être routés vers leur méthode correspondante dans l’objet de propriété hôte une fois qu’ils sont traités par l’objet lié.

Les identificateurs de propriété de toutes les propriétés nommées transmises via votre objet de propriété lié se trouvent dans l’espace de noms d’identificateur de votre fournisseur. Votre implémentation de la méthode IMAPIProp ::GetNamesFromIDs doit déterminer les noms des propriétés afin qu’elle puisse effectuer des tâches spécifiques au modèle. De même, les propriétés que votre fournisseur transmet au fournisseur hôte doivent également se trouver dans votre espace de noms. Par exemple, si vous définissez une propriété nommée dans OpenTemplateID, vous devez utiliser l’un de vos identificateurs pour le nom, en le créant, si nécessaire, en appelant la méthode IMAPIProp ::GetIDsFromNames .

Si vous ne reconnaissez pas l’identificateur d’entrée passé dans lpTemplateID, retournez MAPI_E_UNKNOWN_ENTRYID.

Pour plus d’informations sur l’utilisation des identificateurs de modèle de carnet d’adresses, consultez Agir en tant que fournisseur de carnet d’adresses étranger.

Voir aussi

IMAPISupport::OpenTemplateID

IPropData : IMAPIProp

Propriété canonique PidTagTemplateid

IABLogon : IUnknown