Naar de inhoud
SyncMyShop

Magento en Business Central

Magento Business Central koppeling

Artikelen met varianten uit Business Central worden configurable products in Magento, voorraad landt op de juiste bron en prijslijsten worden prijzen per klantgroep. Orders, klanten en zendingen lopen de andere kant op. Gebouwd op jouw Magento 2 of Adobe Commerce en jouw Business Central, en daarna door ons gedraaid en bewaakt.

Wat je tussen Magento en Business Central koppelt

Business Central is de bron voor artikelen, prijzen, voorraad en de boekhouding. Magento toont de catalogus en vangt de order. De koppeling verbindt zes stromen, elk met een vaste richting en aan beide kanten een vast endpoint.

Stroom Richting Magento 2 Business Central API v2.0
Artikelen en varianten naar Magento POST /V1/products items, itemVariants
Voorraad naar Magento POST /V1/inventory/source-items items.inventory, per locatie via een webservice
Prijzen en staffels naar Magento POST /V1/products/tier-prices items.unitPrice, prijslijsten via een webservice
Orders naar Business Central GET /V1/orders salesOrders met salesOrderLines
Klanten naar Business Central factuuradres van de order customers
Zendingen naar Magento POST /V1/order/{id}/ship salesShipments

Een Magento-order heeft twee nummers. entity_id is het nummer in elk API-pad. increment_id is het nummer dat de klant ziet, bijvoorbeeld 000010482. Het increment_id gaat naar externalDocumentNumber op de verkooporder: dat veld is in Business Central 35 tekens lang. Het entity_id bewaart de koppeling zelf, om later de zending terug te kunnen boeken. De algemene opzet van zo'n koppeling staat op ERP koppeling met je webshop.

Welk systeem is leidend, per gegeven

Gegeven Leidend Richting Gedrag
Artikelnummer, omschrijving, variantcode Business Central naar Magento gewijzigde artikelen, op lastModifiedDateTime
Attribuutset, categorieboom, afbeeldingen Magento of het PIM blijft in Magento de koppeling schrijft er niet overheen
Basisprijs Business Central, unitPrice naar Magento per website bij prijsbereik Website
Prijslijsten en staffels Business Central naar Magento nachtelijk, via het bulk-endpoint
Aantal per bron Business Central, per locatie naar Magento fysieke voorraad per bron
Verkoopbare voorraad Magento berekend in Magento bron min reserveringen
Order Magento tot de import, daarna Business Central naar Business Central één keer, met het increment_id als sleutel
Debiteur en boekingsgroepen Business Central match op nummer, dan e-mail nieuwe klant via een sjabloon
Zending en trackingnummer Business Central of het WMS naar Magento één zending per geboekte levering

De verkoopbare voorraad is de enige regel waar Magento rekent en Business Central alleen aanlevert. Daar komen de meeste voorraadverschillen in deze combinatie vandaan.

Wat Magento en Business Central anders bewaren

Artikelvarianten en configurable products

Een artikel met variant uit Business Central als product in Magento Artikelnummer 10482 en variantcode BL-M uit Business Central worden samen de SKU 10482-BL-M in Magento. De variantcode wordt gesplitst in kleur en maat, die Magento als optie-ID bewaart. De attribuutset komt uit een vertaaltabel op de artikelcategorie. De voorraad is in Business Central een totaal en landt op een bron in Magento. Business Central Magento 2 item.number 10482 Code, 20 tekens itemVariant.code BL-M Code, 10 tekens item.itemCategoryCode WERKKLEDING item.unitPrice 89.50 item.inventory 20 totaal over alle locaties sku 10482-BL-M color 58 optie-ID van Blauw size 169 optie-ID van M attribute_set_id 9 bestaat niet in Business Central price 89.50 source_items.quantity 20 source_code: default samenvoegen splitsen, ID zoeken vertaaltabel
Eén artikel met één variant uit Business Central als simple product in Magento. De attribuutset en de optie-ID's bestaan alleen aan de Magento-kant.

In Business Central is een werkjas één artikel met een number van maximaal 20 tekens. Elke kleur en maat is een itemVariant met een code van maximaal 10 tekens en een omschrijving. Kleur en maat zijn geen aparte velden: ze zitten samen in die code, bijvoorbeeld BL-M.

