Come sincronizzare il database On-prem su Dynamics 365 Online

Ana Neto Notizie dell'azienda, Connettori, Prodotti e soluzioni, Tecnico 3 Commenti

Articolo aggiornato l'ultima volta il: 05 maggio 2020

Un'azienda in crescita ha utilizzato Microsoft Dynamics CRM on-premises, integrato con il loro ERP (Dynamics NAV), SharePoint e un sistema di contabilità. Certo, vedono i vantaggi del passaggio al D365 online e al cloud Azure. Ma Microsoft non fornisce una soluzione pratica per sincronizzare i database on-premises di Dynamics CRM con Dynamics 365 online.If Microsoft non aiuta, come possono sincronizzare i dati con Dynamics 365? Ecco la loro soluzione per connettersi al database Dynamics 365.

Spostare Dynamics CRM On-prem su D365 Online

Anche se è ancora possibile avere un Dynamics 365 in distribuzione sul postoLa migrazione da Microsoft Dynamics CRM on-premises a Dynamics 365 online sembra oggi più interessante per la maggior parte delle aziende.

Considerando Dynamics 365 online vs. on premise, vedono il modello Software as a Service (SaaS) di Dynamics 365 online porta chiari vantaggi:

  • Non è necessario acquistare hardware o infrastrutture e non è necessaria la manutenzione;
  • Il software è tipicamente concesso in licenza su un modello a pagamento, piuttosto che su un grande acquisto una tantum per posto a sedere;
  • Il SaaS offre spesso un accesso universale, consentendo di collegarsi al software da qualsiasi dispositivo (desktop, laptop, telefono cellulare) da qualsiasi luogo che abbia una connessione a Internet;
  • Il prezzo iniziale è di solito notevolmente inferiore rispetto all'acquisto di attrezzature e software in loco;
  • SLA ad alta disponibilità (cioè Microsoft Dynamics 365 99.9% SLA ad alta disponibilità)

Quindi, sincronizzare i database on-premises con Dynamics 365 online dovrebbe essere abbastanza facile, giusto?

Idealmente, per migrare da Microsoft Dynamics CRM On-Premises a D365 online, è possibile trasferire i dati direttamente dal backend locale di Microsoft Dynamics CRM SQL Database al database SQL D365 SQL remoto. E se, per caso, avete già il D365 e volete migrare Dynamics 365 on-premise a online, dovrebbe essere ancora più semplice.

In pratica, però, non è così semplice.

Cosa si ottiene da Microsoft per passare a Dynamics 365 online

Attualmente, per aiutare i clienti a implementare le soluzioni cloud Microsoft, Microsoft offre supporto tramite la pagina FastTrack. I clienti con abbonamenti idonei a Microsoft 365, Dynamics 365 o Azure possono utilizzare FastTrack senza costi aggiuntivi per tutta la durata dell'abbonamento (link alla fine dell'articolo). È necessario verificare gli attuali criteri di idoneità per ciò che si sta cercando di migrare. Microsoft a volte si basa sul numero di posti, a volte sulle entrate.

Nell'aprile 2019, Microsoft ha anche rilasciato "Microsoft Dynamics CRM on-premises to Dynamics 365 Online Migration", un documento PDF di 45 pagine che descrive ciò che è necessario fare (link per il download alla fine dell'articolo). In questo documento, confessano che "Fino a poco tempo fa, non era disponibile alcun meccanismo che consentisse ai clienti di spostare facilmente la loro implementazione on-premises a Dynamics 365 (online)".

Problemi di sincronizzazione On-prem con i database online

Pensate che la soluzione ideale sarebbe quella di trovare una sincronizzazione del database Dynamics 365 con il vostro Dynamics CRM on-prem.

Il problema è che, in generale, l'esposizione all'esterno di database back-end di servizi SaaS è considerata una cattiva pratica e può comportare notevoli rischi per la sicurezza. Pertanto, Microsoft non fornisce l'accesso al database back-end del D365 online. Al contrario, per eseguire l'interazione dei dati con D365 online, Microsoft offre i servizi API ufficiali.

I servizi API offrono il vantaggio di non infrangere le regole e i vincoli aziendali interni. In questo modo, i servizi API assicurano che le applicazioni dei clienti non ostacolino le prestazioni. Inoltre, aiutano a preservare l'integrità dei dati e la coerenza del database di back-end.
Lo sviluppo di processi per manipolare i dati attraverso le API richiede capacità di programmazione e tempo. In particolare, il tempo di scavare nella documentazione per impostare i parametri corretti ed effettuare le chiamate appropriate ai metodi o alle funzioni fornite da tali interfacce.

