Freigeben über


IMAPIStatus::ValidateState

Gilt für: Outlook 2013 | Outlook 2016

Bestätigt die externen Statusinformationen, die für die MAPI-Ressource oder den Dienstanbieter verfügbar sind. Diese Methode wird in allen Statusobjekten unterstützt.

HRESULT ValidateState(
  ULONG_PTR ulUIParam,
  ULONG ulFlags
);

Parameter

ulUIParam

[in] Ein Handle auf das übergeordnete Fenster aller Dialogfelder oder Fenster, die diese Methode anzeigt.

ulFlags

[in] Eine Bitmaske von Kennzeichnungen, die die Validierung steuert. Die folgenden Kennzeichen können festgelegt werden:

ABORT_XP_HEADER_OPERATION

Die benutzende Person hat den Vorgang abgebrochen, in der Regel durch Klicken auf die Abbrechen-Schaltfläche im entsprechenden Dialogfeld. Das Statusobjekt verfügt über zwei Optionen:

  • Die Arbeit an dem Vorgang wird fortgesetzt.

  • Der Vorgang wird beendet, und MAPI_E_USER_CANCELED wird zurückgegeben.

CONFIG_CHANGED

Mindestens eine der Konfigurationseigenschaften des Statusobjekts wurde geändert. Clients können diese Kennzeichnung festlegen, damit der MAPI-Spooler kritische Transportanbieterfehler dynamisch korrigieren kann.

FORCE_XP_CONNECT

Das Statusobjekt sollte eine Verbindung herstellen. Wenn diese Kennzeichnung mit der Kennzeichnung REFRESH_XP_HEADER_CACHE oder PROCESS_XP_HEADER_CACHE verwendet wird, erfolgt die Verbindung ohne Zwischenspeichern.

FORCE_XP_DISCONNECT

Das Statusobjekt sollte einen Trennungsvorgang ausführen. Wenn diese Kennzeichnung mit der Kennzeichnung REFRESH_XP_HEADER_CACHE oder PROCESS_XP_HEADER_CACHE verwendet wird, erfolgt die Trennung ohne Zwischenspeicherung.

PROCESS_XP_HEADER_CACHE

Einträge in der Headercachetabelle sollten verarbeitet werden. Alle Nachrichten, die mit der Kennzeichnung MSGSTATUS_REMOTE_DOWNLOAD gekennzeichnet sind, sollten heruntergeladen werden, und alle Nachrichten, die mit der Kennzeichnung MSGSTATUS_REMOTE_DELETE gekennzeichnet sind, sollten gelöscht werden. Nachrichten, für die sowohl MSGSTATUS_REMOTE_DOWNLOAD als auch MSGSTATUS_REMOTE_DELETE festgelegt sind, sollten verschoben werden.

REFRESH_XP_HEADER_CACHE

Für einen Remotetransportanbieter sollte eine neue Liste von Nachrichtenheadern heruntergeladen werden, und alle Kennzeichnungen, die den Nachrichtenstatus kennzeichnen, sollten gelöscht werden.

SUPPRESS_UI

Verhindert, dass das Statusobjekt im Rahmen des Vorgangs eine Benutzeroberfläche anzeigt.

Rückgabewert

S_OK

Die Überprüfung war erfolgreich.

MAPI_E_BUSY

Ein anderer Vorgang wird ausgeführt. Er abgeschlossen werden können, oder er sollte beendet werden, bevor dieser Vorgang initiiert wird.

MAPI_E_NO_SUPPORT

Das Statusobjekt unterstützt die Validierungsmethode nicht, wie durch das Fehlen des STATUS_VALIDATE_STATE-Kennzeichnungen in der PR_RESOURCE_METHODS (PidTagResourceMethods)-Eigenschaft angegeben.

MAPI_E_USER_CANCEL

