临时资源名称
BatchJobService 支持临时资源名称,这些名称可在同一批处理作业中的后续操作中引用,包括在通过 sequence_token 上传的多个连续 AddBatchJobOperations 请求中引用。这样,您就可以在服务器端 ID 分配之前,在单个批量作业中创建广告系列及其依赖的广告组、广告和条件。在以下一般规则
和示例中,单个请求是指所有 AddBatchJobOperations 上传中的整个 BatchJob。
如需在同一 mutate 请求或批量作业中引用新创建的资源,请在新资源的 resource_name 字段中指定一个负整数 ID(例如 -1 或 -2,但不包括 0)。例如,在批量请求中创建广告系列时,请将其资源名称设置为
customers/CUSTOMER_ID/campaigns/-1。在同一请求中的后续操作中创建广告组时,请将
customers/CUSTOMER_ID/campaigns/-1 引用为父级广告系列。API 会自动将 -1 替换为创建时生成的实际广告系列
ID。
使用限制
使用临时资源名称时,请注意以下规则:
- 顺序很重要: 您只能在定义临时资源名称后引用该名称。在操作列表中,依赖的操作(例如创建广告组)必须出现在创建其父级资源的操作(例如创建广告系列)之后。
- 单个请求或批处理作业范围: 临时资源名称不会在单独的作业或突变请求中保留。如需引用在之前的作业或 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"
}
}
}
]
}
此示例演示了以下关键详细信息:
- 广告组使用新的临时 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。