In Magento is elke variant een eigen simple product met een eigen SKU, en het model een configurable product. Kleur en maat zijn attributen met een optie-ID per waarde. Die ID's verschillen per installatie, dus de koppeling leest ze uit jouw Magento en zoekt bij BL het ID van Blauw. Een kleurcode die in Magento nog niet bestaat komt op een controlelijst en wordt niet stil overgeslagen.

Het koppelen van een variant aan het model gaat per stuk: het endpoint POST /V1/configurable-products/{sku}/child neemt één childSku aan. Een jas in 4 kleuren en 6 maten is 24 varianten. Dat zijn 24 simple products, 1 configurable product, 2 aanroepen voor de opties kleur en maat en 24 koppelaanroepen: 51 verzoeken voor één model. Een collectie van 300 modellen is 15.300 verzoeken. De simple products gaan in bulk, de koppelaanroepen lopen uit een wachtrij. Meer over de keuzes staat op varianten koppelen.

Attribuutsets

Elk Magento-product heeft een attribute_set_id nodig. Business Central kent geen attribuutsets, alleen een itemCategoryCode. De koppeling houdt daarom een vertaaltabel bij: categorie WERKKLEDING hoort bij attribuutset 9. Een artikel met een categorie die niet in de tabel staat wordt niet onder de standaardset aangemaakt. Het wacht tot de tabel is aangevuld.

Voorraad: één totaal tegenover bronnen

Het veld inventory op een artikel in Business Central is één getal: de voorraad over alle locaties, alleen-lezen. De standaard-API geeft geen aantal per locatie. Magento rekent met bronnen en reserveringen. De verkoopbare voorraad is de som van de bronnen min de openstaande reserveringen, en een reservering vervalt pas als de zending in Magento staat.

De rekensom. Business Central heeft 20 stuks. Een order van 4 wordt geplaatst: Magento reserveert 4 en toont 16. De levering wordt geboekt en Business Central zakt naar 16. Schrijft de koppeling die 16 naar de bron voordat de zending in Magento staat, dan rekent Magento 16 min 4 en toont 12. De koppeling boekt daarom eerst de zending en schrijft daarna pas de voorraad. Heb je meer dan één locatie, dan komt het aantal per locatie uit een query die je in Business Central als OData-webservice publiceert. Zie voorraad over meerdere magazijnen.

Boekingsgroepen die Magento niet kent

Een klant in Business Central heeft een bedrijfsboekingsgroep en een klantboekingsgroep op de klantenkaart, een artikel een productboekingsgroep en een voorraadboekingsgroep. Magento stuurt geen van alle mee. De customers-resource van de API heeft er ook geen velden voor. Ze komen uit een sjabloon op de pagina API Setup, dat lege velden vult bij het aanmaken van een klant.

Eén sjabloon geeft elke webklant dezelfde groepen. Een Belgische zakelijke klant met verlegde btw heeft een andere btw-bedrijfsboekingsgroep nodig dan een Nederlandse. Dat onderscheid maakt de koppeling op land en btw-nummer uit het factuuradres en hij zet de klant via een eigen API-pagina in de juiste groep. Het algemene probleem staat in verplichte velden die de bron niet heeft.

De order zelf

Magento levert de straat als lijst van regels, het land als tweeletterige code in country_id. Business Central heeft shipToAddressLine1 van 100 tekens en shipToAddressLine2 van 50. Een adres met drie of vier straatregels wordt samengevoegd, en de koppeling controleert de lengte voordat de order wordt aangeboden.

POST /v2.0/{tenant}/Production/api/v2.0/companies({id})/salesOrders HTTP/1.1
Host: api.businesscentral.dynamics.com
Authorization: Bearer eyJ0eXAi...
Content-Type: application/json

{
  "externalDocumentNumber": "000010482",
  "orderDate": "2026-10-03",
  "customerNumber": "D00412",
  "shipToName": "Bakker Installatie B.V.",
  "shipToAddressLine1": "Industrieweg 12",
  "shipToPostCode": "3542 AD",
  "shipToCountry": "NL",
  "salesOrderLines": [
    { "lineType": "Item", "lineObjectNumber": "10482",
      "quantity": 4, "unitPrice": 89.50 }
  ]
}

Kop en regels gaan in één verzoek. Een variant gaat mee als itemVariantId op de regel, een locatie als locationId.

De technische werkelijkheid van deze combinatie

