Inventory Visibility : reprenez le contrôle de vos stocks !

Publié le

par

Samuel Evrard, Consultant Supply

Dans un environnement où plusieurs canaux coexistent (site internet, magasins, marketplaces…), le stock n’est plus seulement une information interne à l’ERP. Il devient une donnée essentielle, utilisée au quotidien par de nombreux outils : e-commerce, points de vente, service client ou encore gestion d’entrepôt.

Avec Dynamics 365 Inventory Visibility, Microsoft propose un service qui permet de partager facilement ces informations de stock avec d’autres systèmes. Concrètement, ces systèmes peuvent consulter les disponibilités, mettre à jour les quantités ou encore gérer des réservations, de manière simple et rapide, grâce à des interfaces standardisées (API).

Pourquoi Inventory Visibility peut intéresser vos équipes Supply Chain ?

Cet outil répond à un besoin très courant : bénéficier d’une vision des stocks quasiment en temps réel sur plusieurs canaux (site e-commerce, magasin, outils partenaires…), sans complexifier les connexions avec l’ERP.

Concrètement, Inventory Visibility expose des API REST (Interface) que les systèmes externes peuvent utiliser pour consulter les disponibilités, publier des changements de stock ou gérer des réservations. Selon le scénario et le paramétrage retenus, les transactions peuvent ensuite être synchronisées vers D365 Finance & Operations.

Conçu pour gérer des volumes importants, ce service peut traiter rapidement des milliers de demandes, contribuant à maintenir une information cohérente et rapidement actualisée.

Pour les équipes Supply Chain, les bénéfices sont concrets. En voici quelques illustrations :

1. Pouvoir identifier rapidement où se situe le stock et en quelle quantité.

Exemple : un conseiller client peut immédiatement voir qu’un produit est disponible à hauteur de 12 unités dans l’entrepôt de Lyon et de 4 unités dans le magasin de Marseille.

2. Fournir aux canaux de vente une information de stock plus fiable et à jour.

Exemple : le site e-commerce affiche uniquement les quantités réellement disponibles à la vente, plutôt que de s’appuyer sur des données mises à jour une seule fois par jour.

3. Réduire les risques de vente de produits en rupture de stock.

Exemple : dès qu’un article est vendu en magasin, le site web peut immédiatement cesser de le proposer à la commande.

4. Faciliter les échanges d’informations entre les magasins, l’e-commerce, les marketplaces et les entrepôts.

Exemple : une correction de stock réalisée dans un système de gestion d’entrepôt (WMS) peut être transmise à Inventory Visibility, puis immédiatement partagée avec l’ensemble des autres canaux.

5. Éviter de surcharger l’ERP avec des demandes en temps réel trop nombreuses.

Exemple : au lieu d’interroger directement l’ERP à chaque consultation de produit, le site web passe par Inventory Visibility, ce qui allège la charge sur le système.

6. Réduire les erreurs et fiabiliser la promesse faite au client.

Exemple : un client ne peut choisir le retrait en magasin que si le produit est réellement disponible, ce qui évite les annulations après commande.

Cas d’usage : ajustement de stock depuis un système externe

Maintenant, voyons un exemple simple et concret : un système IoT connecté à un poste de production identifie automatiquement un surplus de stock d’un composant. Cette information est envoyée à Inventory Visibility pour ajuster le stock disponible en temps quasi réel et refléter fidèlement la consommation réelle.

Pour matérialiser cet ajustement de stock depuis un système externe, nous allons appeler l’endpoint suivant exposé par l’API Inventory Visibility :

/api/environment/{environmentId}/transaction/adjustment/bulk

Cet endpoint est prévu pour créer des transactions d’ajustement dans la couche métier (business layer) d’Inventory Visibility. Cette couche permet de stocker les transactions omnicanales, de suivre les références externes et, selon la configuration, de synchroniser les transactions agrégées vers D365 Finance & Operations.

La requête attend notamment des informations telles que le numéro d’article, l’entité juridique, les dimensions de stock, la quantité…

Immersion : ajuster un stock via l’API Inventory Visibility avec Python

Le script en Python ci-dessous illustre trois étapes :

  • Récupération d’un token Microsoft Entra
  • Echange du token contre un token Inventory Visibility via le security service
  • Envoi d’un ajustement d’un articles
