Naar de inhoud

Koppelingen met Business Central

Business Central koppeling: je ERP laten praten met de rest van je software

Business Central koppeling: de Nederlandstalige homepage van Microsoft Dynamics 365 Business Central met het rolcentrum voor verkoop en activiteiten

6.000

API-verzoeken per gebruiker per vijf minuten, daarna antwoordt Business Central met 429

Klanten, artikelen, orders en facturen die zelf tussen Business Central en je andere pakketten bewegen, met een eigen sleutel, logging en een weg terug.

Welke gegevens een koppeling verplaatst

Een Business Central koppeling laat een ander systeem rechtstreeks lezen en schrijven in je ERP: je webshop zet een verkooporder klaar, je planning haalt de voorraad op, je klantenportaal toont openstaande facturen. Niemand typt nog over wat al in Business Central staat, en niemand exporteert elke vrijdag een Excel om die ergens anders weer in te laden.

In de praktijk gaat het bijna altijd over dezelfde zes soorten gegevens: klanten, artikelen, verkooporders, verkoopfacturen, voorraad en grootboekboekingen. Wat telt is welke kant de bron is. Business Central blijft de baas over je boekhouding en je artikelen; het andere systeem levert orders, registraties of uren aan. Wie die rol per veld vastlegt voor er een regel code bestaat, voorkomt de helft van de problemen hieronder. Werk je met Odoo, Exact Online, Teamleader of Robaws, dan lees je hetzelfde verhaal voor die pakketten op onze pagina's over de Odoo koppeling, de Exact Online koppeling, de Teamleader koppeling en de Robaws koppeling.

Wie stuurt wat naar wie

  1. Maandag

    09:00Abonneren op facturen en artikelen

    POST /api/v2.0/subscriptions

    Met het adres van de koppeling, de bron (salesInvoices, items) en een gedeeld geheim in clientState.

    09:00De handdruk

    Business Central stuurt een validationToken. De koppeling stuurt het terug met 200, en het abonnement staat.

    14:12Een factuur wordt geboekt

    Dertig seconden later komt de melding updated. De koppeling haalt de factuur op voor je klantportaal.

  2. Dinsdag

    10:30Prijsherziening: 1.400 artikelen tegelijk

    Meer dan 1.000 wijzigingen in dat venster: een melding collection met een filter. De koppeling haalt de lijst op en past de webshop aan.

  3. Woensdag

    08:00Verlengen

    PATCH /api/v2.0/subscriptions(…)

    Na drie dagen vervalt een abonnement. De koppeling verlengt op tijd, met opnieuw de handdruk.

    22:10Onze server antwoordt 503

    Omdat het een 5xx is, probeert Business Central het de volgende 36 uur opnieuw.

  4. Donderdag

    06:30Server terug

    De meldingen van de nacht komen alsnog binnen. Niets gemist.

    07:00Dagelijkse controle

    Bij een andere foutcode dan 408, 429 of 5xx schrapt Business Central het abonnement. De koppeling kijkt elke dag of het er nog is, maakt het zo nodig opnieuw aan en haalt op wat intussen veranderde.

Wat er gaat, onder companies({id})

Naar Business Central

  • Klanten uit je CRM (customers)
  • Offertes uit je buitendienst-app (salesQuotes)

Uit Business Central

  • Artikelen met voorraad (items)
  • Facturen voor je klantportaal (salesInvoices)

De deur

api.businesscentral.dynamics.com/v2.0/<omgeving>/api/v2.0
  • Microsoft Entra ID met OAuth 2.0: een app-registratie, een token met scope api.businesscentral.dynamics.com/.default, en dan Bearer bij elke call.
  • Webservicesleutels met basic auth werken online niet meer sinds 2022.

Voorbeeld met verzonnen tijden en aantallen, gebaseerd op de openbare documentatie van Business Central API v2.0. Wij zijn geen Microsoft-partner.

API v2.0: zo spreek je Business Central aan

Microsoft biedt voor Business Central online een REST-API aan, versie 2.0. Volgens de documentatie op Microsoft Learn staan die API's standaard aan, en kan elke programmeertaal die REST-aanroepen doet ermee werken. Een API-koppeling op deze API is een rechtstreekse verbinding van punt tot punt: jouw systeem stuurt een verzoek, Business Central antwoordt met JSON.

