Integração SQL do Exchange e Salesforce

Integração SQL do Exchange e Salesforce

Georgii KapanadzeTechnical Leave a Comment

1. Tópico

1.1 Introdução

Devido ao sucesso do nosso primeiro artigo técnico que pode ser encontrado aqui nós decidimos continuar. Desta vez vamos ver como uma integração entre o Exchange e a Salesforce pode ser alcançada de uma forma muito simples. Vamos usar consultas SQL.

Para a integração utilizamos o CB Linked Server for Enterprise Applications. Peça-nos um teste gratuito do produto.

2. 2. Requisitos do Cenário

O cenário de integração necessário aqui é sincronizar entre uma tabela de contatos da base de dados local, contatos Exchange 365 e contatos SalesForce e ter uma replicação imediata da tabela da base de dados local para aqueles 2 sistemas alvo. Isto pode ser útil para ter um backup de contatos offline ou para criar um data warehouse ou por algumas outras razões.

3. Fluxo de Trabalho Básico

3.1 Configurar o CB Query Analyzer

O primeiro passo, é garantir que você seja capaz de se conectar ao sistema alvo (Exchange & SalesForce em nosso cenário); a maneira mais fácil de fazer isso é através do CB Query Analyzer. Aqui eu já configurei meu servidor ConnectBridge através da ferramenta de Administração para conectar ao MS Exchange 365 e ao SalesForce, criando os grupos e usuários necessários. Eu criei um nome de usuário chamado "martin"com senha".1234”. Este utilizador tem direitos de ligação ao Exchange 365 e à SalesForce. Agora do Query Analyzer vou criar 2 conexões para cada sistema alvo e garantir que eu possa me conectar com sucesso.

Integração SQL do Exchange e Salesforce

Figura 1: Administração de Contas

Integração SQL de Exchange e Salesforce imagem 2

Figura 2: Administração de grupos e utilizadores

Image

Figura 3: Conexões do Analisador de Consulta

3.2 Teste as suas declarações

Como mostrado acima, temos uma configuração e conexão bem sucedida com ambos os sistemas alvo. Agora podemos testar as nossas afirmações

3.2.1 Exchange Contactos

Na minha conta Exchange, tenho 3 contatos, como mostrado abaixo

Image

Figura 4: Exchange Contatos

Agora vamos testar as 4 operações básicas SELECT, INSERT, UPDATE & DELETE

1. Selecção de contactos

A execução da declaração abaixo deve nos dar os 3 contatos mostrados na Figura 5.

SELECT [GivenName],[SurName],[Email1EmailAddress] FROM [Contact];
Integração SQL de Exchange e Salesforce imagem 5

Figura 5: Selecção de Contactos

2. Inserir um contacto

A execução da declaração abaixo deve inserir um novo contato mostrado na Figura 6.

INSERIR INTO Contacto([GivenName],[SurName],[Email1EmailAddress]) VALORES ('Peter','K.', 'peter@gmail.com');
Integração SQL de Exchange e Salesforce imagem 6

Figura 6: Inserção de novo contato

3. Actualização de um contacto

A execução da declaração abaixo deve atualizar o sobrenome do contato que inserimos anteriormente, como mostrado na Figura 7.

ACTUALIZAR CONJUNTO DE CONTACTO [Apelido] = 'Chaves' ONDE [Email1EmailAddress] LIKE 'peter@gmail.com';
Integração SQL de Exchange e Salesforce imagem 7

Figura 7: Contato de Atualização

4. Eliminar um contacto

A execução da declaração abaixo deve apagar o contato recém inserido, como mostrado na Figura 8

APAGAR DE CONTACTO ONDE [Email1EmailAddress] LIKE 'peter@gmail.com';
Integração SQL de Exchange e Salesforce imagem 8

Figura 8: Eliminação do contacto

3.2.2 Contatos da Força de Vendas

Na minha conta SalesForce, eu tenho 17 contatos, como mostrado abaixo

Integração SQL de Exchange e Salesforce imagem 9

Figura 9: Contatos da SalesForce

Agora vamos testar as mesmas 4 operações básicas SELECT, INSERT, UPDATE & DELETE.

1. Selecção de contactos

A execução da declaração abaixo deve nos dar os 17 contatos mostrados na Figura 10.

