A class indicates the response body of QueryColumns request
Inheritance: AddressBookResponseBodyBase
        /// <summary>
        /// Parse the QueryColumns request type response body.
        /// </summary>
        /// <param name="rawData">The raw data of response.</param>
        /// <returns>The QueryColumns request type response body.</returns>
        public static QueryColumnsResponseBody Parse(byte[] rawData)
        {
            QueryColumnsResponseBody responseBody = new QueryColumnsResponseBody();
            int index = 0;
            responseBody.StatusCode = BitConverter.ToUInt32(rawData, index);
            index += sizeof(uint);
            responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index);
            index += sizeof(uint);
            responseBody.HasColumns = BitConverter.ToBoolean(rawData, index);
            index += sizeof(bool);
            if (responseBody.HasColumns)
            {
                responseBody.Columns = LargePropertyTagArray.Parse(rawData, ref index);
            }
            else
            {
                responseBody.Columns = null;
            }

            responseBody.AuxiliaryBufferSize = BitConverter.ToUInt32(rawData, index);
            index += 4;
            responseBody.AuxiliaryBuffer = new byte[responseBody.AuxiliaryBufferSize];
            Array.Copy(rawData, index, responseBody.AuxiliaryBuffer, 0, responseBody.AuxiliaryBufferSize);
            return responseBody;
        }
        /// <summary>
        /// Parse the QueryColumns request type response body.
        /// </summary>
        /// <param name="rawData">The raw data of response.</param>
        /// <returns>The QueryColumns request type response body.</returns>
        public static QueryColumnsResponseBody Parse(byte[] rawData)
        {
            QueryColumnsResponseBody responseBody = new QueryColumnsResponseBody();
            int index = 0;

            responseBody.StatusCode = BitConverter.ToUInt32(rawData, index);
            index += sizeof(uint);
            responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index);
            index += sizeof(uint);
            responseBody.HasColumns = BitConverter.ToBoolean(rawData, index);
            index += sizeof(bool);
            if (responseBody.HasColumns)
            {
                responseBody.Columns = LargePropertyTagArray.Parse(rawData, ref index);
            }
            else
            {
                responseBody.Columns = null;
            }

            responseBody.AuxiliaryBufferSize = BitConverter.ToUInt32(rawData, index);
            index += 4;
            responseBody.AuxiliaryBuffer = new byte[responseBody.AuxiliaryBufferSize];
            Array.Copy(rawData, index, responseBody.AuxiliaryBuffer, 0, responseBody.AuxiliaryBufferSize);
            return(responseBody);
        }
        /// <summary>
        /// This method is used by the client to get a list of all the properties that exist in the address book.
        /// </summary>
        /// <param name="queryColumnsRequestBody">The QueryColumns request type request body.</param>
        /// <returns>The response body of QueryColumns request type.</returns>
        public QueryColumnsResponseBody QueryColumns(QueryColumnsRequestBody queryColumnsRequestBody)
        {
            CommonResponse           commonResponse           = this.SendAddressBookRequest(queryColumnsRequestBody, RequestType.QueryColumns);
            QueryColumnsResponseBody queryColumnsResponseBody = QueryColumnsResponseBody.Parse(commonResponse.ResponseBodyRawData);

            this.VerifyQueryColumnsResponseBody(queryColumnsResponseBody);
            this.VerifyLargePropertyTagArrayStructure(queryColumnsResponseBody.Columns.Value);

            return(queryColumnsResponseBody);
        }
        /// <summary>
        /// Verify the requirements related to QueryColumns request type response body. 
        /// </summary>
        /// <param name="queryColumnsResponseBody">The response body of QueryColumns request type.</param>
        private void VerifyQueryColumnsResponseBody(QueryColumnsResponseBody queryColumnsResponseBody)
        {
            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R885");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R885
            this.Site.CaptureRequirementIfIsInstanceOfType(
                queryColumnsResponseBody.StatusCode,
                typeof(uint),
                885,
                @"[In QueryColumns Request Type Success Response Body] StatusCode (4 bytes): An unsigned integer that specifies the status of the request.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R886");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R886
            this.Site.CaptureRequirementIfAreEqual<uint>(
                0,
                queryColumnsResponseBody.StatusCode,
                886,
                @"[In QueryColumns Request Type Success Response Body] [StatusCode] This field MUST be set to 0x00000000.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R887");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R887
            this.Site.CaptureRequirementIfIsInstanceOfType(
                queryColumnsResponseBody.ErrorCode,
                typeof(uint),
                887,
                @"[In QueryColumns Request Type Success Response Body] ErrorCode (4 bytes): An unsigned integer that specifies the return status of the operation.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R888");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R888
            this.Site.CaptureRequirementIfIsInstanceOfType(
                queryColumnsResponseBody.HasColumns,
                typeof(bool),
                888,
                @"[In QueryColumns Request Type Success Response Body] HasColumns (1 byte): A Boolean value that specifies whether the Columns field is present.");

            if (queryColumnsResponseBody.HasColumns)
            {
                // Add the debug information
                this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R889");

                // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R889
                this.Site.CaptureRequirementIfIsInstanceOfType(
                    queryColumnsResponseBody.Columns,
                    typeof(LargePropertyTagArray),
                    889,
                    @"[In QueryColumns Request Type Success Response Body] Columns (optional) (variable): A LargePropTagArray structure (section 2.2.1.3) that specifies the properties that exist on the address book.");

                // Add the debug information
                this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R890");
        
                // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R890
                this.Site.CaptureRequirementIfIsNotNull(
                    queryColumnsResponseBody.Columns,
                    890,
                    @"[In QueryColumns Request Type Success Response Body] [Columns] This field is present when the HasColumns field is nonzero.");
            }
           
            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R892");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R892
            this.Site.CaptureRequirementIfIsInstanceOfType(
                queryColumnsResponseBody.AuxiliaryBufferSize,
                typeof(uint),
                892,
                @"[In QueryColumns Request Type Success Response Body] AuxiliaryBufferSize (4 bytes): An unsigned integer that specifies the size, in bytes, of the AuxiliaryBuffer field.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R893");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R893
            this.Site.CaptureRequirementIfIsInstanceOfType(
                queryColumnsResponseBody.AuxiliaryBuffer,
                typeof(byte[]),
                893,
                @"[In QueryColumns Request Type Success Response Body] AuxiliaryBuffer (variable): An array of bytes that constitute the auxiliary payload data returned from the server.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R894");
        
            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R894
            this.Site.CaptureRequirementIfAreEqual<uint>(
                queryColumnsResponseBody.AuxiliaryBufferSize,
                (uint)queryColumnsResponseBody.AuxiliaryBuffer.Length,
                894,
                @"[In QueryColumns Request Type Success Response Body] [AuxiliaryBuffer] The size of this field, in bytes, is specified by the AuxiliaryBufferSize field.");
        }