1. Argomento
1.1 Introduzione
Grazie al successo del nostro primo articolo tecnico che si può trovare qui abbiamo deciso di continuare. Questa volta daremo un'occhiata a come si può realizzare un'integrazione tra Exchange e Salesforce nel modo più semplice possibile. Utilizzeremo le query SQL.
Per l'integrazione utilizziamo CB Linked Server per applicazioni aziendali. Chiedeteci una prova gratuita del prodotto.
2. 2. Requisiti dello scenario
Lo scenario di integrazione qui richiesto è quello di sincronizzare tra una tabella di contatti del database locale, Exchange 365 contatti e SalesForce e di avere una replica immediata dalla tabella del database locale a questi 2 sistemi di destinazione. Questo potrebbe essere utile per avere un backup dei contatti offline o per creare un data warehouse o per altri motivi.
3. 3. Flusso di lavoro di base
3.1 Configurare l'analizzatore di query CB
Il primo passo è quello di assicurarsi di essere in grado di connettersi al sistema target (Exchange & SalesForce nel nostro scenario); il modo più semplice per farlo è tramite CB Query Analyzer. Qui ho già configurato il mio server ConnectBridge tramite lo strumento di amministrazione per connettermi all'MS Exchange 365 e a SalesForce creando i gruppi e gli utenti richiesti. Ho creato un nome utente chiamato "martin" con password "1234”. Questo utente ha i diritti per connettersi a Exchange 365 e SalesForce. Ora da Query Analyzer creerò 2 connessioni ad ogni sistema di destinazione e mi assicurerò di potermi collegare con successo.
Figura 1: Amministrazione dei conti
Figura 2: Amministrazione di gruppi e utenti
Figura 3: Connessioni dell'analizzatore di interrogazione
3.2 Testare le proprie dichiarazioni
Come mostrato sopra, abbiamo una configurazione e una connessione di successo con entrambi i sistemi di destinazione. Ora possiamo testare le nostre affermazioni
3.2.1 Contatti Exchange
Sul mio conto Exchange, ho 3 contatti come indicato di seguito
Figura 4: Contatti Exchange
Ora testeremo le 4 operazioni di base SELEZIONA, INSERISCI, AGGIORNA & CANCELLA
1. 1. Selezione dei contatti
L'esecuzione della seguente dichiarazione dovrebbe fornirci i 3 contatti mostrati nella Figura 5.
SELEZIONARE [NomeDato],[Cognome],[Email1EmailAddress] DA [Contatto];
Figura 5: Selezione dei contatti
2. 2. Inserimento di un contatto
Eseguendo la seguente dichiarazione si dovrebbe inserire un nuovo contatto mostrato in Figura 6
INSERT INTO Contact([GivenName],[SurName],[Email1EmailAddress]) VALUES ('Peter','K.', 'peter@gmail.com');
Figura 6: Inserimento di un nuovo contatto
3. 3. Aggiornamento di un contatto
L'esecuzione della seguente dichiarazione dovrebbe aggiornare il cognome del contatto che abbiamo inserito in precedenza, come mostrato nella Figura 7
UPDATE Contact SET [SurName] = 'Keys' WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
Figura 7: Aggiornamento del contatto
4. 4. Cancellare un contatto
Eseguendo la seguente dichiarazione si dovrebbe cancellare il contatto appena inserito come mostrato in Figura 8
DELETE FROM Contact WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
Figura 8: Cancellazione del contatto
3.2.2 Contatti forza vendita
Sul mio account SalesForce, ho 17 contatti come indicato di seguito
Figura 9: Contatti SalesForce
Ora testeremo le stesse 4 operazioni di base SELEZIONARE, INSERIRE, AGGIORNARE & CANCELLARE.
1. 1. Selezione dei contatti
L'esecuzione della seguente dichiarazione dovrebbe fornirci i 17 contatti mostrati nella Figura 10.
SELEZIONARE [Nome],[Cognome],[Email] DA [Contatto];
Figura 10: Selezione dei contatti
2. 2. Inserimento di un contatto
Eseguendo la seguente dichiarazione si dovrebbe inserire un nuovo contatto mostrato in Figura 11
INSERT INTO Contact([Firstname],[LastName],[Email]) VALUES ('Peter','K.', 'peter@gmail.com');
Figura 11: Inserimento di un nuovo contatto
3. 3. Aggiornamento di un contatto
L'esecuzione della seguente dichiarazione dovrebbe aggiornare il cognome del contatto che abbiamo inserito in precedenza, come mostrato in Figura 12
UPDATE Contact SET [LastName] = 'Keys' WHERE [Email] = 'peter@gmail.com';
Figura 12: Aggiornamento del contatto
4. 4. Cancellare un contatto
Eseguendo la seguente dichiarazione si dovrebbe cancellare il contatto appena inserito come mostrato in Figura 13
DELETE FROM Contact WHERE [Email] = 'peter@gmail.com';
Figura 13: Cancellazione del contatto
3.3 Copiare il collegamento e le dichiarazioni
Ora sappiamo che siamo in grado di selezionare, aggiornare, inserire e cancellare i contatti da Exchange & SalesForce. Quello che dobbiamo fare ora è copiare la stringa di connessione da Query Analyzer e le nostre dichiarazioni testate per utilizzarle successivamente nella nostra soluzione MS SQL Server.
Per copiare la connessione dall'analizzatore di interrogazione, basta cliccare con il tasto destro del mouse sulla connessione, cliccare su Modifica e andare alla scheda Avanzate e copiare il testo da lì come mostrato in Figura 14.
Figura 14: Copia della stringa di connessione da Query Analyzer
Ecco le mie stringhe di connessione per entrambi i sistemi di destinazione.
Exchange
Driver={Media Gateway ODBC Driver};impl='CORBA';host='localhost';port='8087';acc='ACC_EXCH365_CU7';uid='martin';pwd='1234'.
SalesForce
Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_SALF_CBD';UID='martin';PWD='1234'.
Ora siamo pronti per aprire MS SQL Server e iniziare ad implementare la nostra soluzione di integrazione SQL Server.
4. 4. Soluzione Passeggiata della soluzione
4.1 MS SQL Server
Per poter lavorare con fonti di dati esterne tramite la funzione SQL Server Linked Server, dobbiamo fare le seguenti configurazioni
1. 2. Avviare Microsoft SQL Server Management Studio ed effettuare il login utilizzando l'autenticazione di Windows o il nome utente e la password come mostrato di seguito nella Figura 15
Figura 15: Schermata di accesso a MS SQL Server Management Studio Login
Figura 16: Proprietà MSDASQL
2. 2. Navigare verso Oggetti Sever -> Server collegati -> Fornitori -> MSDASQL espandendo i nodi corrispondenti come mostrato in Figura 16. Cliccare con il tasto destro del mouse su MSDASQL - Microsoft Data Access SQL - e selezionare Proprietà per mostrare la finestra di dialogo in Figura 17
Figura 17: Impostazioni delle proprietà MSDASQL
3. Dobbiamo assicurarci che le seguenti impostazioni/opzioni siano controllate:
a. Solo livello zero: Per motivi di sicurezza dobbiamo garantire che siano supportati solo i provider OLE DB conformi all'interfaccia OLE DB di livello 0.
b. Consentire l'inprocess: consentire ai provider di dati - "fonti di dati esterne" - di essere istanziati come server in-process - "nello stesso processo di MS SQL Server". Ciò è necessario per evitare il passaggio di informazioni di autenticazione tra MS SQL Server e il provider e per poter lavorare con tipi di dati come (varchar(max), nvarchar(max), varbinary(max), text, ntext o image). Senza l'abilitazione di questa opzione, non sarà possibile ottenere un dato di tipo immagine da Exchange - ad esempio - e inserirlo nel nostro database MS SQL Server.
4. Ora dobbiamo consentire a MS SQL Server di connettersi a provider esterni ed eseguire query per interrogare i dati di provider esterni che utilizzano l'OLEDB - chiamiamoli " ".Fonti di dati OLEDB esterne”. Lo faremo in 3 passi:
a. Dobbiamo aprire una nuova finestra Query facendo clic sul pulsante New Query (Nuova Query) come mostrato nella Figura 18 qui sotto. Non importa quale database sia attivo, perché ciò che faremo avrà un impatto sull'intera installazione di MS SQL Server e, a sua volta, su tutti i database presenti. Come mostrato di seguito ho "master" come database attivo/target
Figura 18: MS SQL Server Query Analyzer
b. Dobbiamo riconfigurare MS SQL Server in modo da poter modificare/configurare le sue opzioni avanzate. Per fare ciò, dobbiamo eseguire una stored procedure chiamata "sp_configure" - è una stored procedure di sistema preinstallata - e dobbiamo specificare "show advanced options" (mostra opzioni avanzate), impostando questa opzione su 1. Per fare ciò, digitiamo "exec sp_configure 'show advanced options', 1; reconfigure" e premiamo F5 per eseguire. Se tutto è andato per il verso giusto, si dovrebbe ottenere un messaggio simile a quello della Figura 19 qui sotto
Figura 19: MS SQL Server - Visualizzazione delle opzioni avanzate
c. Ora dobbiamo permettere a MS SQL Server di interrogare quelli "Fonti di dati OLEDB esterne"usando qualcosa chiamato"Quesiti distribuiti ad hoc". Per impostazione predefinita, MS SQL Server non consente le "Ad Hoc Distributed Queries", pertanto è necessario riconfigurare questa opzione avanzata - ecco perché abbiamo eseguito il passaggio precedente - eseguendo la stored procedure "sp_configure" passando l'impostazione "Ad Hoc Distributed Queries" e il valore 1 per abilitarla. Se tutto è andato per il verso giusto, dopo l'esecuzione di "exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure" si dovrebbe ottenere un messaggio simile a quello della Figura 20 che segue.
Figura 20: MS SQL Server - Abilitazione delle query distribuite ad hoc
Ora possiamo aggiungere tutti i Linked Server che vogliamo, dato che il nostro MS SQL Server è correttamente configurato per consentirlo.
4.2 Configurazione del server collegato MS Exchange
1. Navigare verso Oggetti Sever -> Server collegati. Cliccare con il tasto destro del mouse su Server collegati e scegliere Nuovo server collegato come mostrato nella seguente Figura 21
Figura 21: MS SQL Server - Aggiunta di un nuovo server collegato
2. 2. Nella nuova finestra di dialogo del nuovo Linked Server, come mostrato nella Figura 22 qui sotto, è necessario fornire quanto segue:
a. Nome del server collegatopotrebbe essere qualsiasi nome valido, scelgo Exchange365_CU7.
b. Fornitoredeve essere "Microsoft OLE DB Providers for ODBC Drivers", poiché ConnectBridge sta utilizzando ODBC.
c. Stringa del fornitoreQui incolliamo la stringa di connessione che abbiamo copiato in precedenza da query Analyzer.
Figura 22: MS SQL Server - Configurazione di un nuovo server collegato - Generale
3.Ora dobbiamo stabilire una relazione tra l'utente che utilizza/accede a MS SQL Server e l'utente che utilizza/accede a CB. L'utente che utilizza MS SQL Server si chiama Local Login (nel nostro scenario è "sa") e l'utente che utilizza/accede al CB si chiama Remote User (nel nostro scenario è Martin con login martin). Questo è ciò che dobbiamo configurare, e per farlo clicchiamo".sicurezza" per mostrare la finestra di dialogo nella Figura 23 qui sotto
Figura 23: MS SQL Server - Configurazione di un nuovo server collegato - Sicurezza
4. Quando viene visualizzata la finestra di dialogo di cui sopra, facciamo clic sul pulsante Aggiungi e digitiamo il Login locale e l'utente remoto come concordato. Questo è quello che ho fatto qui in Figura 24
Figura 24: MS SQL Server - Configurazione di un nuovo server collegato - Loghi
5. Ok, so che vuoi chiudere il dialogo, ma aspetta, dobbiamo fare un altro passo. Ora dobbiamo andare su "...Opzioni del server" sul lato sinistro per mostrare la finestra di dialogo in Figura 25 qui sotto e abilitare 2 funzioni
a. RPCper attivare una certa funzione di sicurezza di cui avremmo bisogno quando utilizziamo una funzione legacy chiamata Server remoto - non preoccupatevi ora - in modo che la convalida del login tra CB e MS SQL Server sia possibile
b. RPC Out: per abilitare "Chiamata di procedura a distanza", in quanto dobbiamo permettere alle nostre procedure memorizzate di funzionare in remoto
Figura 25: MS SQL Server - Configurazione di un nuovo server collegato - Opzioni del server
6. Ora clicchiamo bene e abbiamo finito! Sì! Abbiamo configurato MS SQL Server per la connessione a Exchange. Ora possiamo vedere la piattaforma Exchange come un database in MS SQL Server, possiamo vedere la tabella chiamata Contatti, possiamo mostrare una lista di contatti da Exchange, tutto questo, senza accedere al database Exchange come si può vedere nella Figura 26 qui sotto
Figura 26: MS SQL Server - Server collegato configurato con successo
4.3 Test del server collegato MS Exchange
Prima di sviluppare la nostra soluzione di integrazione, dobbiamo essere sicuri di essere in grado di eseguire la manipolazione dei dati di base su MS Exchange tramite il nostro Linked Server appena configurato.
1. 1. Selezione dei contatti
L'esecuzione della seguente dichiarazione dovrebbe fornirci i 3 contatti dell'MS Exchange.
SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contatto;
Perché il "..."? Perché segue la sintassi SERVER.DATABASE.SCHEMA.TABLE e come si può vedere dalla Figura 26 sopra, il nostro Server è Exchange365_CU7, il nostro database è "senza nome" il nostro schema è "senza nome" e infine la nostra tabella è Contatti.
Figura 27: Selezione dei contatti
2. 2. Inserimento di un contatto
Eseguendo la seguente dichiarazione si dovrebbe inserire un nuovo contatto.
EXEC ('INSERT INTO Contact([GivenName], [SurName], [Email1EmailAddress]) VALUES ("Peter", "K.", "peter@gmail.com");') AT EXCHANGE365_CU7;
Figura 28: Inserimento di un nuovo contatto
3. 3. Aggiornamento di un contatto
L'esecuzione della seguente dichiarazione dovrebbe aggiornare il cognome del contatto che abbiamo inserito in precedenza
EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE "peter@gmail.com";') IN EXCHANGE365_CU7;
Figura 29: Aggiornamento del contatto
4. 4. Cancellare un contatto
Eseguendo la seguente dichiarazione si dovrebbe cancellare il contatto appena inserito
EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE "peter@gmail.com";') IN EXCHANGE365_CU7;
Figura 30: Cancellazione del contatto
4.4 Configurazione di SalesForce Linked Server
Seguiremo i passi della sezione "4.2 Configurazione di MS Exchange Linked Server", eccetto naturalmente l'utilizzo della Stringa di Connessione per SalesForce. Dopo aver seguito questi passi, il vostro Linked Server dovrebbe essere configurato con successo come mostrato di seguito.
Figura 31: Server di SalesForce Linked Server Configurato con successo
4.5 Test di Salesforce Linked Server
Come abbiamo fatto in precedenza anche con MS Exchange Linked Server, dobbiamo assicurarci di essere in grado di eseguire i compiti di base di manipolazione dei dati tramite il server collegato di SalesForce.
Per abbreviare la guida, la Figura 32 qui sotto sta testando tutte le seguenti affermazioni
1. 1. Selezione dei contatti
L'esecuzione della seguente dichiarazione dovrebbe fornirci i contatti di SalesForce.
SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contatto;
2. 2. Inserimento di un contatto
Eseguendo la seguente dichiarazione si dovrebbe inserire un nuovo contatto.
EXEC ('INSERT INTO Contact([GivenName], [SurName], [Email1EmailAddress]) VALUES ("Peter", "K.", "peter@gmail.com");') AT EXCHANGE365_CU7;
3. 3. Aggiornamento di un contatto
L'esecuzione della seguente dichiarazione dovrebbe aggiornare il cognome del contatto che abbiamo inserito in precedenza
EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE "peter@gmail.com";') IN EXCHANGE365_CU7;
4. 4. Cancellare un contatto
Eseguendo la seguente dichiarazione si dovrebbe cancellare il contatto appena inserito
EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE "peter@gmail.com";') IN EXCHANGE365_CU7;
Figura 32: Test del server collegato SalesForce
4.6 Tabella database locale
Da qui, abbiamo bisogno di avere un vero e proprio database locale sul nostro Local MS SQL Server. Se ne avete già uno, allora potreste usarlo, altrimenti dobbiamo creare un nuovo Database. Ho creato un Database chiamato ConnectingSoftware con 1 tabella chiamata LocalContacts. In quella tabella c'è un solo record come mostrato in Figura 33.
Figura 33: Tabella dei contatti locali
4.7 Trigger della tabella di replica
Il primo passo della nostra soluzione è quello di replicare le modifiche nella nostra tabella del database locale sia a SalesForce che a Exchange.
Di seguito viene mostrato lo script SQL per il trigger:
CREARE TRIGGER [dbo]. [trgSyncContact]. ON [dbo]. [LocalContacts]. DOPO L'INSERIMENTO, L'AGGIORNAMENTO, LA CANCELLAZIONE AS INIZIO dichiarare @Operazione varchar(50) dichiarare @NomeNome nvarchar(max) dichiarare @LastName nvarchar(max) dichiarare @Email varchar(255) dichiarare @Deleted_FirstName_FirstName nvarchar(max) dichiarare @Cancellato_LastNameName nvarchar(max) dichiarare @Deleted_Email varchar(255) SE COLONNE_AGGIORNATE() > 0 INIZIO --se abbiamo aggiornato le colonne, allora abbiamo inserito o cancellato una colonna Registrare SE ESISTE (SELEZIONARE * DA CANCELLATO) INIZIO --se abbiamo cancellato dei valori, allora si è trattato di un'operazione di aggiornamento SELECT @FirstName = inserito.FirstName, @LastName = Inserito.LastName, @Email = inserito.Email, @Deleted_FirstName = cancellato.FirstName, @Deleted_LastName = cancellato.LastName, @Deleted_Email = cancellato.e-mail DA cancellato, inserito --SalesForce Exec ('UPDATE Contact SET FirstName = ?, LastName = ?, Email = ? WHERE FirstName = ? e LastName = ? e Email = ?', @FirstName, @LastName, @Email, @Deleted_FirstName, @Deleted_LastName, @Deleted_Email) presso SALESFORCE_CBD; --Exchange EXEC ('UPDATE Contact SET GivenName = ?, SurName = ?, Email1EmailAddress = ? DOVE GivenName = ? e SurName = e Email1EmailAddress = ?', @FirstName, @LastName, @Email, @Cancellato_Nome_PrimoNome, @Cancellato_LastName, @Cancellato_Email) in EXCHANGE365_CU7; FINE ELSE INIZIO --se non era un'operazione di aggiornamento, allora è stato inserito SELEZIONA @FirstName = Nome, @LastName = Cognome, @Email = Invia un'e-mail a DA inserito --SalesForce Exec ('Inserisci nei valori di Contact (FirstName, LastName, Email) (?,?,?,?)', @FirstName, @LastName, @Email) a SALESFORCE_CBD; --MS Exchange EXEC ('Inserisci nel contatto (GivenName, SurName, Valori Email1EmailAddress) (?,?,?,?)', @FirstName, @LastName, @Email) a EXCHANGE365_CU7; FINE FINE ELSE INIZIO --se l'operazione non è stata aggiornata/inserita, allora è stata cancellata SELECT @Deleted_Email = Email DA cancellato --SalesForce Exec ('Delete From Contact Where Email = ?', @Deleted_Email) a SALESFORCE_CBD; --MS Exchange Exec ('Cancella dal contatto dove Email1EmailAddress = ?', @Cancellati_Email) a EXCHANGE365_CU7; FINE FINE
Attenzione: dopo aver eseguito lo script di cui sopra, non dovremmo inserire nulla dalla tabella del database locale fino a quando non ci sincronizziamo tra i nostri 2 sistemi di destinazione (Exchange e SalesForce) e il nostro database locale, altrimenti potremmo finire per duplicare accidentalmente i record, poiché la logica qui non controlla se un nuovo record esisteva già su quei sistemi di destinazione.
4.8 Procedura di sincronizzazione memorizzata
Il secondo passo della nostra soluzione è la sincronizzazione tra MS Exchange, SalesForce e la nostra tabella dei contatti locali, in modo che ogni sistema abbia la stessa serie di contatti.
Per farlo scriveremo una procedura memorizzata. La logica della procedura è quella di:
1. Molto importante per disabilitare il trigger che abbiamo creato sopra "poiché stiamo facendo la sincronizzazione, non dobbiamo abilitare la replica automatica implementata dal trigger".
2. Sincronizzare tra SalesForce e il mio database
Utilizzo dell'indirizzo e-mail del contatto come chiave di corrispondenza; C'è un contatto su SalesForce e non nella mia tabella dei Contatti locali?
a. Sì: Aggiungi un contatto alla mia tabella dei contatti locali
b. No: Aggiornare il nome e il cognome del contatto nella mia tabella dei contatti locali
3. 3. Sincronizzare tra MS Exchange e il mio database
Utilizzo dell'indirizzo e-mail del contatto come chiave di corrispondenza; C'è un contatto su Exchange e non nella mia tabella dei Contatti locali?
a. Sì: Aggiungi un contatto alla mia tabella dei contatti locali
b. No: Aggiornare il nome e il cognome del contatto nella mia tabella dei contatti locali
A questo punto, la mia tabella Contatti locale ha tutti i contatti sia di SalesForce che di MS Exchange oltre ai record che erano originariamente nella tabella. Ora abbiamo bisogno di aggiornare ogni sistema di destinazione dai contatti dell'altro sistema di destinazione e dal database locale
4. Aggiornare i contatti su SalesForce (tramite i contatti di Exchange e la mia tabella locale)
Utilizzo dell'indirizzo e-mail del contatto come chiave di corrispondenza; C'è un contatto nella mia tabella dei Contatti locali e non su SalesForce?
a. Sì: Aggiungi un contatto a SalesForce
b. No: Aggiorna il nome e il cognome del contatto su SalesForce
5. Aggiornare i contatti su Exchange (tramite i contatti di SalesForce & my local table)
Utilizzo dell'indirizzo e-mail del contatto come chiave di corrispondenza; C'è un contatto nella mia tabella dei Contatti locali e non su Exchange?
a. Sì: Aggiungere un contatto all'MS Exchange
b. No: Aggiornare nome e cognome del contatto su Exchange
6. Ora, possiamo attivare il trigger che abbiamo disabilitato in precedenza, quindi la replica automatica è di nuovo attiva.
Il seguente script SQL implementerà la logica discussa sopra
PROCEDURA DI CREAZIONE [dbo]. [uspInitSync]. -- Aggiungete qui i parametri per la procedura memorizzata AS INIZIO -- SET NOCOUNT ON aggiunto per evitare che set di risultati extra da -- interferendo con le dichiarazioni di SELEZIONE. IMPOSTARE NOCOUNT ON; --disattivare il trigger in modo che, pur inserendo da SalesForce non finiamo in --aggiungere di nuovo i contatti a SalesForce DISABILITA TRIGGER [trgSyncContact] ON LocalContacts; --mettere insieme i record da SalesForce a LocalDB DICHIARAZIONE @ImportatoTabella dei contatti(NomeNome nvarchar(max), Cognome nvarchar(max), Email varchar(255)); -aggiornare / inserire contatti in LocalDB utilizzando SalesForce come fonte MERGE LocalContacts AS target UTILIZZO (SELEZIONARE Nome, Cognome, Email DA SalesForce_CBD...Contatto) AS fonte ON (target.Email LIKE source.Email) SE ABBINATO ALLORA UPDATE SET FirstName = fonte.FirstName, LastName = fonte.cognome QUANDO NON È ABBINATO, ALLORA INSERIRE (Nome, Cognome, Email) VALORI (fonte: nome, cognome, origine, e-mail) USCITA inserito.Nome, inserito.Cognome, inserito.Email INTO @ImportedContacts; --mostrate i contatti inseriti in LocalDB da SalesForce selezionare * da @ImportedContacts; -aggiornare / inserire contatti nel LocalDB utilizzando Exchange come sorgente MERGE LocalContacts AS target UTILIZZO (SELEZIONA NOME, Cognome, Email1EmailAddress DA EXCHANGE365_CU7...Contatto) AS fonte ON (target.Email LIKE source.Email1EmailAddress) SE ABBINATO ALLORA UPDATE SET FirstName = fonte.GivenName, LastName = fonte.SurName QUANDO NON È ABBINATO, ALLORA INSERIRE (Nome, Cognome, Email) VALORI (fonte.GivenName, fonte.SurName, source.Email1EmailAddress) USCITA inserito.Nome, inserito.Cognome, inserito.Email INTO @ImportedContacts; --display contatti inseriti utilizzando la variabile della tabella selezionare * da @ImportedContacts; --ora copia tutto su SalesForce & Exchange in modo che abbiano una copia esatta --dal LocalDB dopo che il LocalDB è sincronizzato con tutti i sistemi --Devo usare cursour e se, perché usando insert....select.... dove non c'è --esiste non funzionava con i tavoli remoti e anche la fusione non funziona con --tavole a distanza Dichiarare @NomeNome nvarchar(max) dichiarare @LastName nvarchar(max) dichiarare @Email varchar(255) dichiarare @SQL nvarchar(max) DICHIARAZIONE Contatti_cursore CURSORE FAST_FORWARD PER SELEZIONA Nome, Cognome, Email da LocalContacts; APRI Contatti_cursore FETCH NEXT DA CONTATTI_cursor INTO @Nome, @LastName, @Email MENTRE @@FETCH_STATUS = 0 INIZIO SE ESISTE (SELEZIONARE Email1EmailAddress DA EXCHANGE365_CU7...Contatto DOVE DOVE Email1EmailAddress LIKE @Email) EXEC ('UPDATE Contact SET GivenName = ?, SurName = ? DOVE Email1EmailAddress = ?', @FirstName, @LastName, @Email) al EXCHANGE365_CU7; ELSE EXEC ('Inserisci nel contatto (GivenName, SurName, Valori Email1EmailAddress) (?,?,?,?)', @FirstName, @LastName, @Email) a EXCHANGE365_CU7; SE ESISTE (SELEZIONARE e-mail da SalesForce_CBD...Contattate DOVE PIACEREVOLE e-mail @Email) Exec ('UPDATE Contact SET FirstName = ?, LastName = ? DOVE Email = ?', @FirstName, @LastName, @Email) a SalesForce_CBD; ELSE Exec ('Inserisci nei valori di Contact (FirstName, LastName, Email) (?,?,?,?)', @FirstName, @LastName, @Email) a SalesForce_CBD; FETCH NEXT DA CONTATTI_cursor INTO @Nome, @LastName, @Email FINE CHIUDI Contatti_cursore; Contatti_cursore; --attivare il trigger in modo che ogni modifica si rifletta nel LOB online TRIGGER ANABILE [trgSyncContact] ON LocalContacts; FINE
5. 5. Soluzione in azione
Ora il primo passo è quello di eseguire la procedura di sincronizzazione memorizzata "uspInitSync" come mostrato di seguito, la procedura memorizzata è stata eseguita senza errori.
Figura 34: esecuzione della procedura di sincronizzazione memorizzata
Abbiamo anche potuto constatare l'aggiunta di nuovi contatti all'MS Exchange
Figura 35: Aggiornamenti su MS Exchange
E nuovi contatti aggiunti a SalesForce
Figura 36: Aggiornamenti su SalesForce
E la nostra tabella del database locale sta avendo nuovi contatti
Figura 37: Aggiornamenti nella tabella dei contatti locali
Possiamo vedere la replica automatica in azione anche
1. 2. Inserendo il contatto dal database locale, lo cancella da SalesForce e Exchange
Figura 38: Inserire la replica
2. L'aggiornamento del contatto nel database locale lo aggiorna in SalesForce e Exchange
Figura 39: Aggiornamento della replica
3. 3. Cancellare il contatto dal database locale, lo cancella da SalesForce e Exchange
Figura 40: Cancellare la replica
6. Note sulla soluzione
Abbiamo cercato di mantenere la logica della soluzione il più semplice possibile, ma la logica potrebbe essere ulteriormente migliorata e perfezionata per ottenere prestazioni migliori e caratteristiche più complesse.
Potete trovare maggiori informazioni su questo prodotto nella pagina del prodotto di CB Linked Server for Enterprise Applications.