Używanie tymczasowych identyfikatorów

Tymczasowe nazwy zasobów

BatchJobService obsługuje tymczasowe nazwy zasobów, do których można się odwoływać w kolejnych operacjach w ramach tego samego zadania wsadowego, w tym w wielu kolejnych żądaniach AddBatchJobOperations przesłanych za pomocą sequence_token. Dzięki temu możesz utworzyć kampanię i zależne od niej grupy reklam, reklamy i kryteria w ramach jednego zadania wsadowego, zanim zostaną przypisane identyfikatory po stronie serwera. W poniższych zasadach ogólnych i przykładzie pojedyncze żądanie odnosi się do całego BatchJob we wszystkich jego AddBatchJobOperations.

Możesz to zrobić, określając resource_name nowego zasobu, aby użyć ujemnego identyfikatora. Załóżmy na przykład, że tworzysz kampanię i określasz jej nazwę zasobu jako customers/<YOUR_CUSTOMER_ID>/campaigns/-1. Gdy w późniejszej operacji utworzysz grupę reklam, możesz się do niej odwołać za pomocą tej nazwy zasobu, a określony przez Ciebie znak -1 zostanie automatycznie zastąpiony rzeczywistym identyfikatorem utworzonej kampanii.

Oto kilka kwestii, o których musisz pamiętać, gdy używasz tymczasowych nazw zasobów:

  • Tymczasowej nazwy zasobu można użyć dopiero po zdefiniowaniu jej w zasobie. W poniższym przykładzie operacja dotycząca grupy reklam musi występować po operacji dotyczącej kampanii na liście operacji.
  • Tymczasowe nazwy zasobów nie są zapamiętywane w przypadku zadań ani żądań zmiany. Aby odwołać się do zasobu utworzonego w poprzednim zadaniu lub żądaniu modyfikacji, użyj jego rzeczywistej nazwy.
  • W przypadku pojedynczego zadania lub żądania modyfikacji każda tymczasowa nazwa zasobu musi używać unikalnej liczby ujemnej, nawet jeśli pochodzi z różnych typów zasobów. Jeśli tymczasowy identyfikator zostanie ponownie użyty w jednym zadaniu lub żądaniu modyfikacji, zwracany jest błąd.

Przykład

Załóżmy, że chcesz dodać kampanię, grupę reklam i reklamę w ramach jednego żądania API. Strukturę żądania możesz utworzyć analogicznie do poniższej:

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

W przypadku grupy reklam używany jest nowy tymczasowy identyfikator, ponieważ nie możemy ponownie użyć identyfikatora -1, którego użyliśmy w przypadku kampanii. Odwołujemy się też do tej grupy reklam podczas tworzenia reklamy w grupie reklam. Sama grupa reklam odwołuje się do nazwy zasobu, którą ustaliliśmy dla kampanii we wcześniejszej operacji w żądaniu, a resource_namead_group_ad_operation nie jest konieczne, ponieważ nie odwołuje się do niego żadna dalsza operacja.

Obsługa błędów w przypadku zadań zbiorczych

Ponieważ standardowe operacje w zadaniu wsadowym są wykonywane z włączoną opcją częściowego niepowodzenia (z wyjątkiem atomowych podzadań wsadowych), jeśli weryfikacja zasobu nadrzędnego z tymczasowym identyfikatorem nie powiedzie się, wszystkie zależne operacje podrzędne odwołujące się do tego tymczasowego identyfikatora zakończą się niepowodzeniem z kodem NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS. Ponowne użycie tego samego identyfikatora ujemnego w wielu operacjach create w ramach tego samego zadania wsadowego zwraca błąd NewResourceCreationError.DUPLICATE_TEMP_IDS. Tymczasowe identyfikatory są prawidłowe tylko podczas tworzenia zasobów (create) lub odwoływania się do nowo utworzonych zasobów nadrzędnych, np. przekazywanie ujemnego tymczasowego identyfikatora w AdGroupCriterionOperation.remove podczas wywoływania AddBatchJobOperations zwraca RequestError.RESOURCE_NAME_MALFORMED.