Usar IDs temporales

Nombres de recursos temporales

BatchJobService admite nombres de recursos temporales a los que se puede hacer referencia en operaciones posteriores dentro del mismo trabajo por lotes, incluso en varias solicitudes AddBatchJobOperations secuenciales que se suben con un sequence_token. Esto te permite crear una campaña y sus grupos de anuncios, anuncios y criterios dependientes en un solo trabajo por lotes antes de que se asignen los IDs del servidor. En las siguientes reglas generales y el ejemplo, una sola solicitud hace referencia a un BatchJob completo en todas sus cargas de AddBatchJobOperations.

Para ello, especifica el resource_name del recurso nuevo para usar un ID negativo. Por ejemplo, supongamos que creas una campaña y especificas su nombre del recurso como customers/<YOUR_CUSTOMER_ID>/campaigns/-1. Cuando crees el grupo de anuncios en una operación posterior, podrás hacer referencia a él por ese nombre de recurso, y el -1 que especificaste se reemplazará automáticamente por el ID real de la campaña creada.

A continuación, se indican algunos aspectos que debes tener en cuenta cuando utilizas nombres de recursos temporales:

  • Un nombre de recurso temporal solo se puede usar después de que se define en un recurso. En el siguiente ejemplo, la operación del grupo de anuncios debería aparecer después de la operación de la campaña en la lista de operaciones.
  • Los nombres de recursos temporales no se recuerdan entre trabajos o solicitudes de mutación. Para hacer referencia a un recurso creado en un trabajo anterior o en una solicitud de modificación, usa su nombre de recurso real.
  • Para una sola solicitud de trabajo o de modificación, cada nombre de recurso temporal debe usar un número negativo único, incluso si son de diferentes tipos de recursos. Si se reutiliza un ID temporal en un solo trabajo o solicitud de mutación, se devuelve un error.

Ejemplo

Supongamos que deseas agregar una campaña, un grupo de anuncios y un anuncio en una sola solicitud de API. Crearías una estructura para tu solicitud análoga a la siguiente:

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"
        ...
      }
    }
  },
]

Se usa un nuevo ID temporal para el grupo de anuncios, ya que no podemos reutilizar el -1 que usamos para la campaña. También hacemos referencia a este grupo de anuncios cuando creamos un anuncio del grupo de anuncios. El grupo de anuncios en sí hace referencia al nombre del recurso que establecimos para la campaña en una operación anterior de la solicitud, mientras que resource_name en ad_group_ad_operation no es necesario, ya que ninguna otra operación hace referencia a él.

Manejo de errores en trabajos por lotes

Dado que las operaciones estándar en un trabajo por lotes se ejecutan con la falla parcial habilitada (excepto dentro de los sublotes atómicos), si un recurso principal con un ID temporal no supera la validación, cualquier operación secundaria dependiente que haga referencia a ese ID temporal fallará con NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS. Si se reutiliza el mismo ID negativo en varias operaciones de create dentro del mismo trabajo por lotes, se devuelve NewResourceCreationError.DUPLICATE_TEMP_IDS. Los IDs temporales solo son válidos cuando se crean recursos (create) o se hace referencia a recursos principales recién creados. Por ejemplo, pasar un ID temporal negativo en AdGroupCriterionOperation.remove cuando se llama a AddBatchJobOperations devuelve RequestError.RESOURCE_NAME_MALFORMED.