暫時資源名稱
BatchJobService 支援臨時資源名稱,可在同一批次作業的後續作業中參照,包括透過 sequence_token 上傳的多個連續 AddBatchJobOperations 要求。這樣一來,您就能在伺服器端 ID 指派前,在單一批次工作中建立廣告活動及其相關的廣告群組、廣告和條件。在下列通則和範例中,單一要求是指所有 AddBatchJobOperations 上傳內容的整個 BatchJob。
如要這麼做,請指定新資源的 resource_name,使用負 ID。舉例來說,假設您建立廣告活動並將資源名稱指定為 customers/<YOUR_CUSTOMER_ID>/campaigns/-1,在後續作業中建立廣告群組時,您可以使用該資源名稱參照廣告群組,系統會自動將您指定的 -1 替換為所建立廣告活動的實際 ID。
使用臨時資源名稱時,請注意下列事項:
- 臨時資源名稱只能在資源中定義後使用。在下列範例中,廣告群組作業必須出現在作業清單中的廣告活動作業之後。
- 系統不會在工作或變更要求之間記住臨時資源名稱。 如要參照先前工作或變更要求中建立的資源,請使用實際的資源名稱。
- 如果是單一工作或變更要求,即使臨時資源名稱來自不同資源類型,也必須使用不重複的負數。如果單一工作或變更要求重複使用臨時 ID,系統會傳回錯誤。
範例
假設您想在單一 API 要求中新增廣告活動、廣告群組和廣告,您會為要求建立類似下列結構的結構:
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"
...
}
}
},
]
由於我們無法重複使用廣告活動的 -1,因此廣告群組會使用新的臨時 ID。建立廣告群組廣告時,我們也會參考這個廣告群組。廣告群組本身會參照我們在要求中較早的作業為廣告活動建立的資源名稱,而 resource_name 則不需要在 ad_group_ad_operation 中,因為沒有其他作業會參照該名稱。
批次工作中的錯誤處理
由於批次工作中的標準作業會啟用部分失敗 (完整子批次除外),因此如果具有臨時 ID 的父項資源驗證失敗,任何參照該臨時 ID 的子項作業都會因 NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS 而失敗。在同一個批次工作作業中,如果多個 create 作業重複使用相同的負 ID,系統會傳回 NewResourceCreationError.DUPLICATE_TEMP_IDS。只有在建立資源 (create) 或參照新建立的父項資源時,臨時 ID 才有效;舉例來說,在呼叫 AddBatchJobOperations 時,於 AdGroupCriterionOperation.remove 中傳遞負數臨時 ID 會傳回 RequestError.RESOURCE_NAME_MALFORMED。