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_name w ad_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.