E se poteste semplicemente sfruttare le vostre competenze SQL e interagire con l'API D365 come fareste con un normale DBMS (sistema di gestione di database)?

E se si potesse avere solo Dynamics 365 per sincronizzare il database con SQL Server Management Studio?

Collegatevi al D365 Online dal DBMS locale o da qualsiasi applicazione client

Benvenuti a toD365 Database Sync Solution! Si tratta di una soluzione specifica per la sincronizzazione dei database on-premises con il cloud D365. Si basa sulla piattaforma di integrazione Connecting Software Connect Bridge.

Connect Bridge traduce la sintassi standard ANSI SQL nelle chiamate API appropriate. Assicurandosi che l'accesso ai dati sia fatto con le chiamate API (anche se non dovete preoccuparvi di questo) mantiene l'integrità del sistema di destinazione sicura. Inoltre, si ottiene anche la facilità di comunicare con qualsiasi sistema di destinazione tramite gli statement standard SELECT, INSERT, UPDATE e DELETE.

Pertanto, dal vostro DBMS locale o da qualsiasi applicazione client, potete collegarvi al D365 online e inserirvi i dati.

Per le aziende che migrano da Dynamics CRM on-prem a D365 online è particolarmente utile in situazioni in cui avevano interi processi scritti contro il database SQL on-prem. Fortunatamente, ora possono essere riutilizzati aggiungendo Connect Bridge nel loro portafoglio.

Ora è il momento di un esempio pratico.

Da qualsiasi database a Dynamics 365 Online

In questo esempio useremo il famoso database Adventure Works DW (Datawarehouse) di Microsoft (Scaricalo qui). Vi dimostreremo come è possibile integrare facilmente i vostri processi esistenti con Microsoft Dynamics 365 Online (info qui) utilizzando la piattaforma Connect Bridge.

Se si utilizza SSMS (SQL Server Management Studio) per amministrare il vostro SQL Server Database, potete vedere lo schema del database nella finestra Object Explorer.

Schema del database nella finestra Object Explorer

Piattaforma Connect Bridge consente di creare connessioni Linked Server a qualsiasi sistema di destinazione tramite connettori in modo semplice. Sono disponibili più di 400 connettori. Ci concentreremo sul connettore Dynamics 365. Di seguito una selezione dei connettori nell'area CRM/ERP/Contabilità.

Connettori - CRM / ERP / Area contabilità

Qui di seguito trovate il collegamento al server Linked già creato in SSMS.

Connessione server collegata già creata in SSMS

Si noti che abbiamo appositamente nominato il server collegato connectionD365_CRM.And, espandendo il nodo dei cataloghi nella TreeView, possiamo vedere l'intero schema fornito da Dynamics 365, proprio come si vedrebbe accedendo ad un database tradizionale.

Grazie a ciò, siete in grado di creare qualsiasi tipo di integrazione o di personalizzare qualsiasi processo esistente sfruttando l'usabilità.

Applicabilità di On-prem alla soluzione Cloud Sync D365

Ora, vi starete chiedendo: perché dovrei farlo?

Ecco due scenari comuni a cui potreste riferirvi.

Scenario 1:

Lavoro per un'azienda che utilizza Microsoft Dynamics CRM On-Premises, e siamo in fase di migrazione a Microsoft Dynamics 365 Online. Abbiamo diverse integrazioni direttamente dai nostri database SQL Server al database SQL Server di Microsoft Dynamics CRM On-Premises.

Ma non posso connettermi direttamente con il database Microsoft Dynamics 365 Online:

  • Dovrò creare da zero tutti i miei processi utilizzando il Dynamics CRM SDK di Microsoft?
  • Dovrò creare da zero tutti i miei processi utilizzando l'API Web?
  • Devo imparare il C# per fare tutto questo?

Scenario 2:

Lavoro per un'azienda che ha un sistema ERP proprietario con un database SQL Server come backend. Abbiamo deciso di adottare Microsoft Dynamics 365 CRM come Customer Relationship Management System.

Vorremmo essere in grado di popolare il CRM con i dati esistenti dal nostro sistema ERP in modo automatizzato e mantenere entrambe le parti coerenti.

Farlo manualmente sembra quasi impossibile, dato che stiamo parlando di decine di migliaia di record per entità (Conti, Contatti, Prodotti, per citarne alcuni). Inoltre, è comodo lavorare con il linguaggio SQL (Structured Query Language).