SELECT [FirstName],[LastName],[Email] FROM [Contact];
Integração SQL de Exchange e Salesforce imagem 10

Figura 10: Selecção de Contactos

2. Inserir um contacto

A execução da declaração abaixo deve inserir um novo contato mostrado na Figura 11.

INSERIR CONTACTO([Nome],[Apelido],[Email]) VALORES ('Peter','K.', 'peter@gmail.com');
Integração SQL de Exchange e Salesforce imagem 11

Figura 11: Inserção de novo contato

3. Actualização de um contacto

A execução da declaração abaixo deve atualizar o sobrenome do contato que inserimos anteriormente, como mostrado na Figura 12.

ACTUALIZAR CONJUNTO DE CONTACTO [LastName] = 'Chaves' ONDE [Email] = 'peter@gmail.com';
Integração SQL de Exchange e Salesforce imagem 12

Figura 12: Contato de Atualização

4. Eliminar um contacto

A execução da declaração abaixo deve eliminar o contacto recém-inserido, como mostra a Figura 13.

APAGAR DO CONTACTO ONDE [Email] = 'peter@gmail.com';
Integração SQL de Exchange e Salesforce imagem 13

Figura 13: Eliminação do contacto

3.3 Conexão de cópia e extratos

Agora sabemos que somos capazes de selecionar, atualizar, inserir e excluir contatos do Exchange & SalesForce. O que precisamos fazer agora é copiar a string de conexão do Query Analyzer e nossas instruções testadas para usá-las mais tarde em nossa solução MS SQL Server.

Para copiar a conexão do analisador de consultas, basta clicar com o botão direito do mouse na conexão, clicar em Editar e ir para a aba Avançado e copiar o texto de lá, como mostrado abaixo na Figura 14.

Integração SQL de Exchange e Salesforce imagem 14

Figura 14: Cópia do fio de ligação do Query Analyzer

Aqui estão as minhas cordas de ligação para ambos os sistemas alvo.

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'

Agora estamos prontos para abrir o MS SQL Server e começar a implementar a nossa solução de integração com o SQL Server.

4. Solução Walkthrough

4.1 MS SQL Server

Para podermos trabalhar com fontes de dados externas através do recurso SQL Server Linked Server, precisamos fazer as seguintes configurações

1. Inicie o Microsoft SQL Server Management Studio e faça o login usando autenticação do Windows ou nome de usuário e senha, como mostrado abaixo na Figura 15

Integração SQL de Exchange e Salesforce imagem 15

Figura 15: Tela de Login do MS SQL Server Management Studio

Integração SQL de Exchange e Salesforce imagem 16

Figura 16: Propriedades do MSDASQL

2. Navegue para Sever Objectos -> Servidores Ligados -> Provedores -> MSDASQL expandindo os nós correspondentes, como mostrado acima na Figura 16. Clique com o botão direito do mouse em MSDASQL - Microsoft Data Access SQL - e selecione Imóveis para mostrar o diálogo na Figura 17

Integração SQL de Exchange e Salesforce imagem 17

Figura 17: Configurações das propriedades do MSDASQL

3. Temos de garantir que as seguintes configurações/opções são verificadas:

a. Nível zero apenas: Por razões de segurança, temos de garantir que apenas os fornecedores de OLE DB que estão em conformidade com o nível 0 da interface OLE DB são suportados.

b. Permitir o processamento: permitir que o(s) fornecedor(es) de dados - "fontes de dados externas" - seja(m) instanciado(s) como um servidor em processo - "no mesmo processo que o MS SQL Server". Precisamos de o fazer para evitar a passagem de informação de autenticação entre o MS SQL Server e o Provedor e para poder trabalhar com tipos de dados como (varchar(max), nvarchar(max), varbinary(max), texto, ntext, ou imagem). Sem activar esta opção, não poderemos obter dados do tipo imagem do Exchange - por exemplo - e inseri-lo na nossa Base de Dados MS SQL Server.

4. Agora precisamos habilitar o MS SQL Server para se conectar a provedores externos e executar consultas para consultar dados de provedores externos que usam OLEDB - vamos chamá-los de "Fontes externas de dados OLEDB”. Vamos fazer isso em 3 passos:

