Freigeben über


Fungieren als fremder Adressbuchanbieter

Gilt für: Outlook 2013 | Outlook 2016

Ein fremder Anbieter ist ein Adressbuchanbieter, der:

  • Weist Vorlagenbezeichner für die Empfänger zu.
  • Unterstützt die IABLogon::OpenTemplateID-Methode .
  • Stellt Code für die Verwaltung von Empfängern bereit, die in den Containern anderer Adressbuchanbieter vorhanden sind, die als Hostanbieter bezeichnet werden. Dieser Code umfasst ein Eigenschaftsobjekt, in der Regel eine IMAPIProp-Schnittstellenimplementierung , das ein Eigenschaftsobjekt vom Hostanbieter umschließt.

Die Tätigkeit als fremder Anbieter ist eine optionale Rolle. nicht alle Anbieter müssen Vorlagenbezeichner und den zugehörigen Code unterstützen. Implementieren Sie Ihren Anbieter als ausländischen Anbieter, wenn Sie die Kontrolle über Empfänger behalten möchten, die Hostanbieter mithilfe der von Ihrem Anbieter bereitgestellten Vorlagen erstellen.

Das Format, das Ihr Anbieter für seine Eintragsbezeichner verwendet, kann auch für seine Vorlagenbezeichner verwendet werden. Vorlagenbezeichner müssen die registrierte MAPIUID Ihres Anbieters enthalten, damit MAPI Empfänger erfolgreich an die entsprechenden Anbieter binden kann.

MAPI ruft die IABLogon::OpenTemplateID-Methode Ihres Anbieters auf, wenn ein Hostanbieter IMAPISupport::OpenTemplateID aufruft. Der Hostanbieter übergibt den Vorlagenbezeichner des Empfängers im lpTemplateID-Parameter in seinem Aufruf von IMAPISupport::OpenTemplateID. MAPI ermittelt, dass der Vorlagenbezeichner zu Ihrem Anbieter gehört, indem die MAPIUID im Vorlagenbezeichner mit der MAPIUID abgleicht, die Ihr Anbieter zum Zeitpunkt der Anmeldung registriert hat. MAPI leitet dann den Aufruf des Hostanbieters über die IABLogon::OpenTemplateID-Methode an Ihren Anbieter weiter.

Der Hostanbieter übergibt außerdem einen Zeiger auf seine Eigenschaftenobjektimplementierung für den Empfänger im lpMAPIPropData-Parameter , einen Schnittstellenbezeichner im lpInterface-Parameter , der dem Typ der Schnittstellenimplementierung entspricht, die in lpMAPIPropData übergeben wird, und ein optionales Flag FILL_ENTRY. Es wird erwartet, dass Ihr Anbieter im Parameter lppMAPIPropNew einen Zeiger auf eine Eigenschaftenobjektimplementierung des in lpInterface angegebenen Typs zurückgibt. Der zurückgegebene Zeiger kann entweder auf das von Ihrem Anbieter implementierte umschlossene Eigenschaftsobjekt oder auf das vom Hostanbieter in lpMAPIPropData bereitgestellte Objekt sein. Ihr Anbieter sollte in folgenden Fällen einen zeiger mit umschlossenen Eigenschaftenobjekten zurückgeben:

  • Die Anzeigetabelle des Empfängers enthält Listenfeldsteuerelemente.
  • Die E-Mail-Adresse für den Empfänger muss aus Daten in mehreren Anzeigetabellensteuerelementen zusammengesetzt werden.
  • Ihr Anbieter hat Probleme beim Anzeigen von Tabellenbenachrichtigungen.

Das FILL_ENTRY-Flag gibt Ihrem Anbieter an, dass der Hostanbieter alle Eigenschaften des Empfängers aktualisieren muss. Ihr Anbieter ist verpflichtet, diese Anforderung zu erfüllen.

Wenn ein Hostanbieter die OpenTemplateID-Methode Ihres Anbieters aufruft, kann Ihr Anbieter:

  • Aktualisieren Sie die Daten für einen kopierten Eintrag regelmäßig.
  • Lassen Sie einen kopierten Eintrag mit seinem Original synchronisiert, z. B. wenn ein Adressbucheintrag in das persönliche Adressbuch kopiert wird.
  • Implementieren Sie Funktionen, die vom Hostanbieter nicht implementiert werden können, z. B. das dynamische Auffüllen von Listenfeldern in der Detailtabelle des kopierten Eintrags aus Daten auf einem Server.
  • Steuern sie die Interaktion zwischen Eigenschaften in einem kopierten Eintrag oder einer instanziierten Vorlage. Das Berechnen von PR_EMAIL_ADDRESS z. B. aus anderen Eigenschaften, die in der Detailtabelle angezeigt werden.

Die ersten beiden Elemente sind Beispiele für Aufgaben, bei denen Ihr Anbieter kein umschlossenes Eigenschaftsobjekt bereitstellen muss – eine Implementierung von IMAPIProp , die auf der Implementierung des Hostanbieters basiert. Ihr Anbieter kann einfach die Eigenschaften nach Bedarf aktualisieren und zurückgeben, indem er den Parameter lppMAPIPropNew so festlegt, dass er auf den vom Hostanbieter im lpMAPIPropData-Parameter übergebenen Zeiger verweist.

