Usar IDs temporários

Nomes de recursos temporários

O BatchJobService é compatível com nomes de recursos temporários que podem ser referenciados em operações subsequentes no mesmo job em lote, inclusive em várias solicitações AddBatchJobOperations sequenciais enviadas com um sequence_token. Isso permite criar uma campanha e os grupos de anúncios, anúncios e critérios dependentes em um único job em lote antes que os IDs do lado do servidor sejam atribuídos. Nas regras gerais e no exemplo a seguir, uma única solicitação se refere a um BatchJob inteiro em todos os uploads de AddBatchJobOperations.

Para isso, especifique o resource_name do novo recurso para usar um ID negativo. Por exemplo, suponha que você crie uma campanha e especifique o nome do recurso como customers/<YOUR_CUSTOMER_ID>/campaigns/-1. Quando você criar o grupo de anúncios em uma operação posterior, poderá fazer referência a ele pelo nome do recurso, e o -1 especificado será substituído automaticamente pelo ID real da campanha criada.

Confira alguns pontos a serem considerados ao usar nomes de recursos temporários:

  • Um nome de recurso temporário só pode ser usado depois de definido em um recurso. No exemplo a seguir, a operação do grupo de anúncios precisa aparecer depois da operação da campanha na lista de operações.
  • Os nomes de recursos temporários não são lembrados em jobs ou solicitações de mutação. Para fazer referência a um recurso criado em um job ou solicitação de mutação anterior, use o nome real do recurso.
  • Para um único trabalho ou solicitação de mutação, cada nome de recurso temporário precisa usar um número negativo exclusivo, mesmo que sejam de tipos de recursos diferentes. Se um ID temporário for reutilizado em um único job ou solicitação de mutação, um erro será retornado.

Exemplo

Suponha que você queira adicionar uma campanha, um grupo de anúncios e um anúncio em uma única solicitação de API. Você criaria uma estrutura para sua solicitação análoga à seguinte:

mutate_operations: [
  {
    campaign_operation: {
      create: {
        resource_name: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1",
        ...
      }
    }
  },
  {
    ad_group_operation: {
      create: {
        resource_name: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2",
        campaign: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1"
        ...
      }
    }
  },
  {
    ad_group_ad_operation: {
      create: {
        ad_group: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2"
        ...
      }
    }
  },
]

Um novo ID temporário é usado para o grupo de anúncios, já que não podemos reutilizar o -1 usado na campanha. Também fazemos referência a esse grupo de anúncios ao criar um anúncio do grupo de anúncios. O grupo de anúncios faz referência ao nome do recurso que estabelecemos para a campanha em uma operação anterior na solicitação, enquanto resource_name em ad_group_ad_operation não é necessário, já que nenhuma outra operação faz referência a ele.

Tratamento de erros em jobs em lote

Como as operações padrão em um job em lote são executadas com o erro parcial ativado (exceto em sublotes atômicos), se um recurso principal com um ID temporário não passar na validação, todas as operações filhas dependentes que fazem referência a esse ID temporário vão falhar com NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS. Reutilizar o mesmo ID negativo em várias operações create no mesmo job em lote retorna NewResourceCreationError.DUPLICATE_TEMP_IDS. Os IDs temporários só são válidos ao criar recursos (create) ou referenciar recursos principais recém-criados. Por exemplo, transmitir um ID temporário negativo em AdGroupCriterionOperation.remove ao chamar AddBatchJobOperations retorna RequestError.RESOURCE_NAME_MALFORMED.