3.2.5.7 Processing RopCopyProperties

When the server receives a RopCopyProperties ROP request buffer ([MS-OXCROPS] section 2.2.8.11) from the client, the server parses the buffer. The server responds with a RopCopyProperties ROP response buffer. For details about how the server parses buffers and processes ROPs, see [MS-OXCROPS] section 3.2.5.1. For details about how the server formats buffers for the response, see [MS-OXCROPS] section 3.2.5.2.

The server MUST copy or move the properties specified from the source object to the destination object. If the server fails to copy or move a property, that property, along with details of the failure, is specified in a PropertyProblem structure ([MS-OXCDATA] section 2.7) that is contained in the PropertyProblems field of the ROP response buffer.

If the Move flag is set in the CopyFlags field of the ROP request buffer, the server MAY<6> delete the copied properties from the source object. If the NoOverwrite flag is set in the CopyFlags field, the server MUST NOT overwrite any properties that already have a value on the destination object. If any other bits are set in the CopyFlags field, the server SHOULD<7> return an InvalidParameter error (0x80070057) ([MS-OXCDATA] section 2.4).

In the case of Message objects, the changes on either source or destination MUST NOT be persisted until the RopSaveChangesMessage ROP ([MS-OXCROPS] section 2.2.6.3) is successfully issued. In the case of Attachment objects, the changes on either source or destination MUST NOT be persisted until the RopSaveChangesAttachment ROP ([MS-OXCROPS] section 2.2.6.15) and the RopSaveChangesMessage ROP are successfully issued, in that order.

In the case of Folder objects, the changes on the source and destination MUST be immediately persisted. If the original object is a Folder object and the CopyFlags field has the Move flag set, the server SHOULD return a NotSupported error (0x80040102 ) ([MS-OXCDATA] section 2.4).

If the client requests asynchronous processing, the server can process this ROP asynchronously. During asynchronous processing, the server can indicate that the operation is still being processed by returning a RopProgress ROP response ([MS-OXCROPS] section 2.2.8.13), or it can indicate that the operation has already completed by returning a RopCopyProperties ROP response. If the operation fails at any point during the asynchronous processing, the server returns a RopCopyProperties ROP response buffer with an appropriate error code. For details about the RopProgress ROP and how it is used, see section 2.2.23 and section 3.2.5.20.