Hoe Synchroniseer ik een On-prem Database met Dynamics 365 Online

Ana Neto Bedrijfsnieuws, Connectoren, Producten en oplossingen, Technisch 3 Opmerkingen

Artikel laatst bijgewerkt op: mei 05, 2020

Een groeiend bedrijf gebruikt Microsoft Dynamics CRM on-premises, geïntegreerd met hun ERP (Dynamics NAV), SharePoint en een boekhoudsysteem. Natuurlijk zien ze de voordelen van de overstap naar D365 online en Azure cloud. Maar Microsoft biedt geen praktische oplossing om de on-premises databases van Dynamics CRM te synchroniseren met Dynamics 365 online.Als Microsoft niet helpt, hoe kunnen ze dan gegevens synchroniseren met Dynamics 365? Hier is hun oplossing om verbinding te maken met de Dynamics 365 database.

Dynamics CRM on-prem verplaatsen naar D365 Online

Hoewel het nog steeds mogelijk is om een Dynamics 365 stationaire toepassinglijkt de migratie van Microsoft Dynamics CRM on-premises naar Dynamics 365 online voor de meeste bedrijven tegenwoordig aantrekkelijker.

Als ze Dynamics 365 online versus on premise overwegen, zien ze het Software as a Service (SaaS) model van Dynamics 365 online brengt duidelijke voordelen met zich mee:

  • U hoeft geen hardware of infrastructuur aan te schaffen, en u hoeft het niet te onderhouden;
  • De software wordt meestal in licentie gegeven volgens een doorlopend pay-as-you-go-model, in plaats van een eenmalige aankoop per stoel;
  • SaaS biedt vaak universele toegang, zodat u vanaf elk apparaat (desktop, laptop, mobiele telefoon) verbinding kunt maken met de software, vanaf elke plaats met een internetverbinding;
  • De initiële prijs is meestal aanzienlijk lager dan de aankoop van on-premise apparatuur en software;
  • Hoge beschikbaarheids SLA (d.w.z. Microsoft Dynamics 365 99,9% uptime SLA)

On-premises databases synchroniseren met Dynamics 365 online zou dus vrij eenvoudig moeten zijn, toch?

Idealiter zou u, om te migreren van Microsoft Dynamics CRM On-Premises naar D365 online, de gegevens rechtstreeks van de lokale Microsoft Dynamics CRM SQL Database backend naar de externe Microsoft D365 SQL database kunnen overbrengen. En als u toevallig al D365 had en Dynamics 365 on premise naar online wilde migreren, zou dat nog eenvoudiger moeten zijn.

In de praktijk is het echter niet zo eenvoudig.

Wat krijgt u van Microsoft om online over te stappen naar Dynamics 365

Om klanten te helpen bij de implementatie van Microsoft cloud-oplossingen, biedt Microsoft momenteel ondersteuning via de FastTrack-pagina. Klanten met in aanmerking komende abonnementen op Microsoft 365, Dynamics 365 of Azure, kunnen FastTrack gebruiken zonder extra kosten gedurende de looptijd van hun abonnement (link aan het einde van het artikel). U moet de huidige geschiktheidscriteria controleren voor wat u probeert te migreren. Microsoft baseert het soms op het aantal seats, soms op de inkomsten.

In april 2019 heeft Microsoft ook "Microsoft Dynamics CRM on-premises to Dynamics 365 Online Migration" uitgebracht, een 45 pagina's lang PDF document dat beschrijft wat je moet doen (download link aan het einde van het artikel). In dit document bekennen ze dat "Tot voor kort was er geen mechanisme beschikbaar voor klanten om hun on-premises deployment eenvoudig te verplaatsen naar Dynamics 365 (online)."

Problemen om On-prem met Online Databases te Synchroniseren

U denkt dat de ideale oplossing zou zijn om een Dynamics 365 database synchronisatie te vinden met uw Dynamics CRM on-prem.

Het probleem is dat over het algemeen het blootstellen van back-end databases van SaaS-diensten aan de buitenwereld als een slechte praktijk wordt beschouwd en aanzienlijke veiligheidsrisico's met zich mee kan brengen. Daarom biedt Microsoft geen toegang tot de back-end database van D365 online. In plaats daarvan biedt Microsoft de officiële API-diensten aan om gegevensinteractie met D365 online uit te voeren.

