Falha parcial

Alguns serviços do Google AdWords permitem solicitar que as operações válidas prossigam e as com falha retornem erros. Esse recurso (chamado de falha parcial) permite que você lide com as operações com falha separadamente no fim do processo.

Detalhes técnicos

Para utilizar esse recurso, é necessário definir este cabeçalho SOAP opcional:

<partialFailure>true</partialFailure>

O serviço executa as operações que não tiveram erros. Ele retorna resultados para as operações bem-sucedidas e erros para as com falha. Esse cabeçalho é ignorado nas operações que não são de modificação.

Esse recurso é compatível com os seguintes serviços:

Utilização

Digamos que você precise adicionar um conjunto de palavras-chave à sua conta. No entanto, algumas palavras-chave podem ter violações de políticas editoriais. Convém que as palavras-chave válidas sejam enviadas, mas que aquelas com falha sejam retornadas com os respectivos erros.

Criar o serviço

Comece ativando o modo partialFailure da seguinte maneira:

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

Criar as operações e fazer a chamada da API

Crie as operações mutate e faça a chamada da API como de costume.

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[] {}));

Lidar com operações bem-sucedidas

As operações bem-sucedidas retornam valores de resultado por serviço. Imprima-os se desejado:

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());
  }
}

Lidar com operações com falha

As operações com falha retornam informações de erro no campo partialFailureErrors. Para encontrar o índice de operações com falha, analise a propriedade fieldPathElements (disponível a partir da versão v201702) ou a propriedade fieldPath (disponível em todas as versões) do objeto ApiError da lista 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());
  }
}

Exemplos de código em outros idiomas

A pasta ErrorHandling de cada biblioteca cliente contém o exemplo de código a seguir, que mostra como usar esse recurso:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.