Die benutzende Person hat den Überprüfungsvorgang abgebrochen, in der Regel durch Klicken auf die Abbrechen-Schaltfläche im entsprechenden Dialogfeld. Dieser Wert wird nur von Remotetransportanbietern zurückgegeben.

Hinweise

Die IMAPIStatus::ValidateState-Methode überprüft den Status einer Ressource, die einem Statusobjekt zugeordnet ist. ValidateState ist die einzige Methode in der IMAPIStatus-Schnittstelle, die für alle Statusobjekte erforderlich ist. Das genaue Verhalten dieser Methode hängt von der Implementierung ab. In der folgenden Tabelle wird die Implementierung der einzelnen Typen von Statusobjekten beschrieben.

Statusobjekt ValidateState-Implementierung
MAPI-Subsystem
Überprüft den Status aller Ressourcen, die die derzeit aktiven Dienstanbieter und das Subsystem selbst besitzen.
MAPI-Spooler
Führt eine Anmeldung aller Transportanbieter aus, unabhängig davon, ob sie bereits angemeldet sind.
MAPI-Adressbuch
Überprüft die Einträge im Profilabschnitt.
Dienstanbieter
Die Implementierung hängt vom Typ des Anbieters und den im ulFlags-Parameter festgelegten Kennzeichnungen ab.

Hinweise für Implementierer

Remoteclientanwendungen rufen die ValidateState-Methode auf, um die Remoteverarbeitung für verschiedene Aktionen zu starten. Diese Methode dient in erster Linie dazu, Statusbits für die Kommunikation mit dem MAPI-Spooler festzulegen, anstatt tatsächlich Aufgaben auszuführen. In der Regel legt der Transportanbieter Kennzeichnungen in seiner Statuszeile fest, die dem MAPI-Spooler angeben, welche Aktionen initiiert werden müssen, um die Anforderung des Clients abzuschließen.

In diesem Modell der Client-Transportspoolerinteraktion sind die vom Client angeforderten Aktionen asynchron, da ValidateState zurückgegeben wird, bevor die angeforderten Aktionen abgeschlossen sind. Aktionen, die nicht notwendigerweise das zugrunde liegende Messagingsystem oder eine transportspezifische Schnittstelle beinhalten, können jedoch synchron sein. Die Clientanwendung übergibt eine Bitmaske der folgenden Kennzeichnungen, um anzugeben, welche Aktionen der Remotetransportanbieter ausführen soll.

ABORT_XP_HEADER_OPERATION

Wenn möglich, sollte der Remotetransportanbieter alle Vorgänge abbrechen, die das Herunterladen von Headern beinhalten. Hierzu muss der Transportanbieter die folgenden Eigenschaftswerte in der Statuszeile des Anmeldeobjekts festlegen:

  • Löschen Sie die STATUS_INBOUND_ENABLED-Bits und STATUS_INBOUND_ACTIVE-Bits in der PR_STATUS_CODE (PidTagStatusCode)-Eigenschaft, um den MAPI-Spooler anzuweisen, den eingehenden Leerungsprozess für diesen Transportanbieter anzuhalten.

  • Legen Sie das STATUS_OFFLINE-Bit in der PR_STATUS_CODE-Eigenschaft fest.

  • Legen Sie die PR_REMOTE_VALIDATE_OK (PidTagRemoteValidateOk)-Eigenschaft auf WAHR fest.

  • Legen Sie die PR_STATUS_STRING (PidTagStatusString)-Eigenschaft auf eine Zeichenfolge fest, die der benutzenden Person den Status des Transportanbieters angibt.

  • Geben Sie S_OK zurück. Wenn der ausgeführte Vorgang jedoch nicht abgebrochen werden kann, sollte ValidateState MAPI_E_BUSY zurückgeben.

FORCE_XP_CONNECT