a. Precisamos abrir uma nova janela de Consulta clicando no botão Nova Consulta, como mostrado na Figura 18 abaixo. Não importa qual banco de dados está ativo, porque o que vamos fazer vai afetar toda a instalação do MS SQL Server e, por sua vez, todos e cada um dos bancos de dados lá dentro. Como mostrado abaixo eu tenho "master" como a base de dados ativa/alvo

Integração SQL de Exchange e Salesforce imagem 18

Figura 18: MS SQL Server Query Analyzer

b. Precisamos de reconfigurar o MS SQL Server para que possamos alterar/configurar as suas opções avançadas. Para tal, vamos executar um procedimento armazenado chamado "sp_configure" - é um procedimento armazenado no sistema pré-instalado - e vamos especificamente "mostrar opções avançadas" - definindo esta opção como 1. Para tal, digitamos "execute sp_configure 'show advanced options', 1; reconfigure" e prima F5 para executar. Se tudo correr bem, deverá receber uma mensagem semelhante à mensagem da Figura 19 abaixo

Figura 19: MS SQL Server - Mostrando opções avançadas

Integração SQL de Exchange e Salesforce imagem 19

c. Agora precisamos permitir que o MS SQL Server consulte aqueles "Fontes externas de dados OLEDB"usando algo chamado"Consultas Distribuídas Ad Hoc”. Por defeito, o MS SQL Server não permite as "Ad Hoc Distributed Queries", por isso precisamos de reconfigurar esta opção avançada - foi por isso que fizemos o passo anterior - executando o procedimento armazenado "sp_configure" passando a definição "Ad Hoc Distributed Queries" e o valor 1 para o activar. Se tudo correr bem, deverá receber uma mensagem semelhante à mensagem da Figura 20 abaixo após executar "execute sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure".

Integração SQL de Exchange e Salesforce imagem 20

Figura 20: MS SQL Server - Habilitação de Consultas Distribuídas Ad Hoc

Agora podemos adicionar quantos Linked Server quisermos, uma vez que o nosso MS SQL Server está devidamente configurado para permitir isso.

4.2 Configuração do servidor ligado MS Exchange

1. navegue para Sever Objectos -> Servidores Ligados. Clique com o botão direito do mouse sobre Servidores Ligados e escolha Novo Servidor Vinculado como mostrado na Figura 21 abaixo

Integração SQL de Exchange e Salesforce imagem 21

Figura 21: MS SQL Server - Adicionando novo servidor vinculado

2. No novo diálogo do Linked Server, como mostrado na Figura 22 abaixo, você precisa fornecer o seguinte:

a. Nome do servidor ligado: pode ser qualquer nome válido, eu escolho Exchange365_CU7.

b. FornecedorO ConnectBridge é um "Microsoft OLE DB Providers for ODBC Drivers", uma vez que o ConnectBridge está a usar ODBC.

c. Corda de Provedor: aqui colamos a string de conexão que copiamos anteriormente da consulta Analisador.

Integração SQL de Exchange e Salesforce imagem 22

Figura 22: MS SQL Server - Configuração do Novo Servidor Ligado - Geral

3.Agora precisamos estabelecer uma relação entre o usuário usando/acessando o MS SQL Server e o usuário usando/acessando o CB. O utilizador que utiliza o MS SQL Server chama-se Local Login (no nosso cenário é "sa") e o utilizador que utiliza/acessar o CB chama-se Remote User (no nosso cenário é Martin com login martin). Isto é o que temos de configurar, e para fazer isso clicamos em "segurança" para mostrar o diálogo da Figura 23 abaixo

Integração SQL da imagem Exchange e Salesforce

Figura 23: MS SQL Server - Configuração do Novo Servidor Ligado - Segurança

4. Quando a caixa de diálogo acima é exibida, clicamos no botão Adicionar e digitamos o Login Local e o Usuário Remoto como combinamos. Foi o que eu fiz aqui na Figura 24.

Integração SQL de Exchange e Salesforce imagem 24

Figura 24: MS SQL Server - Configuração de Novo Servidor Ligado - Logins

5. Está bem, eu sei que queres fechar o diálogo, mas espera! Precisamos de dar mais um passo. Agora precisamos de ir para "Opções do Servidor" no lado esquerdo para mostrar o diálogo da Figura 25 abaixo e ativar 2 recursos

