3.1.5 Message Processing Events and Sequencing Rules

After opening the table or sending a RopResetTable ROP request ([MS-OXCROPS] section 2.2.5.15), the client MUST send a RopSetColumns ROP request ([MS-OXCROPS] section 2.2.5.1) before querying the table for data.

The client SHOULD send a RopSortTable ROP request ([MS-OXCROPS] section 2.2.5.2) before querying a contents table for data. If the client does not send a RopSortTable ROP request, it MUST consider the sort order of the table as undefined.

The client can send a RopRestrict ROP request ([MS-OXCROPS] section 2.2.5.3) before querying the table for data.

When the TableStatus field of the RopSortTable ROP response has a value that is equal to "TBLSTAT_SORT_ERROR", then the RopSortTable ROP failed, and the client MUST consider the table invalid until it receives a successful a RopSortTable ROP response. When the TableStatus field of the RopSetColumns ROP response has a value that is equal to "TBLSTAT_SETCOL_ERROR", then the RopSetColumns ROP failed, and the client MUST consider the table invalid until it receives a successful RopSetColumns ROP response. When the TableStatus field of the RopRestrict ROP response has a value that is equal to "TBLSTAT_RESTRICT_ERROR", then the RopRestrict ROP failed, and the client MUST consider the table invalid until it receives a successful RopRestrict ROP response.

The client SHOULD NOT send a RopAbort ROP request ([MS-OXCROPS] section 2.2.5.5) unless the last TableStatus field returned in a ROP response indicated that the server is executing an asynchronous task.<19> If the server has no asynchronous work executing when a RopAbort ROP is requested, it will return "ecUnableToAbort" in the ReturnValue field of the RopAbort ROP response.