API-diensten bieden het voordeel dat interne bedrijfsregels en -beperkingen niet worden overtreden. Op die manier zorgen API-diensten ervoor dat client-toepassingen de prestaties niet belemmeren. Bovendien helpen zij de gegevensintegriteit en -consistentie van de back-end database te behouden.
Het ontwikkelen van processen om gegevens te manipuleren via API's vereist programmeervaardigheden en tijd. Met name tijd om in de documentatie te graven om de juiste parameters in te stellen en de juiste aanroepen te doen naar de methoden of functies die door dergelijke interfaces worden verschaft.

Wat als u gewoon gebruik zou kunnen maken van uw SQL-vaardigheden en zou kunnen communiceren met de D365 API zoals u dat met een gewoon DBMS (database management systeem) zou doen?

Wat als je gewoon Dynamics 365 de database kon laten synchroniseren met SQL Server Management Studio?

Verbinding maken met D365 Online vanuit een lokale DBMS of een clienttoepassing

Welkom bijD365 Database Sync Solution! Dit is een specifieke oplossing voor het synchroniseren van on-premises databases naar de D365 cloud. Het is gebaseerd op het integratieplatform Connecting Software's Connect Bridge.

Connect Bridge vertaalt de ANSI standaard SQL syntaxis in de juiste API aanroepen. Door ervoor te zorgen dat de toegang tot gegevens gebeurt met API-aanroepen (hoewel u zich daar geen zorgen over hoeft te maken) blijft de integriteit van uw doelsysteem gewaarborgd. Bovendien kunt u gemakkelijk communiceren met elk doelsysteem via de standaard SELECT, INSERT, UPDATE en DELETE statements.

Daarom kunt u vanuit uw lokale DBMS of een clienttoepassing verbinding maken met D365 online en er gegevens in plaatsen.

Voor bedrijven die migreren van Dynamics CRM on-prem naar D365 online is het vooral handig in situaties waar ze hele processen hadden geschreven tegen de on-prem SQL Database. Gelukkig kunnen die nu opnieuw worden gebruikt door Connect Bridge aan hun portfolio toe te voegen.

Nu is het tijd voor een praktisch voorbeeld.

Van elke database naar Dynamics 365 Online

In dit voorbeeld gaan we gebruik maken van de beroemde Adventure Works DW (Datawarehouse) database van Microsoft (download het hier). We zullen demonstreren hoe u uw bestaande processen gemakkelijk kunt integreren met Microsoft Dynamics 365 Online (info hier) met behulp van het Connect Bridge Platform.

Als u SSMS gebruikt (SQL Server Management Studio) om uw SQL Server Database te beheren, kunt u het schema van de database zien in het Object Explorer venster.

Schema van database in het Object Explorer venster

Connect Bridge Platform kunt u op een moeiteloze manier Linked Server verbindingen maken met elk doelsysteem via connectoren. Er zijn meer dan 400 connectoren beschikbaar. Wij gaan ons richten op de Dynamics 365 connector. Hieronder vindt u een selectie van de connectoren in het CRM/ERP/Accounting gebied.

Connectoren - CRM / ERP / Boekhouding

Hieronder vindt u de gekoppelde serververbinding die reeds in SSMS is aangemaakt.

Verbonden serververbinding reeds gemaakt in SSMS

Merk op dat we met opzet de gekoppelde serververbinding de naamD365_CRM.En door het knooppunt catalogi in de TreeView uit te klappen, kunnen we het volledige schema van Dynamics 365 zien, net zoals bij een traditionele database.

Daarmee kunt u elke vorm van integratie tot stand brengen of bestaande processen aanpassen door gebruik te maken van de bruikbaarheid.

Toepasbaarheid van On-prem naar D365 Cloud Sync-oplossing

Nu vraagt u zich misschien af: waarom zou ik dit überhaupt moeten doen?

Hier volgen twee veel voorkomende scenario's die u wellicht bekend voorkomen.

Scenario 1:

Ik werk voor een bedrijf dat Microsoft Dynamics CRM On-Premises gebruikt, en we zijn bezig met de migratie naar Microsoft Dynamics 365 Online. We hebben verschillende integraties rechtstreeks vanuit onze SQL Server databases naar de SQL Server database van Microsoft Dynamics CRM On-Premises.

