LocalInventory
são as informações de inventário associadas a um determinado
local, identificado por seu place_id
. Por exemplo, um LocalInventory
pode ser
criado para uma loja ou região onde um determinado preço está disponível.
LocalInventory
tem os seguintes campos:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
As entradas LocalInventory
existentes estão visíveis até
Product.local_inventories
(exceto fulfillment_types
, que,
para compatibilidade com versões anteriores, está disponível por
Product.fulfillment_info
). Este campo é apenas para saída. Ambiente
Product.local_inventories
para Product
APIs CRUD ou SetInventory
não tem
efeito
Cada par (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
aponta para o mesmo
par (fulfillment_info.place_ids, fulfillment_info.type)
mencionado na
documentação de atualização do inventário. fulfillment_types
atualizado por AddLocalInventories
e RemoveLocalInventories
descrito abaixo
reflete um mapeamento de cada ID de lugar para uma lista de tipos de fulfillment com suporte. Já fulfillment_info
atualizado por
AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
reflete um mapeamento de cada
tipo de fulfillment específico para uma lista de IDs de lugar que aceita esse tipo.
No entanto, os dois tipos de API estão modificando as mesmas informações de preenchimento
subjacentes, e o efeito dos dois tipos de API será refletido em
Product.fulfillment_info
.
Métodos de atualização do inventário local
As mudanças nas informações de inventário local de um produto podem ocorrer com muito mais frequência do que as alterações nas informações de catálogo. Um conjunto especializado de métodos é fornecido para lidar com grandes volumes de atualizações específicas do inventário local. Esses métodos são assíncronos devido a otimizações downstream que suportam centenas de atualizações simultâneas por produto, sem prejudicar o desempenho.
AddLocalInventories
O AddLocalInventories
pode ser usado para criar arquivos
inventários em novos locais (representados por novos place_id
s) ou atualizam os
em inventários locais atuais. Os campos adicionados ou atualizados na
lista de entradas LocalInventory
no corpo da solicitação pode ser especificada por meio do
AddLocalInventoriesRequest.add_mask
. Os valores válidos de add_mask
são:
price_info
: substituiLocalInventory.price_info
.attributes
: substitui todos osLocalInventory.attributes
. Os atributos que não forem mencionados no corpo da solicitação serão removidos.attributes.PLACEHOLDER_NAME
: substitui apenas o atributo personalizado especificado. Se o nome de um atributo existente não for fornecido na solicitação, ele será excluído. É possível especificar váriosattributes.PLACEHOLDER_NAME
, desde que o nome de cada atributo seja diferente. No entanto,AddLocalInventoriesRequest.add_mask
não pode incluir o valorattributes
e os valoresattributes.PLACEHOLDER_NAME
na mesma solicitação.fulfillment_types
: substitui todos os tipos de fulfillment aceitos. Os tipos de fulfillment atuais que não são mencionados no corpo da solicitação são removidos.
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 }
Este AddLocalInventoriesRequest
de amostra adiciona ou atualiza dois inventários locais
com os IDs de lugar "store1"
e "store2"
do produto especificado. Se
store1
existir e store2
não existir antes da solicitação, a solicitação
vai atualizar os campos de store1
e criar store2
com os valores de campo fornecidos.
Esse AddLocalInventoriesRequest.add_mask
especifica que price_info
, um único
o atributo personalizado com o nome "attr1"
, e fulfillment_types
deve ser
atualizados usando os valores fornecidos no
AddLocalInventoriesRequest.local_inventories
.
attributes
são atributos associados a um lugar com nome e valores personalizáveis. Como LocalInventory
de store1
não fornece o valor de attr1
na solicitação, o atributo personalizado attr1
será excluído do existente
LocalInventory
de store1
, se existir. store2
terá seu atributo
O valor de attr1
foi definido como um valor de texto store2_value
. Outros atributos personalizados
existentes em store1
e store2
não são alterados.
fulfillment_types
representa uma lista de disponibilidade de fulfillment para um
Product
em um único lugar. É igual e aceita os mesmos valores que
fulfillment_info.type
: Esse AddLocalInventoriesRequest
especifica que
store1
oferece suporte aos tipos de fulfillment pickup-in-store
e ship-to-store
, enquanto
store1
oferece suporte a custom-type-1
. Tipos de fulfillment existentes antes desta atualização
que não foram mencionadas na solicitação serão excluídos.
Como AddLocalInventoriesRequest.allow_missing
está definido como verdadeiro, mesmo que o
produto ainda não exista, as informações atualizadas do inventário local serão
armazenadas para quando o produto for criado. A atualização tem um carimbo de data/hora
com AddLocalInventoriesRequest.add_time
para evitar que atualizações desatualizadas
substituindo os campos especificados desses IDs de lugar. Para saber mais sobre como prevenir
atualizações desatualizadas e o armazenamento de informações do inventário local antes que o produto seja
criados, consulte
Proteções de carimbo de data/hora para atualizações de inventário local e
Pré-carregamento de informações de inventário.
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 exemplo adiciona ou atualiza um único inventário local com o ID de lugar "store3"
para o produto especificado. Como o
add_mask
contém "attributes"
, todos os atributos personalizados de store3
são excluídos e substituídos por attr1
e attr2
, conforme especificado na solicitação.
Como allow_missing
não está definido, o produto especificado precisa existir. Caso contrário, será gerado um erro NOT_FOUND
.
RemoveLocalInventories
RemoveLocalInventories
pode ser usado para remover
inventários locais existentes em locais com determinados IDs de lugar.
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 }
Esta amostra RemoveLocalInventoriesRequest
remove inventários locais de lugares
com os IDs de lugar "store1"
e "store2"
do produto especificado. A atualização
tem o carimbo de data/hora RemoveLocalInventoriesRequest.remove_time
para evitar
as atualizações desatualizadas substituam a exclusão desses IDs de lugar. Para IDs de lugar especificados sem inventários locais, a solicitação também registra o tempo de atualização em remove_time
. Para saber mais sobre carimbos de data/hora de atualização, consulte
Proteções de carimbo de data/hora para atualizações de inventário local
Proteções de carimbo de data/hora para atualizações de inventário local
Para proteger contra atualizações fora de ordem, cada campo de inventário local é associado a um horário de atualização mais recente.
O horário de atualização mais recente é registrado para cada (place_id, price_info)
,
(place_id, attributes[...])
e (place_id, fulfillment_types[...])
par.
Os métodos AddLocalInventories
e
RemoveLocalInventories
permite que o autor da chamada
especificar um horário de atualização para quando a solicitação for emitida. Esse tempo de atualização é
comparado com o horário da atualização mais recente registrado para os campos de inventário
relevantes, e a atualização será confirmada se e somente se o tempo de atualização for estritamente
posterior ao da atualização mais recente.
Por exemplo, suponha que o ID de lugar "store1"
tenha price_info
com o último registro registrado
o horário de atualização definido como T
. Se RemoveLocalInventoriesRequest.place_ids
contiver "store1"
, a solicitação vai remover price_info
de "store1"
somente se o RemoveLocalInventoriesRequest.remove_time
for posterior ao horário T
.
O mesmo vale para RemoveLocalInventoriesRequest
s.
Com a proteção por carimbo de data/hora, é possível que um
RemoveLocalInventoriesRequest
remova apenas alguns campos de um
LocalInventory
, em vez de todos. Suponha que um inventário local com o ID do lugar
"store1"
tenha price_info
com o horário da última atualização registrado definido como T1
e
o único atributo personalizado com o nome "attr1"
com o horário da última atualização
registrado em T2
. Se uma RemoveLocalInventoriesRequest.place_ids
contiver
"store1"
, e tem remove_time
definido como T3
(em que T1 < T3 < T2
), então
O elemento price_info
da store_1
será removido, e o atributo attr1
será removido
intocados.
Como pré-carregar informações de inventário
Cada um dos métodos de atualização de inventário local permite que o autor da chamada defina
allow_missing
na solicitação. Quando allow_missing
é definido como verdadeiro, um
a atualização do inventário para um Product
inexistente é processada como se o
Product
existe de acordo com as especificações do método. O inventário local
serão retidas por, no máximo, dois dias se as operações
Product
não é criado pelo CreateProduct
neste
período.