LocalInventory
sono le informazioni sull'inventario associate a un determinato
luogo, identificato dal relativo place_id
. Ad esempio, un LocalInventory
potrebbe essere creato per un negozio o una regione in cui è disponibile un determinato prezzo.
LocalInventory
contiene i seguenti campi:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
Le voci LocalInventory
esistenti sono visibili tramite
Product.local_inventories
(ad eccezione di fulfillment_types
che,
per la compatibilità con le versioni precedenti, è disponibile tramite
Product.fulfillment_info
). Questo campo è solo di output. L'impostazione di Product.local_inventories
per le API CRUD Product
o SetInventory
non ha alcun effetto.
Ogni coppia di (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
punta allo stesso
(fulfillment_info.place_ids, fulfillment_info.type)
coppia menzionata nel
Documentazione sull'aggiornamento dell'inventario. fulfillment_types
aggiornato da AddLocalInventories
e RemoveLocalInventories
descritto di seguito riflette una mappatura da ogni ID luogo a un elenco di tipi di evasione degli ordini supportati, mentre fulfillment_info
aggiornato da
AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
riflette una mappatura da ogni
tipo di evasione degli ordini specifico a un elenco di ID luogo che supportano questo tipo.
Tuttavia, entrambi i tipi di API modificano le stesse informazioni di evasione sottostanti e l'effetto di entrambi i tipi di API verrà applicato aProduct.fulfillment_info
.
Metodi di aggiornamento dell'inventario locale
Le modifiche alle informazioni sull'inventario locale di un prodotto possono avvenire molto più frequentemente rispetto a quelle relative alle informazioni del catalogo. Un insieme specializzato vengono forniti metodi per gestire grandi volumi di modelli di inventario locale aggiornamenti. Questi metodi sono asincroni grazie alle ottimizzazioni downstream che supportare centinaia di aggiornamenti simultanei per prodotto, senza sacrificare delle prestazioni.
AddLocalInventories
AddLocalInventories
può essere utilizzato per creare inventari locali in nuovi luoghi (rappresentati con nuovi place_id
) o per aggiornare i campi esistenti negli inventari locali esistenti. I campi aggiunti o aggiornati nell'elenco delle voci LocalInventory
nel corpo della richiesta possono essere specificati tramite AddLocalInventoriesRequest.add_mask
. I valori di add_mask
validi sono:
price_info
: sovrascriveLocalInventory.price_info
.attributes
: sovrascrive tutti iLocalInventory.attributes
. Gli attributi esistenti non menzionati nel corpo della richiesta vengono rimossi.attributes.PLACEHOLDER_NAME
: sovrascrive solo l'attributo personalizzato specificato. Se nella richiesta non viene fornito il nome di un attributo esistente, l'attributo viene eliminato. È possibile specificare piùattributes.PLACEHOLDER_NAME
, purché ogni nome attributo sia diverso. Tuttavia,AddLocalInventoriesRequest.add_mask
non può includere entrambi i valoriattributes
eattributes.PLACEHOLDER_NAME
nella stessa richiesta.fulfillment_types
: sovrascrive tutti i tipi di evasione degli ordini supportati. I tipi di adempimento esistenti non menzionati nel corpo della richiesta vengono rimossi.
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 }
Questo esempio AddLocalInventoriesRequest
aggiunge o aggiorna due inventari locali con gli ID luogo "store1"
e "store2"
per il prodotto specificato. Se store1
esiste e store2
non esiste prima della richiesta, la richiesta aggiornerà i campi di store1
e creerà store2
con i valori dei campi specificati.
Questo AddLocalInventoriesRequest.add_mask
specifica che price_info
, una singola
attributo personalizzato con il nome "attr1"
e fulfillment_types
deve essere
vengono aggiornati utilizzando i valori forniti
AddLocalInventoriesRequest.local_inventories
.
attributes
sono attributi associati a un luogo con nome personalizzabile e
e i relativi valori. Poiché LocalInventory
di store1
non fornisce il valore di attr1
nella richiesta, l'attributo personalizzato attr1
verrà eliminato dall'attuale
LocalInventory
di store1
, se esistente. Il valore dell'attributo attr1
di store2
sarà impostato su un valore di testo store2_value
. Altro personalizzato esistente
gli attributi su store1
e store2
non sono stati modificati.
fulfillment_types
rappresenta un elenco di disponibilità di evasione degli ordini per un
Product
in un unico posto. È lo stesso e accetta gli stessi valori di
fulfillment_info.type
. L'istruzione AddLocalInventoriesRequest
specifica che
store1
supporta i tipi di completamento pickup-in-store
e ship-to-store
, mentre
store1
supporta custom-type-1
. I tipi di evasione esistenti prima di questo aggiornamento
che non sono menzionati nella richiesta verranno eliminati.
Poiché AddLocalInventoriesRequest.allow_missing
è impostato su true, anche se
Il prodotto non esiste già, le informazioni aggiornate sull'inventario locale verranno
e archiviato quando il prodotto viene creato. L'aggiornamento è datato con AddLocalInventoriesRequest.add_time
per impedire che gli aggiornamenti obsoleti sostituiscano i campi specificati di questi ID luogo. Per ulteriori informazioni su come prevenire
aggiornamenti obsoleti e l'archiviazione
delle informazioni sull'inventario locale prima che il prodotto
creato, consulta
Protezioni timestamp per gli aggiornamenti dell'inventario locale e
Precaricamento delle informazioni sull'inventario
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 } }
Questo esempio AddLocalInventoriesRequest
aggiunge o aggiorna un singolo
inventario locale con ID luogo "store3"
per il prodotto specificato. Poiché le sue
add_mask
contiene "attributes"
, tutti gli attributi personalizzati esistenti di store3
vengono eliminati e sostituiti con attr1
e attr2
come specificato nella richiesta.
Tieni presente che, poiché allow_missing
non è impostato, richiede che il prodotto specificato
esistono. In caso contrario, viene generato un errore NOT_FOUND
.
RemoveLocalInventories
È possibile utilizzare RemoveLocalInventories
per rimuovere
inventari locali esistenti nei luoghi con determinati ID luogo.
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 }
Questo esempio di RemoveLocalInventoriesRequest
rimuove gli inventari locali dei luoghi
con ID luogo "store1"
e "store2"
per il prodotto specificato. Aggiornamento
ha il timestamp con RemoveLocalInventoriesRequest.remove_time
per evitare
gli aggiornamenti obsoleti anziché l'eliminazione di questi ID luogo. Per gli ID luogo specificati senza inventari locali esistenti, la richiesta registra anche il relativo remove_time
. Per saperne di più sui timestamp degli aggiornamenti, consulta
Protezioni dei timestamp per gli aggiornamenti dell'inventario locale
Protezioni con timestamp per gli aggiornamenti dell'inventario locale
Per evitare aggiornamenti non in ordine, ogni campo dell'inventario locale viene associate all'ora dell'ultimo aggiornamento.
L'ora dell'ultimo aggiornamento viene registrata per ogni coppia (place_id, price_info)
,
(place_id, attributes[...])
e (place_id, fulfillment_types[...])
.
Le AddLocalInventories
e
I metodi RemoveLocalInventories
consentono al chiamante di
specificare l'ora di aggiornamento per il momento in cui viene inviata la richiesta. L'ora dell'aggiornamento è
rispetto all'ora dell'ultimo aggiornamento registrata per l'inventario pertinente
e l'aggiornamento viene eseguito solo se l'ora dell'aggiornamento è rigorosamente
dopo l'ora dell'ultimo aggiornamento.
Ad esempio, supponiamo che l'ID luogo "store1"
abbia price_info
con l'ora dell'ultimo aggiornamento registrato impostata sull'ora T
. Se RemoveLocalInventoriesRequest.place_ids
contiene "store1"
, la richiesta rimuoverà price_info
da "store1"
solo se l'ora RemoveLocalInventoriesRequest.remove_time
è successiva all'ora T
.
Lo stesso vale per i RemoveLocalInventoriesRequest
.
Sotto la protezione dei timestamp, è possibile che
RemoveLocalInventoriesRequest
potrebbe rimuovere solo alcuni campi di un
LocalInventory
anziché tutti. Supponiamo che un inventario locale con ID luogo
"store1"
abbia price_info
con l'ora dell'ultimo aggiornamento registrato impostata sull'ora T1
e
abbia il suo unico attributo personalizzato esistente con il nome "attr1"
con l'ora dell'ultimo
aggiornamento registrato su T2
. Se RemoveLocalInventoriesRequest.place_ids
contiene
"store1"
, con remove_time
impostato su T3
(dove T1 < T3 < T2
), poi
Il price_info
di store_1
verrà rimosso, mentre il suo attributo attr1
verrà
senza modifiche.
Precaricamento delle informazioni sull'inventario
Ciascuno dei metodi di aggiornamento dell'inventario locale consente all'utente che effettua la chiamata di impostare
allow_missing
nella richiesta. Quando allow_missing
è impostato su true, un aggiornamento dell'inventario locale a un Product
inesistente viene elaborato come se Product
esistesse in base alle specifiche del metodo. L'inventario locale
verranno conservate per un massimo di due giorni se le corrispondenti corrispondenze
Product
non è stato creato tramite CreateProduct
all'interno di questo elemento
un periodo di tempo.