Integrazione SQL di Exchange e Salesforce

Integrazione SQL di Exchange e Salesforce

Ana NetoTechnical Leave a Comment

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 consiste nell'assicurarsi di poter connettersi al sistema di destinazione (Exchange e 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 a 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 a ciascun sistema di destinazione e mi assicurerò di potermi connettere correttamente.

Integrazione SQL di Exchange e Salesforce

Figura 1: Amministrazione dei conti

Integrazione SQL di Exchange e Salesforce immagine 2

Figura 2: Amministrazione dei gruppi e degli utenti

Image

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

Image

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];
Integrazione SQL di Exchange e Salesforce immagine 5

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');
Integrazione SQL di Exchange e Salesforce immagine 6

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';
Integrazione SQL di Exchange e Salesforce immagine 7

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';
Integrazione SQL di Exchange e Salesforce immagine 8

Figura 8: Cancellazione del contatto

3.2.2 Contatti forza vendita

Sul mio account SalesForce, ho 17 contatti come indicato di seguito

Integrazione SQL di Exchange e Salesforce immagine 9

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];
Integrazione SQL di Exchange e Salesforce immagine 10

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');
Integrazione SQL di Exchange e Salesforce immagine 11

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';
Integrazione SQL di Exchange e Salesforce immagine 12

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';
Integrazione SQL di Exchange e Salesforce immagine 13

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.

Integrazione SQL di Exchange e Salesforce immagine 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

Integrazione SQL di Exchange e Salesforce immagine 15

Figura 15: Schermata di accesso a MS SQL Server Management Studio Login

Integrazione SQL di Exchange e Salesforce immagine 16

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

Integrazione SQL di Exchange e Salesforce immagine 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 fornitori di dati – “fonti di dati esterne” – di essere istanziati come server in-process – “nello stesso processo di MS SQL Server”. È necessario farlo 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 abilitare questa opzione, non sarà possibile ottenere un dato di tipo image da Exchange, ad esempio, e inserirlo nel database MS SQL Server.

4. Ora dobbiamo abilitare MS SQL Server per connettersi a provider esterni ed eseguire query per interrogare i dati da provider esterni che utilizzano OLEDB: chiamiamoli “Fonti di dati OLEDB esterne”. Lo faremo in 3 passaggi:

a. È necessario aprire una nuova finestra Query facendo clic sul pulsante Nuova query, come mostrato nella Figura 18 riportata di seguito. Non importa quale database sia attivo, poiché l'operazione che stiamo per eseguire avrà effetto sull'intera installazione di MS SQL Server e, di conseguenza, su tutti i database in essa contenuti. Come mostrato di seguito, ho selezionato “master” come database attivo/di destinazione.

Integrazione SQL di Exchange e Salesforce immagine 18

Figura 18: MS SQL Server Query Analyzer

b. È necessario riconfigurare MS SQL Server in modo da poter modificare/configurare le sue opzioni avanzate. A tal fine, eseguiremo una procedura memorizzata denominata “sp_configure” (una procedura memorizzata di sistema preinstallata) e, in particolare, “mostreremo le opzioni avanzate” impostando questa opzione su 1. Per farlo, digitiamo “exec sp_configure 'show advanced options', 1; reconfigure” e premiamo F5 per eseguire. Se tutto va bene, dovrebbe apparire un messaggio simile a quello mostrato nella Figura 19 qui sotto.

Figura 19: MS SQL Server - Visualizzazione delle opzioni avanzate

Integrazione SQL di Exchange e Salesforce immagine 19

c. Ora dobbiamo consentire a MS SQL Server di interrogare tali “Fonti di dati OLEDB esterne”utilizzando qualcosa chiamato “Quesiti distribuiti ad hoc”. Per impostazione predefinita, MS SQL Server non consente le “query distribuite ad hoc”, pertanto è necessario riconfigurare questa opzione avanzata (motivo per cui abbiamo eseguito il passaggio precedente) eseguendo la procedura memorizzata “sp_configure” e passando l’impostazione “query distribuite ad hoc” e il valore 1 per abilitarla. Se tutto va bene, dopo aver eseguito “exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure” dovrebbe apparire un messaggio simile a quello mostrato nella Figura 20 qui sotto.”

Integrazione SQL di Exchange e Salesforce immagine 20

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

Integrazione SQL di Exchange e Salesforce immagine 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. Fornitore: deve essere “Microsoft OLE DB Providers for ODBC Drivers”, poiché ConnectBridge utilizza ODBC.

c. Stringa del fornitoreQui incolliamo la stringa di connessione che abbiamo copiato in precedenza da query Analyzer.