Het adres heeft altijd dezelfde vorm. Je noemt de omgeving (bijvoorbeeld production of een sandbox) en daarna het bedrijf, want een omgeving kan meerdere bedrijven bevatten:

`https://api.businesscentral.dynamics.com/v2.0/<omgeving>/api/v2.0/companies(<id>)/customers`

Op dezelfde manier vraag je `items`, `salesOrders`, `salesInvoices`, `vendors`, `journals` of `generalLedgerEntries` op. Op de pagina API Overview in Business Central zie je welke API's gepubliceerd zijn. Microsoft werkt de API maandelijks bij, dus een koppeling die je vandaag bouwt, draait over een jaar op een nieuwere versie van het pakket.

Wat de standaard-API niet doet

Een eigen veld dat jullie partner ooit aan de klantenkaart toevoegde, zit niet in de standaard-API. Microsoft schrijft letterlijk dat je een bestaande API niet kunt uitbreiden met extra velden: je kopieert de code en maakt een custom API in AL, als extensie in Business Central zelf. Dat is werk in je Business Central, en dat plan je dus samen met wie je omgeving beheert. Voor de meeste koppelingen volstaan de standaardvelden; check het wel voor je begint, niet als de eerste order zonder leveringsdatum binnenkomt.

Inloggen zonder gebruiker: OAuth 2.0 via Entra ID

Een koppeling die 's nachts orders ophaalt, kan niet wachten op iemand die een code van zijn gsm overtypt. Daarom werkt Business Central voor koppelingen met service-to-service-authenticatie: de OAuth 2.0 client credentials flow, aangemeld via Microsoft Entra ID (vroeger Azure Active Directory). Microsoft wijst er zelf op dat aanmelden namens een gebruiker tweestapsverificatie kan vragen, en dat zoiets een koppeling zonder toezicht blokkeert.

De opzet gebeurt in twee delen, en beide gebeuren in jouw omgeving:

  1. In Entra ID registreer je een app. Je maakt een client secret aan (Entra toont die maar een keer), je geeft de app de toepassingsmachtiging API.ReadWrite.All voor Dynamics 365 Business Central, en een beheerder geeft daar toestemming voor.
  2. In Business Central open je de pagina Microsoft Entra-toepassingen, maak je een kaart met de client-ID van die app, zet je de status op Ingeschakeld en ken je machtigingen toe. De omschrijving zegt wie de koppeling bouwde en waarvoor.

Die machtigingen zijn het belangrijkste deel. Een app kan de machtigingenset SUPER niet krijgen, en dat is goed: geef de koppeling alleen wat ze nodig heeft. Een webshop die orders aanmaakt, hoeft geen grootboekrekeningen te kunnen wijzigen. Het token haal je op bij login.microsoftonline.com van jouw tenant, met als scope `https://api.businesscentral.dynamics.com/.default`.

Omdat de app-registratie bij jou staat, blijf jij eigenaar van de sleutel. Stopt de samenwerking met wie de koppeling bouwde, dan trek je het secret in en is de toegang weg. Leg dat ook vast in je verwerkersovereenkomst als de bouwer persoonsgegevens van je klanten kan zien.

Webhooks of zelf periodiek ophalen

Twee manieren om te weten dat er iets veranderde in Business Central. Een goede koppeling gebruikt ze allebei.

Hoe het werkt
Webhook-abonnementJe registreert een abonnement op een entiteit; Business Central roept jouw adres aan als er iets wijzigt
Periodiek ophalenJe systeem vraagt om de zoveel minuten wat er sinds de vorige keer veranderde
Vertraging
Webhook-abonnementMelding volgt 30 seconden na de eerste wijziging
Periodiek ophalenZo lang als het interval dat je kiest
Wat je ontvangt
Webhook-abonnementAlleen dat een record wijzigde; de gegevens haal je daarna zelf op
Periodiek ophalenDe gegevens zelf, in pagina's van hoogstens 20.000 records
Onderhoud
Webhook-abonnementEen abonnement vervalt na drie dagen en moet je vernieuwen
Periodiek ophalenGeen abonnement, wel een eigen bijgehouden tijdstip per entiteit
Grote wijzigingen
Webhook-abonnementMeer dan 1.000 wijzigingen in die 30 seconden geven een melding voor de hele collectie
Periodiek ophalenGewoon meer pagina's ophalen
Belasting
Webhook-abonnementLaag, je vraagt alleen op wat wijzigde
Periodiek ophalenHoger, elke ronde kost verzoeken uit dezelfde limiet

