LocalInventory
es la información del inventario asociada a un determinado
identificado por su place_id
. Por ejemplo, se podría crear un LocalInventory
para una tienda o una región donde está disponible un precio determinado.
LocalInventory
tiene los siguientes campos:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
Las entradas LocalInventory
existentes se pueden ver a través de Product.local_inventories
(con la excepción de fulfillment_types
que, para la retrocompatibilidad, está disponible a través de Product.fulfillment_info
). Este campo es solo de salida. Parámetro de configuración
Product.local_inventories
para las APIs de CRUD Product
o SetInventory
no tiene
efecto.
Cada par (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
apunta al mismo par (fulfillment_info.place_ids, fulfillment_info.type)
que se menciona en la documentación de actualización del inventario. fulfillment_types
actualizado por AddLocalInventories
y RemoveLocalInventories
, como se describe a continuación
refleja una asignación de cada ID de lugar a una lista de tipos de entrega que
admite, mientras que fulfillment_info
actualizado por
AddFulfillmentPlaces
y
RemoveFulfillmentPlaces
refleja una asignación de cada
tipo de entrega específico a una lista de IDs de lugar que admite ese tipo.
Sin embargo, ambos tipos de APIs modifican la misma entrega subyacente
información y el efecto de ambos tipos de APIs se verá reflejado en
Product.fulfillment_info
Métodos de actualización del inventario local
Los cambios en la información del inventario local de un producto pueden ocurrir con mucha más frecuencia. con frecuencia que los cambios en la información de su catálogo. Un conjunto especializado de métodos para manejar grandes volúmenes de inventario local actualizaciones. Estos métodos son asíncronos debido a las optimizaciones downstream que admiten cientos de actualizaciones simultáneas por producto, sin sacrificar rendimiento.
AddLocalInventories
AddLocalInventories
se puede usar para crear inventarios locales en lugares nuevos (representados con place_id
nuevos) o actualizar campos existentes en inventarios locales existentes. Los campos que se agregan o actualizan en el
La lista de entradas LocalInventory
en el cuerpo de la solicitud se puede especificar mediante
AddLocalInventoriesRequest.add_mask
Los valores add_mask
válidos son los siguientes:
price_info
: reemplaza aLocalInventory.price_info
.attributes
: reemplaza todos losLocalInventory.attributes
. Se quitan los atributos existentes que no se mencionan en el cuerpo de la solicitud.attributes.PLACEHOLDER_NAME
: Solo reemplaza el atributo personalizado especificado. Si no se proporciona un nombre de atributo existente en la solicitud, se borrará el atributo. Se pueden especificar variosattributes.PLACEHOLDER_NAME
, siempre que cada nombre de atributo sea diferente. Sin embargo,AddLocalInventoriesRequest.add_mask
no puede incluir el valorattributes
y los valoresattributes.PLACEHOLDER_NAME
en la misma solicitud.fulfillment_types
: reemplaza todos los tipos de entrega compatibles. Se quitan los tipos de entrega existentes que no se mencionan en el cuerpo de la solicitud.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store1" price_info: { currency_code: "USD" price: 100 original_price: 110 cost: 95 } fulfillment_types: "pickup-in-store" fulfillment_types: "ship-to-store" } local_inventories: { place_id: "store2" price_info: { currency_code: "USD" price: 200 original_price: 210 cost: 195 } attributes: { key: "attr1", value: { text: "store2_value" } } fulfillment_types: "custom-type-1" } add_mask: { paths: "price_info" paths: "attributes.attr1" paths: "fulfillment_types" } add_time: { seconds: 100 nanos: 100 } allow_missing: true }
Esta AddLocalInventoriesRequest
de muestra agrega o actualiza dos inventarios locales.
con los IDs de lugar "store1"
y "store2"
para el producto especificado. Si
store1
existe y store2
no existe antes de la solicitud, la solicitud
Se actualizarán los campos de store1
y se creará store2
con los valores de campo especificados.
Este AddLocalInventoriesRequest.add_mask
especifica que price_info
, un solo atributo personalizado con el nombre "attr1"
, y fulfillment_types
deben actualizarse con los valores proporcionados en AddLocalInventoriesRequest.local_inventories
.
attributes
son atributos asociados a un lugar con nombres y
de salida. Dado que LocalInventory
de store1
no proporciona el valor de attr1
en la solicitud, el atributo personalizado attr1
se borrará del LocalInventory
existente de store1
si existe. store2
tendrá su atributo
El valor de attr1
se estableció en un valor de texto store2_value
. Otra opción personalizada
los atributos de store1
y store2
no se modifican.
fulfillment_types
representa una lista de disponibilidad de entrega para un Product
en un solo lugar. Es igual y acepta los mismos valores que
fulfillment_info.type
Este AddLocalInventoriesRequest
especifica lo siguiente:
store1
admite los tipos de entrega pickup-in-store
y ship-to-store
, mientras que
store1
admite custom-type-1
. Tipos de entrega existentes antes de esta actualización
que no se mencionan en la solicitud se borrarán.
Dado que AddLocalInventoriesRequest.allow_missing
se establece como verdadero, incluso si el producto aún no existe, la información del inventario local actualizada se almacenará cuando se cree el producto. La actualización tiene una marca de tiempo
con AddLocalInventoriesRequest.add_time
para evitar que las actualizaciones inactivas
anular los campos especificados de estos IDs de lugar. Para obtener más información sobre cómo evitar actualizaciones obsoletas y almacenar información del inventario local antes de crear el producto, consulta Protecciones de marca de tiempo para actualizaciones de inventario local y Carga información del inventario previamente.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store3" attributes: { key: "attr1", value: { text: "attr1_value" } } attributes: { key: "attr2", value: { numbers: 123 } } } add_mask: { paths: "attributes" } add_time: { seconds: 100 nanos: 100 } }
Este AddLocalInventoriesRequest
de muestra agrega o actualiza un solo lugar
El inventario con el ID de lugar "store3"
para el producto especificado Ya que su
add_mask
contiene "attributes"
, todos los atributos personalizados existentes de store3
se borran y se reemplazan por attr1
y attr2
, como se especifica en la solicitud.
Ten en cuenta que, como allow_missing
no se establece, requiere que el producto especificado
existen. De lo contrario, se genera un error NOT_FOUND
.
RemoveLocalInventories
RemoveLocalInventories
se puede usar para quitar los inventarios locales existentes en lugares con IDs de lugar determinados.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" place_ids: "store1" place_ids: "store2" remove_time: { seconds: 100 nanos: 100 } allow_missing: true }
Este RemoveLocalInventoriesRequest
de muestra quita los inventarios locales de los lugares con los IDs de lugares "store1"
y "store2"
para el producto especificado. La actualización
tiene la marca de tiempo RemoveLocalInventoriesRequest.remove_time
para evitar
las actualizaciones inactivas anulan la eliminación de estos IDs de lugar. Para especificar
IDs de lugar sin inventarios locales existentes, la solicitud también registra su
hora de actualización a remove_time
. Para obtener más información sobre las marcas de tiempo de actualización, consulta
Protecciones de marcas de tiempo para las actualizaciones del inventario local
Protecciones de marcas de tiempo para las actualizaciones del inventario local
Para protegerte contra las actualizaciones desordenadas, cada campo del inventario local se asociados a la hora de la actualización más reciente.
Se registra la hora de actualización más reciente para cada (place_id, price_info)
,
(place_id, attributes[...])
y (place_id, fulfillment_types[...])
par.
Los métodos AddLocalInventories
y RemoveLocalInventories
permiten que el emisor especifique una hora de actualización cuando se emite la solicitud. La hora de la actualización es
en comparación con la hora de actualización más reciente registrada para el inventario relevante
campos y la actualización se confirma solo si la hora de actualización es
después de la hora de actualización más reciente.
Por ejemplo, supongamos que el ID de lugar "store1"
tiene price_info
con la última hora de actualización registrada establecida en la hora T
. Si RemoveLocalInventoriesRequest.place_ids
contiene "store1"
, la solicitud quitará price_info
de "store1"
solo si RemoveLocalInventoriesRequest.remove_time
es posterior a la hora T
.
Lo mismo sucede con RemoveLocalInventoriesRequest
.
Con protección de marca de tiempo, es posible que un
Es posible que RemoveLocalInventoriesRequest
quite solo algunos campos de un
LocalInventory
en lugar de todo. Supongamos que un inventario local con el ID de lugar "store1"
tiene price_info
con la última hora de actualización registrada establecida en la hora T1
y tiene su único atributo personalizado existente con el nombre "attr1"
con la última hora de actualización registrada en T2
. Si un RemoveLocalInventoriesRequest.place_ids
contiene
"store1"
y tiene remove_time
establecido en T3
(donde T1 < T3 < T2
), luego
Se quitará el elemento price_info
de store_1
, mientras que se quitará su atributo attr1
intactos.
Carga previa de la información de inventario
Cada uno de los métodos de actualización de inventario local permite que el emisor configure allow_missing
en la solicitud. Cuando allow_missing
se establece como verdadero, una actualización del inventario local a un Product
inexistente se procesa como si el Product
existiera según las especificaciones del método. La información del inventario local se conservará durante un máximo de dos días si el Product
correspondiente no se crea a través de CreateProduct
dentro de este período.