Проверка результатов пакетной операции с помощью пакета SDK

Завершено

Класс TransactionalBatchResponse содержит множество членов для анализа результатов пакетной операции. Свойство StatusCode , в частности, имеет тип HttpStatusCode и возвращает код состояния HTTP, который позволяет легко определить сообщение об ошибке для распространенных сбоев транзакций.

response.StatusCode

Свойство IsSuccessStatusCode — это логическое свойство, которое можно использовать непосредственно в коде приложения перед извлечением результатов.

if (batchResponse.IsSuccessStatusCode)
{
}

Универсальный метод GetOperationResultAtIndex<> возвращает отдельный десериализированный элемент по указанному индексу.

TransactionalBatchOperationResult<Product> result = response.GetOperationResultAtIndex<Product>(0);
Product firstProductResult = result.Resource;

TransactionalBatchOperationResult<Product> result = response.GetOperationResultAtIndex<Product>(1);
Product secondProductResult = result.Resource;

Объект CosmosList , возвращаемый методом execute_item_batch , предоставляет средства для проверки результатов каждой операции в пакетном запросе. К результату каждой операции можно получить доступ с помощью отсчитывания от нуля и получить сведения, такие как код состояния HTTP и текст ответа операции.

Вы можете выполнить итерацию всех операций в пакете, чтобы получить доступ к результатам:

for result in batch_response:
    resource_body = result.get("resourceBody")
    print(f"Operation result: {resource_body}")

Вы можете проверить код состояния, текст ответа и запросить плату за отдельные операции с помощью метода get объектов пакетного ответа.

first_item_result = batch_response[0]
first_item_status_code = first_item_result.get("statusCode")
first_item_request_charge = first_item_result.get("requestCharge")
first_item_result = first_item_result.get("resourceBody")
print(f"First item status: {first_item_status_code}; request charge: {first_item_request_charge}; result: {first_item_result}")

second_item_result = batch_response[1]
second_item_status_code = second_item_result.get("statusCode")
second_item_request_charge = second_item_result.get("requestCharge")
second_item_result = second_item_result.get("resourceBody")
print(f"Second item status: {second_item_status_code}; request charge: {second_item_request_charge}; result: {second_item_result}")

При обработке ошибок в пакетных операциях используйте исключение CosmosBatchOperationError для выявления неудачной операции и его индекса:

try:
    batch_response = container.execute_item_batch(batch, partition_key=partition_key)
except exceptions.CosmosBatchOperationError as e:
    error_operation_index = e.error_index
    error_operation_response = e.operation_responses[error_operation_index]
    error_operation = batch[error_operation_index]
    print("\nError operation: {}, error operation response: {}\n".format(error_operation, error_operation_response))

Пакет SDK JavaScript использует метод container.items.batch для выполнения пакетных операций. Каждая операция должна включать тип (operationType) и данные для операции.

Вы можете выполнить итерацию результатов пакетной операции для проверки состояния и выходных данных каждой операции.

response.result.forEach((operationResult, index) => {
    const { statusCode, requestCharge, resourceBody } = operationResult;
    console.log(`Operation ${index + 1}: Status code: ${statusCode}, Request charge: ${requestCharge}, Resource: ${JSON.stringify(resourceBody)}`);
});

Вы можете проверить код состояния, текст ответа и запросить плату за отдельные операции с помощью метода get объектов пакетного ответа.

// Retrieve the results of the first item in the batch:
const first_item_result = response.result[0];
const first_item_status_code = first_item_result.statusCode;
const first_item_request_charge = first_item_result.requestCharge;
const first_item_resource = first_item_result.resourceBody;
console.log(`Operation 1: Status code: ${first_item_status_code}, Request charge: ${first_item_request_charge}, Resource: ${JSON.stringify(first_item_resource)}`);

// Retrieve the results of the second item in the batch:
const second_item_result = response.result[1];
const second_item_status_code = second_item_result.statusCode;
const second_item_request_charge = second_item_result.requestCharge;
const second_item_resource = second_item_result.resourceBody;
console.log(`Operation 2: Status code: ${second_item_status_code}, Request charge: ${second_item_request_charge}, Resource: ${JSON.stringify(second_item_resource)}`);