Частичный отказ

В некоторых службах AdWords можно использовать функцию частичного отказа, когда допустимые операции выполняются, а неудавшиеся возвращают ошибку. Это позволяет обрабатывать неудавшиеся операции отдельно после всех остальных.

Техническая информация

Чтобы использовать функцию частичного отказа, укажите этот необязательный заголовок SOAP:

<partialFailure>true</partialFailure>

Служба завершит операции, при выполнении которых не возникло ошибок. Для успешных операций будут возвращены результаты, а для неудавшихся – ошибки. Этот заголовок игнорируется для всех операций, кроме mutate.

Эта функция поддерживается следующими службами:

Использование

Предположим, вам нужно добавить в аккаунт набор ключевых слов. Однако в некоторых из них могут быть допущены нарушения. Вы хотите, чтобы допустимые ключевые слова были добавлены, а ключевые слова, нарушающие правила, возвращены вместе с ошибками.

Создание службы

Сначала включите режим partialFailure следующим образом:

// Enable partial failure.
session.setPartialFailure(true);

Создайте операции и вызов API

Создайте операции mutate и вызов API как обычно.

List<AdGroupCriterionOperation> operations = new ArrayList<AdGroupCriterionOperation>();

// Create keywords.
String[] keywords =
    new String[] {"mars cruise", "inv@lid cruise", "venus cruise", "b(a)d keyword cruise"};
for (String keywordText : keywords) {
  // Create keyword
  Keyword keyword = new Keyword();
  keyword.setText(keywordText);
  keyword.setMatchType(KeywordMatchType.BROAD);

  // Create biddable ad group criterion.
  BiddableAdGroupCriterion keywordBiddableAdGroupCriterion = new BiddableAdGroupCriterion();
  keywordBiddableAdGroupCriterion.setAdGroupId(adGroupId);
  keywordBiddableAdGroupCriterion.setCriterion(keyword);

  // Create operation.
  AdGroupCriterionOperation keywordAdGroupCriterionOperation =
      new AdGroupCriterionOperation();
  keywordAdGroupCriterionOperation.setOperand(keywordBiddableAdGroupCriterion);
  keywordAdGroupCriterionOperation.setOperator(Operator.ADD);
  operations.add(keywordAdGroupCriterionOperation);
}

// Add ad group criteria.
AdGroupCriterionReturnValue result =
    adGroupCriterionService.mutate(operations.toArray(new AdGroupCriterionOperation[] {}));

Обработка успешных операций

Для успешных операций служба возвращает результаты, которые можно распечатать:

for (AdGroupCriterion adGroupCriterionResult : result.getValue()) {
  if (adGroupCriterionResult.getCriterion() != null) {
    System.out.printf("Ad group criterion with ad group ID %d, and criterion ID %d, "
        + "and keyword '%s' was added.%n", adGroupCriterionResult.getAdGroupId(),
        adGroupCriterionResult.getCriterion().getId(),
        ((Keyword) adGroupCriterionResult.getCriterion()).getText());
  }
}

Обработка неудавшихся операций

Для неудавшихся операций в поле partialFailureErrors будет представлена информация об ошибке. Чтобы узнать порядковый номер неудавшейся операции, проверьте свойство fieldPathElements (доступно в версии 201702 и более поздних) или свойство fieldPath (доступно во всех версиях) объекта ApiError в списке partialFailures.

for (ApiError apiError : result.getPartialFailureErrors()) {
  // Get the index of the failed operation from the error's field path elements.
  FieldPathElement[] fieldPathElements = apiError.getFieldPathElements();
  FieldPathElement firstFieldPathElement = null;
  if (fieldPathElements != null && fieldPathElements.length > 0) {
    firstFieldPathElement = fieldPathElements[0];
  }
  if (firstFieldPathElement != null
      && "operations".equals(firstFieldPathElement.getField())
      && firstFieldPathElement.getIndex() != null) {
    int operationIndex = firstFieldPathElement.getIndex();
    AdGroupCriterion adGroupCriterion = operations.get(operationIndex).getOperand();
    System.out.printf(
        "Ad group criterion with ad group ID %d and keyword '%s' "
            + "triggered a failure for the following reason: %s.%n",
        adGroupCriterion.getAdGroupId(),
        ((Keyword) adGroupCriterion.getCriterion()).getText(),
        apiError.getErrorString());
  } else {
    System.out.printf(
        "A failure has occurred for the following reason: %s%n", apiError.getErrorString());
  }
}

Примеры кода на других языках

В папке ErrorHandling каждой клиентской библиотеки вы найдете пример кода, иллюстрирующий использование этой функции.

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.