Die zweiten beiden Aufgaben erfordern, dass Ihr Anbieter an den Hostanbieter ein Eigenschaftsobjekt zurückgibt, das das Objekt des Hostanbieters mit zusätzlichen Funktionen umschließt, z. B. die Möglichkeit, ein Eigenschaftenblatt für den Eintrag anzuzeigen. Dieses Eigenschaftsobjekt ist entweder ein Messagingbenutzer oder eine Verteilerliste, abhängig vom Typ des Objekts, das vom Hostanbieter im lpMAPIPropData-Parameter übergeben und durch den Schnittstellenbezeichner im lpInterface-Parameter angegeben wird. Wenn der lpMAPIPropData-Parameter auf einen Messagingbenutzer verweist, muss das umschlossene Eigenschaftsobjekt Ihres Anbieters eine IMailUser-Implementierung sein. Wenn lpMAPIPropData auf eine Verteilerliste verweist, muss es sich um eine IDistList-Implementierung handelt.

Das umschlossene Eigenschaftsobjekt Ihres Anbieters fängt IMAPIProp-Methodenaufrufe ab, um kontextspezifische Manipulationen des Empfängers des Hostanbieters , des Objekts, das er umgibt, durchzuführen. MAPI hat nur eine Anforderung für umschlossene Eigenschaftsobjekte: Alle Aufrufe von IMAPIProp::OpenProperty , die die PR_DETAILS_TABLE -Eigenschaft (PidTagDetailsTable) anfordern, sollten an den Hostanbieter übergeben werden. Die Implementierung Ihres Anbieters kann die zurückgegebene Tabelle verwenden, um Anzeigetabellenbenachrichtigungen abzufangen oder bei Bedarf eine eigene hinzuzufügen.

Die folgende Liste enthält Aufgaben, die in der Regel im umschlossenen Eigenschaftsobjekt implementiert werden, das von ausländischen Anbietern implementiert wird:

  • Vorverarbeitungs- und Nachverarbeitungseigenschaftswerte für den Hostempfänger in IMAPIProp::GetProps.
  • Behandeln von Details zeigt Tabellensteuerelemente wie Schaltflächen und Listenfelder in IMAPIProp::OpenProperty an.
  • Überprüfen oder Bearbeiten von Eigenschaftswerten für den Hostempfänger in IMAPIProp::SetProps.
  • Berechnen erforderlicher Eigenschaften wie PR_EMAIL_ADDRESS und Überprüfen, ob alle erforderlichen Eigenschaften festgelegt wurden, bevor der Hostempfänger in IMAPIProp::SaveChanges gespeichert wird.

So implementieren Sie IABLogon::OpenTemplateID

  1. Überprüfen Sie, ob der mit dem lpTemplateID-Parameter übergebene Vorlagenbezeichner gültig ist und in einem Format vorliegt, das ihr Anbieter erkennt. Wenn dies nicht der Fall ist, schlagen Sie fehl, und geben Sie MAPI_E_INVALID_ENTRYID zurück.

  2. Erstellen Sie ein Objekt des Typs, der durch den Vorlagenbezeichner angegeben wird, entweder einen Messagingbenutzer, eine Verteilerliste oder einen einmaligen Empfänger.

  3. Rufen Sie die IUnknown::AddRef-Methode im Eigenschaftsobjekt des Hostanbieters auf, auf das durch den lpMAPIPropData-Parameter verwiesen wird.

  4. Wenn der ulTemplateFlags-Parameter auf FILL_ENTRY festgelegt ist:

    1. Wenn das neue Objekt ein Messagingbenutzer oder eine Verteilerliste ist:

      1. Rufen Sie alle Eigenschaften des neuen Objekts ab, möglicherweise durch Aufrufen der IMAPIProp::GetProps-Methode .

      2. Rufen Sie die IMAPIProp::SetProps-Methode des Hostanbieters auf, um alle abgerufenen Eigenschaften in das Eigenschaftsobjekt des Hostanbieters zu kopieren.

    2. Wenn das neue Objekt ein einmaliger Empfänger ist, rufen Sie die IMAPIProp::SetProps-Methode des Hostanbieters auf, um die folgenden Eigenschaften festzulegen:

      • PR_ADDRTYPE (PidTagAddressType) auf den Adresstyp, der von Ihrem Anbieter behandelt wird.

      • PR_TEMPLATEID (PidTagTemplateid) zum Vorlagenbezeichner aus den Parametern lpTemplateID und cbTemplateID .

      • PR_DISPLAY_TYPE (PidTagDisplayType) auf DT_MAILUSER oder DT_DISTLIST.

  5. Legen Sie den Inhalt des lppMAPIPropNew-Parameters so fest, dass er entweder auf das neue Objekt Ihres Anbieters oder das mit dem lpMAPIPropData-Parameter übergebene Eigenschaftenobjekt verweist, je nachdem, ob ihr Anbieter ein umschlossenes Objekt als erforderlich angibt.

  6. Wenn ein kritischer Fehler auftritt, z. B. ein Netzwerkfehler oder eine Nicht-Arbeitsspeicher-Bedingung, geben Sie den entsprechenden Fehlerwert zurück. Dieser Wert sollte mit der entsprechenden MAPIERROR-Struktur , einer Aufgabe, die vom Hostanbieter ausgeführt wird, an den Client weitergegeben werden.