Overseas
Azure- en integratiearchitect
Distributie voor tax-free shops op luchthavens en cruiseschepen. Een team van drie, twee van ons developer, dus het werk valt hier niet uiteen in strikt afgebakende rollen.
Overseas Integration Platform · 12+ integraties in productie, verving Boomi
Een message-driven integratiearchitectuur op onafhankelijk uitrolbare NServiceBus-endpoints en plugins. In het oudere jargon is het een message-based SOA, en dat is het ook. Drie endpoints: één voor Business Central, één uitgaand, één inkomend. De twee message-endpoints spreken de protocollen van de tegenpartij, waaronder REST, FTP en XML, en draaien als Windows services op onze eigen servers. Eén plugin per integratie, elk in een eigen map met eigen assemblies, zodat een nieuwe flow uitgerold wordt zonder dat er iets verandert aan wat al draait. De deployment pipeline volgt diezelfde structuur. Ik ben ermee begonnen toen Bluebird stond, om de vele losse applicaties te vervangen die rechtstreeks met Navision communiceerden. Sommige waren in Python geschreven, andere zaten in SQL zelf, en er was geen gedeelde code. Meer dan een dozijn integraties draait erop als plugin: EDI, WMS, OrderEye, Slim, Multiscan, Rio, Entra ID-synchronisatie voor externe BI-gebruikers, het aanmaken van Jira-tickets, warehouse scan, bank statement scan, Stream, Zetes, ASN export, en sindsdien meer. Multiscan is een van de fysiekere: een toestel dat artikelen in drie dimensies meet, met een Blazor-scherm ervoor en een Python-oplossing erachter die het verving. Betrouwbaarheid was het uitgangspunt, en dat is precies wat de message-based opzet oplevert. Een bericht dat op een tijdelijke fout strandt blijft staan en kan opnieuw verwerkt worden, of die fout nu een weggevallen databaseconnectie was of een bug die pas de dag erna gefixt werd. Loopt er toch iets vast, dan krijgen de developers automatisch een melding met de diagnose, meestal voordat een gebruiker het gezien heeft.
Navision naar Business Central online · live 2025 · zes bedrijven
De migratie van begin tot eind geleid, inclusief het AL-extensiewerk in Business Central zelf en niet alleen de .NET-kant. Een SaaS-tenant heeft geen achterdeur, dus elke integratie moest naar de officiële API's. Die omzetting is doorgevoerd zonder functionele freeze, omdat de endpoints al geïsoleerd zaten achter hun eigen contracten. Dit is het duidelijkste rendement dat ik gezien heb op architectuur die jaren eerder is neergezet.
Bluebird · de B2B-webshop
Gegroeid uit de wekelijkse prijswijzigingsmail tot de webshop waar de meeste klanten van Overseas vandaag hun orders plaatsen, en die verving een Python-versie met betrouwbaarheidsproblemen. Angular front end, ASP.NET Core API, orders die in het ERP-systeem landen. Het liep eerst op onze eigen servers en verhuisde later naar Azure. Na de migratie naar Business Central is de prijssynchronisatie naar Azure Functions gegaan, verdeeld over twee queues: één bericht per klant om de prijzen op te halen, en het resultaat op een tweede queue die naar de database schrijft. Die splitsing levert throughput en betrouwbaarheid, want een fout herhaalt één stap in plaats van de hele run.
Document recognition en OrderEye · een paar honderd facturen per maand
Eerst magazijndocumenten: de barcodes op een gescande batch zoeken en de scan daarlangs in afzonderlijke documenten splitsen. Daarna bankafschriften, en die vroegen meer, namelijk genoeg uit elke pagina halen om ze aan de juiste bankrekening toe te wijzen. Een paar duizend van die twee in totaal, en daar hebben we geleerd hoe extractie zich in de praktijk gedraagt. OrderEye bouwt daarop, met Azure AI Document Intelligence als lezer. Aan de verkoopkant maakt het de verkooporder in Business Central aan en meldt het aan de klant elke regel waarvan de prijs in zijn eigen document afwijkt van de werkelijke prijs in BC. Aan de aankoopkant vergelijkt het wat de leverancier gestuurd heeft met wat er in BC staat. De gebruiker ziet in één oogopslag welke regels niet overeenkomen en corrigeert die manueel, waarna de correcties terug naar BC gaan. Business Central houdt een trace bij van alles wat OrderEye verwerkt heeft.
- Bluebird en het integratieplatform delen een groot deel van hun code via interne NuGet packages. Eén uniforme manier van werken geldt voor alles wat hier gebouwd wordt, dus een fix in een gedeelde library komt in beide terecht. Beide staan vandaag op .NET 10, gemigreerd vanaf 8.
- Azure DevOps opgezet en de release pipelines voor beide applicaties gebouwd. Staging draait voor beide op onze eigen servers. In productie staat alleen Bluebird op Azure, het integratieplatform blijft on premise.
- Observability volgt diezelfde tweedeling. On premise vangt een middleware de logging en de niet-afgehandelde exceptions op, en het is die middleware die de meldingen naar de developers stuurt. Wat op Azure draait rapporteert in Application Insights. Elke API is beschreven met Swagger.
- De code volgt OWASP, en de secrets zitten in Key Vault in plaats van in de configuratie. Persoonsgegevens vallen onder de GDPR, dus anonimisatie zit in het ontwerp overal waar de data niet herleidbaar hoeft te blijven.
- Naast het ontwikkelwerk beheer ik de Azure-omgeving: de resources, de gebruikers op de tenant, de kosten, en de support wanneer iemand niet binnen raakt.
- In het begin de opleiding gegeven, en ik review de technische ontwerpkeuzes van de andere developer.
- Per omgeving een andere object graph in de IoC container, zodat staging en productie in configuratie verschillen en niet in code.
.NET 10, ASP.NET Core, Blazor, Business Central (AL), Azure App Service, Azure Functions, Azure Storage queues, Azure Blob storage, Application Insights, Entra ID, Azure AI Document Intelligence, NServiceBus, EF Core, SQL Server, Angular, REST, Swagger, SOAP, FTP, XML, Azure DevOps, OAuth 2