暫時資源名稱
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。臨時 ID 僅在建立資源 (create) 或參照新建立的父項資源時有效;舉例來說,在呼叫 AddBatchJobOperations 時,於 AdGroupCriterionOperation.remove 中傳遞負數臨時 ID 會傳回 RequestError.RESOURCE_NAME_MALFORMED。