Utiliser des ID temporaires

Noms de ressources temporaires

BatchJobService est compatible avec les noms de ressources temporaires qui peuvent être référencés dans les opérations suivantes du même job par lot, y compris dans plusieurs requêtes AddBatchJobOperations séquentielles importées avec sequence_token. Cela vous permet de créer une campagne et ses groupes d'annonces, annonces et critères dépendants dans un seul job par lot avant l'attribution des ID côté serveur. Dans les règles générales et l'exemple suivants, une seule demande fait référence à l'ensemble d'un BatchJob pour tous ses AddBatchJobOperations importés.

Pour ce faire, spécifiez l'resource_name de la nouvelle ressource afin d'utiliser un ID négatif. Par exemple, supposons que vous créez une campagne et que vous spécifiez son nom de ressource comme customers/<YOUR_CUSTOMER_ID>/campaigns/-1. Lorsque vous créerez le groupe d'annonces dans une opération ultérieure, vous pourrez y faire référence par ce nom de ressource. L'-1 que vous avez spécifié sera automatiquement remplacé par l'ID réel de la campagne créée.

Voici quelques points à retenir lorsque vous utilisez des noms de ressources temporaires :

  • Un nom de ressource temporaire ne peut être utilisé qu'après avoir été défini dans une ressource. Dans l'exemple suivant, l'opération du groupe d'annonces doit figurer après l'opération de la campagne dans la liste des opérations.
  • Les noms de ressources temporaires ne sont pas mémorisés entre les tâches ni les requêtes de mutation. Pour référencer une ressource créée dans un job ou une requête de modification précédents, utilisez son nom de ressource réel.
  • Pour une seule requête de mutation ou de job, chaque nom de ressource temporaire doit utiliser un nombre négatif unique, même s'ils proviennent de différents types de ressources. Si un ID temporaire est réutilisé dans une même tâche ou requête de modification, une erreur est renvoyée.

Exemple

Supposons que vous souhaitiez ajouter une campagne, un groupe d'annonces et une annonce dans une seule requête API. Vous devez créer une structure pour votre requête analogue à la suivante :

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"
        ...
      }
    }
  },
]

Un nouvel ID temporaire est utilisé pour le groupe d'annonces, car nous ne pouvons pas réutiliser le -1 que nous avons utilisé pour la campagne. Nous faisons également référence à ce groupe d'annonces lorsque nous créons une annonce de groupe d'annonces. Le groupe d'annonces lui-même fait référence au nom de ressource que nous avons établi pour la campagne dans une opération précédente de la requête, tandis que resource_name dans ad_group_ad_operation n'est pas nécessaire, car aucune autre opération ne le référence.

Gestion des erreurs dans les tâches par lot

Étant donné que les opérations standards d'un job par lot s'exécutent avec l'option Échec partiel activée (sauf dans les sous-lots atomiques), si une ressource parente avec un ID temporaire échoue à la validation, toutes les opérations enfants dépendantes qui font référence à cet ID temporaire échouent avec le code d'erreur NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS. La réutilisation du même ID négatif pour plusieurs opérations create dans le même job par lot renvoie NewResourceCreationError.DUPLICATE_TEMP_IDS. Les ID temporaires ne sont valides que lors de la création de ressources (create) ou de la référence à des ressources parentes nouvellement créées. Par exemple, la transmission d'un ID temporaire négatif dans AdGroupCriterionOperation.remove lors de l'appel de AddBatchJobOperations renvoie RequestError.RESOURCE_NAME_MALFORMED.