Integrazione SQL di Exchange e Salesforce immagine 22

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 è denominato Local Login (nel nostro scenario è “sa”) e l'utente che utilizza/accede a CB è denominato Remote User (nel nostro scenario è Martin con login martin). Questo è ciò che dobbiamo configurare e per farlo clicchiamo su “sicurezza” per visualizzare la finestra di dialogo mostrata nella Figura 23 qui sotto.

Integrazione SQL dell'immagine Exchange e Salesforce

Figura 23: MS SQL Server - Configurazione di un nuovo server collegato - Sicurezza

4. Quando viene visualizzata la finestra di dialogo sopra riportata, facciamo clic sul pulsante Aggiungi e digitiamo il nome utente locale e l'utente remoto come concordato. Questo è ciò che ho fatto qui nella Figura 24.

Integrazione SQL di Exchange e Salesforce immagine 24

Figura 24: MS SQL Server - Configurazione di un nuovo server collegato - Loghi

5. Ok, so che vuoi chiudere la finestra di dialogo, ma aspetta! Dobbiamo fare ancora un passo. Ora dobbiamo andare su “Opzioni del server” sul lato sinistro per visualizzare la finestra di dialogo mostrata nella 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 preoccuparti ora – in modo che sia possibile la convalida dell'accesso tra CB e MS SQL Server

b. RPC Out: per abilitare “Chiamata di procedura a distanza”, poiché dobbiamo consentire alle nostre procedure memorizzate di essere eseguite in remoto.

Integrazione SQL di Exchange e Salesforce immagine 25

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

Integrazione SQL di Exchange e Salesforce

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.

Integrazione SQL di Exchange e Salesforce

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;
Integrazione SQL di Exchange e Salesforce immagine 28

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;
Integrazione SQL di Exchange e Salesforce immagine 29

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;
Integrazione SQL di Exchange e Salesforce immagine 30

Figura 30: Cancellazione del contatto

4.4 Configurazione di SalesForce Linked Server

Seguiremo i passaggi descritti nella sezione “4.2 Configurazione del server collegato MS Exchange”, tranne ovviamente per il fatto che utilizzeremo la stringa di connessione per SalesForce. Dopo aver seguito questi passaggi, il server collegato dovrebbe essere configurato correttamente, come mostrato di seguito.

Integrazione SQL di Exchange e Salesforce immagine 31

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;
Integrazione SQL di Exchange e Salesforce immagine 32

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

Integrazione SQL di Exchange e Salesforce immagine 33

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 sopra riportato, non dovremmo inserire nulla dalla tabella del database locale fino a quando non avremo sincronizzato 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 disabilitare il trigger che abbiamo creato sopra: “poiché stiamo eseguendo 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; esiste un contatto su SalesForce che non è presente nella mia tabella dei contatti locali?

a. Sì: Aggiungi un contatto alla mia tabella dei contatti locali

b. No: Aggiorna nome e 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; esiste un contatto su Exchange che non è presente nella mia tabella Contatti locali?

a. Sì: Aggiungi un contatto alla mia tabella dei contatti locali

b. No: Aggiorna nome e 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; esiste un contatto nella mia tabella Contatti locali che non è presente in SalesForce?

a. Sì: Aggiungi un contatto a SalesForce

b. No: Aggiorna nome e 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; esiste un contatto nella mia tabella Contatti locali che non è presente in Exchange?

a. Sì: Aggiungere un contatto all'MS Exchange

b. No: Aggiorna 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

Il primo passo è eseguire la procedura memorizzata di sincronizzazione “uspInitSync” come mostrato di seguito. La procedura memorizzata è stata eseguita senza errori.

Integrazione SQL di Exchange e Salesforce immagine 34

Figura 34: esecuzione della procedura di sincronizzazione memorizzata

Abbiamo anche potuto constatare l'aggiunta di nuovi contatti all'MS Exchange

Integrazione SQL di Exchange e Salesforce immagine 35

Figura 35: Aggiornamenti su MS Exchange

E nuovi contatti aggiunti a SalesForce

Integrazione SQL di Exchange e Salesforce immagine 36

Figura 36: Aggiornamenti su SalesForce

E la nostra tabella del database locale sta avendo nuovi contatti

Integrazione SQL di Exchange e Salesforce immagine 37

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

Integrazione SQL di Exchange e Salesforce immagine 38

Figura 38: Inserire la replica

2. L'aggiornamento del contatto nel database locale lo aggiorna in SalesForce e Exchange

Integrazione SQL di Exchange e Salesforce immagine 39

Figura 39: Aggiornamento della replica

3. 3. Cancellare il contatto dal database locale, lo cancella da SalesForce e Exchange

Integrazione SQL di Exchange e Salesforce immagine 40

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.

Lascia un commento

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

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.