a. RPC: para activar um determinado recurso de segurança que precisaríamos quando utilizássemos algum recurso herdado chamado Servidor remoto - não se preocupe com isso agora - para que a validação do login entre o CB e o MS SQL Server seja possível

b. RPC Fora: para permitir "Chamada de procedimento remoto", pois precisamos de permitir que os nossos procedimentos armazenados possam ser executados remotamente

Integração SQL de Exchange e Salesforce imagem 25

Figura 25: MS SQL Server - Configuração de Novo Servidor Ligado - Opções do Servidor

6. Agora clicamos bem e pronto! Sim! Configurámos o MS SQL Server para se ligar ao Exchange. Agora podemos ver a plataforma Exchange como uma base de dados no MS SQL Server, podemos ver a tabela chamada Contactos, podemos mostrar uma lista de contactos do Exchange, tudo isto, sem aceder à base de dados do Exchange como pode ver na Figura 26 abaixo

Integração SQL do Exchange e Salesforce

Figura 26: MS SQL Server - Servidor Ligado Configurado com Sucesso

4.3 Testando o MS Exchange Linked Server

Antes de desenvolver nossa solução de integração, precisamos ter certeza de que somos capazes de realizar a manipulação de dados básicos no MS Exchange através do nosso recém-configurado Linked Server.

1. Selecção de contactos

A execução da declaração abaixo deve nos dar os 3 contatos do MS Exchange.

SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contacto;

Porquê o "..."? Porque segue a sintaxe SERVER.DATABASE.SCHEMA.TABLE e como você pode ver na Figura 26 acima, nosso Servidor é Exchange365_CU7, nossa base de dados é "sem nome" nosso esquema é "sem nome" e finalmente nossa tabela é Contatos.

Integração SQL do Exchange e Salesforce

Figura 27: Selecção de Contactos

2. Inserir um contacto

A execução da declaração abaixo deve inserir um novo contacto.

