/// <summary>
        /// Returns the list of {@code BatchJob}s that match the query.
        ///
        /// @param query The SQL-like AWQL query string.
        /// @return The list of selected jobs.
        /// @throws ApiException if problems occur while parsing the query or fetching
        /// batchjob information.
        /// </summary>
        public async Task <BatchJobPage> QueryAsync(string query)
        {
            var binding = new BatchJobServiceSoapBinding("https://adwords.google.com/api/adwords/cm/v201609/BatchJobService", _config.AccessToken, _config.Timeout, _config.EnableGzipCompression, _netUtil, _logger);
            var inData  = new SoapData <BatchJobServiceRequestHeader, BatchJobServiceQuery>();

            inData.Header = new BatchJobServiceRequestHeader();
            AssignHeaderValues(inData.Header);
            inData.Body       = new BatchJobServiceQuery();
            inData.Body.Query = query;
            var outData = await binding.QueryAsync(inData).ConfigureAwait(false);

            return(outData.Body.Rval);
        }
        /// <summary>
        /// Creates or updates a {@code BatchJob}.
        ///
        /// <p class="note"><b>Note:</b> {@link BatchJobOperation} does not support the
        /// {@code REMOVE} operator. It is not necessary to remove BatchJobs.
        ///
        /// @param operations A list of operations.
        /// @return The list of created or updated jobs.
        /// @throws ApiException
        /// </summary>
        public async Task <BatchJobReturnValue> MutateAsync(IEnumerable <BatchJobOperation> operations)
        {
            var binding = new BatchJobServiceSoapBinding("https://adwords.google.com/api/adwords/cm/v201609/BatchJobService", _config.AccessToken, _config.Timeout, _config.EnableGzipCompression, _netUtil, _logger);
            var inData  = new SoapData <BatchJobServiceRequestHeader, BatchJobServiceMutate>();

            inData.Header = new BatchJobServiceRequestHeader();
            AssignHeaderValues(inData.Header);
            inData.Body            = new BatchJobServiceMutate();
            inData.Body.Operations = new List <BatchJobOperation>(operations);
            var outData = await binding.MutateAsync(inData).ConfigureAwait(false);

            return(outData.Body.Rval);
        }