Gebruik een webhook voor snelheid en periodiek ophalen als vangnet: een gemiste melding wordt zo bij de volgende ronde alsnog opgepikt.

Limieten die je ontwerp bepalen

Business Central online deelt zijn servers met andere klanten, en Microsoft begrenst daarom wat een koppeling mag vragen. Die limieten gelden per gebruiker, en een app-registratie telt als gebruiker. Ze bepalen hoe je een koppeling bouwt die een grote import of een drukke maandag overleeft.

LimietWaardeWat er gebeurt als je erover gaat
Verzoeken per gebruiker6.000 per glijdend venster van vijf minutenAntwoord 429, te veel verzoeken
Gelijktijdige verzoeken5 tegelijk, tot 95 in de wachtrijNa 8 minuten wachten volgt 503
Verbindingen per gebruiker100Antwoord 429
Records per pagina20.000Antwoord 413
Bewerkingen in een $batch100Het verzoek wordt geweigerd
Duur van een bewerking8 minutenAntwoord 408, time-out
Webhook-abonnementen per omgeving200Geen nieuw abonnement mogelijk

Drie gevolgen voor het ontwerp. Je koppeling moet een 429 netjes opvangen: even wachten en opnieuw proberen, niet meteen falen en ook niet blind herhalen. Grote ladingen verdeel je over pagina's en batches in plaats van alles in een verzoek te proppen. En draaien er meerdere koppelingen, dan geef je ze elk een eigen app-registratie, zodat de webshop de limiet van de planning niet opgebruikt. Microsoft noemt dat spreiden over meerdere gebruikers of service principals uitdrukkelijk als oplossing.

Oudere koppelingen via SOAP-webservices verdienen aandacht. Microsoft kondigt aan dat SOAP verdwijnt en raadt de API of OData aan. Een koppeling die nog op SOAP draait, is technische schuld met een vervaldatum.

Drie routes voor een Business Central koppeling

Je hebt grofweg drie manieren om Business Central met een ander pakket te verbinden. Onze algemene gids over een koppeling laten maken legt die keuze uit voor elk pakket; hier gaat het over wat specifiek is aan Business Central. Geen enkele is altijd de beste; de juiste hangt af van hoe standaard je proces is en hoeveel gegevens er bewegen.

RouteWanneer ze pastWaar ze stopt
App uit de Microsoft Marketplace (AppSource)Een gangbare combinatie waarvoor een leverancier al een app bouwde, en jouw proces volgt die appJe werkt zoals de app het voorziet; velden of regels die erbuiten vallen, krijg je er niet bij
Power Automate met de Business Central-connectorLichte stromen met een paar honderd records per dag, zoals een goedkeuring of een melding in Teams300 aanroepen per verbinding per minuut, records onder 8 MB, en grote wijzigingen in een keer starten geen flow
Eigen koppeling op de APIMeerdere systemen, eigen regels, grote volumes of een proces dat geen app kentJe hebt iemand nodig die ze bouwt, documenteert en onderhoudt

Apps voor Business Central gaan bij Microsoft door een geautomatiseerde technische controle voor ze in de Marketplace verschijnen, en ze installeren als extensie in je omgeving. Prijs en voorwaarden verschillen per app, dus vraag de leverancier wat er gebeurt bij een update van Business Central.

De connector voor Power Automate is een premium-connector. Hij werkt met triggers zoals een record dat aangemaakt, gewijzigd of verwijderd wordt, en acties zoals een record maken, zoeken of bijwerken. Microsoft schrijft er wel bij dat de connector geen collectiemeldingen verwerkt: wijzigen er meer dan 1.000 records binnen 30 seconden, dan start de flow niet. Voor een maandelijkse prijsupdate van je hele catalogus is dat een reëel risico. Wie twijfelt tussen een no-code-platform en eigen code, leest onze vergelijking Make, Zapier of n8n en het begrip low-code.