EXEC ('INSERIR INTO Contacto([GivenName], [SurName], [Email1EmailAddress])
VALORES ("Peter", "K.", "peter@gmail.com");') EM EXCHANGE365_CU7;
Integração SQL de Exchange e Salesforce imagem 28

Figura 28: Inserção de novo contato

3. Actualização de um contacto

A execução da declaração abaixo deve atualizar o sobrenome do contato que inserimos anteriormente

EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') NA EXCHANGE365_CU7;
Integração SQL de Exchange e Salesforce imagem 29

Figura 29: Contato de Atualização

4. Eliminar um contacto

A execução da declaração abaixo deve eliminar o contacto recém inserido

EXEC ('APAGAR DE CONTACTO ONDE [Email1EmailAddress] LIKE
"peter@gmail.com";') NA EXCHANGE365_CU7;
Integração SQL de Exchange e Salesforce imagem 30

Figura 30: Eliminação do contacto

4.4 Configurando o SalesForce Linked Server

Vamos seguir os passos da seção "4.2 Configurando o MS Exchange Linked Server" exceto, é claro, vamos usar a Connection String for SalesForce. Depois de seguir esses passos, seu Servidor Vinculado deve ser configurado com sucesso, como mostrado abaixo.

Integração SQL de Exchange e Salesforce imagem 31

Figura 31: SalesForce Linked Server Configurado com Sucesso

4.5 Testando o Salesforce Linked Server

Como fizemos antes também com o MS Exchange Linked Server, precisamos garantir que somos capazes de executar as tarefas básicas de manipulação de dados através do SalesForce Linked Server.

Para encurtar o guia, a Figura 32 abaixo está testando todas as seguintes afirmações

1. Selecção de contactos

A execução da declaração abaixo deve nos dar os contatos da SalesForce.

SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contacto;

2. Inserir um contacto

A execução da declaração abaixo deve inserir um novo contacto.

EXEC ('INSERIR INTO Contacto([GivenName], [SurName], [Email1EmailAddress])
VALORES ("Peter", "K.", "peter@gmail.com");') EM EXCHANGE365_CU7;

3. Actualização de um contacto

A execução da declaração abaixo deve atualizar o sobrenome do contato que inserimos anteriormente

EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') NA EXCHANGE365_CU7;

4. Eliminar um contacto

A execução da declaração abaixo deve eliminar o contacto recém inserido

EXEC ('APAGAR DE CONTACTO ONDE [Email1EmailAddress] LIKE
"peter@gmail.com";') NA EXCHANGE365_CU7;
Integração SQL de Exchange e Salesforce imagem 32

Figura 32: Teste do SalesForce Linked Server

4.6 Tabela de bases de dados locais

A partir daqui, precisamos de ter uma base de dados local real no nosso MS SQL Server local. Se você já tem uma, então você poderia usar, caso contrário, precisamos criar uma nova base de dados. Eu criei uma base de dados chamada ConnectingSoftware com 1 tabela chamada LocalContacts. Nessa tabela há apenas um registro, como mostrado abaixo na Figura 33.

Figura 33: Tabela de Contactos Locais

4.7 Acionador da tabela de réplicas

Integração SQL de Exchange e Salesforce imagem 33

O primeiro passo na nossa solução é replicar as mudanças na nossa tabela de banco de dados local para SalesForce e Exchange. vamos implementar isso através do gatilho da tabela.

O SQL Script para o gatilho é mostrado abaixo:

CREATE TRIGGER [dbo].[trgSyncContact]
ON [dbo]. [LocalContacts].
APÓS INSERIR, ATUALIZAR, APAGAR
AS
INÍCIO
declarar @Operation varchar(50)
declare @FirstName nvarchar(max)
declarar @LastName nvarchar(max)
declarar @Email varchar(255)
declare @Deleted_FirstName nvarchar(max)
declare @Deleted_LastName nvarchar(max)
declarar @Deleted_Email varchar(255)

SE COLUMNS_UPDATED() > 0
INÍCIO
-- se temos colunas atualizadas, então inserimos ou apagamos um
recorde
SE EXISTIR (SELECCIONE * DE ELIMINADO)
INÍCIO
-- se nós apagamos valores, então era uma operação de atualização
SELECT @FirstName = inserido.FirstName, @LastName =
inserido.LastName, @Email = inserido.Email,
@Deleted_FirstName = apagado.FirstName,
@Deleted_LastName = apagado.LastName, @Deleted_Email =
excluído.Email
DE apagado, inserido
--SalesForce
Exec ('UPDATE Contact SET FirstName = ?, LastName = ?, Email = ?
ONDE PRIMEIRO NOME = ? e LastName = ? e Email = ?',
@PrimeiroNome, @PrimeiroNome, @Email, @Apagado_PrimeiroNome,
@Deleted_LastName, @Deleted_Email) na SALESFORCE_CBD;
--Exchange
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ?,
Email1EmailAddress = ? WHERE GivenName = ? e SurName =
? e Email1EmailAddress = ?', @FirstName, @LastName,
@Email, @Deleted_FirstName, @Deleted_LastName,
@Deleted_Email) em EXCHANGE365_CU7;
FIM
ELSE
INÍCIO
-- se não foi uma operação de atualização, então foi inserido
SELECT @FirstName = FirstName, @LastName = LastName, @Email =
Email
DE inserido
--SalesForce
Valores Exec ('Inserir em Contato (Nome, Sobrenome, Email)
(?,?,?,?)', @FirstName, @LastName, @Email) em
SALESFORCE_CBD;
--MS Exchange
EXEC ('Insira no Contato (GivenName, SurName,
Email1EmailAddress) valores(?,?,?,?)', @FirstName,
@LastName, @Email) na EXCHANGE365_CU7;
FIM
FIM
ELSE
INÍCIO
-- se a operação não foi atualizada/inserida então foi excluída
SELECT @Deleted_Email = E-mail DE apagado
--SalesForce
Exec ('Delete From Contact Where Email = ?', @Deleted_Email) em
SALESFORCE_CBD;
--MS Exchange
Exec ('Delete From Contact Where Email1EmailAddress = ?',
@Deleted_Email) em EXCHANGE365_CU7;
FIM
FIM

Aviso: após executar o script acima, não devemos inserir nada da tabela da base de dados local até sincronizarmos entre os nossos 2 sistemas alvo (Exchange e SalesForce) e a nossa base de dados Local, caso contrário podemos acabar em duplicações acidentais de registos, uma vez que a lógica aqui não verifica se já existia um novo registo nesses sistemas alvo.

4.8 Sincronização Procedimento Armazenado

O segundo passo da nossa solução é sincronizar entre MS Exchange, SalesForce e nossa tabela de Contatos Locais, para que cada sistema tenha o mesmo conjunto de contatos.

Para fazer isso, vamos escrever um procedimento armazenado. A lógica do procedimento é a seguinte:

1. Muito importante para desativar o gatilho que criamos acima "como estamos fazendo a sincronização, não devemos habilitar a replicação automática implementada pelo gatilho".

2. Sincronizar entre SalesForce e a minha base de dados
Usando o endereço de e-mail do contato como uma chave correspondente; Existe um contato no SalesForce e não na minha tabela de contatos locais?

a. Sim: Adicionar contacto à minha Tabela de Contactos Locais

b. Não: Atualizar o nome e sobrenome do contato na minha Tabela de Contatos Locais

3. Sincronizar entre MS Exchange e a minha base de dados
Usando o endereço de e-mail do contato como chave correspondente; Existe um contato no Exchange e não na minha tabela de Contatos Locais?

a. Sim: Adicionar contacto à minha Tabela de Contactos Locais

b. Não: Atualizar o nome e sobrenome do contato na minha Tabela de Contatos Locais

Nesta altura, a minha tabela de Contactos local tem todos os contactos tanto da SalesForce como da MS Exchange, para além dos registos que estavam originalmente na tabela. Agora precisamos atualizar cada sistema alvo através dos contatos do outro sistema alvo e da base de dados local.

4. Atualizar contatos no SalesForce (por contatos do Exchange e minha tabela local)

Usando o endereço de e-mail do contato como chave correspondente; Existe um contato na minha tabela de contatos locais e não no SalesForce?

a. Sim: Adicionar contato à SalesForce

b. Não: Atualizar o nome e sobrenome do contato na SalesForce

5. Atualizar contatos no Exchange (por contatos da SalesForce & minha tabela local)

Usando o endereço de e-mail do contato como uma chave correspondente; Existe um contato na minha tabela de Contatos Locais e não no Exchange?

a. Sim: Adicionar contato ao MS Exchange

b. Não: Atualizar o nome e sobrenome do contato no Exchange

6. Agora, podemos activar o gatilho que desactivámos mais cedo, para que a replicação automática esteja de novo ligada.

O seguinte script SQL irá implementar a lógica discutida acima

CRIAR PROCEDIMENTO [dbo].[uspInitSync]
-- Adicione aqui os parâmetros para o procedimento de armazenamento
AS
INÍCIO
-- AJUSTE A NOCONTROLADO adicionado para evitar que conjuntos de resultados extras sejam
-- interferindo com as instruções SELECT.
DEFINIR NOCOUNT ON;

-disable trigger para que, ao inserirmos da SalesForce não acabemos em
--Adicionando os contatos novamente à SalesForce
TRIGGER DISABLE [trgSyncContact] ON LocalContacts;

--merge records from SalesForce to LocalDB
DECLARE @ImportedTabela de Contactos(FirstName nvarchar(max), LastName
nvarchar(max), Email varchar(255));

-actualizar / inserir contatos no LocalDB usando SalesForce como fonte
MERGE LocalContacts AS target
UTILIZAÇÃO (SELECCIONAR Nome, Sobrenome, Email de SalesForce_CBD...Contato)
fonte AS
ON (target.Email LIKE fonte.Email)
QUANDO COMBINADAS, ENTÃO
UPDATE SET FirstName = fonte.FirstName, LastName =
fonte.LastName
QUANDO NÃO CORRESPONDIDO, ENTÃO
INSERIR (Nome, Sobrenome, Email)
VALORES (fonte.PrimeiroNome, fonte.ÚltimoNome, fonte.Email)
SAÍDA inserida. PrimeiroNome, inserido. ÚltimoNome, inserido. Email
INTO @ImportedContacts;

--Mostrar contatos inseridos no LocalDB da SalesForce
seleccione * em @ImportedContacts;

-actualizar / inserir contactos no LocalDB usando o Exchange como fonte
MERGE LocalContacts AS target
UTILIZAÇÃO (SELECT GivenName, SurName, Email1Email1EmailAddress FROM
EXCHANGE365_CU7...Contato) Como fonte
ON (target.Email LIKE fonte.Email1EmailAddress)
QUANDO COMBINADAS, ENTÃO
UPDATE SET FirstName = fonte. GivenName, LastName =
fonte.SurName
QUANDO NÃO CORRESPONDIDO, ENTÃO
INSERIR (Nome, Sobrenome, Email)
VALORES (fonte.GivenName, fonte.SurName,
fonte.Email1EmailAddress)
SAÍDA inserida. PrimeiroNome, inserido. ÚltimoNome, inserido. Email
INTO @ImportedContacts;

--exibir contatos inseridos usando a variável tabela
seleccione * em @ImportedContacts;

--agora copie tudo para SalesForce & Exchange para que eles tenham uma cópia exata
-- a partir do LocalDB depois do LocalDB é sincronizado com todos os sistemas
-- Tenho que usar o cursour e se porque usar insert....select....onde não
--existe não funciona com mesas remotas e também fundir não funciona com
--mesas móveis
Declare @FirstName nvarchar(max)
declarar @LastName nvarchar(max)
declarar @Email varchar(255)
declarar @SQL nvarchar(max)

DECLARE Contactos_cursor CURSOR FAST_FORWARD PARA
SELECT FirstName, LastName, Email da LocalContacts;

OPEN Contacts_cursor
FETCH NEXT FROM Contacts_cursor INTO @FirstName, @LastName, @Email
ENQUANTO @@FETCH_STATUS = 0
INÍCIO
SE EXISTE (SELECT Email1EmailAddress FROM EXCHANGE365_CU7...Contacto
ONDE E-Mail1EmailAddress LIKE @Email)
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ? ONDE
Email1EmailAddress = ?', @FirstName, @LastName, @Email)
na EXCHANGE365_CU7;
ELSE
EXEC ('Insira no Contato (GivenName, SurName,
Email1EmailAddress) valores(?,?,?,?)', @FirstName,
@LastName, @Email) na EXCHANGE365_CU7;

SE EXISTE (SELECCIONAR Email DE SalesForce_CBD...Contacte ONDE E-MAIL LIKE
@Email)
Exec ('UPDATE Contact SET FirstName = ?, LastName = ? ONDE
Email = ?', @FirstName, @LastName, @Email) em
SalesForce_CBD;
ELSE
Valores Exec ('Inserir em Contato (Nome, Sobrenome, Email)
(?,?,?,?)', @FirstName, @LastName, @Email) em
SalesForce_CBD;

FETCH NEXT FROM Contacts_cursor INTO @FirstName, @LastName, @Email
FIM
FECHAR Contactos_cursor;
DEALLOCATE Contacts_cursor;

--accionador activado para que qualquer modificação seja reflectida no LOB online
ENABLE TRIGGER [trgSyncContact] ON LocalContacts;
END

5. Solução em Ação

Agora o primeiro passo é executar o procedimento de sincronização armazenado "uspInitSync" como mostrado abaixo, o procedimento armazenado foi executado sem erros.

Integração SQL de Exchange e Salesforce imagem 34

Figura 34: Execução do procedimento de sincronização armazenado

Também pudemos ver que houve novos contatos adicionados ao MS Exchange

Integração SQL de Exchange e Salesforce imagem 35

Figura 35: Atualizações no MS Exchange

E novos contatos adicionados à SalesForce

Integração SQL de Exchange e Salesforce imagem 36

Figura 36: Atualizações na SalesForce

E a nossa base de dados local está agora a ter novos contactos

Integração SQL de Exchange e Salesforce imagem 37

Figura 37: Atualizações na tabela Contatos Locais

Podemos ver a replicação automática em ação também

1. Inserir o contacto a partir de uma base de dados local, apaga-o da SalesForce e do Exchange

Integração SQL de Exchange e Salesforce imagem 38

Figura 38: Inserir Replicação

2. Atualização de contato em banco de dados local atualiza em SalesForce e Exchange

Integração SQL de Exchange e Salesforce imagem 39

Figura 39: Replicação de atualização

3. Eliminar o contacto da base de dados local, elimina-o da SalesForce e do Exchange

Integração SQL de Exchange e Salesforce imagem 40

Figura 40: Apagar Replicação

6. Notas sobre a solução

Tentamos manter a lógica da solução o mais simples possível, porém a lógica poderia ser melhorada e ajustada para um melhor desempenho e características mais complexas.

Você pode encontrar mais informações sobre este produto na página de produtos de CB Linked Server for Enterprise Applications.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

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

I agree to these terms.