De twee API's zijn op een tegengestelde manier begrensd. Business Central online telt verzoeken per gebruiker. Voor Magento op een eigen server documenteert Adobe geen algemene limiet op de REST API: de grens is de server, en een koppeling die te veel tegelijk leest maakt de winkel traag.

Limiet Magento 2 en Adobe Commerce Business Central online
Verzoeken geen algemene limiet 6.000 per 5 minuten per gebruiker, 5 tegelijk
Boven de grens een trage server 429, of 503 na 8 minuten in de wachtrij
Pagina zonder pageSize alle resultaten maximaal 20.000 records
Bundelen /async/bulk/V1, 5.000 regels $batch, 100 bewerkingen
Wijziging melden Open Source: polling webhook, 30 seconden vertraagd
Toegang OAuth 1.0a, HMAC-SHA256 OAuth 2.0 via Microsoft Entra

De getallen zijn op 3 oktober 2026 nagelezen in de documentatie van Microsoft en Adobe. De invoerlimieten van Magento, 20 regels per synchroon verzoek en 5.000 per asynchroon verzoek, staan standaard uit.

Voorraad, doorgerekend. 18.000 SKU's met één bron zijn 18.000 voorraadregels. Uit Business Central is dat één pagina: de limiet is 20.000 records. Naar Magento zijn het bij 20 regels per synchroon verzoek 900 verzoeken, en via het bulk-endpoint bij 5.000 regels per verzoek 4. Na de eerste ronde gaan alleen gewijzigde artikelen mee.

Het bulk-endpoint hangt aan een consumer. Een bulkverzoek geeft direct een bulk_uuid terug en het werk gebeurt in de message queue, waarvoor Adobe RabbitMQ voorschrijft. Draait de consumer async.operations.all niet, dan blijft elke bewerking op status 4, Open, zonder foutmelding. De koppeling leest na elke batch GET /V1/bulk/{uuid}/status en meldt het als bewerkingen open blijven.

Webhooks van Business Central verlopen na drie dagen. Een abonnement moet binnen die tijd verlengd worden, met dezelfde handshake als bij het aanmaken. De koppeling verlengt elke twee dagen. Wijzigen er binnen 30 seconden meer dan 1.000 records, dan stuurt Business Central één melding van het type collection met een filter, en haalt de koppeling de records met dat filter op.

Zendingen komen niet via een webhook. salesShipments staat niet op de lijst met entiteiten die een webhook ondersteunen, en de resource heeft geen veld voor het trackingnummer of de vervoerder. De koppeling haalt nieuwe zendingen op met een filter op lastModifiedDateTime en leest het trackingnummer uit een gepubliceerde webservice. Daarna gaat de zending met track_number, title en carrier_code naar Magento. De rekensom voor je eigen aantallen maak je met doorvoer berekenen.

Wat een standaardkoppeling hier niet doet

Standaardkoppelingen en koppelplatformen voor dit paar beschrijven hun eigen grenzen.

  • Een eigen extensie in Business Central. De leverancier installeert een app die velden en endpoints toevoegt. De mapping volgt die extensie en niet jouw inrichting.
  • Boekingsgroepen als één vaste waarde. De verplichte groepen worden als standaardwaarde aan elke order toegevoegd. Een tweede btw-regime of een eigen groep per kanaal past daar niet in.
  • Klantherkenning op e-mailadres. Bestaat het e-mailadres niet, dan komt er een nieuwe debiteur, ook als het bedrijf al onder een ander adres in Business Central staat. Zie dubbele klanten en debiteuren.
  • Deelzendingen. Voor gesplitste zendingen staat in de documentatie van zo'n koppeling een waarschuwing voor onverwacht gedrag.

Microsoft levert zelf een koppeling met Shopify mee, alleen voor Business Central online. Voor Magento staat er in de documentatie van Microsoft geen. Een gebouwde koppeling heeft geen van deze vaste punten: de vertaaltabel voor attribuutsets, de regel voor boekingsgroepen en de match op debiteuren worden geschreven op hoe jouw Business Central en jouw Magento zijn ingericht.

Als het misgaat

