Integração SQL do Exchange e Salesforce

Integração SQL do Exchange e Salesforce

Ana NetoTechnical 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ê consegue se conectar ao sistema de destino (Exchange e SalesForce no nosso cenário); a maneira mais fácil de fazer isso é através do CB Query Analyzer. Aqui, eu já configurei o meu servidor ConnectBridge através da ferramenta de administração para se conectar ao MS Exchange 365 e ao SalesForce, criando os grupos e utilizadores necessários. Eu criei um nome de utilizador chamado “martin” com a palavra-passe “1234”. Este utilizador tem direitos para se ligar ao Exchange 365 e ao SalesForce. Agora, a partir do Query Analyzer, vou criar duas ligações para cada sistema de destino e garantir que consigo ligar-me 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 Usuários

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 fazer isso para evitar a transmissão de informações 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), text, ntext ou image). Sem ativar essa opção, não seremos capazes de obter um dado do tipo image de 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 obter dados de provedores externos que usam OLEDB – vamos chamá-los de “Fontes externas de dados OLEDB”. Faremos isso em três etapas:

a. Precisamos abrir uma nova janela de consulta clicando no botão Nova consulta, conforme mostrado na Figura 18 abaixo. Não importa qual banco de dados está ativo, porque o que vamos fazer afetará toda a instalação do MS SQL Server e, por sua vez, todos os bancos de dados nele contidos. Conforme mostrado abaixo, tenho “master” como o banco de dados ativo/alvo.

Integração SQL de Exchange e Salesforce imagem 18

Figura 18: MS SQL Server Query Analyzer

b. Precisamos reconfigurar o MS SQL Server para que possamos alterar/configurar as suas opções avançadas. Para isso, vamos executar um procedimento armazenado chamado “sp_configure” – é um procedimento armazenado pré-instalado no sistema – e vamos especificamente “mostrar opções avançadas” – definindo esta opção como 1. Para isso, digitamos “exec sp_configure 'show advanced options', 1; reconfigure” e pressionamos F5 para executar. Se tudo correr bem, deverá receber uma mensagem semelhante à mensagem na 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 esses “Fontes externas de dados OLEDB” usando algo chamado “Consultas Distribuídas Ad Hoc”. Por predefinição, o MS SQL Server não permite as “Consultas Distribuídas Ad Hoc”, portanto, precisamos reconfigurar esta opção avançada – é por isso que fizemos o passo anterior – executando o procedimento armazenado “sp_configure” passando a configuração “Consultas Distribuídas Ad Hoc” e o valor 1 para ativá-la. Se tudo correr bem, deverá receber uma mensagem semelhante à mensagem na Figura 20 abaixo após executar “exec 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. Fornecedor: deve ser “Microsoft OLE DB Providers for ODBC Drivers”, uma vez que o ConnectBridge utiliza 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 utilizador que utiliza/acede ao MS SQL Server e o utilizador que utiliza/acede ao CB. O utilizador que utiliza o MS SQL Server é chamado de Login Local (no nosso cenário é “sa”) e o utilizador que utiliza/acede ao CB é chamado de Utilizador Remoto (no nosso cenário é Martin com login martin). É isso que temos de configurar e, para isso, clicamos em “segurança” para mostrar a caixa de diálogo na 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 for exibida, clica no botão Adicionar e digita o Login Local e o Utilizador Remoto, conforme combinado. Foi isso que 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. Ok, sei que quer fechar a caixa de diálogo, mas espere! Precisamos fazer mais uma coisa. Agora precisamos ir para “Opções do Servidor” no lado esquerdo para mostrar a caixa de diálogo na Figura 25 abaixo e ativar 2 funcionalidades

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 de login entre o CB e o MS SQL Server seja possível

b. RPC Fora: para ativar “Chamada de procedimento remoto”, pois precisamos 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 SERVIDOR.BASE DE DADOS.ESQUEMA.TABELA e, como pode ver na Figura 26 acima, o nosso servidor é Exchange365_CU7, a nossa base de dados é “sem nome”, o nosso esquema é “sem nome” e, finalmente, a nossa tabela é Contactos.

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 secção “4.2 Configurando o servidor ligado MS Exchange”, exceto, é claro, que vamos usar a cadeia de conexão para o SalesForce. Após seguir esses passos, o seu servidor ligado deverá estar configurado com sucesso, conforme 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 do banco de dados local até sincronizarmos os nossos dois sistemas de destino (Exchange e SalesForce) com o nosso banco de dados local. Caso contrário, poderemos acabar duplicando registros acidentalmente, pois a lógica aqui não verifica se um novo registro já existe nesses sistemas de destino.

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 desativar o gatilho que criámos acima, pois, ao fazermos a sincronização, não devemos ativar 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 contacto como chave de correspondência; existe algum contacto no SalesForce que não esteja na minha tabela de contactos locais?

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

b. Não: Atualizar o nome e o apelido do contacto na minha tabela de contactos locais

3. Sincronizar entre MS Exchange e a minha base de dados
Usando o endereço de e-mail do contacto como chave de correspondência; existe algum contacto no Exchange que não esteja na minha tabela de contactos locais?

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

b. Não: Atualizar o nome e o apelido do contacto na minha tabela de contactos 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 contacto como chave de correspondência; existe algum contacto na minha tabela de contactos locais que não esteja no SalesForce?

a. Sim: Adicionar contato à SalesForce

b. Não: Atualizar o nome e o apelido do contacto no SalesForce

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

Usando o endereço de e-mail do contacto como chave de correspondência; existe um contacto na minha tabela de contactos locais e não no Exchange?

a. Sim: Adicionar contato ao MS Exchange

b. Não: Atualizar o nome e o apelido do contacto em 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 armazenado de sincronização “uspInitSync”, conforme 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.