Ein Remotetransportanbieter sollte niemals eine Verbindung mit einer freigegebenen Ressource (z. B. einem Modem oder COM-Anschluss) außerhalb des Kontexts der MAPI-Spooler-Transportinteraktion herstellen, die an der IXPLogon::FlushQueues-Methode beteiligt ist. Wenn ValidateState mit dieser Kennzeichnung aufgerufen wird, sollte Ihr Transportanbieter folgende Schritte ausführen:

  • Legen Sie eine interne Statuskennzeichnung fest, um anzugeben, dass die Remoteverbindung hergestellt werden muss, wenn die IXPLogon::FlushQueues-Methode aufgerufen wird.

  • Legen Sie die richtigen Werte in der Statustabelle fest, damit der MAPI-Spooler den Warteschlangenleerungsprozess initiiert.

  • Wenn das Leeren von Warteschlangen abgeschlossen ist, geben Sie die freigegebene Ressource frei.

  • Löschen Sie das STATUS_OFFLINE-Bit in der PR_STATUS_CODE-Eigenschaft.

  • Geben Sie S_OK zurück.

FORCE_XP_DISCONNECT

Der Remotetransportanbieter sollte seine Verbindung mit den Messagingsystemressourcen freigeben. Anschließend sollte das STATUS_OFFLINE-Bit in der PR_STATUS_CODE-Eigenschaft festgelegt und S_OK zurückgegeben werden.

PROCESS_XP_HEADER_CACHE

Der Remotetransportanbieter sollte Remotenachrichten verarbeiten und alle zurückgestellten Nachrichten hochladen. Hierzu muss der Transportanbieter die folgenden Eigenschaftswerte in der Statuszeile des Anmeldeobjekts festlegen:

  • Legen Sie die PR_STATUS_STRING-Eigenschaft auf eine Zeichenfolge fest, die den Status des Transportanbieters für die benutzende Person angibt.

  • Legen Sie die STATUS_OUTBOUND_ENABLED-Bits und STATUS_OUTBOUND_ACTIVE-Bits in der PR_STATUS_CODE-Eigenschaft fest.

  • Legen Sie die PR_REMOTE_VALIDATE_OK-Eigenschaft in der Statuszeile des Transportanbieters auf FALSCH fest.

  • Wenn ein anderer Vorgang ausgeführt wird (z. B. das Herunterladen von Headern), wenn ValidateState aufgerufen wird, sollte ValidateState MAPI_E_BUSY zurückgeben.

  • Führen Sie den Code für die Verarbeitung der REFRESH_XP_HEADER_CACHE-Kennzeichnung aus, um die Anforderungen des Microsoft Exchange-Clients zu erfüllen.

REFRESH_XP_HEADER_CACHE

Der Remotetransportanbieter sollte alle neuen Nachrichtenheader aus dem Messagingsystem abrufen. Hierzu muss der Transportanbieter folgende Schritte ausführen:

  • Legen Sie die PR_STATUS_STRING-Eigenschaft auf eine Zeichenfolge fest, die den Status des Transportanbieters für die benutzende Person angibt.

  • Legen Sie die STATUS_INBOUND_ENABLED-Bits und STATUS_INBOUND_ACTIVE-Bits in der PR_STATUS_CODE-Eigenschaft fest.

  • Löschen Sie das STATUS_OFFLINE-Bit in der PR_STATUS_CODE-Eigenschaft.

  • Legen Sie das STATUS_ONLINE-Bit in der PR_STATUS_CODE-Eigenschaft fest.

  • Legen Sie die PR_REMOTE_VALIDATE_OK-Eigenschaft in der Statuszeile des Transportanbieters auf FALSCH fest.

SHOW_XP_SESSION_UI

Wenn Ihr Transportanbieter über eine Benutzeroberfläche für die Verarbeitung der Nachrichtenheader verfügt (z. B. ein Dialogfeld, das das Herunterladen von Nachrichten bestätigt), sollte dieses Dialogfeld angezeigt werden. Andernfalls kann ValidateState MAPI_E_NO_SUPPORT zurückgeben.

