Business Central (BC) er Microsofts ERP-løsning og den mest udbredte ERP i Danmark til SMV-segmentet. Integrationen med et WMS er teknisk velfungerende, men har én gotcha, der rammer næsten alle virksomheder på samme måde: client secret udløber efter 2 år, og ingen advarer dig. En dag holder din integration simpelthen op med at virke, og du ved ikke hvorfor.
Hvad er Business Central integration?
Business Central-WMS-integration er en tovejs dataforbindelse, der typisk dækker:
BC til WMS:
- Salgsordrer: ordrer oprettet i BC sendes til WMS til behandling
- Varestamdata: artikler, stregkoder, priser
- Kundestamdata: leveringsadresser, betalingsbetingelser
WMS til BC:
- Afsendelsesbekræftelse: ordren er afsendt, tracking-nummer
- Beholdningsopdatering: aktuelle lagertal pr. lokation
- Returnering: returnerede varer og lagerregulering
Autentificering: OAuth2 og Azure App Registration
Business Central bruger OAuth2 client credentials flow. Det kræver:
- Azure App Registration i Microsoft Entra ID (tidligere Azure Active Directory)
- Client ID (Application ID), den offentlige identifikator
- Client Secret, den hemmelige nøgle. Udløber. Det er her, det går galt.
- Tenant ID, din Microsoft 365-organisations ID
- BC API-tilladelser tildelt i App Registration:
Financials.ReadWrite.Alleller specifikke BC API-scopes
Det kritiske problem: Client secret kan oprettes med maksimal levetid på 2 år. Udløber det, returnerer Microsoft 401 Unauthorized. Alt stopper. WMS henter ikke ordrer, BC modtager ikke afsendelsesbekræftelser. Det er den hyppigste årsag til Business Central-integrationsnedbrud, og det er fuldstændigt forebyggeligt.
Hvad koster et BC client secret-udløb?
| Downtime-varighed | Tabte ordrer | Direkte tab | LTV-tab | Total omkostning |
|---|---|---|---|---|
| 4 timer (opdages hurtigt) | 83 ordrer | 0 kr. | Forsinkelse: ~5.000 kr. | 5.000 kr. |
| 1 dag (opdages næste morgen) | 500 ordrer | 0 kr. | Tabt salg: ~20.000 kr. | 20.000 kr. |
| 2 dage (weekend) | 1.000 ordrer | Tabt salg: ~40.000 kr. | Churn: 1.000 × 0,08 × 2.400 = 192.000 kr. | 232.000 kr. |
| 1 uge (opdages ved månedsafslutning) | 3.500 ordrer | Tabt salg: ~140.000 kr. | Churn: 3.500 × 0,15 × 2.400 = 1.260.000 kr. | 1.400.000 kr. |
Konklusion: Et client secret-udløb opdaget efter 2 dage koster 232.000 kr. Opdaget efter en uge: 1,4 mio. kr. Og det sker altid efter præcis 2 år. Microsoft sender ingen advarsel.
👉 Har du tekniske integrationsproblemer? Se SmartPacks integrationer
Opsætning trin for trin
Trin 1: Opret App Registration i Azure
- Azure Portal, Microsoft Entra ID, App Registrations, New Registration
- Navngiv: "WMS Integration"
- Supported account type: Single tenant
- Gem Application (client) ID og Tenant ID
Trin 2: Opret Client Secret
- Certificates & Secrets, New client secret
- Sæt udløb: 24 måneder (maksimum)
- Gem secret value straks, den vises kun én gang
- Sæt kalenderreminder 30 og 60 dage før udløb
Trin 3: Tildel API-tilladelser
- API permissions, Add permission, Dynamics 365 Business Central
- Vælg
Financials.ReadWrite.All(eller mindste privilegium) - Grant admin consent
Trin 4: Konfigurér i Business Central
- BC Admin Center, API setup
- Tildel service-bruger til App Registration
- Test med:
GET /api/v2.0/companies
Trin 5: Hent ordrer
GET /api/v2.0/companies({companyId})/salesOrders?$filter=status eq 'Open'
Authorization: Bearer {access_token}
Det opdager de fleste for sent
- At client secret udløber altid efter 2 år, uanset om du husker det eller ej. Microsoft sender ingen email, ingen notifikation, ingen advarsel. Integrationen stopper bare. Første tegn: ordrer synkroniseres ikke.
- At den person der oprettede App Registration er stoppet, og ingen andre har adgang til Azure Portal. Når secret udløber, kan I ikke forny det. I skal oprette en ny App Registration fra bunden.
- At BC API-tilladelser kan ændres af en anden admin, en kollega "rydder op" i Azure og fjerner tilladelser. Integrationen fejler med 403 Forbidden. Ingen ved hvorfor.
Typiske fejl
- Client secret udløber uden advarsel. Hyppigste årsag til BC-nedbrud. Microsoft sender ingen notifikation. Sæt reminder 30-60 dage inden udløb og dokumentér hvem der har adgang til Azure Portal.
- For brede API-tilladelser.
Financials.ReadWrite.Allgiver adgang til alt. Brug mindste privilegium-princippet. - Service-bruger slettet i BC. Hvis den BC-bruger, der er konfigureret i App Registration, slettes, fejler integration med 403. Brug en dedikeret service-bruger, der aldrig slettes.
Sådan gør du det rigtigt
- Dokumentér alle credentials med udløbsdatoer: Opret et dokument (eller password manager entry) med Client ID, Tenant ID, secret-udløbsdato og hvem der har adgang.
- Rotér secret proaktivt hvert 18. måned: Vent ikke på de 2 år. Rotér ved 18 måneder, så du aldrig er tæt på udløb i produktion.
- Test token-refresh i integration: Implementér og test, at din integration korrekt håndterer token-refresh hvert 60. minut.
Tjekliste
- Er client secret-udløbsdato dokumenteret?
- Er kalenderreminder sat 30 og 60 dage inden udløb?
- Bruges dedikeret service-bruger (ikke personlig BC-bruger)?
- Er API-tilladelser minimale (mindste privilegium)?
- Er pagination implementeret på alle list-kald?
SmartPack: Ja eller nej?
Ja, hvis du vil undgå client secret-katastrofen. SmartPack har præ-konfigureret Business Central integration via OAuth2. SmartPack advarer i admin-panelet, når client secret nærmer sig udløb (60 dage varsel + 30 dage varsel + 7 dage varsel). Ordrer hentes automatisk fra BC, behandles i WMS-flow, og afsendelsesbekræftelse med tracking sendes tilbage til BC.
SmartPack-omkostning: 60.000 kr./år (inkl. BC + alle andre integrationer). Breakeven: Hvis SmartPack forhindrer én client secret-episode (232.000 kr. ved 2 dages downtime) = 172.000 kr. sparet i første år.