3.1.4.1.1 Asynchronous Table Preparation
The client MAY request 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.<17> In this case, the client MUST NOT request additional asynchronous work to be done until pending asynchronous work is complete or canceled by using a RopAbort ROP request ([MS-OXCROPS] section 2.2.5.5). If the client requests additional synchronous work while an existing asynchronous request is pending, the server will respond in one of two ways:
The server returns ecBusy, as specified in [MS-OXCDATA] section 2.4, and does not perform the requested action.
The server waits until the first asynchronous action is complete, then completes the synchronous action and sends the ROP response at that time.
When a higher layer, or the user, needs to know the status of pending asynchronous requests, the client MUST get the status using a RopGetStatus ROP request ([MS-OXCROPS] section 2.2.5.6). When a higher layer, or the user, needs to abort a pending asynchronous request (to set columns, sort the table, or restrict), the client MUST send a RopAbort ROP request. After a successful RopAbort ROP request, the client MUST assume the table is in an undefined state and use the RopResetTable ROP ([MS-OXCROPS] section 2.2.5.15) before using the table again.
If an asynchronous request to a RopSetColumns, RopSortTable, or RopRestrict ROP fails with the error "ecNotSupported", the client can reattempt the request synchronously.
If a RopSetColumns ROP request fails, the client MUST assume that the table has an invalid column set and MUST perform a successful RopSetColumns ROP request before proceeding.
If a RopSortTable ROP request fails, the client MUST assume that the table has an invalid sort and MUST perform a successful RopSortTable ROP request before proceeding.
If a RopRestrict ROP request fails, the client MUST assume that the table has an invalid restriction and MUST perform a successful RopRestrict ROP request before proceeding.