LocalInventory
sind die Inventarinformationen, die mit einem bestimmten Ort verknüpft sind, der durch seine place_id
identifiziert wird. Eine LocalInventory
kann beispielsweise für ein Geschäft oder eine Region erstellt werden, in der ein bestimmter Preis gilt.
LocalInventory
hat die folgenden Felder:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
Vorhandene LocalInventory
-Einträge sind über 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 dient nur der Ausgabe. Die Einstellung von 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
, das durch AddLocalInventories
und RemoveLocalInventories
aktualisiert wird, wie unten beschrieben, entspricht einer Zuordnung jeder Orts-ID zu einer Liste der unterstützten Auftragsausführungstypen. fulfillment_info
, das durch AddFulfillmentPlaces
und RemoveFulfillmentPlaces
aktualisiert wird, entspricht einer Zuordnung jedes Auftragsausführungstyps zu einer Liste der Orts-IDs, die diesen Typ unterstützen.
Beide API-Typen ändern jedoch dieselben zugrunde liegenden Informationen zur Auftragsausführung und die Auswirkungen beider API-Typen werden auf Product.fulfillment_info
angewendet.
Methoden zur Aktualisierung des lokalen Inventars
Änderungen an den Informationen zum lokalen Inventar eines Produkts können wesentlich häufiger erfolgen als Änderungen an seinen Kataloginformationen. Es stehen spezielle Methoden zur Verfügung, um große Mengen an lokalen inventarspezifischen Updates zu bewältigen. Diese Methoden sind asynchron aufgrund von nachgelagerten Optimierungen, die Hunderte von gleichzeitigen Aktualisierungen pro Produkt unterstützen, ohne die Leistung zu beeinträchtigen.
AddLocalInventories
Mit AddLocalInventories
können Sie lokale Inventare an neuen Orten erstellen (dargestellt durch neue place_id
s) oder vorhandene Felder in vorhandenen lokalen Inventaren 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 Werte für add_mask
sind:
price_info
: überschreibtLocalInventory.price_info
.attributes
: AlleLocalInventory.attributes
werden überschrieben. Vorhandene Attribute, die im Anfragetext nicht erwähnt werden, werden entfernt.attributes.PLACEHOLDER_NAME
: Es wird nur das angegebene benutzerdefinierte Attribut überschrieben. Wenn in der Anfrage kein vorhandener Attributname angegeben ist, wird das Attribut gelöscht. Es können mehrereattributes.PLACEHOLDER_NAME
angegeben werden, solange sich die Attributnamen unterscheiden.AddLocalInventoriesRequest.add_mask
darf jedoch in derselben Anfrage nicht sowohl den Wertattributes
als auch die Werteattributes.PLACEHOLDER_NAME
enthalten.fulfillment_types
: Überschreibt alle unterstützten Auftragsausführungstypen. Vorhandene Auftragsausführungstypen, die im Anfragetext nicht erwähnt werden, 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 }
In diesem Beispiel AddLocalInventoriesRequest
werden zwei lokale Inventare mit den Standort-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, werden durch die Anfrage die Felder von store1
aktualisiert und store2
mit den angegebenen Feldwerten erstellt.
Mit diesem AddLocalInventoriesRequest.add_mask
wird angegeben, 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 mit einem Ort mit anpassbarem Namen und Werten verknüpft sind. Da für LocalInventory
von store1
in der Anfrage kein Wert für attr1
angegeben ist, wird das benutzerdefinierte Attribut attr1
aus dem vorhandenen LocalInventory
von store1
gelöscht, falls es vorhanden ist. Der Wert des Attributs attr1
von store2
ist auf den Textwert store2_value
festgelegt. Andere vorhandene benutzerdefinierte Attribute auf store1
und store2
bleiben unverändert.
fulfillment_types
ist eine Liste der Verfügbarkeit der Auftragsausführung für eine Product
an einem einzelnen Ort. Es ist dasselbe und akzeptiert dieselben Werte wie fulfillment_info.type
. Diese 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. Auftragsausführungstypen, die vor dieser Aktualisierung vorhanden waren und 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 bei der Erstellung des Produkts gespeichert, auch wenn das Produkt noch nicht vorhanden ist. Die Aktualisierung ist mit einem Zeitstempel versehen, der mit AddLocalInventoriesRequest.add_time
versehen ist, um zu verhindern, dass veraltete Aktualisierungen die angegebenen Felder dieser Orts-IDs überschreiben. Weitere Informationen zum Verhindern veralteter Aktualisierungen und zum Speichern von Informationen zum lokalen Inventar, bevor das Produkt erstellt wird, finden Sie unter Zeitstempelschutz für Inventaraktualisierungen 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 } }
In diesem Beispiel AddLocalInventoriesRequest
wird ein einzelnes lokales Inventar mit der Orts-ID "store3"
für das angegebene Produkt hinzugefügt oder aktualisiert. Da das add_mask
von store3
"attributes"
enthält, werden alle vorhandenen benutzerdefinierten Attribute von store3
gelöscht und durch attr1
und attr2
ersetzt, wie in der Anfrage angegeben.
Da allow_missing
nicht festgelegt ist, muss das angegebene Produkt vorhanden sein. Andernfalls wird der Fehler NOT_FOUND
ausgegeben.
RemoveLocalInventories
Mit RemoveLocalInventories
können vorhandene lokale Inventare an Standorten mit bestimmten Orts-IDs entfernt werden.
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 }
In diesem Beispiel RemoveLocalInventoriesRequest
wird lokales Inventar für Standorte mit den Standort-IDs "store1"
und "store2"
für das angegebene Produkt entfernt. Die Aktualisierung ist mit einem Zeitstempel versehen, der mit RemoveLocalInventoriesRequest.remove_time
versehen ist, um zu verhindern, dass veraltete Aktualisierungen das Löschen dieser Orts-IDs überschreiben. Für angegebene Orts-IDs ohne vorhandenes lokales Inventar wird in der Anfrage auch die Aktualisierungszeit auf remove_time
festgelegt. Weitere Informationen zu Zeitstempeln für Aktualisierungen finden Sie unter Zeitstempelschutz für lokale Inventaraktualisierungen.
Zeitstempelschutz für Aktualisierungen des lokalen Inventars
Zum Schutz vor Out-of-Order-Aktualisierungen ist jedes lokale Inventarfeld mit einer letzten Aktualisierungszeit verknüpft.
Die letzte Aktualisierungszeit wird für jedes Paar von (place_id, price_info)
, (place_id, attributes[...])
und (place_id, fulfillment_types[...])
aufgezeichnet.
Mit den Methoden AddLocalInventories
und RemoveLocalInventories
kann der Aufrufer eine Aktualisierungszeit der Anfrage angeben. Diese Aktualisierungszeit wird mit der letzten Aktualisierungszeit für die relevanten Inventarfelder verglichen und die Aktualisierung wird nur dann durchgeführt, wenn die Aktualisierungszeit ausschließlich hinter der letzten Aktualisierungszeit liegt.
Beispiel: Für die Orts-ID "store1"
ist price_info
festgelegt, wobei die letzte aufgezeichnete Aktualisierungszeit auf Zeit T
gesetzt ist. Wenn RemoveLocalInventoriesRequest.place_ids
"store1"
enthält, wird in der Anfrage price_info
nur dann aus "store1"
entfernt, wenn die RemoveLocalInventoriesRequest.remove_time
hinter der Uhrzeit T
liegt.
Dasselbe gilt für RemoveLocalInventoriesRequest
.
Bei der Zeitstempel-Schutzfunktion kann es vorkommen, dass eine RemoveLocalInventoriesRequest
nur bestimmte Felder einer LocalInventory
entfernt, anstatt sie vollständig zu entfernen. Angenommen, für ein lokales Inventar mit der Orts-ID "store1"
ist price_info
mit der letzten aufgezeichneten Aktualisierungszeit T1
festgelegt. Das einzige vorhandene benutzerdefinierte Attribut mit dem Namen "attr1"
hat die letzte aufgezeichnete Aktualisierungszeit T2
. Wenn ein RemoveLocalInventoriesRequest.place_ids
"store1"
enthält und remove_time
auf T3
(wo T1 < T3 < T2
) festgelegt ist, wird price_info
von store_1
entfernt, während das Attribut attr1
unverändert bleibt.
Inventarinformationen vorab laden
Bei jeder Methode zur Aktualisierung des lokalen Inventars kann der Aufrufer allow_missing
in der Anfrage festlegen. Wenn allow_missing
auf „wahr“ gesetzt ist, wird eine lokale Inventaraktualisierung auf ein nicht vorhandenes Product
verarbeitet, als wäre das Product
gemäß den Methodenspezifikationen vorhanden. Die lokalen Inventarinformationen werden maximal zwei Tage lang aufbewahrt, wenn der entsprechende Product
innerhalb dieses Zeitraums nicht über CreateProduct
erstellt wird.