mail@mabbaz.com Abu Dhabi, UAE

Case Study

Hexagon EAM → Dynamics 365 Business Central Integration

Real-time inventory and procurement sync between a plant-floor CMMS and corporate ERP, powered by SQL Server, C# middleware, and Business Central REST APIs.

Integration Development ERP CMMS / EAM C# / .NET SQL Server

Sector

Utilities / Industrial

Duration

4 months

Stack

C#, SQL Server, BC API

Role

Tech Lead / Architect

The Challenge

A large utilities operator was running two critical systems in parallel. Hexagon EAM (formerly Infor EAM) handled all plant-floor maintenance work: asset hierarchies, work orders, preventive maintenance schedules, and spare-parts consumption at the warehouse level. Meanwhile, Microsoft Dynamics 365 Business Central was the corporate financial system of record, owning the general ledger, vendors, purchase orders, and inventory valuations.

These two systems were not talking to each other. Every maintenance transaction that had a financial impact, work order issues, stock receipts, returns, purchase requisitions, was being manually re-keyed by finance staff based on printed reports and spreadsheets from the plant. The result:

  • Material balances in EAM and BC were drifting apart, sometimes by weeks.
  • Monthly close was taking 5+ extra days because of reconciliation work.
  • Procurement decisions were being made on stale data, leading to over-ordering.
  • Two full-time finance clerks spent most of their week on data entry instead of analysis.

The Solution

I designed and built a bi-directional integration layer that synchronises inventory, procurement, and vendor data between Hexagon EAM and Dynamics 365 Business Central in real time, with full audit trails and controlled failure handling.

Solution Architecture

Hexagon EAM

SQL Server

Middleware (C# .NET)

Worker service, queues, audit log

Dynamics 365 BC

REST API / OAuth2

How It Works

1 Event Capture

Triggers and change-data-capture on EAM's SQL Server tables detect inventory movements, purchase requisitions, and vendor updates. Each event is written to an integration queue with full context and a unique transaction ID.

2 Transformation

The C# worker service picks up queued events, maps EAM fields to BC entities (Item Ledger Entries, Purchase Orders, Vendors), applies business rules, and validates data integrity before forwarding.

3 Delivery to BC

Transformed payloads are posted to Business Central via OAuth2-secured REST APIs. BC's native item journals and purchase documents are created, committed, and linked back to the originating EAM transaction.

4 Reconciliation & Audit

Every message is logged. Failed deliveries are retried with exponential backoff, then escalated to a dashboard. Daily reconciliation jobs compare EAM and BC balances and flag any drift before finance sees it.

Technical Highlights

  • Idempotent design: every message carries a unique ID, so replays are safe.
  • OAuth2 token caching with auto-refresh, so BC calls don't flood the identity provider.
  • Exponential backoff retry with dead-letter escalation after 5 failures.
  • Configurable field mapping via database, so future changes don't require a code release.
  • Per-transaction audit trail accessible to both finance and plant teams.
  • Windows Service deployment on-prem with PowerShell install scripts and health-check endpoint.

Measured Outcomes

100%

Manual data entry eliminated

5 days

Cut from monthly close cycle

30%

Improvement in inventory accuracy

3 mo

Break-even on project cost

Technologies Used

C# .NET 6 SQL Server 2019 Business Central API Hexagon EAM 11 OAuth2 Windows Service PowerShell Serilog
Similar challenge?

If you're running EAM, ERP, or CRM systems that don't talk, let's discuss.

Start a Conversation

Need to connect systems that don't talk?

Whether it's ERP to EAM, CRM to finance, or something entirely custom, integration is my specialty.

MAbbaz
© MAbbaz.com