- 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:
- 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.
- Wat zijn de afhankelijkheden? Accounts vóór contacten, contacten vóór opportuniteiten. Een expliciete afhankelijkheidsgraaf bepaalt de volgorde van de pipelines.
- 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
- Dynamics 365Power Platform
Plug-in, Power Automate of business rule? De juiste tool kiezen in Dynamics 365
Dezelfde vereiste kan op vier manieren gebouwd worden in Dynamics 365. Een praktische beslisboom op basis van transacties, latency en de echte onderhoudskost.
4 min leestijd - Power PlatformDataverse
Dataverse: vijf ontwerpfouten die u later duur komen te staan
De modelleringsbeslissingen uit week één van een Power Platform-project zijn die waarvoor u twee jaar later betaalt. Dit zijn de vijf die ik het vaakst zie.
3 min leestijd