暫時資源名稱
BatchJobService 支援臨時資源名稱,可在同一批次作業的後續作業中參照,包括透過 sequence_token 上傳的多個連續 AddBatchJobOperations 要求。這樣一來,您就能在伺服器端 ID 指派前,在單一批次工作中建立廣告活動及其相關的廣告群組、廣告和條件。在下列通則和範例中,單一要求是指所有 AddBatchJobOperations 上傳內容的整個 BatchJob。
如要在同一個變更要求或批次作業中參照新建立的資源,請在新資源的 resource_name 欄位中指定負整數 ID (例如 -1 或 -2,不包括 0)。舉例來說,在批次要求中建立廣告活動時,請將資源名稱設為 customers/CUSTOMER_ID/campaigns/-1。
在同一項請求的後續作業中建立廣告群組時,請將 customers/CUSTOMER_ID/campaigns/-1 參照為父項廣告活動。API 會自動將 -1 替換為建立時產生的實際廣告活動 ID。
使用限制
使用臨時資源名稱時,請注意下列規則:
- 順序很重要:您只能在定義臨時資源名稱後參照該名稱。在作業清單中,相依作業 (例如建立廣告群組) 必須出現在建立父項資源 (例如建立廣告活動) 的作業之後。
- 單一要求或批次工作範圍:臨時資源名稱不會在不同工作或變動要求之間保留。如要參照先前作業或變更要求中建立的資源,請使用系統產生的實際資源名稱。
- 全域專屬性:在單一工作或變更要求中,每個暫時資源名稱在所有資源類型中都必須使用專屬的負整數。舉例來說,您無法在同一個要求中,同時為廣告活動和廣告群組指派
-1。在相同要求或批次作業中重複使用臨時 ID 會傳回NewResourceCreationError.DUPLICATE_TEMP_IDS錯誤。
酬載範例
假設您想在單一 API 要求或批次工作新增廣告活動、廣告群組和廣告,您可以在 GoogleAdsService.Mutate 或 BatchJobService.AddBatchJobOperations 要求酬載中,建構 mutateOperations 陣列,如下列 REST JSON 範例所示 (為求精簡,省略其他必要資源欄位):
{
"mutateOperations": [
{
"campaignOperation": {
"create": {
"resourceName": "customers/CUSTOMER_ID/campaigns/-1"
}
}
},
{
"adGroupOperation": {
"create": {
"resourceName": "customers/CUSTOMER_ID/adGroups/-2",
"campaign": "customers/CUSTOMER_ID/campaigns/-1"
}
}
},
{
"adGroupAdOperation": {
"create": {
"adGroup": "customers/CUSTOMER_ID/adGroups/-2"
}
}
}
]
}
這個範例示範了下列重要詳細資料:
- 廣告群組使用新的臨時 ID (
-2),因為-1已指派給廣告活動。 - 廣告群組會參照
customers/CUSTOMER_ID/campaigns/-1,將自己連結至前一個作業中建立的廣告活動。 - 由於要求中的後續作業未參照新廣告,因此
adGroupAdOperation會參照customers/CUSTOMER_ID/adGroups/-2並省略resourceName。
批次工作中的錯誤處理
由於批次工作中的標準作業會啟用部分失敗 (完整子批次除外),因此如果具有臨時 ID 的父項資源驗證失敗,任何參照該臨時 ID 的子項作業都會因 NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS 而失敗。在同一個批次工作作業中,如果多個 create 作業重複使用相同的負 ID,系統會傳回 NewResourceCreationError.DUPLICATE_TEMP_IDS。只有在建立資源 (create) 或參照新建立的父項資源時,臨時 ID 才有效;舉例來說,在呼叫 AddBatchJobOperations 時,於 AdGroupCriterionOperation.remove 中傳遞負數臨時 ID 會傳回 RequestError.RESOURCE_NAME_MALFORMED。