IMAPIProp::SaveChanges
Gilt für: Outlook 2013 | Outlook 2016
Nimmt permanent alle Änderungen vor, die seit dem letzten Speichervorgang an einem Objekt vorgenommen wurden.
HRESULT SaveChanges(
ULONG ulFlags
);
Parameter
ulFlags
[in] Eine Bitmaske von Flags, die steuert, was mit dem Objekt geschieht, wenn die IMAPIProp::SaveChanges-Methode aufgerufen wird. Die folgenden Flags können festgelegt werden:
NON_EMS_XP_SAVE
Gibt an, dass die Nachricht nicht von einem Microsoft Exchange Server zugestellt wurde. Dieses Flag sollte in Kombination mit der IMAPIFolder::CreateMessage-Methode und dem ITEMPROC_FORCE-Flag verwendet werden, um einem PST-Speicher anzuzeigen, dass die Nachricht für die Regelverarbeitung berechtigt ist, bevor der PST-Dateispeicher (Personal Folders File) einen lauschenden Client benachrichtigt, dass die Nachricht eingegangen ist. Diese Regelverarbeitung gilt nur für neue Nachrichten, die mit IMAPIFolder::CreateMessage auf einem Server erstellt werden, der kein Exchange Server ist. In diesem Fall hätte der Exchange Server bereits Regeln für die Nachricht verarbeitet.
FORCE_SAVE
Änderungen sollten in das Objekt geschrieben werden, wobei alle vorherigen Änderungen überschrieben werden, die am Objekt vorgenommen wurden, und das Objekt sollte geschlossen werden. Lese-/Schreibberechtigung muss festgelegt werden, damit der Vorgang erfolgreich ausgeführt werden kann. Das FORCE_SAVE-Flag wird verwendet, nachdem ein vorheriger Aufruf von SaveChanges MAPI_E_OBJECT_CHANGED zurückgegeben wurde.
KEEP_OPEN_READONLY
Änderungen sollten committet werden, und das Objekt sollte zum Lesen geöffnet bleiben. Es werden keine weiteren Änderungen vorgenommen.
KEEP_OPEN_READWRITE
Änderungen sollten committet werden, und das Objekt sollte für Lese-/Schreibberechtigungen geöffnet bleiben. Dieses Flag wird in der Regel festgelegt, wenn das Objekt zum ersten Mal für Lese-/Schreibberechtigungen geöffnet wurde. Nachfolgende Änderungen am Objekt sind zulässig.
MAPI_DEFERRED_ERRORS
Ermöglicht es SaveChanges , erfolgreich zurückzugeben, möglicherweise bevor die Änderungen vollständig committet wurden.
SPAMFILTER_ONSAVE
Aktiviert die Spamfilterung für eine Nachricht, die gespeichert wird. Spamfilter-Unterstützung ist nur verfügbar, wenn der E-Mail-Adressentyp des Absenders Simple Mail Transfer Protocol (SMTP) ist und die Nachricht auf einem Speicher für eine Persönliche Ordner-Datei (PST) gespeichert wird.
Rückgabewert
S_OK
Das Engagement für Änderungen war erfolgreich.
MAPI_E_NO_ACCESS
SaveChanges kann das Objekt nicht für schreibgeschützte Berechtigungen geöffnet lassen, wenn KEEP_OPEN_READONLY festgelegt ist, oder Lese-/Schreibberechtigung, wenn KEEP_OPEN_READWRITE festgelegt ist. Es werden keine Änderungen committet.
MAPI_E_OBJECT_CHANGED
Das Objekt hat sich seit dem Öffnen geändert.
MAPI_E_OBJECT_DELETED
Das Objekt wurde seit dem Öffnen gelöscht.
Hinweise
Die IMAPIProp::SaveChanges-Methode macht Eigenschaftsänderungen dauerhaft für Objekte, die das Transaktionsmodell der Verarbeitung unterstützen, z. B. Nachrichten, Anlagen, Adressbuchcontainer und Messagingbenutzerobjekte. Objekte, die keine Transaktionen unterstützen, z. B. Ordner, Nachrichtenspeicher und Profilabschnitte, nehmen Änderungen sofort dauerhaft vor. Es ist kein Aufruf von SaveChanges erforderlich.
Da Dienstanbieter erst nach dem Speichern aller Eigenschaften einen Eintragsbezeichner für ihre Objekte generieren müssen, ist die eigenschaft PR_ENTRYID (PidTagEntryId) eines Objekts möglicherweise erst verfügbar, nachdem die SaveChanges-Methode aufgerufen wurde. Einige Anbieter warten, bis das KEEP_OPEN_READONLY-Flag im SaveChanges-Aufruf festgelegt ist. KEEP_OPEN_READONLY gibt an, dass die im aktuellen Aufruf zu speichernden Änderungen die letzten Änderungen sind, die am Objekt vorgenommen werden.
Einige Nachrichtenspeicherimplementierungen zeigen neu erstellte Nachrichten erst in einem Ordner an, wenn ein Client die Nachrichtenänderungen mithilfe von SaveChanges speichert und die Nachrichtenobjekte mithilfe der IUnknown::Release-Methode freigibt. Darüber hinaus können einige Objektimplementierungen erst nach dem Aufruf von SaveChanges eine PR_ENTRYID -Eigenschaft für ein neu erstelltes Objekt generieren, und einige können dies nur tun, nachdem SaveChanges mithilfe von KEEP_OPEN_READONLY in ulFlags festgelegt wurde.
Hinweise für Implementierer
Wenn Sie das KEEP_OPEN_READONLY-Flag erhalten, haben Sie die Möglichkeit, den Zugriff auf das Objekt als Lese-/Schreibzugriff zu belassen. Ein Anbieter kann ein Objekt jedoch nie in einem schreibgeschützten Zustand belassen, wenn das KEEP_OPEN_READWRITE-Flag übergeben wird.
Wenn ein Client mehrere Anlagen in mehreren Nachrichten speichert, ruft er die SaveChanges-Methode für jede Anlage und jede Nachricht auf. Häufig legen Clients MAPI_DEFERRED_ERRORS für jeden dieser Aufrufe fest, mit Ausnahme des letzten Aufrufs. Fehler können entweder beim letzten Aufruf oder bei früheren Aufrufen zurückgegeben werden. Sie können das Flag sogar ignorieren.
Wenn KEEP_OPEN_READWRITE oder KEEP_OPEN_READONLY zusammen mit MAPI_DEFERRED_ERRORS festgelegt ist, können Sie die Anforderung zur Fehlerverzögerung ignorieren. Wenn MAPI_DEFERRED_ERRORS in ulFlags nicht festgelegt ist, kann einer der zuvor zurückgestellten Fehler für den SaveChanges-Aufruf zurückgegeben werden.
Ob ein Remotetransportanbieter eine funktionale Implementierung dieser Methode bereitstellt, ist optional und hängt von anderen Entwurfsentscheidungen in Ihrer Implementierung ab. Wenn Sie diese Methode implementieren, tun Sie dies gemäß der dokumentation hier. Da Ordnerobjekte und status Objekte nicht verarbeitet werden, muss mindestens die SaveChanges-Implementierung eines Remotetransportanbieters S_OK zurückgeben, ohne tatsächlich arbeite.
Hinweise für Aufrufer
Wenn ein Client KEEP_OPEN_READONLY übergibt, die IMAPIProp::SetProps-Methode aufruft und dann saveChanges erneut aufruft , kann die gleiche Implementierung fehlschlagen.
Nachdem Sie MAPI_E_NO_ACCESS von einem Aufruf erhalten haben, in dem Sie KEEP_OPEN_READWRITE festlegen, verfügen Sie weiterhin über Lese-/Schreibberechtigungen für das Objekt. Sie können SaveChanges erneut aufrufen und entweder das flag KEEP_OPEN_READONLY oder no flags mit KEEP_OPEN_SUFFIX übergeben.
Ob ein Anbieter das KEEP_OPEN_READWRITE-Flag unterstützt, hängt von der Implementierung des Anbieters ab.
Legen Sie keine Flags für den ulFlags-Parameter fest, um anzugeben, dass der einzige Aufruf für das Objekt nach SaveChangesIUnknown::Release ist. Ein Fehler von SaveChanges gibt an, dass die ausstehenden Änderungen nicht dauerhaft ausgeführt werden konnten. Verschiedene Anbieter behandeln das Fehlen von Flags im SaveChanges-Aufruf unterschiedlich. Einige Anbieter behandeln diesen Zustand genauso wie KEEP_OPEN_READONLY; andere Anbieter interpretieren dies genauso wie KEEP_OPEN_READWRITE. Andere Anbieter fahren das Objekt herunter, wenn sie keine Flags für den SaveChanges-Aufruf empfangen.
Einige Eigenschaften, in der Regel berechnete Eigenschaften, können erst verarbeitet werden, wenn Sie SaveChanges und in einigen Fällen Release aufrufen.
Wenn Sie Massenänderungen vornehmen, z. B. das Speichern von Anlagen in mehreren Nachrichten, verzögern Sie die Fehlerverarbeitung, indem Sie das MAPI_DEFERRED_ERRORS-Flag in ulFlags festlegen. Wenn Sie mehrere Anlagen in mehreren Nachrichten speichern, führen Sie einen SaveChanges-Aufruf für jede Anlage und einen SaveChanges-Aufruf für jede Nachricht aus. Legen Sie das MAPI_DEFERRED_ERRORS-Flag für jeden Anlagenaufruf und für alle Nachrichten mit Ausnahme der letzten fest.
Wenn SaveChanges MAPI_E_OBJECT_CHANGED zurückgibt, überprüfen Sie, ob das ursprüngliche Objekt geändert wurde. Wenn ja, warnen Sie den Benutzer, der entweder anfordern kann, dass die Änderungen die vorherigen Änderungen überschreiben oder das Objekt an anderer Stelle speichern können. Wenn das ursprüngliche Objekt gelöscht wurde, warnen Sie den Benutzer, ihm die Möglichkeit zu geben, das Objekt an einem anderen Speicherort zu speichern.
Sie können SaveChanges nicht mit dem FORCE_SAVE-Flag für ein geöffnetes Objekt aufrufen, das gelöscht wurde.
Wenn SaveChanges einen Fehler zurückgibt, bleibt das Objekt, dessen Änderungen gespeichert werden sollen, unabhängig von den im ulFlags-Parameter festgelegten Flags geöffnet.
Wichtig
Die ulFlags-NON_EMS_XP_SAVE und SPAMFILTER_ONSAVE sind möglicherweise nicht in der herunterladbaren Headerdatei definiert, über die Sie derzeit verfügen. In diesem Fall können Sie sie Ihrem Code mit den folgenden Werten hinzufügen: #define SPAMFILTER_ONSAVE ((ULONG) 0x00000080)
>#define NON_EMS_XP_SAVE ((ULONG) 0x00001000)
Weitere Informationen finden Sie unter Speichern von MAPI-Eigenschaften.
Siehe auch
IMAPIProp::SetProps
PidTagEntryId (kanonische Eigenschaft)
IMAPIProp : IUnknownSaving MAPI Properties