Naar hoofdinhoud
Terug naar de blog
Gepubliceerd op
min leestijd
4
Over
Ismael Baddich

Een on-premise CRM migreren naar Dynamics 365 zonder dataverlies

Lessen uit een bankmigratie van CRM 2015 on-premise naar Dynamics 365: mapping, Azure Data Factory-pipelines, reconciliatie en de valkuilen die echt geld kosten.

Een CRM-migratie wordt op één cijfer beoordeeld: hoeveel data bent u kwijtgeraakt? Bij een project dat een bank van Microsoft CRM 2015 on-premise naar Dynamics 365 bracht, was dat cijfer 0,28% — en elk van die records werd geïdentificeerd, gedocumenteerd en met de business afgetekend vóór de go-live.

Dit is de aanpak die daartoe leidde.

Begin bij de mapping, niet bij de tool

De meest gemaakte fout is Azure Data Factory openen op dag één. Een slecht gerichte pipeline migreert verkeerde data bijzonder efficiënt.

Vóór er één regel geschreven wordt, moeten drie vragen beantwoord zijn samen met de business:

  1. Welke entiteiten worden echt gebruikt? In een CRM van tien jaar oud is het normaal dat 30% van de custom entiteiten niets levends meer bevat. Migreer uw technische schuld niet mee.
  2. Wat zijn de afhankelijkheden? Accounts vóór contacten, contacten vóór opportuniteiten. Een expliciete afhankelijkheidsgraaf bepaalt de volgorde van de pipelines.
  3. Wat is leidend? Als een veld zowel in het CRM als in een extern systeem bestaat, beslis nu welk systeem wint. Niet tijdens het cutover-weekend.

Deze fase levert een mappingdocument op: bronentiteit, doelentiteit, veld per veld, transformatieregel, business owner. Het is saai werk. Het is ook het verschil tussen 0,28% en 8%.

Azure Data Factory voor extract en load

Zodra de mapping vastligt, doet ADF het zware werk. De structuur die werkt:

  • Extract: één pipeline per bronentiteit, die kopieert naar een SQL-stagingzone. Geen transformatie hier — u wilt een getrouwe, getimestampte, herspeelbare kopie van de bron.
  • Transform: opschoningslogica in SQL, binnen staging. Deduplicatie, normalisatie van formaten, lookups oplossen naar de nieuwe GUID’s.
  • Load: wegschrijven naar Dataverse.

De opsplitsing in drie aparte stappen is niet cosmetisch. Wanneer een transformatieregel drie dagen vóór go-live verandert — en dat gebeurt — herspeelt u Transform en Load zonder de bron zes uur opnieuw op te halen.

Houd staging online na de go-live. In de weken erna beantwoordt u elke vraag van het type “waar komt dit record vandaan?” met één SQL-query.

PowerShell voor wat ADF slecht doet

ADF is uitstekend in volume. Het is lastig voor fijn werk: een handvol records opnieuw aanmaken, een lookup corrigeren, één specifieke batch herspelen.

Daarvoor is PowerShell met PsDataverse veel sneller te schrijven. De scripts die zich terugbetaalden:

  • Reconciliatie van bron- en doelrecords met export van de verschillen naar CSV
  • Massale herverdeling van eigenaars na import
  • Gerichte verwijdering van een mislukte batch, op batch-id

Eén punt telt zwaarder dan de rest: geef elk gemigreerd record een batch-id en zijn bronsleutel mee. Een custom tekstveld volstaat. Zonder dat is een gedeeltelijke rollback onmogelijk en herspeelt u alles.

Reconciliatie is niet optioneel

Het is de stap die als eerste wordt ingekort wanneer de planning schuift, en dat is een fout.

Drie controleniveaus, van goedkoop naar duur:

Niveau Controle Detecteert
1 Aantallen per entiteit, bron vs doel Ontbrekende batches
2 Checksums op numerieke en datumvelden Kapotte transformaties
3 Willekeurige steekproef, manueel gevalideerd met de business Mapping-misverstanden

Niveau 1 is automatiseerbaar en herspeelt bij elke iteratie. Niveau 3 vindt zelden veel — maar wat het vindt is meestal een misverstand over het businessdomein, precies het soort fout dat in geen enkele log opduikt.

De valkuilen die geld kosten

GUID’s overleven niet. Dataverse genereert nieuwe identifiers. Elke logica die naar een hard-coded GUID verwijst — integratie, rapport, Word-sjabloon — breekt. Inventariseer ze vooraf, niet achteraf.

Datums hebben geen tijdzone. CRM 2015 on-premise slaat vaak lokale servertijd op; Dataverse werkt in UTC. Eén gemiste conversie verschuift een volledige database met een uur of twee. Het gebeurt in stilte, en niemand merkt het vóór het eerste maandrapport.

Berekende velden herberekenen. Als uw bron een bevroren historische waarde bevat in een veld dat in het doel berekend is, overschrijft Dataverse die. Migreer naar een eenvoudig veld, of aanvaard het verlies van de historiek.

Plug-ins vuren bij import. Tenzij expliciet uitgeschakeld, triggert elke create uw plug-ins, workflows en Power Automate-flows. Op 400.000 records betekent dat 400.000 notificatiemails. Uitschakelen, importeren, heractiveren — en testen dat de heractivatie effectief werkte.

Wat u moet onthouden

Een geslaagde migratie is saai. Geen heldendaden tijdens het cutover-weekend, geen geïmproviseerde fixes om 3 uur ’s nachts. Ze is saai omdat het moeilijke werk — de mapping, de transformatieregels, de reconciliatie — weken eerder gebeurde, in een spreadsheet die niemand wilde lezen.

Daar wordt die 0,28% gewonnen.

Gerelateerde artikels