Een eigen koppeling op de API bouwen we bij VBS onder software op maat. Ze loont pas als de eerste twee routes je proces niet dragen, of als Business Central maar een van de systemen is die op elkaar moeten aansluiten.

Waar het in de praktijk misloopt

Zes fouten die in koppelingen met een ERP terugkomen, telkens met de regel van Business Central die erachter zit.

Zo bouwen wij een koppeling op jouw omgeving

Een vaste prijs per project, vastgelegd na een eerste gesprek. Geen uren die oplopen tijdens het bouwen.

  1. Gesprek en veldenlijstWe overlopen welke systemen praten, welke kant per veld de bron is en wat er gebeurt als iets mislukt. Daaruit volgt een veldenlijst en een vaste prijs.
  2. Jouw app-registratieJe beheerder maakt de app-registratie in jullie Entra ID, met alleen de machtigingen uit de veldenlijst. Het secret blijft van jou; wij krijgen toegang, geen eigendom.
  3. Bouwen in de sandboxWe bouwen en testen tegen een sandbox van je eigen omgeving, met echte voorbeeldorders, inclusief de gevallen die fout moeten lopen: een onbekende klant, een artikel zonder prijs, een time-out.
  4. Logging van elke bewegingElke order, klant of factuur die de koppeling verplaatst, staat in een logboek met het tijdstip en het antwoord van Business Central. Gaat er iets mis, dan zie je welk record en waarom, zonder te gissen.
  5. Live met een weg terugWe zetten de koppeling live op een rustig moment, met de vorige werkwijze nog klaar. Loopt er iets fout, dan zetten we ze stil en verwerken we de achterstand opnieuw zodra het opgelost is.

Wat we eerder bouwden

Een koppeling is software die moet blijven draaien, ook als niemand kijkt. Het transportplatform van DA Logistics is dagelijks in gebruik door 31 gebruikers, wordt bewaakt door 1.396 geautomatiseerde tests, en een nieuwe versie gaat live in 2 tot 6 seconden, met een back-up, een snapshot en een weg terug. Voor Zuco Logistics zetten we dat platform in 57 minuten live, met een eigen server per klant, een dagelijkse back-up naar S3 en een API die alleen via CloudFront bereikbaar is.

Die gewoontes nemen we mee naar elke koppeling: tests op de randgevallen, een logboek, en een manier om terug te keren. Wil je eerst weten wat een ERP zelf kost voor je aan koppelen denkt, lees dan onze gids over ERP-kosten. Twijfel je nog tussen pakketten, dan helpen de vergelijkingen Odoo of Business Central, Exact Online of Odoo en CRM of ERP. Gaat het om Odoo, dan beschrijft de gids Odoo implementatie hoe zo'n traject verloopt. En past geen enkel pakket bij hoe je werkt, kijk dan naar ERP op maat.

Geen partner, wel jouw sleutel

VBS is geen Microsoft-partner en verkoopt geen Business Central-licenties. We bouwen op de publieke API, met jouw app-registratie en de rechten die jij toekent. Licenties, uitbreidingen in AL en de inrichting van Business Central zelf blijven bij je partner of je eigen beheerder.

AI automatisatie

Hoe VBS je hiermee helpt

We laten mails, offertes, documenten en opvolging zichzelf doen, ingebouwd in de manier waarop je nu werkt.

  • Een flow per taak, van formulier tot bevestiging
  • Een mens keurt goed wat ertoe doet
  • Draait op AWS, met logboek en melding als iets faalt

Hoe we dat aanpakken, lees je bij AI automatisatie.

Business Central verbinden met je webshop, planning of portaal?

Vertel welke systemen moeten praten en welke gegevens er bewegen. Na een gesprek krijg je een vaste prijs en een veldenlijst. Plan het via contact, of lees eerst hoe we AI-automatisatie inzetten om facturen en orders te verwerken.

Optioneel, als je liever gebeld wordt.

Wat wil je bereiken, en wat staat er al?

We gebruiken je gegevens alleen om je te antwoorden.