Wat er misgaat Wat de koppeling doet Wat je ziet
Business Central antwoordt 429 de order wacht in de wachtrij, nieuwe poging met een langere pauze niets, tenzij het aanhoudt
Klant zonder boekingsgroep de order blijft staan, andere orders gaan door de order en het ontbrekende veld
Orderregel met een SKU die niet in Business Central bestaat die order wordt vastgehouden de order en de SKU
Bulkbewerking eindigt op status 2 opnieuw aangeboden, status 2 is herhaalbaar het aantal herhaalde regels
Bulkbewerking eindigt op status 3 de regel gaat met zijn inhoud naar de controlelijst de SKU en de melding van Magento
Abonnement op de webhook is verlopen opnieuw aangemaakt, gemiste wijzigingen opgehaald op datum een regel in het logboek
Magento ligt plat voor een upgrade wijzigingen uit Business Central wachten in de wachtrij de lengte van de wachtrij

Een order die blijft falen, bewaart de koppeling met de oorspronkelijke inhoud en biedt hij opnieuw aan zodra de oorzaak is opgelost. Elke poging gebruikt het increment_id als sleutel, zodat een herhaling geen tweede verkooporder aanmaakt. Een controleronde vergelijkt de Magento-orders van de laatste dagen met de externalDocumentNumber in Business Central, zodat een order die een ronde heeft gemist alsnog aankomt.

Voor livegang draait de koppeling als dry run: hij leest beide kanten en laat zien welke producten, prijzen en orders hij zou schrijven, zonder te schrijven. Daarna laat elke run per record zien wat er is gewijzigd. Hoe dat werkt staat op dry run en goedkeuring. Wij hosten en bewaken de koppeling en passen hem aan als Adobe of Microsoft een interface wijzigt. De systeemkant staat op Business Central koppeling, de platformkant op Magento koppeling, en alle stromen op koppelingen. Verwante combinaties: WooCommerce Business Central koppeling en Shopify Business Central koppeling. Vertel welke Magento-versie en welke Business Central je draait.

Veelgestelde vragen

Werkt de koppeling met Magento Open Source of alleen met Adobe Commerce?

Met allebei. De REST API voor producten, voorraad, orders en zendingen is dezelfde. Het verschil zit in het melden van wijzigingen: Adobe I/O Events en Adobe Commerce Webhooks vragen Adobe Commerce 2.4.4 of hoger en bestaan niet voor Open Source. Op Open Source haalt de koppeling nieuwe orders op met een zoekopdracht op updated_at.

Werkt het ook met Business Central on-premises of met Navision?

Business Central on-premises heeft dezelfde API v2.0. Hij staat standaard uit en de beheerder zet hem aan; het adres bevat dan je eigen server, poort en serverinstance. Dynamics NAV 2018 heeft alleen de bètaversie van de API, met basisauthenticatie. Daar lopen de stromen via pagina's en query's die als OData-webservice zijn gepubliceerd.

Is er een extensie nodig in Business Central?

Voor artikelen, klanten, verkooporders en zendingen niet: die zitten in de standaard-API v2.0. Drie gegevens zitten er niet in: voorraad per locatie, prijslijsten en het trackingnummer van een zending. Die komen uit een pagina of query die je in Business Central als OData-webservice publiceert, of uit een kleine eigen API-pagina.

Waarom toont Magento minder voorraad dan Business Central?

Meestal omdat een geleverde order twee keer wordt afgetrokken. Business Central verlaagt de voorraad zodra de levering is geboekt. Magento houdt zijn eigen reservering vast tot de zending ook in Magento staat. Bij 20 stuks en een geleverde order van 4 schrijft de koppeling 16 naar de bron en toont Magento 12. Daarom gaat de zending altijd vóór de volgende voorraadronde naar Magento.

Kunnen prijslijsten per klant uit Business Central naar Magento?

Ja. Een prijslijst uit Business Central wordt een klantgroep in Magento, en elke staffel een tier price met sku, customer_group, quantity en price. Op Adobe Commerce met de B2B-modules kan een prijslijst ook een shared catalog volgen, die zijn eigen klantgroep aanmaakt. Prijslijsten zitten niet in de standaard-API van Business Central en komen via een gepubliceerde webservice.

Welke Magento-versies koppelen jullie?

De 2.4-lijn. De laatste release is 2.4.9 van 12 mei 2026. De reguliere ondersteuning van 2.4.6 is op 11 augustus 2026 geëindigd, die van 2.4.7 loopt tot 31 mei 2027 en die van 2.4.8 tot 31 mei 2028. De koppeling gebruikt REST-endpoints die in al die versies bestaan en wordt aangepast als een release er een wijzigt.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com