Implémentation d’un objet d’état
S’applique à : Outlook 2013 | Outlook 2016
Tous les fournisseurs de services doivent implémenter un objet status et fournir des propriétés de celui-ci à la table status de session. Vous pouvez inclure une ou plusieurs lignes dans la table status, en fonction du nombre de ressources que vous contrôlez. Un fournisseur de transport, par exemple, doit créer une ligne dans la table status pour chaque file d’attente de messages qu’il gère. Lorsque des modifications se produisent, la ligne de table status appropriée doit être mise à jour. Les objets d’état sont implémentés pour fournir l’accès aux informations incluses dans la table status et aux informations supplémentaires non incluses dans la table.
Pour implémenter un objet status
Implémentez la méthode OpenStatusEntry de votre objet d’ouverture de session. Lorsque les clients souhaitent ouvrir votre objet status, ils appellent IMAPISession ::OpenEntry. MAPI répond à la demande ouverte en appelant la méthode OpenStatusEntry de votre fournisseur, ce qui amène votre fournisseur à ouvrir son objet status et à renvoyer au client un pointeur vers son implémentation IMAPIStatus. Dans votre implémentation OpenStatusEntry , effectuez les étapes suivantes :
Effectuez les tâches suivantes si votre objet d’ouverture de session n’a pas encore créé d’objet status :
Appelez la méthode IMAPISupport ::OpenProfileSection de l’objet de support pour accéder à la section de profil de votre fournisseur.
Créez un objet status.
Stockez une référence à la section de profil dans l’objet status de votre fournisseur et appelez la méthode IUnknown ::AddRef de la section de profil pour incrémenter son nombre de références.
Stockez une référence à l’objet d’ouverture de session dans l’objet status de votre fournisseur et appelez la méthode IUnknown ::AddRef de l’objet d’ouverture de session pour incrémenter son nombre de références.
Stockez une référence à l’objet status dans l’objet d’ouverture de session de votre fournisseur.
Appelez la méthode IUnknown ::AddRef de l’objet status pour incrémenter son nombre de références dans l’objet d’ouverture de session.
Définissez la propriété PR_OBJECT_TYPE (PidTagObjectType) de l’objet status sur MAPI_STATUS.
Définissez le paramètre de sortie lppMAPIStatus pour qu’il pointe vers l’objet status et retourne.
Vérifiez le paramètre d’entrée ulFlags . S’il est défini sur MAPI_MODIFY et que votre fournisseur prend en charge l’accès en lecture/écriture à son objet status, retournez un objet accessible en écriture. Toutefois, si votre fournisseur ne prend pas en charge l’accès en lecture/écriture à son objet status, n’échouez pas. Retourne un objet status en lecture seule. Les clients qui s’attendent à recevoir des objets status en lecture/écriture doivent vérifier que l’autorisation de lecture/écriture a été accordée avant de tenter d’apporter des modifications.
Définissez toutes les propriétés d’objet status et de table status requises. Les propriétés que vous incluez dans votre ligne de table status doivent être disponibles via votre objet status, à l’exception des propriétés calculées par MAPI. Les propriétés requises sont les suivantes :
PR_DISPLAY_NAME (PidTagDisplayName)
PR_PROVIDER_DLL_NAME (PidTagProviderDllName)
PR_PROVIDER_DISPLAY (PidTagProviderDisplay)
PR_RESOURCE_TYPE (PidTagResourceType)
PR_RESOURCE_METHODS (PidTagResourceMethods)
PR_RESOURCE_FLAGS (PidTagResourceFlags)
PR_STATUS_CODE (PidTagStatusCode)
Implémentez les méthodes IMAPIStatus : IMAPIProp appropriées pour votre fournisseur. Selon votre fournisseur, vous n’avez pas besoin d’implémenter les quatre méthodes dans IMAPIStatus. Chaque fournisseur doit implémenter une version en lecture seule des méthodes de l’interface IMAPIProp : IUnknown et de la méthode IMAPIStatus ::ValidateState .
Les fournisseurs de transport doivent également implémenter IMAPIStatus ::FlushQueues, et tous les fournisseurs doivent prendre en charge IMAPIStatus ::SettingsDialog. Toutefois, la prise en charge de IMAPIStatus ::ChangePassword est facultative. Seuls les fournisseurs de services qui nécessitent des mots de passe et souhaitent autoriser les utilisateurs à les modifier par programmation doivent implémenter cette méthode. Pour chaque méthode prise en charge, définissez le bit correspondant dans la propriété PR_RESOURCE_METHODS . Par exemple, si vous prenez uniquement en charge ValidateState et SettingsDialog , définissez PR_RESOURCE_METHODS sur ce qui suit :
STATUS_VALIDATE_STATE | STATUS_SETTINGS_DIALOG
Les clients doivent case activée la valeur de PR_RESOURCE_METHODS avant de tenter d’appeler votre objet status. Gérez les appels à l’une de vos méthodes non prises en charge en retournant MAPI_E_NO_SUPPORT.
Appelez IMAPISupport ::ModifyStatusRow lors de l’ouverture de session pour ajouter votre ou vos lignes à la table status. Transmettez un tableau de valeurs de propriété qui contient les informations de colonne pour la ligne et 0 pour le paramètre ulFlags . Si, plus tard dans la session, la status de votre fournisseur change et qu’il devient nécessaire de mettre à jour les informations de colonne, appelez à nouveau ModifyStatusRow avec l’indicateur STATUSROW_UPDATE défini.
Pour plus d’informations sur les objets status, consultez Objets d’état MAPI.