Mentre i metodi Product
di creazione, lettura, aggiornamento ed eliminazione (CRUD) vengono utilizzati per
modificare in modo ampio gli attributi di Product
, esiste un insieme di metodi Product
che possono essere utilizzati per aggiornare campi specifici dell'inventario con vari livelli di
granularità. I seguenti Product
campi sono considerati campi dell'inventario:
Product.price_info
Product.availability
Product.available_quantity
Product.fulfillment_info
Tutorial sulla configurazione dell'inventario
Questo tutorial mostra come eseguire il push degli aggiornamenti dell'inventario utilizzando il metodo SetInventory
anziché aggiornare l'intero prodotto.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Tutorial sull'aggiunta di fulfillment
Ti consigliamo di utilizzare il metodo AddLocalInventories
anziché AddFulfillmentPlaces
. AddLocalInventories
consente di ottenere gli stessi risultati, ma offre un controllo più granulare sull'importazione dei dati dell'inventario locale. Per saperne di più, consulta la documentazione di AddLocalInventories
.
Questo tutorial mostra come aggiornare le informazioni di evasione dei prodotti utilizzando il metodo AddFulfillmentPlaces
. In questo modo, Retail può mostrare aggiornamenti sulle disponibilità dei prodotti e sull'evasione degli ordini. Ad esempio, un acquirente sta cercando blue jeans in un negozio ma non è disponibile. Nel momento in cui i jeans saranno di nuovo disponibili in questo negozio o in qualsiasi altro negozio, Retail mostra gli aggiornamenti e l'acquirente può procedere con l'ordine.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Tutorial sulla rimozione di fulfillment
Ti consigliamo di utilizzare il metodo RemoveLocalInventories
anziché RemoveFulfillmentPlaces
. RmoveLocalInventories
consente di ottenere gli stessi risultati, ma offre un controllo più granulare sull'importazione dei dati dell'inventario locale. Per saperne di più, consulta la documentazione di RemoveLocalInventories
.
Questo tutorial mostra come aggiornare le informazioni di evasione dei prodotti utilizzando il metodo RemoveFulfillmentPlaces
. In questo modo, Retail può mostrare aggiornamenti in cui i prodotti non sono disponibili e gli ordini non possono essere gestiti. Ad esempio, un acquirente sta cercando blue jeans in un negozio. Se i jeans non sono disponibili in questo negozio, Retail mostra gli aggiornamenti e l'acquirente non può procedere con l'ordine.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Metodi di aggiornamento dell'inventario
Le modifiche alle informazioni sull'inventario di un prodotto possono avvenire molto più spesso delle modifiche alle informazioni di catalogo. Pertanto, viene fornito un insieme specializzato di metodi per gestire grandi volumi di aggiornamenti specifici dell'inventario. Questi metodi sono asincroni grazie alle ottimizzazioni downstream che supportano centinaia di aggiornamenti simultanei per prodotto, senza compromettere le prestazioni.
Aggiornamenti incrementali
Tieni presente che ti consigliamo di seguire la guida agli aggiornamenti dell'inventario locale per emettere aggiornamenti incrementali dell'inventario. I metodi API più recenti offrono un controllo più granulare per gli attributi dell'inventario in base al luogo.
fulfillment_info
viene spesso utilizzato per codificare la disponibilità di evasione degli ordini a livello di luogo per un Product
. In alcuni casi, la disponibilità di evasione degli ordini per alcuni luoghi specifici potrebbe cambiare e potresti decidere di emettere aggiornamenti che descrivono questa modifica anziché utilizzare il metodo UpdateProduct
per specificare nuovamente le informazioni di evasione dell'intero prodotto.
In questi casi, è possibile utilizzare i metodi AddFulfillmentPlaces
e RemoveFulfillmentPlaces
per aggiornare in modo incrementale le modifiche di evasione di un prodotto in base agli ID luogo aggiunti o rimossi per un determinato tipo di evasione.
Java
Per scoprire come installare e utilizzare la libreria client per Retail, consulta Librerie client per il retail. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Retail Java.
Per l'autenticazione in Retail, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" type: "pickup-in-store" place_ids: "store0" place_ids: "store1" add_time: { seconds: 100 nanos: 100 } allow_missing: true }
Questo AddFulfillmentPlacesRequest
di esempio aggiunge il tipo di evasione "pickup-in-store"
agli ID posizione "store0"
e "store1"
per il prodotto specificato. Poiché AddFulfillmentPlacesRequest.allow_missing
è impostato su true, anche se il prodotto non esiste già, le informazioni aggiornate sull'inventario verranno archiviate per quando il prodotto verrà creato. L'aggiornamento ha un timestamp AddFulfillmentPlacesRequest.add_time
per evitare che gli aggiornamenti inattivi sostituiscano lo stato di evasione di questi ID luogo. Queste funzionalità sono discusse in modo
maggiore in dettaglio nelle sezioni seguenti.
Il comportamento di RemoveFulfillmentPlacesRequest
è identico e lo schema è molto simile.
Quando l'elemento fulfillment_types
viene aggiornato da
AddLocalInventories
e
RemoveLocalInventories
, riflette una mappatura da
ogni ID luogo a un elenco dei tipi di evasione degli ordini supportati. Quando
fulfillment_info
viene aggiornato da
AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
, riflette una mappatura
di ogni tipo di evasione specifico a un elenco di ID luogo che supporta ciascun
tipo. Entrambi i tipi di API stanno modificando le stesse informazioni di fulfillment
sottostanti e l'effetto di entrambi i tipi di API si riflette in
Product.fulfillment_info
.
Aggiornamenti non incrementali
price_info
, availability
e available_quantity
non possono essere aggiornati in modo incrementale
perché rappresentano l'inventario a livello di prodotto, anziché le informazioni
a livello di luogo. Inoltre, potrebbe essere opportuno emettere aggiornamenti non incrementali a fulfillment_info
anziché solo modifiche incrementali. In questi
casi, si consiglia il metodo SetInventory
.
Java
Per scoprire come installare e utilizzare la libreria client per Retail, consulta Librerie client per il retail. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Retail Java.
Per l'autenticazione in Retail, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Proto
{ product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" availability: IN_STOCK fulfillment_info: { type: "pickup-in-store" place_ids: "store0" place_ids: "store1" place_ids: "store2" place_ids: "store3" } fulfillment_info: { type: "same-day-delivery" } } set_time: { seconds: 100 nanos: 100 } set_mask: { paths: "availability" paths: "fulfillment_info" } allow_missing: true }
In questa richiesta specifica, i campi SetInventoryRequest.product.fulfillment_info
sono descrizioni complete degli ID luogo idonei di ogni tipo di evasione degli ordini,
anziché specifiche incrementali. L'aggiornamento a "same-day-delivery"
indica che nessun ID luogo è idoneo per questo tipo di evasione degli ordini per il
prodotto. Tutti gli altri tipi di evasione non sono aggiornati in questa richiesta. Pertanto, questo metodo può essere utilizzato per sostituire gli ID luogo solo per un sottoinsieme di tipi di evasione degli ordini, lasciando invariati gli altri tipi.
Per impostazione predefinita,SetInventory
aggiornerà tutti i campi dell'inventario se
SetInventory.set_mask
non viene configurato o se vuoto. Se la maschera non è vuota o se un campo di inventario non è elencato esplicitamente in SetInventoryRequest.set_mask
, qualsiasi valore specificato per quel campo dell'inventario verrà ignorato nella richiesta di aggiornamento.
Come per gli aggiornamenti incrementali, il campo SetInventoryRequest.set_time
può essere
utilizzato per impostare un orario di aggiornamento che corrisponderà all'ora dell'ultimo aggiornamento registrato di
tutti i campi dell'inventario aggiornati.
Protezioni per i timestamp per gli aggiornamenti dell'inventario
Esistono diversi percorsi per aggiornare i campi di inventario di un prodotto e, per proteggerti dagli aggiornamenti fuori ordine, ogni campo dell'inventario è associato a una data/ora di aggiornamento più recente.
L'ora dell'ultimo aggiornamento viene registrata per price_info
, availability
,
available_quantity
e ogni coppia di (fulfillment_info.place_ids,
fulfillment_info.type)
.
I metodi AddFulfillmentPlaces
, RemoveFulfillmentPlaces
e SetInventory
consentono al chiamante di specificare un orario di aggiornamento per l'invio della richiesta. La data e l'ora dell'aggiornamento vengono confrontate con l'ora dell'ultimo aggiornamento registrata per i campi di inventario pertinenti e l'aggiornamento viene confermato solo se la data/ora dell'aggiornamento è successiva a quella dell'ultimo aggiornamento.
Ad esempio, supponiamo che per l'ID luogo "store1"
sia attivato il tipo di evasione degli ordini "pickup-in-
store"
e che l'ora dell'ultimo aggiornamento registrata sia impostata sull'ora T
. Se
RemoveFulfillmentPlacesRequest.type = "pickup-in-store"
e
RemoveFulfillmentPlacesRequest.place_ids
contiene "store1"
, la richiesta
annullerà "pickup-in-store"
da "store1"
se e solo se
RemoveFulfillmentPlacesRequest.remove_time
è successiva all'ora T
. Lo stesso vale per AddFulfillmentPlacesRequests
.
SetInventory
funziona in modo simile per l'aggiornamento di price_info
, availability
e available_quantity
. Quando aggiorni fulfillment_info
, un SetInventoryRequest
chiede implicitamente di aggiungere tutti gli ID luogo specificati per un determinato tipo di evasione e di rimuovere tutti gli ID luogo esistenti non specificati.
Di conseguenza, quando viene elaborato il SetInventoryRequest
, l'aggiornamento di fulfillment_info
viene implicitamente convertito in AddFulfillmentPlacesRequest
e
RemoveFulfillmentPlacesRequest
per ogni tipo di evasione specificato. Ciò significa che se per qualsiasi luogo esistente "store1"
con evasione "pickup-in-store"
la data/ora dell'ultimo aggiornamento T
è più recente di SetInventoryRequest.set_time
, l'aggiunta/rimozione implicita su "store1"
e "pickup-in-store"
non verrà applicata.
Precarica le informazioni sull'inventario
Ciascuno dei metodi di aggiornamento dell'inventario consente al chiamante di impostare allow_missing
nella richiesta. Quando allow_missing
è impostato su true, un aggiornamento dell'inventario a un Product
inesistente viene elaborato come se il Product
esistesse in base alle specifiche del metodo. Le informazioni sull'inventario verranno conservate per un massimo di due giorni se il Product
corrispondente non viene creato tramite CreateProduct
entro questo periodo di tempo.
Java
Quando utilizzare i metodi Product
Sebbene sia possibile aggiornare i campi dell'inventario con i metodi CRUD del prodotto, il chiamante deve essere esplicitamente consapevole degli effetti sulle informazioni di inventario esistenti o preesistenti.
Si tratta di metodi sincroni, vale a dire che le ottimizzazioni downstream utilizzate per i metodi di inventario non sono applicabili e potrebbe risultare costoso affidarsi a questi metodi per aggiornamenti frequenti dell'inventario. Se possibile, usa i metodi di aggiornamento dell'inventario sopra indicati.
CreateProduct
Quando viene richiamato CreateProduct
con qualsiasi campo dell'inventario impostato, i valori forniti in CreateProductRequest.product
sostituiranno tutti i valori precaricati per questi rispettivi campi. Se non vengono impostati campi di inventario,
le informazioni preesistenti sull'inventario verranno utilizzate automaticamente.
Inoltre, l'ora dell'ultimo aggiornamento dei campi dell'inventario sottoposti a override verrà reimpostata all'ora della chiamata al metodo.
CreateProduct
con inventario precaricato
PROTO
{ parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch" product_id: "p123" product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" title: "some product" type: VARIANT } }
In questo esempio, per il prodotto creato non è impostato alcun campo dell'inventario, il che significa che le informazioni sull'inventario precaricate verranno utilizzate automaticamente se aggiornate con i metodi di aggiornamento dell'inventario. Questo può essere utile quando gli aggiornamenti dell'inventario
sono disaccoppiati dagli aggiornamenti del catalogo e vuoi che un elemento Product
appena
creato si sincronizzi con qualsiasi informazione preesistente sull'inventario.
CreateProduct
con inventario esplicito
PROTO
{ parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch" product_id: "p123" product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" title: "some product" type: VARIANT availability: OUT_OF_STOCK fulfillment_info: { type: "pickup-in-store" } fulfillment_info: { type: "same-day-delivery" } } }
In questo esempio, viene creato un Product
con campi dell'inventario impostati esplicitamente.
Questi campi sostituiranno tutti i valori preesistenti, ignorando l'ora dell'ultimo aggiornamento per i campi corrispondenti. Di conseguenza, per la risorsa Product
appena creata
è garantita la disponibilità impostata su OUT_OF_STOCK
e nessun ID luogo
supporterà i tipi di evasione degli ordini "pickup-in-store"
e "same-day-delivery"
.
CreateProduct
con informazioni sull'inventario può essere utile se non hai la certezza che tutte le informazioni sull'inventario precaricate siano accurate e preferisci impostare esplicitamente l'inventario al momento della creazione (Product
) per sincronizzare completamente il catalogo e l'inventario.
UpdateProduct
Quando viene richiamato UpdateProduct
e la maschera dei campi UpdateProductRequest.update_mask
contiene qualsiasi campo di inventario, i valori forniti in UpdateProductRequest.product
sostituiranno i valori precaricati per i rispettivi campi.
Inoltre, l'ora dell'ultimo aggiornamento dei campi dell'inventario sottoposti a override verrà reimpostata all'ora della chiamata al metodo.
PROTO
{ product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" availability: IN_STOCK fulfillment_info: { type: "pickup-in-store" place_ids: "store0" place_ids: "store1" place_ids: "store2" place_ids: "store3" } fulfillment_info: { type: "same-day-delivery" } } update_mask: { paths: "availability" paths: "fulfillment_info" } }
Questo esempio è molto simile all'esempio SetInventory
, tranne per il fatto che l'applicazione dell'aggiornamento è garantita indipendentemente dall'ora dell'ultimo aggiornamento di ciascun campo dell'inventario.
UpdateProduct
per l'inventario può essere utile quando è necessaria una sincronizzazione completa delle informazioni sull'inventario, ignorando le protezioni del timestamp.
Sebbene sia possibile precaricare le informazioni sull'inventario utilizzando UpdateProduct
impostando UpdateProductRequest.allow_missing
su true
per eseguire un aumento
di Product
, il metodo richiede l'impostazione di campi di catalogo specifici come
UpdateProductRequest.product.title
. Di conseguenza, consigliamo di utilizzare
i metodi di aggiornamento dell'inventario per precaricare i casi d'uso.
DeleteProduct
Quando viene richiamato DeleteProduct
, vengono eliminate tutte le informazioni sull'inventario
esistenti per il prodotto specificato in DeleteProductRequest.name
, inclusi tutti i record relativi all'ora dell'ultimo aggiornamento per ogni campo
dell'inventario.