Wenn andere Kennzeichnungen als diese übergeben werden, sollte ValidateState MAPI_E_UNKNOWN_FLAGS zurückgeben.

Der Aufruf des Clients an den Transportanbieter erfolgt häufig über die IMAPIStatus::ValidateState-Methode. Während der Verarbeitung von ValidateState sollte der Transportanbieter keine Aktionen ausführen, die unzureichende Systemressourcen zuordnen, z. B. ein Modem oder einen COM-Anschluss. Dies liegt daran, dass der MAPI-Spooler manchmal Warteschlangen auf mehreren Transportanbietern leeren muss. Der Client kann jedoch jederzeit die ValidateState-Methode eines beliebigen Transportanbieters aufrufen. Wenn Ihr Transportanbieter versucht, während der Verarbeitung von ValidateState eine untergeordnete Ressource zuzuordnen, kann ein Fehler aufgrund eines Konflikts mit einem anderen Transportanbieter auftreten, den der MAPI-Spooler angewiesen hat, seine Warteschlangen zu leeren. Wenn Sie zulassen, dass alle untergeordneten Ressourcenzuordnungen unter der Leitung des MAPI-Spoolers erfolgen, können Sie solche Konflikte vermeiden. Ihr Transportanbieter sollte die PR_REMOTE_VALIDATE_OK-Eigenschaft unterstützen, damit Clientanwendungen erkennen können, wenn Ihr Transportanbieter ausgelastet ist oder darauf wartet, dass der MAPI-Spooler eine Aktion initiiert.

Hinweise für Aufrufer

Da diese Methode dazu führen kann, dass andere potenziell lange Aufrufe ausgeführt werden, kann ValidateState MAPI_E_BUSY zurückgeben, um Sie darüber zu informieren, dass diese Methode auf den Abschluss eines anderen Vorgangs wartet. Sie sollten warten, bis der ausstehende Vorgang abgeschlossen ist, bevor Sie eine andere Aufgabe ausführen.

Sie haben die größte Kontrolle über Ihre Aufrufe an Transportanbieterstatusobjekte. Sie können ein oder mehrere Kennzeichnungen an ValidateState übergeben, die sich auf die Vorgänge des Transportanbieters auswirken. Beispielsweise gibt die ABORT_XP_HEADER_OPERATION-Kennzeichnung an, dass die benutzende Person die Überprüfung abgebrochen hat. Transportanbieter können sich entscheiden, abzubrechen, MAPI_E_USER_CANCELED zurückzugeben oder den Vorgang fortzusetzen.

Sie können die CONFIG_CHANGED-Kennzeichnung bei einem Aufruf des Statusobjekts eines Dienstanbieters oder des MAPI-Spoolers festlegen, um anzugeben, dass eine Konfigurationsoption geändert wurde. Sie können CONFIG_CHANGED verwenden, um einen Transportanbieter dynamisch neu zu konfigurieren. Wenn Sie CONFIG_CHANGED für einen Aufruf des Statusobjekts eines Dienstanbieters festlegen, antwortet der Anbieter mit einem Aufruf von IMAPISupport::SpoolerNotify, um den MAPI-Spooler über die Änderung zu benachrichtigen. Wenn Sie CONFIG_CHANGED für einen Aufruf des Statusobjekts des MAPI-Spoolers festlegen, ruft der Spooler IXPLogon::AddressTypes für jeden aktiven Transportanbieter auf. AddressTypes informiert den MAPI-Spooler über die unterstützten Adresstypen eines Transports. Einige Dienstanbieter zeigen auch eine Statusanzeige an, wenn die Überprüfung voraussichtlich lange dauert. Das Anzeigen einer Statusanzeige ist hilfreich, aber nicht erforderlich.

Wenn die SUPPRESS_UI-Kennzeichnung festgelegt ist, kann keines der Konfigurationseigenschaftenblätter oder Statusdialogfelder angezeigt werden.

Siehe auch