LocalInventory
sind die Inventarinformationen, die mit einem bestimmten Ort verknüpft sind und durch seine place_id
identifiziert werden. Ein LocalInventory
kann beispielsweise für ein Geschäft oder eine Region erstellt werden, in der ein bestimmter Preis verfügbar ist.
LocalInventory
enthält die folgenden Felder:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
Vorhandene LocalInventory
-Einträge sind bis Product.local_inventories
sichtbar (mit Ausnahme von fulfillment_types
, das aus Gründen der Abwärtskompatibilität über Product.fulfillment_info
verfügbar ist). Dieses Feld wird nur ausgegeben. Die Einstellung Product.local_inventories
für Product
CRUD APIs oder SetInventory
hat keine Auswirkungen.
Jedes (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
-Paar verweist auf dasselbe (fulfillment_info.place_ids, fulfillment_info.type)
-Paar, das in der Dokumentation zur Inventaraktualisierung erwähnt wird. fulfillment_types
, der von AddLocalInventories
und RemoveLocalInventories
wie unten beschrieben aktualisiert wird, spiegelt eine Zuordnung von jeder Orts-ID zu einer Liste der unterstützten Auftragsausführungstypen wider. fulfillment_info
, das von AddFulfillmentPlaces
und RemoveFulfillmentPlaces
aktualisiert wurde, entspricht einer Zuordnung von jedem spezifischen Auftragsausführungstyp zu einer Liste von Orts-IDs, die einen solchen Typ unterstützen.
Beide API-Typen ändern jedoch dieselben zugrunde liegenden Auftragsausführungsinformationen und die Auswirkungen beider API-Typen spiegeln sich in Product.fulfillment_info
wider.
Methoden zur Aktualisierung von lokalem Inventar
Die lokalen Inventarinformationen eines Produkts können wesentlich häufiger geändert werden als die Kataloginformationen. Es stehen spezielle Methoden zur Verfügung, um große Mengen an inventarspezifischen Aktualisierungen für lokales Inventar zu verarbeiten. Diese Methoden sind aufgrund von nachgelagerten Optimierungen asynchron, die Hunderte von gleichzeitigen Aktualisierungen pro Produkt ohne Leistungseinbußen unterstützen.
AddLocalInventories
AddLocalInventories
kann verwendet werden, um lokale Inventare an neuen Orten zu erstellen (die durch neue place_id
-Objekte dargestellt werden) oder um vorhandene Felder in vorhandenen lokalen Inventaren zu aktualisieren. Felder, die der Liste der LocalInventory
-Einträge im Anfragetext hinzugefügt oder aktualisiert werden, können über AddLocalInventoriesRequest.add_mask
angegeben werden. Gültige add_mask
-Werte sind:
price_info
: überschreibtLocalInventory.price_info
.attributes
: überschreibt alleLocalInventory.attributes
. Vorhandene Attribute, die nicht im Anfragetext angegeben sind, werden entfernt.attributes.PLACEHOLDER_NAME
: Überschreibt nur das angegebene benutzerdefinierte Attribut. Wenn in der Anfrage kein vorhandener Attributname angegeben ist, wird das Attribut gelöscht. Es können mehrereattributes.PLACEHOLDER_NAME
angegeben werden, solange die einzelnen Attributnamen unterschiedlich sind.AddLocalInventoriesRequest.add_mask
kann jedoch nicht sowohl den Wertattributes
als auch den Wertattributes.PLACEHOLDER_NAME
in derselben Anfrage enthalten.fulfillment_types
: überschreibt alle unterstützten Auftragsausführungstypen. Vorhandene Auftragsausführungstypen, die nicht im Anfragetext angegeben sind, werden entfernt.
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 }
Im Beispiel AddLocalInventoriesRequest
werden zwei lokale Inventare mit den Orts-IDs "store1"
und "store2"
für das angegebene Produkt hinzugefügt oder aktualisiert. Wenn store1
vorhanden ist und store2
vor der Anfrage nicht vorhanden ist, aktualisiert die Anfrage die Felder von store1
und erstellt store2
mit den angegebenen Feldwerten.
Dieses AddLocalInventoriesRequest.add_mask
gibt an, dass price_info
, ein einzelnes benutzerdefiniertes Attribut mit dem Namen "attr1"
und fulfillment_types
mit den in AddLocalInventoriesRequest.local_inventories
angegebenen Werten aktualisiert werden sollen.
attributes
sind Attribute, die einem Ort mit anpassbarem Namen und benutzerdefinierten Werten zugeordnet sind. Da LocalInventory
von store1
nicht den Wert von attr1
in der Anfrage bereitstellt, wird das benutzerdefinierte Attribut attr1
aus dem vorhandenen LocalInventory
von store1
(falls vorhanden) gelöscht. Für store2
wird der Wert des Attributs attr1
auf den Textwert store2_value
festgelegt. Andere vorhandene benutzerdefinierte Attribute für store1
und store2
bleiben unverändert.
fulfillment_types
steht für eine Liste der Verfügbarkeit der Auftragsausführung für eine Product
an einem einzigen Ort. Sie ist identisch und akzeptiert die gleichen Werte wie fulfillment_info.type
. Dieser AddLocalInventoriesRequest
gibt an, dass store1
die Auftragsausführungstypen pickup-in-store
und ship-to-store
unterstützt, während store1
custom-type-1
unterstützt. Vor dieser Aktualisierung vorhandene Auftragsausführungstypen, die nicht in der Anfrage erwähnt werden, werden gelöscht.
Da AddLocalInventoriesRequest.allow_missing
auf „true“ gesetzt ist, werden die aktualisierten Informationen zum lokalen Inventar auch dann gespeichert, wenn das Produkt schließlich erstellt wird. Der Zeitstempel der Aktualisierung enthält AddLocalInventoriesRequest.add_time
, damit die angegebenen Felder dieser Orts-IDs nicht durch veraltete Aktualisierungen überschrieben werden. Weitere Informationen dazu, wie Sie veraltete Aktualisierungen verhindern und Informationen zum lokalen Inventar speichern, bevor das Produkt erstellt wird, finden Sie unter Zeitstempelschutz für Aktualisierungen des lokalen Inventars und Inventarinformationen vorab laden.
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 } }
Mit dem Beispiel AddLocalInventoriesRequest
wird ein einzelnes lokales Inventar mit der Orts-ID "store3"
für das angegebene Produkt hinzugefügt oder aktualisiert. Da seine add_mask
"attributes"
enthält, werden alle vorhandenen benutzerdefinierten Attribute von store3
gelöscht und wie in der Anfrage angegeben durch attr1
und attr2
ersetzt.
Da allow_missing
nicht festgelegt ist, muss das angegebene Produkt vorhanden sein. Andernfalls wird der Fehler NOT_FOUND
ausgegeben.
RemoveLocalInventories
Mit RemoveLocalInventories
lassen sich vorhandene lokale Inventare an Orten mit Orts-IDs entfernen.
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 }
Im Beispiel RemoveLocalInventoriesRequest
werden lokale Inventare für Orte mit den Orts-IDs "store1"
und "store2"
für das angegebene Produkt entfernt. Der Zeitstempel der Aktualisierung hat RemoveLocalInventoriesRequest.remove_time
, damit das Löschen dieser Orts-IDs nicht durch veraltete Aktualisierungen überschrieben wird. Für angegebene Orts-IDs ohne lokale Inventare wird in der Anfrage auch die Aktualisierungszeit auf remove_time
erfasst. Weitere Informationen zu Zeitstempeln für Updates finden Sie unter Zeitstempelschutz für Aktualisierungen des lokalen Inventars.
Zeitstempelschutz bei Aktualisierung des lokalen Inventars
Zum Schutz vor Aktualisierungen außerhalb der Reihenfolge ist jedem lokalen Inventarfeld eine letzte Aktualisierungszeit zugeordnet.
Die letzte Aktualisierungszeit wird für jedes (place_id, price_info)
-, (place_id, attributes[...])
- und (place_id, fulfillment_types[...])
-Paar aufgezeichnet.
Mit den Methoden AddLocalInventories
und RemoveLocalInventories
kann der Aufrufer eine Aktualisierungszeit für die Ausgabe der Anfrage angeben. Diese Aktualisierungszeit wird mit der letzten Aktualisierungszeit verglichen, die für die entsprechenden Inventarfelder erfasst wurde. Die Aktualisierung wird nur dann durchgeführt, wenn die Aktualisierungszeit strikt nach der letzten Aktualisierung liegt.
Angenommen, für die Orts-ID "store1"
ist price_info
angegeben, wobei die letzte aufgezeichnete Aktualisierungszeit auf T
festgelegt ist. Wenn RemoveLocalInventoriesRequest.place_ids
"store1"
enthält, entfernt die Anfrage price_info
nur dann aus "store1"
, wenn RemoveLocalInventoriesRequest.remove_time
nach dem Zeitpunkt T
liegt.
Dasselbe gilt für RemoveLocalInventoriesRequest
s.
Beim Zeitstempelschutz ist es möglich, dass ein RemoveLocalInventoriesRequest
nur bestimmte Felder eines LocalInventory
anstelle aller Felder entfernt. Angenommen, für ein lokales Inventar mit der Orts-ID "store1"
ist der price_info
mit der letzten aufgezeichneten Aktualisierungszeit auf T1
festgelegt und das einzige vorhandene benutzerdefinierte Attribut mit dem Namen "attr1"
ist der letzte aufgezeichnete Aktualisierungszeitpunkt um T2
. Wenn ein RemoveLocalInventoriesRequest.place_ids
"store1"
enthält und remove_time
auf T3
gesetzt ist (wobei T1 < T3 < T2
), wird price_info
von store_1
von store_1
entfernt. Das Attribut attr1
bleibt unverändert.
Inventarinformationen vorab laden
Mit jeder der Methoden zur Aktualisierung des lokalen Inventars kann der Aufrufer allow_missing
in der Anfrage festlegen. Wenn allow_missing
auf „true“ gesetzt ist, wird das lokale Inventar in eine nicht vorhandene Product
aktualisiert, als ob die Product
gemäß den Methodenspezifikationen vorhanden ist. Die Informationen zum lokalen Inventar werden maximal zwei Tage aufbewahrt, wenn die entsprechende Product
nicht innerhalb dieses Zeitraums über CreateProduct
erstellt wird.