Tuttavia, non abbiamo una profonda esperienza con altri linguaggi di programmazione e framework (C#, Web API, servizi di riposo, ecc.):

  • Dovremo assumere una società di consulenza per fare questo per noi?
  • Dipenderò da questa società di consulenza per mantenere e aggiungere nuove funzionalità man mano che il mio business cambia / cresce?

Per fortuna, la risposta a tutto questo è no. A questo punto l'uso dell'esempio di cui sopra potrebbe suonare un campanello d'allarme.

Con l'approccio presentato potete sfruttare in modo massiccio le vostre competenze e i vostri processi esistenti.

Non siete ancora convinti? Perché non controllate l'esempio passo dopo passo qui sotto?

Popolamento dei conti online Dynamics 365 da Adventure Works Database Table DimCustomer.

Preparazione
Creare i seguenti trigger:

–*****************************************************************************

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


La finestra dell'Object Explorer SSMS dovrebbe contenere ora 2 nuovi trigger come segue:

due nuovi trigger nella finestra Object Explorer di SSMS

Aprite la vostra istanza Dynamics 365 Online e navigate nel modulo Vendite -> Conti

Dynamics 365 Conti

Prova:

In SSMS aprire una nuova finestra di interrogazione e incollare quanto segue:


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’;


Eseguire gli script premendo F5 o il pulsante Execute in SSMS.

Ora si dovrebbero inserire 3 record aggiuntivi nella tabella DimCustomer.

tre record aggiuntivi inseriti nella tabella DimCustomer

Torna alla tua Dynamics 365 Sales -> Accounts e aggiorna la schermata. Bingo!

tre nuovi conti creati in Dynamics 365

Sono stati creati 3 nuovi Conti in Dynamics 365, figo vero?

Ma aspettate lì, nella tabella DimCustomer il campo CustomerAlternateKey ha un numero strano. Non sono i valori che abbiamo inserito in primo luogo.

Abbiamo invece l'ID univoco del conto generato in Dynamics 365. Come è possibile?

Se si guarda da vicino il trigger OnDimCustomerInsert si noterà che SELECT SCOPE_IDENTITY(); è il responsabile di restituire l'id del conto che verrà utilizzato per aggiornare la tabella DimCustomer.

Questo sarà fondamentale per eseguire gli aggiornamenti sui conti esistenti in Dynamics 365 quando un record viene modificato nella tabella DimCustomer.

Per dimostrare la nostra tesi, aggiornare i record creati eseguendo in SSMS il seguente codice:

Dopo aver eseguito gli aggiornamenti per i 3 conti, ecco il risultato 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 Conti dopo l'esecuzione degli aggiornamenti

Che bello!

Conclusione

Gli esempi di cui sopra sono molto semplici, tuttavia non è difficile visualizzare i vantaggi di un tale approccio.

  • La manutenzione del processo è centralizzata e isolata
  • Migliorare il processo modificando i trigger è un gioco da ragazzi
  • Non c'è bisogno di imparare nuove tecnologie / linguaggio di programmazione

E' tutto qui. Spero che vi sia piaciuto.

Se hai commenti, suggerimenti, scrivili nello spazio sottostante e ti risponderemo il prima possibile.

Spero che vi divertiate tanto a usare la piattaforma Connect Bridge quanto mi sono divertito io a scrivere questo articolo.

Perché i clienti utilizzano Connect Bridge

Guarda un breve video per scoprirlo:

Video di presentazione Connect Bridge

Articolo aggiornato l'ultima volta il: 05 maggio 2020

Ana Neto - Consulente tecnico, Autore

Ana Neto
technical consulente presso Connecting Software

Autore:

Sono un ingegnere del software dal 1997, con un amore più recente per la scrittura e per i discorsi pubblici.  Avete domande o commenti su questo post o su Connect Bridge? Mi piacerebbe avere il vostro feedback!

 ana@connecting-software.com


Collaboratore: Jefferson Kenji Takahashi, MBA

Commenti 3

  1. Sembra interessante - che ne è dell'applicazione delle regole aziendali? Ad esempio, abbiamo la necessità di ottenere le transazioni dai nostri POS (dati in tabelle SQL) in Business Central - quindi che ne è del caso d'uso in cui la vendita coinvolge un cliente e/o un prodotto che non esiste nel D365?

  2. Messaggio
    Autore

    Ciao Paul,

    Se si possono ottenere i dati che si hanno dal proprio POS nelle tabelle SQL e seguono una struttura comprensibile, allora si può utilizzare Connect Bridge per far entrare tutto in Business Central. Se la vendita riguarda un cliente e/o un prodotto che non esiste nel D365, è necessario decidere cosa fare, ad esempio si potrebbe utilizzare un cliente o un prodotto generico o crearne di nuovi al volo.

    Ci metteremo in contatto con voi attraverso l'e-mail da voi indicata per esplorare con voi questa opzione.

    Ana Neto

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *