LocalInventory
sind die Inventarinformationen, die mit einer bestimmten
mit place_id
gekennzeichnet ist. Ein LocalInventory
könnte beispielsweise
die für ein Geschäft oder eine Region erstellt wurden, 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 sichtbar über
Product.local_inventories
(mit Ausnahme von fulfillment_types
,
aus Gründen der Abwärtskompatibilität,
Product.fulfillment_info
. 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 erwähnt im
Dokumentation zur Inventaraktualisierung fulfillment_types
, das durch AddLocalInventories
und RemoveLocalInventories
aktualisiert wird (siehe unten), stellt eine Zuordnung von jeder Orts-ID zu einer Liste der unterstützten Auftragsausführungstypen dar. fulfillment_info
, das durch AddFulfillmentPlaces
und RemoveFulfillmentPlaces
aktualisiert wird, stellt eine Zuordnung von jedem Auftragsausführungstyp zu einer Liste der Orts-IDs dar, 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 von lokalem Inventar
Änderungen an den Informationen zum lokalen Inventar eines Produkts können wesentlich häufiger erfolgen als Änderungen an seinen Kataloginformationen. Ein spezialisiertes Set Methoden bereitgestellt werden, um große Mengen Aktualisierungen. 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 in der Spalte
Liste mit LocalInventory
-Einträgen im Anfragetext kann angegeben werden durch
AddLocalInventoriesRequest.add_mask
. Gültige add_mask
-Werte sind:
price_info
: überschreibtLocalInventory.price_info
.attributes
: AlleLocalInventory.attributes
werden überschrieben. Vorhandene Attribute, die nicht im Anfragetext vorkommen, werden entfernt.attributes.PLACEHOLDER_NAME
: überschreibt nur das angegebene benutzerdefinierte Attribut. Wenn in der Anfrage kein vorhandener Attributname angegeben wird, 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 den Wertattributes
undattributes.PLACEHOLDER_NAME
in derselben Anfrage 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 mit einem Ort verknüpfte Attribute mit anpassbarem Namen und
Werte. Da LocalInventory
von store1
nicht den Wert von attr1
liefert
in der Anfrage wird das benutzerdefinierte Attribut attr1
aus dem vorhandenen
LocalInventory
von store1
, falls vorhanden. Für store2
ist der Wert des Attributs attr1
auf den Textwert store2_value
festgelegt. Andere vorhandene benutzerdefinierte Attribute auf 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 zentralen 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,
Produkt nicht bereits vorhanden ist, werden die aktualisierten Informationen zum lokalen Inventar
für den Zeitpunkt der Produkterstellung gespeichert werden. 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 dazu, wie Sie
veraltete Aktualisierungen und die Speicherung von Informationen zum lokalen Inventar, bevor das Produkt
erstellt haben, siehe
Zeitstempelschutz für Aktualisierungen von lokalem Inventar und
Inventarinformationen werden vorab geladen.
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 eine einzelne lokale
Inventar mit der Orts-ID "store3"
für das angegebene Produkt. 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
RemoveLocalInventories
kann zum Entfernen verwendet werden
vorhandene lokale Verzeichnisse an Orten mit vorgegebenen Orts-IDs.
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.
Für jeden (place_id, price_info)
wird die letzte Aktualisierungszeit aufgezeichnet.
(place_id, attributes[...])
und (place_id, fulfillment_types[...])
Paar zusammen.
Mit den Methoden AddLocalInventories
und RemoveLocalInventories
kann der Aufrufer eine Aktualisierungszeit der Anfrage angeben. Zeitpunkt der Aktualisierung:
verglichen mit der letzten Aktualisierungszeit für das relevante Inventar
und die Aktualisierung wird nur dann übernommen, wenn der Aktualisierungszeitpunkt strikt ist.
nach der letzten Aktualisierung.
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 im Rahmen des Antrags price_info
aus "store1"
entfernt
Nur wenn RemoveLocalInventoriesRequest.remove_time
nach dem T
liegt.
Dasselbe gilt für RemoveLocalInventoriesRequest
-Werte.
Im Zeitstempelschutz ist es möglich,
Mit RemoveLocalInventoriesRequest
werden möglicherweise nur bestimmte Felder einer
LocalInventory
. 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
-Objekt enthält,
"store1"
und remove_time
auf T3
gesetzt ist (wobei T1 < T3 < T2
), dann
price_info
von store_1
wird entfernt, während sein Attribut attr1
den
unberührt bleiben.
Inventarinformationen vorab laden
Bei jeder der Methoden zur Aktualisierung des lokalen Inventars kann der Aufrufer Folgendes festlegen:
allow_missing
in der Anfrage. 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 Informationen zum lokalen Inventar werden maximal zwei Tage lang aufbewahrt, wenn der entsprechende Product
innerhalb dieses Zeitraums nicht über CreateProduct
erstellt wird.