临时资源名称
BatchJobService 支持临时资源名称,可在同一批处理作业中的后续操作中引用这些名称,包括通过 sequence_token 上传的多个连续 AddBatchJobOperations 请求。这样,您就可以在分配服务器端 ID 之前,在单个批量作业中创建广告系列及其依赖的广告组、广告和条件。在以下一般规则和示例中,单个请求是指整个 BatchJob 的所有 AddBatchJobOperations 上传内容。
如需在同一 mutate 请求或批量作业中引用新创建的资源,请在新资源的 resource_name 字段中指定一个负整数 ID(例如 -1 或 -2,但不包括 0)。例如,在批量请求中创建广告系列时,请将其资源名称设置为 customers/CUSTOMER_ID/campaigns/-1。在同一请求中,如果要在后续操作中创建广告组,请将 customers/CUSTOMER_ID/campaigns/-1 作为父广告系列进行引用。该 API 会在创建时自动将 -1 替换为生成的实际广告系列 ID。
使用限制
使用临时资源名称时,请谨记以下规则:
- 顺序很重要:您只能在定义临时资源名称后引用该名称。在一系列操作中,依赖性操作(例如创建广告组)必须出现在创建其父资源(例如创建广告系列)的操作之后。
- 单次请求或批量作业范围:临时资源名称不会在不同的作业或 mutate 请求之间持久保存。如需引用在之前的作业或 mutate 请求中创建的资源,请使用其实际的系统生成的资源名称。
- 全局唯一性:在单个作业或 mutate 请求中,每个临时资源名称都必须使用唯一的负整数,且该负整数在所有资源类型中都必须是唯一的。
例如,您不能在同一请求中同时为广告系列和广告组分配
-1。在同一请求或批处理作业中重复使用临时 ID 会返回NewResourceCreationError.DUPLICATE_TEMP_IDS错误。
载荷示例
假设您想在单个 API 请求或批量作业中添加广告系列、广告组和广告。您可以按以下 REST JSON 示例所示,在 GoogleAdsService.Mutate 或 BatchJobService.AddBatchJobOperations 请求载荷中构建 mutateOperations 数组(为简洁起见,省略了其他必需的资源字段):
{
"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"
}
}
}
]
}
此示例演示了以下关键细节:
- 由于
-1已分配给相应广告系列,因此该广告组使用新的临时 ID (-2)。 - 广告组引用
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。