Événements de l'instantané d'inventaire V2
Les événements d'instantanés d'inventaire sont déclenchés lorsqu'un instantané d'inventaire est capturé dans la gestion des stocks en magasin à un moment donné. En utilisant Inventory snapshot events V2, vous pouvez avoir plusieurs messages de vos données capturées.
Pour utiliser de manière fiable les messages d'instantanés d'inventaire V2, il est important de comprendre comment identifier et traiter correctement les données d'instantanés par le biais de messages d'instantanés individuels. Vous pouvez créer un calendrier de cette activité quotidienne et utiliser cette fonction pour prendre un instantané des données d'inventaire à ce moment précis.
Key identifiers
tenantIdstoreIdtimestamp
Cette combinaison correspond à une adresse uniquebatchId, qui est utilisée pour suivre tous les messages instantanés appartenant à cet instantané de magasin spécifique.
Processing snapshot messages
- Séquencement
- Chaque message d'instantané comprend une adresse
messageSequenceindiquant sa position dans le flux d'instantanés. - Le dernier message du lot comprend un champ
totalMessages, qui représente le nombre total de messages instantanés uniques attendus. Dans ce dernier message, le champ de données est vide. Le message final indique que l'instantané est terminé. - Ce champ est vide dans tous les messages précédents.
- Chaque message d'instantané comprend une adresse
- Livraison en cas de rupture de stock
- Les messages instantanés peuvent arriver dans le désordre.
- Votre système doit suivre les valeurs de
messageSequenceparbatchIdpour s'assurer que tous les messages attendus ont été reçus. - Un instantané est considéré comme complet lorsque le nombre de valeurs uniques
messageSequencecorrespond au champ totalMessages dans le message final.
- Dédoublonnage
- Un message instantané peut être publié plusieurs fois, ce qui entraîne des doublons.
- Si deux messages partagent le même
messageSequenceet un horodatage identique pour unbatchIdparticulier, ils sont considérés comme des doublons. - Vous pouvez vous débarrasser de l'un d'entre eux en toute sécurité.
- Préférence pour l'horodatage le plus récent
- Parfois, plusieurs messages instantanés peuvent arriver avec le même messageSequence mais des horodatages différents pour le même magasin.
- Dans ce cas, vous devez conserver et traiter le message dont l'horodatage est le plus récent.
- Les anciennes versions de cette séquence peuvent être éliminées en toute sécurité.
Cette séquence d'étapes permet de s'assurer que votre système reflète l'état le plus récent de l'instantané.
- Exemple de flux
Store1- Traitement des messages en double (même horodatage)Un instantané est généré pour
Store1. Le système reçoit :Snapshot Message 1: messageSequence = 1, totalMessages = "", timestamp = 2024-10-10T08:00ZSnapshot Message 2: messageSequence = 2, totalMessages = "", timestamp = 2024-10-10T08:00ZSnapshot Message 3: messageSequence = 2, totalMessages = "", timestamp = 2024-10-10T08:00Z ← DuplicateSnapshot Message 4: messageSequence = 3, totalMessages = "3", timestamp = 2024-10-10T08:00ZLes messages 2 et 3 sont des doublons. Puisque les deux ont la même séquence et le même horodatage, écartez-en un.
Utilisez ici les messages instantanés les plus récents (messages 3, 4 et 5). Les messages les plus anciens (messages 1 et 2) ne sont pas pris en compte car ils sont obsolètes.
Les messages instantanés peuvent arriver dans le désordre. En raison de cette action, votre système doit suivre et valider chaque message d'instantané par son numéro de séquence et les métadonnées batchId avant de marquer un instantané comme complet.
messages[].data .{
"messages": [
{
"data": [
{
"productId": "100001",
"unitOfMeasure": "EACH",
"inventoryStatus": "GOOD",
"productClass": "",
"segmentType": "",
"segment": "",
"tagNo": "",
"batchNo": "",
"lotNo": "",
"manufacturedDate": "",
"locationId": "Bin1",
"quantity": 9.0
},
{
"productId": "100002",
"unitOfMeasure": "EACH",
"inventoryStatus": "GOOD",
"productClass": "",
"segmentType": "",
"segment": "",
"tagNo": "",
"batchNo": "",
"lotNo": "",
"manufacturedDate": "",
"locationId": "FoH",
"quantity": -1.0
}
],
"attributes": {
"code": "inventorySnapshotV2",
"timestamp": "2024-10-10T08:00Z[Etc/UTC]",
"messageId": "17d03402-7176-49df-9dc5-b0c25c22f310",
"batchId": "1692ae82-25f9-4943-b4d6-79458077925e",
"totalMessages": "1",
"messageSequence": "1",
"storeId": "Store1",
"groupBy": ""
}
}
]
}
inventorySnapshotV2 .{
"properties": {
"messages": {
"type": "array",
"description": "Array containing the message details",
"items": {
"type": "object",
"properties": {
"data": {
"type": "array",
"description": "Array containing the inventory details",
"items": {
"type": "object",
"properties": {
"productId": {
"type": "string",
"description": "Unique identifier of the product"
},
"unitOfMeasure": {
"type": "string",
"description": "Unit of measure for the product"
},
"inventoryStatus": {
"type": "string",
"description": "Status of the inventory (e.g., GOOD)"
},
"productClass": {
"type": "string",
"description": "Classification of the product"
},
"segmentType": {
"type": "string",
"description": "Type of segment for the product"
},
"segment": {
"type": "string",
"description": "Segment details of the product"
},
"tagNo": {
"type": "string",
"description": "Tag number for the product"
},
"batchNo": {
"type": "string",
"description": "Batch number for the product"
},
"lotNo": {
"type": "string",
"description": "Lot number for the product"
},
"manufacturedDate": {
"type": "string",
"description": "Manufacturing date of the product"
},
"locationId": {
"type": "string",
"description": "Location identifier where the product is stored"
},
"quantity": {
"type": "number",
"description": "Quantity of the product in stock"
}
}
}
},
"attributes": {
"type": "object",
"description": "Object containing the event attributes",
"properties": {
"code": {
"type": "string",
"description": "Code representing the event"
},
"timestamp": {
"type": "string",
"description": "The exact time when the snapshot was taken"
},
"messageId": {
"type": "string",
"format": "uuid",
"description": "A unique identifier for the event message"
},
"batchId": {
"type": "string",
"format": "uuid",
"description": "Unique identifier of a store batch"
},
"totalMessages": {
"type": "string",
"description": "The total number of messages for this store (for pagination)"
},
"messageSequence": {
"type": "string",
"description": "Page number of the current message"
},
"storeId": {
"type": "string",
"description": "Unique identifier of the store"
},
"groupBy": {
"type": "string",
"description": "Attribute used for grouping the data"
}
}
}
}
}
}
}
}
Pour plus d'informations, voir l'API Créer un instantané d'inventaire programmé pour les points de vente associés.