Freigeben über


IMAPIAdviseSink::OnNotify

Gilt für: Outlook 2013 | Outlook 2016

Reagiert auf eine Benachrichtigung, indem eine oder mehrere Aufgaben ausgeführt werden. Welche Aufgaben ausgeführt werden, hängt vom Typ des Ereignisses und vom Objekt ab, das die Benachrichtigung generiert.

ULONG OnNotify(
  ULONG cNotif,
  LPNOTIFICATION lpNotifications
);

Parameter

cNotif

[in] Die Anzahl der NOTIFICATION-Strukturen , auf die der lpNotifications-Parameter verweist.

lpNotifications

[in] Ein Zeiger auf eine oder mehrere NOTIFICATION-Strukturen , die Informationen zu den aufgetretenen Ereignissen bereitstellen.

Rückgabewert

S_OK

Die Benachrichtigung wurde erfolgreich verarbeitet.

Hinweise

Der Benachrichtigungsprozess beginnt, wenn ein Client oder eine MAPI die Advise-Methode eines Dienstanbieters aufruft, um sich zu registrieren, um eine Benachrichtigung eines bestimmten Typs für ein bestimmtes Objekt zu erhalten. Einer der Parameter für die Advise-Methode ist ein Zeiger auf ein Beratungssenkenobjekt, das die IMAPIAdviseSink-Schnittstelle implementiert. Wenn ein Ereignis für das Zielobjekt auftritt, das der registrierten Benachrichtigung entspricht, ruft der Dienstanbieter entweder direkt oder indirekt über MAPI die OnNotify-Methode der Empfehlungsenke auf.

Der Aufruf von OnNotify kann entweder während des MAPI-Aufrufs, der das Ereignis verursacht, oder zu einem späteren Zeitpunkt erfolgen. Auf Systemen, die mehrere Ausführungsthreads unterstützen, kann OnNotify entweder für denselben Thread aufgerufen werden, der für die Registrierung verwendet wurde, oder auf einem anderen Thread. Clients können sicherstellen, dass der OnNotify-Aufruf im selben Thread erfolgt, der zum Aufrufen von Advise verwendet wird, indem sie die Empfehlungssenke erstellen, die sie mit der Funktion HrThisThreadAdviseSink an Advise übergeben.

Der lpNotifications-Parameter verweist auf eine oder mehrere NOTIFICATION-Strukturen , die beschreiben, was sich während des Ereignisses geändert hat. Es gibt einen anderen Typ von NOTIFICATION-Struktur für jeden Ereignistyp.

In der folgenden Tabelle sind die Werte aufgeführt, die verwendet werden, um die möglichen Ereignistypen und die den einzelnen Werten zugeordneten Strukturen darzustellen:

Benachrichtigungsereignistyp Entsprechende Struktur
fnevCriticalError
ERROR_NOTIFICATION
fnevNewMail
NEWMAIL_NOTIFICATION
fnevObjectCreated
OBJECT_NOTIFICATION
fnevObjectDeleted
OBJECT_NOTIFICATION
fnevObjectModified
OBJECT_NOTIFICATION
fnevObjectCopied
OBJECT_NOTIFICATION
fnevSearchComplete
OBJECT_NOTIFICATION
fnevTableModified
TABLE_NOTIFICATION
fnevStatusObjectModified
STATUS_OBJECT_NOTIFICATION
fnevExtended
EXTENDED_NOTIFICATION

Weitere Informationen zum Einrichten und Beenden von Benachrichtigungen finden Sie in den Referenzeinträgen für die Methoden Advise und Unadvise für eine der folgenden Schnittstellen: IABLogon, IAddrBook, IMAPIForm, IMAPISession, IMAPITable, IMsgStore und IMSLogon.

Allgemeine Informationen zum Benachrichtigungsprozess finden Sie unter Ereignisbenachrichtigung in MAPI.

Hinweise für Implementierer

Ihre OnNotify-Implementierung besteht in der Regel aus einem oder mehreren Codeblöcken für jeden Typ von Benachrichtigung, den Sie erwarten. Führen Sie innerhalb dieser Codeblöcke alle Aufgaben aus, die Sie als Reaktion auf die Benachrichtigung für notwendig erachten. Angenommen, Sie registrieren sich für den Empfang von fnevObjectModified-Benachrichtigungen für einen Ordner, der in einem Dialogfeld angezeigt wird. In dem Codeblock, den Sie in Ihre OnNotify-Methode zum Verarbeiten von fnevObjectModified-Benachrichtigungen einschließen, können Sie eine Windows-Nachricht an das Dialogfeld senden, um eine aktualisierte Anzeige anzufordern.

Ändern oder freigeben Sie die an OnNotify übergebene NOTIFICATION-Struktur nicht. Die Daten in der -Struktur sind nur gültig, bis OnNotify zurückgibt.

Hinweise für Aufrufer

Wenn Änderungen an mehreren Objekten auftreten, können Sie eine registrierte Empfehlungssenke je nach Speichereinschränkungen in einem einzelnen Aufruf von OnNotify oder in mehreren Aufrufen benachrichtigen. Dies gilt unabhängig davon, ob die Änderungen das Ergebnis eines oder mehrerer Methodenaufrufe sind. Beispielsweise kann sich ein Aufruf von IMAPIFolder::CopyMessages auf mehrere Nachrichten und Ordner auswirken. Als Nachrichtenspeicheranbieter können Sie einen Aufruf von OnNotify mit einem fnevObjectModified-Ereignistyp für den Zielordner oder viele Aufrufe für jede betroffenen Nachrichten ausführen. Wenn ein Client wiederholt Aufrufe an IMAPIFolder::CreateMessage durchführt, können diese Aufrufe zu einem fnevObjectModified-Ereignis für den Ordner kombiniert oder in einzelne fnevObjectCreated-Ereignisse für jede neue Nachricht getrennt werden.

Weitere Informationen dazu, wie und wann Benachrichtigungen generiert werden, finden Sie unter Ereignisbenachrichtigung in MAPI und Unterstützende Ereignisbenachrichtigung.

MFCMAPI-Referenz

Einen MFCMAP-Beispielcode finden Sie in der folgenden Tabelle.

Datei Funktion Kommentar
AdviseSink.h und AdviseSink.cpp
CAdviseSink::OnNotifyDesc
Die CAdviseSink-Klasse wird implementiert, um alle Benachrichtigungen in MFCMAPI zu verarbeiten.

Siehe auch

HrAllocAdviseSink

HrThisThreadAdviseSink

IMAPISupport::Notify

Benachrichtigung

IMAPIAdviseSink : IUnknown

MFCMAPI (engl.) als ein Codebeispiel