3.2.5.1 Processing Asynchronous Requests
If the client requests that the server perform a RopSetColumns ([MS-OXCROPS] section 2.2.5.1), RopSortTable ([MS-OXCROPS] section 2.2.5.2), or RopRestrict ([MS-OXCROPS] section 2.2.5.3) ROP request asynchronously, the server MAY<20> perform the operation synchronously and return TBLSTAT_COMPLETE in the TableStatus field of the ROP response buffer. However, if the server executes the ROP asynchronously, the server SHOULD return TBLSTAT_SORTING, TBLSTAT_SETTING_COLS, or TBLSTAT_RESTRICTING (depending on the ROP performed) in the TableStatus field of the ROP response buffer and do the work asynchronously. The server MUST return the same TableStatus field value in the RopGetStatus ROP response buffer ([MS-OXCROPS] section 2.2.5.6) unless the work has been completed or a RopAbort ROP request ([MS-OXCROPS] section 2.2.5.5) has been sent.
If there is an error setting the columns, sorting the table, or restricting, the next response to a RopGetStatus ROP request MUST set the TableStatus field to TBLSTAT_SETCOL_ERROR, TBLSTAT_SORT_ERROR, or TBLSTAT_RESTRICT_ERROR, depending on the ROP performed. When the asynchronous work is complete, the server MUST send the TableRestrictionChanged or TableChanged notifications, depending on the ROP performed. For details about these notifications, see [MS-OXCNOTIF] section 2.2.1.1.1.
If the client requests additional asynchronous work while the server is still performing asynchronous work, the server MUST set the value of the ReturnValue field in the ROP response buffer to ecBusy, as specified in [MS-OXCDATA] section 2.4. If the client requests additional synchronous work while the server is still performing asynchronous work, the server can do either of the following:
Set the value of the ReturnValue field in the ROP response buffer to ecBusy and not perform the requested action.
Wait until the first asynchronous action is complete and then complete the synchronous action and send the ROP response at that time.