部分失败

某些 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 字段返回错误信息。您可以通过查看 partialFailures 列表中 ApiError 对象的 fieldPathElements 属性(自 v201702 起提供)或 fieldPath 属性(在所有版本中都提供)找到失败操作的索引。

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 文件夹中都包含展示如何使用这一功能的代码示例:

发送以下问题的反馈:

此网页
AdWords API
AdWords API
需要帮助?请访问我们的支持页面