Maar, ik kan niet direct verbinding maken met Microsoft Dynamics 365 Online database:

  • Moet ik al mijn processen helemaal opnieuw creëren met de Dynamics CRM SDK van Microsoft?
  • Moet ik al mijn processen die gebruik maken van de Web API helemaal opnieuw creëren?
  • Moet ik C# leren om dit allemaal te doen?

Scenario 2:

Ik werk voor een bedrijf dat een eigen ERP-systeem heeft met een SQL Server-database als back-end. We hebben besloten om Microsoft Dynamics 365 CRM te gebruiken als ons Customer Relationship Management System.

Wij willen het CRM op een geautomatiseerde manier kunnen vullen met bestaande gegevens uit ons ERP-systeem en beide zijden consistent houden.

Het lijkt bijna onmogelijk om dit manueel te doen aangezien het gaat om tienduizenden records per entiteit (Rekeningen, Contacten, Producten om er maar een paar te noemen). Bovendien is het comfortabel om met de SQL-taal (Structured Query Language) te werken.

Wij hebben echter geen diepgaande ervaring met andere programmeertalen en frameworks (C#, Web API's, Rest Services, enz.):

  • Moeten we een adviesbureau inhuren om dit voor ons te doen?
  • Zal ik afhankelijk zijn van dit consultancybedrijf om nieuwe functies te onderhouden en toe te voegen naarmate mijn bedrijf verandert / groeit?

Gelukkig is het antwoord op al het bovenstaande nee. Op dit punt doet het gebruik van het bovenstaande voorbeeld misschien een belletje rinkelen.

Met de voorgestelde aanpak kunt u uw bestaande vaardigheden en processen optimaal benutten.

Bent u nog niet overtuigd? Waarom bekijkt u niet het stap-voor-stap voorbeeld hieronder?

Invullen van Dynamics 365 Online Accounts uit Adventure Works Database Tabel DimCustomer.

Voorbereiding
Maak de volgende triggers:

--*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerInsert] ON [dbo].[DimCustomer] AFTER INSERT

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

       SELECT @SQL = FORMATMESSAGE('INSERT INTO ACCOUNT (Name) VALUES(''%s''); SELECT SCOPE_IDENTITY();',

       @FirstName + '-' + '-' + @LastName)

      

       CREATE TABLE #AccountId(ID VARCHAR(255))

       INSERT #AccountId

       EXEC(@SQL) AT D365_CRM

 

       SELECT @AccountId = ID from #AccountId

       UPDATE DimCustomer SET CustomerAlternateKey = @AccountId where FirstName = @FirstName and MiddleName = @MiddleName and LastName = @LastName

 

       PRINT @FirstName + ' ' + @MiddleName + ' ' + @LastName;

END

--*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerUpdate] ON [dbo].[DimCustomer] AFTER UPDATE

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @AccountId       = [CustomerAlternateKey],

              @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

 

       SELECT @SQL = FORMATMESSAGE('UPDATE ACCOUNT SET Name=''%s'' WHERE ACCOUNTID=''%s''', @FirstName + '-' + '-' + @LastName, @AccountId)

       EXEC(@SQL) AT D365_CRM;

       PRINT @FirstName + ' ' + @MiddleName + ' ' + @LastName;

 

END


Uw SSMS Object Explorer venster zou nu 2 nieuwe triggers moeten bevatten zoals hieronder:

twee nieuwe triggers in SSMS Object Explorer venster

Open uw Dynamics 365 Online instance en navigeer naar de module Verkoop -> Rekeningen

Dynamics 365 Rekeningen

Testen:

Open in SSMS een nieuw queryvenster en plak het volgende:


INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('ABC Technology', '' ,'GMB', 'CT0001');

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('Billy Charity', '' ,'SA', 'CT0002');

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('Tom Cat', '' ,'ORG', 'CT0003');

 

SELECT * FROM DimCustomer WHERE FirstName = 'ABC Technology';

SELECT * FROM DimCustomer WHERE FirstName = 'Billy Charity';

SELECT * FROM DimCustomer WHERE FirstName = 'Tom Cat';


