3.2.5.3 Receiving a RopSaveChangesMessage ROP Request

After processing the RopSaveChangesMessage ROP ([MS-OXCROPS] section 2.2.6.3), when the message has been successfully saved and all changes committed to the message store, the server determines the status of the Message object after the commit by the value of the SaveFlags flag as documented in section 2.2.3.3.1.

The response contains the MID ([MS-OXCDATA] section 2.2.1.2) of the committed message.

For this ROP, the index in the ResponseHandleIndex field references the containing Folder object or, for an embedded message, the Embedded Message object. The index in the InputHandleIndex field references a Message object.

When the server receives multiple requests to open the same Message object, it returns a different handle and maintains a separate transaction for each. Any changes made on one transaction MUST NOT be visible to another transaction until the changes are committed via the RopSaveChangesMessage ROP. Once a transaction on one handle has been committed, the server MUST return "ecObjectModified" for RopSaveChangesMessage ROP requests on other handles and MUST NOT<25> allow those transactions to be committed, unless the client instructs the server to override previous changes with the ForceSave flag.

If pending changes include changes to read-only properties, the server MAY<26> return an error. The server sets the PidTagLocalCommitTime property (section 2.2.1.49) when the RopSaveChangesMessage ROP is processed.

The following specific error codes apply to this ROP.

Error code name

Value

Meaning

ecError

0x80004005 <27>

The message has been opened or previously saved as read only; changes cannot be saved.

ecObjectModified

0x80040109

The underlying data for this Message object was changed through another transaction context.