1«  » »
2Ajustement de stock via l’API Inventory Visibility (D365 Finance & Operations)
3Endpoint : POST /api/environment/{environmentId}/transaction/adjustment/bulk
4«  » »
5 
6import requests
7import uuid
8import datetime
9 
10# ——————————————————————
11# 1. PARAMETRES (A remplacer par les valeurs de votre environnement)
12# ——————————————————————
13TENANT_ID = « <votre-tenant-id> »
14CLIENT_ID = « <votre-client-id> »
15CLIENT_SECRET = « <votre-secret> »
16ENV_ID = « <votre-environment-id> »
17ENDPOINT = « <votre-endpoint-inventory-visibility> » 
18 
19# Valeurs fixes, identiques pour tous les tenants
20IV_RESOURCE = « 0cdb527f-a8d1-4bf8-9436-b352c68682b2 »                           
21IV_SCOPE    = « https://inventoryservice.operations365.dynamics.com/.default »   
22IV_SECURITY = « https://securityservice.operations365.dynamics.com/token »       
23 
24# ——————————————————————
25# 2. AUTHENTIFICATION : récupération du bearer token (2 étapes)
26# ——————————————————————
27def get_token():
28    # Etape 1 : jeton Microsoft Entra
29    entra = requests.post(
30        f »https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token »,
31        data={
32            « client_id »:     CLIENT_ID,
33            « client_secret »: CLIENT_SECRET,
34            « grant_type »:    « client_credentials »,
35            « scope »:         f »{IV_RESOURCE}/.default »,
36        },
37    ).json()[« access_token »]
38 
39    # Etape 2 : échange contre le bearer token Inventory Visibility
40    return requests.post(
41        IV_SECURITY,
42        headers={« Api-Version »: « 1.0 »},
43        json={
44            « grant_type »:            « client_credentials »,
45            « client_assertion_type »: « aad_app »,
46            « client_assertion »:      entra,
47            « scope »:                 IV_SCOPE,
48            « context »:               ENV_ID,
49            « context_type »:          « finops-env »,
50        },
51    ).json()[« access_token »]
52 
53# ——————————————————————
54# 3. AJUSTEMENT DE STOCK
55# ——————————————————————
56token = get_token()
57 
58# Corps de la requête : une liste d’ajustements (ici un seul)
59payload = [{
60    « id »:                 str(uuid.uuid4()),          # identifiant unique (évite les doublons)
61    « organizationId »:     « usmf »,                     # Entité juridique
62    « productId »:          « A0002 »,                    # Numéro de produit lancé
63    « quantityDataSource »: « @iv »,                      # Source de données
64    « physicalMeasure »:    « adjustment »,              
65    « dimensions »:         {« siteId »: « 1 », « locationId »: « 11 »},  # Site / emplacement
66    « quantity »:           32,                          # Quantité à ajuster
67    « transDate »:          str(datetime.date.today()),  # date de transaction
68}]
69 
70# Appel POST de l’API
71response = requests.post(
72    f »{ENDPOINT}/api/environment/{ENV_ID}/transaction/adjustment/bulk »,
73    headers={« Api-Version »: « 1.0 », « Authorization »: f »Bearer {token} »},
74    json=payload,
75)
76 
77# Résultat
78print(« Status : », response.status_code)
79print(response.json())
80 

Une fois le script exécuté, la demande est transmise à Inventory Visibility, qui regroupe les différentes requêtes avant de les envoyer à Dynamics 365 Finance & Operations.

Lorsque le message est correctement transmis à D365 Finance & Operations, son statut dans Inventory Visibility évolue vers « FnoTransPosted ».

Côté D365 Finance & Operations, un traitement par lots prend ensuite le relais pour exécuter la transaction. Dans notre exemple, cela se traduit par la création et la validation automatiques du journal d’ajustement suivant.

Inventory Visibility agent Microsoft D365 - Inventory adjustment journal

Conclusion

Inventory Visibility transforme une donnée de stock dispersée en une information partagée et exploitable par l’ensemble des canaux. En rapprochant l’ERP, l’e-commerce, les magasins, les WMS et les systèmes externes, il contribue à limiter les surventes, fiabiliser la promesse client et accélérer les opérations omnicanales. Une même information, au bon moment, pour chaque acteur de la chaîne.

Vous souhaitez approfondir le sujet ? Parlons-en