Voer de scripts uit door op F5 te drukken of op de knop Execute in SSMS.

U zou nu 3 bijkomende records moeten ingevoegd hebben in de DimCustomer tabel.

drie extra records ingevoegd in de DimCustomer tabel

Navigeer terug naar je Dynamics 365 Verkoop -> Rekeningen en vernieuw het scherm. Bingo!

drie nieuwe accounts aangemaakt in Dynamics 365

3 nieuwe rekeningen werden aangemaakt in Dynamics 365, cool toch?

Maar wacht daar, in de tabel DimCustomer heeft het veld CustomerAlternateKey een vreemd nummer. Het is niet de waarde die we in de eerste plaats hebben ingevoegd.

In plaats daarvan hebben we de unieke ID van de rekening die in Dynamics 365 is gegenereerd. Hoe is dat mogelijk?

Als je goed kijkt naar de trigger OnDimCustomerInsert zul je zien dat SELECT SCOPE_IDENTITY(); de verantwoordelijke is om de rekening-id terug te geven die zal worden gebruikt om de tabel DimCustomer bij te werken.

Dat zal van cruciaal belang zijn om updates uit te voeren op bestaande rekeningen in Dynamics 365 wanneer een record in de tabel DimCustomer wordt gewijzigd.

Om ons punt te bewijzen, werk de records bij door in SSMS de volgende code uit te voeren:

Na het uitvoeren van de updates voor de 3 accounts hier is het resultaat in Dynamics 365.

UPDATE [AdventureWorksDW].[dbo].[DimCustomer] SET LastName = 'LTD' WHERE CustomerAlternateKey = 'account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b)';

NOTE: REPLACE THE STRING account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b) WITH THE VALUES GENERATED IN YOUR ENVIRONMENT.

Dynamics 365 Rekeningen na uitvoering van updates

Lief!

Conclusie

De bovenstaande voorbeelden zijn zeer eenvoudig, maar het is niet moeilijk om de voordelen van een dergelijke aanpak te visualiseren.

  • Het onderhoud van het proces is gecentraliseerd en geïsoleerd
  • Het proces verbeteren door de triggers aan te passen is een makkie
  • Het is niet nodig om een nieuwe technologie / programmeertaal te leren

Dat was het. Ik hoop dat jullie genoten hebben.

Als u opmerkingen of suggesties hebt, schrijf ze dan in de ruimte hieronder en we zullen zo snel mogelijk reageren.

Ik hoop dat je evenveel plezier beleeft aan het gebruik van het Connect Bridge Platform als ik had bij het schrijven van dit artikel.

Waarom klanten Connect Bridge gebruiken

Bekijk een korte video om erachter te komen:

Connect Bridge presentatie video

Artikel laatst bijgewerkt op: mei 05, 2020

Ana Neto - Technisch adviseur, Auteur

Ana Neto
technisch adviseur bij Connecting Software

Auteur:

Ik ben software-ingenieur sinds 1997, met een recentere liefde voor schrijven en spreken in het openbaar.  Hebt u vragen of opmerkingen over dit bericht of over Connect Bridge? Ik zou graag uw feedback hebben!

 ana@connecting-software.com


Bijdrager: Jefferson Kenji Takahashi, MBA

Opmerkingen 3

  1. Ziet er interessant uit - hoe zit het met business rule enforcement? We moeten bijvoorbeeld transacties van onze POS (gegevens in SQL-tabellen) in Business Central krijgen - dus hoe zit het met het use case waarbij de verkoop een klant en/of product betreft die niet bestaat in D365?

  2. Post
    Auteur

    Hoi Paul,

    Als je de gegevens die je van je POS hebt in de SQL tabellen kunt krijgen en ze volgen een structuur die je kunt begrijpen, dan kun je Connect Bridge om alles in Business Central te krijgen. Als de verkoop een klant en/of product betreft die niet in D365 bestaan, moet u beslissen wat u gaat doen. U kunt bijvoorbeeld een generieke klant of generiek product gebruiken, of u kunt direct nieuwe klanten of producten aanmaken.

    Wij zullen contact met u opnemen via het door u opgegeven e-mailadres om deze optie met u te verkennen.

    Ana Neto

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *