Integración SQL de Exchange y Salesforce

Integración SQL de Exchange y Salesforce

Georgii KapanadzeTechnical Leave a Comment

1. Tema

1.1 Introducción

Debido al éxito de nuestro primer artículo técnico que se puede encontrar aquí decidimos continuar. Esta vez veremos cómo se puede lograr una integración entre el Exchange y Salesforce de la forma más sencilla. Utilizaremos consultas SQL.

Para la integración utilizamos CB Linked Server para aplicaciones empresariales. Pídanos una prueba gratuita del producto.

2. 2. Requisitos de los escenarios

El escenario de integración que se requiere aquí es sincronizar entre una tabla de contactos de la base de datos local, Exchange 365 contactos y contactos de la Fuerza de Ventas y tener una réplica inmediata de la tabla de la base de datos local a esos 2 sistemas de destino. Esto podría ser útil para tener una copia de seguridad de los contactos fuera de línea o para crear un almacén de datos o por otras razones.

3. Flujo de trabajo básico

3.1 Configurar el Analizador de Consultas CB

El primer paso, es asegurarse de que eres capaz de conectarte al sistema objetivo (Exchange y SalesForce en nuestro escenario); la forma más fácil de hacerlo es a través de CB Query Analyzer. Aquí ya he configurado mi servidor ConnectBridge a través de la herramienta de Administración para conectar con el MS Exchange 365 y con SalesForce creando los grupos y usuarios necesarios. He creado un nombre de usuario llamado "martin" con contraseña "1234”. Este usuario tiene derechos para conectarse a Exchange 365 y SalesForce. Ahora desde el Query Analyzer crearé 2 conexiones a cada sistema de destino y me aseguraré de que pueda conectarse con éxito.

Integración SQL de Exchange y Salesforce

Figura 1: Administración de cuentas

Integración SQL de Exchange y Salesforce imagen 2

Figura 2: Administración de grupos y usuarios

Image

Figura 3: Conexiones del analizador de consultas

3.2 Pruebe sus declaraciones

Como se muestra arriba, tenemos una configuración y conexión exitosa a ambos sistemas de objetivos. Ahora podemos probar nuestras declaraciones

3.2.1 Contactos de Exchange

En mi cuenta Exchange, tengo 3 contactos como se muestra a continuación

Image

Figura 4: Contactos de Exchange

Ahora vamos a probar las 4 operaciones básicas SELECCIONAR, INSERTAR, ACTUALIZAR y BORRAR

1. Seleccionar los contactos

La ejecución de la siguiente declaración debería darnos los 3 contactos que se muestran en la figura 5.

SELECCIONE [Nombre], [Apellido], [Email1Dirección de correo electrónico] DE [Contacto];
Integración SQL de Exchange y Salesforce imagen 5

Figura 5: Selección de contactos

2. Insertar un contacto

Al ejecutar la siguiente declaración se debe insertar un nuevo contacto que se muestra en la Figura 6

INSERT INTO Contact([GivenName],[SurName],[Email1EmailAddress]) VALUES ('Peter','K.', 'peter@gmail.com');
Integración SQL de Exchange y Salesforce imagen 6

Figura 6: Insertar un nuevo contacto

3. Actualizar un contacto

La ejecución de la siguiente declaración debe actualizar el apellido del contacto que insertamos anteriormente como se muestra en la figura 7

UPDATE Contact SET [SurName] = 'Keys' WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
Integración SQL de Exchange y Salesforce picture 7

Figura 7: Contacto de actualización

4. Borrar un contacto

Al ejecutar la siguiente declaración se debe eliminar el contacto recién insertado, como se muestra en la figura 8

DELETE FROM Contact WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
Integración SQL de Exchange y Salesforce imagen 8

Figura 8: Borrar el contacto

3.2.2 Contactos de la fuerza de ventas

En mi cuenta de SalesForce, tengo 17 contactos como se muestra a continuación

Integración SQL de Exchange y Salesforce imagen 9

Figura 9: Contactos de la Fuerza de Ventas

Ahora vamos a probar las mismas 4 operaciones básicas: SELECCIONAR, INSERTAR, ACTUALIZAR y BORRAR.

1. Seleccionar los contactos

La ejecución de la siguiente declaración debería darnos los 17 contactos que se muestran en la figura 10.

SELECCIONE [Nombre], [Apellido], [Email] DE [Contacto];
Integración SQL de Exchange y Salesforce picture 10

Figura 10: Selección de contactos

2. Insertar un contacto

Al ejecutar la siguiente declaración se debe insertar un nuevo contacto que se muestra en la figura 11

INSERT INTO Contact([Firstname],[LastName],[Email]) VALUES ('Peter','K.', 'peter@gmail.com');
Integración SQL de Exchange y Salesforce picture 11

Figura 11: Insertar un nuevo contacto

3. Actualizar un contacto

La ejecución de la siguiente declaración debe actualizar el apellido del contacto que insertamos anteriormente como se muestra en la figura 12

UPDATE Contact SET [LastName] = 'Keys' WHERE [Email] = 'peter@gmail.com';
Integración SQL de Exchange y Salesforce imagen 12

Figura 12: Contacto de actualización

4. Borrar un contacto

Al ejecutar la siguiente declaración se debe eliminar el contacto recién insertado, como se muestra en la figura 13

DELETE FROM Contacto WHERE [Email] = 'peter@gmail.com';
Integración SQL de Exchange y Salesforce imagen 13

Figura 13: Borrar el contacto

3.3 Copiar la conexión y las declaraciones

Ahora sabemos que podemos seleccionar, actualizar, insertar y borrar contactos de Exchange y SalesForce. Lo que necesitamos hacer ahora es copiar la cadena de conexión del Analizador de Consultas y nuestras sentencias probadas para usarlas más tarde en nuestra solución de MS SQL Server.

Para copiar la conexión del analizador de consultas, sólo tenemos que hacer clic con el botón derecho del ratón en la conexión, hacer clic en Editar e ir a la pestaña Avanzado y copiar el texto desde allí como se muestra a continuación en la Figura 14.

Integración SQL de Exchange y Salesforce imagen 14

Figura 14: Copia de la cadena de conexión del Analizador de Consultas

Aquí están mis cadenas de conexión para ambos sistemas de objetivos.

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'

Ahora estamos listos para abrir MS SQL Server y empezar a implementar nuestra solución de integración de SQL Server.

4. 4. Recorrido de la solución

4.1 MS SQL Server

Para poder trabajar con fuentes de datos externas a través de la función SQL Server Linked Server, necesitamos hacer las siguientes configuraciones

1. Inicie Microsoft SQL Server Management Studio e inicie sesión usando la autenticación de Windows o el nombre de usuario y la contraseña como se muestra a continuación en la Figura 15

Integración SQL de Exchange y Salesforce imagen 15

Figura 15: Pantalla de inicio de sesión de MS SQL Server Management Studio

Integración SQL de Exchange y Salesforce imagen 16

Figura 16: Propiedades de MSDASQL

2. Navegue hasta Objetos de servidor -> Servidores enlazados -> Proveedores -> MSDASQL expandiendo los nodos correspondientes, como se muestra en la figura 16. Haga clic con el botón derecho del ratón en MSDASQL - Microsoft Data Access SQL - y seleccione Propiedades para mostrar el diálogo de la figura 17

Integración SQL de Exchange y Salesforce picture 17

Figura 17: Configuración de las propiedades de MSDASQL

3. Tenemos que asegurarnos de que se comprueben los siguientes ajustes/opciones:

a. Sólo el nivel cero: Por razones de seguridad tenemos que asegurarnos de que sólo los proveedores de OLE DB que cumplen con el nivel 0 de la interfaz OLE DB son compatibles.

b. Permitir el procesopara permitir que el/los proveedor/es de datos - "fuentes de datos externas" - se instancien como un servidor en proceso - "en el mismo proceso que MS SQL Server". Necesitamos hacer esto para evitar pasar información de autenticación entre MS SQL Server y el Proveedor y para poder trabajar con tipos de datos como (varchar(max), nvarchar(max), varbinary(max), text, ntext, o image). Si no activamos esta opción, no podremos obtener un dato de tipo imagen de Exchange - por ejemplo - e insertarlo en nuestra Base de Datos MS SQL Server.

4. Ahora tenemos que habilitar el MS SQL Server para conectar con los proveedores externos y ejecutar consultas para consultar los datos de los proveedores externos que utilizan OLEDB - llamémoslos "Fuentes de datos externos de la OLEDB”. Lo haremos en tres pasos:

a. Necesitamos abrir una nueva ventana de consulta haciendo clic en el botón Nueva consulta como se muestra en la figura 18 a continuación. No importa qué base de datos esté activa, porque lo que vamos a hacer va a afectar a toda la instalación de MS SQL Server y a su vez a todas y cada una de las bases de datos que hay. Como se muestra a continuación tengo "master" como la base de datos activa/destinada

Integración SQL de Exchange y Salesforce imagen 18

Figura 18: Analizador de consultas de MS SQL Server

b. Necesitamos reconfigurar MS SQL Server para poder cambiar/configurar sus opciones avanzadas. Para ello vamos a ejecutar un procedimiento almacenado llamado "sp_configure" - es un procedimiento almacenado del sistema preinstalado - y vamos a específicamente "mostrar opciones avanzadas" - poniendo esta opción a 1. Para ello escribimos "exec sp_configure 'show advanced options', 1; reconfigure" y pulsamos F5 para ejecutar. Si todo va bien, deberías obtener un mensaje similar al de la Figura 19 a continuación

Figura 19: MS SQL Server - Mostrar opciones avanzadas

Integración SQL de Exchange y Salesforce imagen 19

c. Ahora tenemos que permitir que MS SQL Server consulte esos "Fuentes de datos externos de la OLEDB" usando algo llamado "Consultas distribuidas ad hoc". Por defecto, MS SQL Server no permite las "Ad Hoc Distributed Queries" por lo tanto necesitamos reconfigurar esta opción avanzada - por eso hicimos el paso anterior - ejecutando el procedimiento almacenado "sp_configure" pasando el parámetro "Ad Hoc Distributed Queries" y el valor 1 para habilitarlo. Si todo va bien, deberías obtener un mensaje similar al de la Figura 20 siguiente tras ejecutar "exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure"

Integración SQL de Exchange y Salesforce picture 20

Figura 20: MS SQL Server - Activación de consultas distribuidas ad hoc

Ahora podemos añadir tantos Linked Server como queramos, ya que nuestro MS SQL Server está configurado adecuadamente para permitirlo.

4.2 Configuración del servidor de enlace de MS Exchange

1. Navegue hasta Objetos de separación -> Servidores enlazados. Haga clic con el botón derecho del ratón en Servidores enlazados y elegir Nuevo Servidor Vinculado como se muestra en la figura 21 a continuación

Integración SQL de Exchange y Salesforce imagen 21

Figura 21: MS SQL Server - Añadir nuevo servidor vinculado

2. En el nuevo diálogo de Servidor Vinculado, como se muestra en la Figura 22 a continuación, es necesario proporcionar lo siguiente:

a. Nombre del servidor vinculadopodría ser cualquier nombre válido, elijo Exchange365_CU7.

b. Proveedordebe ser "Proveedores de Microsoft OLE DB para controladores ODBC", ya que ConnectBridge está usando ODBC.

c. Cadena de proveedoresAquí pegamos la cadena de conexión que copiamos antes del Analizador de Consultas.

Integración SQL de Exchange y Salesforce picture 22

Figura 22: MS SQL Server - Configuración del nuevo servidor vinculado - General

3.Ahora necesitamos establecer una relación entre el usuario que usa/accede a MS SQL Server y el usuario que usa/accede a CB. El usuario que usa MS SQL Server se llama Local Login (en nuestro escenario es "sa") y el usuario que usa/accede al CB se llama Remote User (en nuestro escenario es Martin con login martin). Esto es lo que tenemos que configurar, y para ello hacemos clic en "seguridad"para mostrar el diálogo en la Figura 23 abajo

Integración SQL del cuadro Exchange y Salesforce

Figura 23: MS SQL Server - Configuración de un nuevo servidor vinculado - Seguridad

4. Cuando se muestra el diálogo anterior, hacemos clic en el botón Agregar y escribimos el Login Local y el Usuario Remoto como acordamos. Eso es lo que hice aquí en la Figura 24

Integración SQL de Exchange y Salesforce imagen 24

Figura 24: MS SQL Server - Configuración de un nuevo servidor vinculado - Inicio de sesión

5. Vale, sé que quieres cerrar el diálogo pero ¡espera! tenemos que dar un paso más. Ahora tenemos que ir a "Opciones del servidor"en el lado izquierdo para mostrar el diálogo de la Figura 25 y habilitar 2 características

a. RPCpara habilitar una cierta característica de seguridad que necesitaríamos cuando usamos alguna característica de legado llamada Servidor remoto - no te preocupes por eso ahora - para que la validación de acceso entre CB y MS SQL Server sea posible

b. RPC Fuerapara permitir "Llamada de procedimiento a distancia"ya que necesitamos permitir que nuestros procedimientos almacenados puedan ejecutarse remotamente...

Integración SQL de Exchange y Salesforce picture 25

Figura 25: MS SQL Server - Configuración de un nuevo servidor vinculado - Opciones de servidor

6. Ahora hacemos clic en "OK" y ya está! ¡Sí! Configuramos el MS SQL Server para que se conecte a Exchange. Ahora podemos ver la plataforma Exchange como una base de datos en MS SQL Server, podemos ver la tabla llamada Contactos, podemos mostrar una lista de contactos de Exchange, todo esto, sin acceder a la base de datos de Exchange como se puede ver en la Figura 26 abajo

Integración SQL de Exchange y Salesforce

Figura 26: MS SQL Server - Servidor enlazado configurado correctamente

4.3 Probando el Servidor de Enlace MS Exchange

Antes de desarrollar nuestra solución de integración, necesitamos estar seguros de que somos capaces de realizar la manipulación de los datos básicos en el MS Exchange a través de nuestro recién configurado Linked Server.

1. Seleccionar los contactos

La ejecución de la siguiente declaración debería darnos los 3 contactos del MS Exchange.

SELECCIONE Nombre, Apellido, Email1Dirección de correo electrónico de INTERCAMBIO365_CU7...Contacto;

¿Por qué el "..."? Porque sigue la sintaxis SERVIDOR.BASE DE DATOS.ESQUEMA.TABLA y como pueden ver en la Figura 26, nuestro Servidor es Exchange365_CU7, nuestra base de datos es "sin nombre" nuestro esquema es "sin nombre" y finalmente nuestra tabla es Contactos.

Integración SQL de Exchange y Salesforce

Figura 27: Selección de contactos

2. Insertar un contacto

La ejecución de la siguiente declaración debería insertar un nuevo contacto.

EXEC ('INSERT INTO Contacto([Nombre], [NombreSur], [DirecciónEmail1])
VALUES ("Peter", "K.", "peter@gmail.com");') AT EXCHANGE365_CU7;
Integración SQL de Exchange y Salesforce imagen 28

Figura 28: Insertar un nuevo contacto

3. Actualizar un contacto

La ejecución de la siguiente declaración debería actualizar el apellido del contacto que insertamos anteriormente

EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') EN EXCHANGE365_CU7;
Integración SQL de Exchange y Salesforce imagen 29

Figura 29: Contacto de actualización

4. Borrar un contacto

La ejecución de la siguiente declaración debería eliminar el contacto recién insertado

EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') EN EXCHANGE365_CU7;
Integración SQL de Exchange y Salesforce picture 30

Figura 30: Borrar el contacto

4.4 Configurar el servidor vinculado a SalesForce

Vamos a seguir los pasos de la sección "4.2 Configurar el Servidor de Enlace MS Exchange" excepto, por supuesto, que vamos a utilizar la Cadena de Conexión para SalesForce. Después de seguir esos pasos, su Servidor Vinculado debe ser configurado exitosamente como se muestra a continuación.

Integración SQL de Exchange y Salesforce picture 31

Figura 31: Servidor vinculado a SalesForce configurado con éxito

4.5 Prueba del servidor de enlace de Salesforce

Como hicimos antes también con el MS Exchange Linked Server, necesitamos asegurarnos de que somos capaces de realizar las tareas básicas de manipulación de datos a través del SalesForce Linked Server.

Para abreviar la guía, la figura 32 a continuación está probando todas las siguientes afirmaciones

1. Seleccionar los contactos

La ejecución de la siguiente declaración debería darnos los contactos de SalesForce.

SELECCIONE Nombre, Apellido, Email1Dirección de correo electrónico de INTERCAMBIO365_CU7...Contacto;

2. Insertar un contacto

La ejecución de la siguiente declaración debería insertar un nuevo contacto.

EXEC ('INSERT INTO Contacto([Nombre], [NombreSur], [DirecciónEmail1])
VALUES ("Peter", "K.", "peter@gmail.com");') AT EXCHANGE365_CU7;

3. Actualizar un contacto

La ejecución de la siguiente declaración debería actualizar el apellido del contacto que insertamos anteriormente

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

4. Borrar un contacto

La ejecución de la siguiente declaración debería eliminar el contacto recién insertado

EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') EN EXCHANGE365_CU7;
Integración SQL de Exchange y Salesforce picture 32

Figura 32: Probando el Servidor Vinculado de SalesForce

4.6 Cuadro de la base de datos local

A partir de aquí, necesitamos tener una base de datos local real en nuestro servidor local MS SQL. Si ya tienes una, entonces podrías usarla, de lo contrario necesitamos crear una nueva base de datos. He creado una base de datos llamada ConnectingSoftware con una tabla llamada LocalContacts. En esa tabla sólo hay un registro como se muestra a continuación en la Figura 33.

Figura 33: Tabla de contactos locales

4.7 Desencadenante de la tabla de replicación

Integración SQL de Exchange y Salesforce picture 33

El primer paso de nuestra solución es replicar los cambios en nuestra tabla de la base de datos local tanto a SalesForce como a Exchange. Vamos a implementar esto a través de un activador de la tabla.

A continuación se muestra el Script SQL para el disparador:

CREAR DISPARO [dbo]. [trgSyncContacto]
ON [dbo]. [Contactos Locales]
DESPUÉS DE INSERTAR, ACTUALIZAR, BORRAR
AS
COMIENZA
declarar @Operación varchar(50)
declarar @Nombre nvarchar(max)
declarar @Apellido nvarchar(max)
declarar @Email varchar(255)
declare @Deleted_FirstName nvarchar(max)
declare @Deleted_LastName nvarchar(max)
declare @Borrado_Correo electrónico varchar(255)

SI COLUMNS_UPDATED() > 0
COMIENZA
--si tenemos columnas actualizadas, entonces insertamos o borramos un
registro
SI EXISTE (SELECCIONE * DE BORRADO)
COMIENZA
--si hemos borrado los valores, entonces fue una operaci¢n de actualizaci¢n
SELECCIONE @Nombre = insertado.Nombre, @Apellido =
insertado.Apellido, @Email = insertado.Email,
@Deleted_FirstName = borrado.FirstName,
@Apellido_borrado = borrado.Apellido, @Correo_borrado =
Borrado. Correo electrónico
DE suprimido, insertado
--Fuerza de ventas
Exec ('ACTUALIZACIÓN Contacto SET Nombre = ?, Apellido = ?, Email = ?
WHERE FirstName = ? y LastName = ? y Email = ?',
@Nombre, @Apellido, @Correo electrónico, @Nombre_borrado,
@Apellido_Borrado, @Correo_Borrado) en SALESFORCE_CBD;
--Exchange
EJECUTAR ('ACTUALIZAR CONTACTO SET Nombre = ?, Apellido = ?,
Email1EmailAddress = ? Dónde Nombre = ? y Apellido =
? y Email1EmailAddress = ?', @Nombre, @Apellido,
@Email, @Nombre_Borrado, @Apellido_Borrado,
@Borrado_Correo electrónico) en EXCHANGE365_CU7;
FIN
ELSE
COMIENZA
--si no era una operación de actualización, entonces era una inserción
SELECCIONE @Nombre = Nombre, @Apellido = Apellido, @Correo electrónico =
Correo electrónico
Desde la inserción...
--Fuerza de ventas
Exec ('Insertar en los valores de Contacto (Nombre, Apellido, Email)
(?,?,?)', @Nombre, @Apellido, @Correo electrónico) en
SALESFORCE_CBD;
--MS Exchange
EXEC ('Insertar en contacto (Nombre, apellido,
Email1EmailAddress) values(?,?,?)', @Nombre,
@Apellido, @Correo electrónico) en EXCHANGE365_CU7;
FIN
FIN
ELSE
COMIENZA
--si la operaci¢n no era de actualizaci¢n/inserci¢n entonces era de borrado
SELECT @Deleted_Email = Email FROM borrado
--Fuerza de ventas
Exec ('Delete From Contact Where Email = ?', @Deleted_Email) en
SALESFORCE_CBD;
--MS Exchange
Exec ('Borrar del contacto donde Email1EmailAddress = ?',
@Borrado_Email) en EXCHANGE365_CU7;
FIN
FIN

Advertencia: después de ejecutar el script anterior, no deberíamos insertar nada de la tabla de la base de datos local hasta que no nos sincronicemos entre nuestros 2 sistemas objetivo (Exchange y SalesForce) y nuestra base de datos local, de lo contrario podríamos terminar duplicando registros accidentalmente, ya que la lógica aquí no comprueba si ya existía un nuevo registro en esos sistemas objetivo.

4.8 Procedimiento de sincronización almacenada

El segundo paso de nuestra solución es sincronizar entre el MS Exchange, SalesForce y nuestra tabla de Contactos Locales, para que cada sistema tenga el mismo conjunto de contactos.

Para ello vamos a escribir un procedimiento almacenado. La lógica del procedimiento es..:

1. Es muy importante desactivar el disparador que creamos arriba "como estamos haciendo la sincronización, no debemos habilitar la replicación automática implementada por el disparador"

2. Sincronizar entre SalesForce y mi base de datos
Usar la dirección de correo electrónico del contacto como clave de coincidencia; ¿Hay un contacto en SalesForce y no en mi tabla de contactos locales?

a. Sí: Agregar contacto a mi tabla de contactos locales

b. No: Actualizar el nombre y apellido del contacto en mi tabla de contactos locales

3. Sincronizar entre el MS Exchange y mi base de datos
Usando la dirección de correo electrónico del contacto como clave de coincidencia; ¿Hay un contacto en el Exchange y no en mi tabla de Contactos Locales?

a. Sí: Agregar contacto a mi tabla de contactos locales

b. No: Actualizar el nombre y apellido del contacto en mi tabla de contactos locales

En este momento, mi tabla de contactos locales tiene todos los contactos de SalesForce y MS Exchange además de los registros que estaban originalmente en la tabla. Ahora necesitamos actualizar cada sistema de destino por los contactos del otro sistema de destino y la base de datos local

4. Actualizar los contactos en SalesForce (por los contactos de Exchange y mi mesa local)

Usar la dirección de correo electrónico del contacto como clave de coincidencia; ¿Existe un contacto en mi tabla de contactos locales y no en SalesForce?

a. Sí: Agregar contacto con SalesForce

b. No: Actualizar el nombre y apellido del contacto en SalesForce

5. Actualizar los contactos en Exchange (por los contactos de SalesForce y mi mesa local)

Usando la dirección de correo electrónico del contacto como clave de coincidencia; ¿Hay un contacto en mi tabla de Contactos Locales y no en Exchange?

a. Sí: Agregar contacto a MS Exchange

b. No: Actualizar el nombre y el apellido del contacto en Exchange

6. Ahora, podemos activar el disparador que desactivamos antes, así que la replicación automática vuelve a estar activada.

El siguiente script SQL implementará la lógica discutida anteriormente

CREAR PROCEDIMIENTO [dbo]. [uspInitSync]
-- Añade los parámetros para el procedimiento almacenado aquí
AS
COMIENZA
-- Se añadió SET NOCOUNT ON para evitar que los conjuntos de resultados extra de
-- interfiriendo con las declaraciones de SELECT.
PONER EN MARCHA NOCOUNT;

-inhabilitar el disparador para que, al insertar desde SalesForce no terminemos en
--añadiendo los contactos de nuevo a SalesForce
DESACTIVAR EL DISPLAZADOR [trgSyncContact] EN CONTACTOS LOCALES;

--...fusionar los registros de SalesForce con los de LocalDB...
DECLARAR @Tabla de contactos importados (Nombre nvarchar(max), Apellido
nvarchar(max), Email varchar(255));

--actualizar / insertar contactos en LocalDB usando SalesForce como fuente
Fusión de contactos locales como objetivo
UTILIZANDO (SELECCIONE Nombre, Apellido, Email de SalesForce_CBD...Contacto)
Como fuente
ON (objetivo.Email COMO fuente.Email)
CUANDO SE EMPAREJAN ENTONCES
ACTUALIZACIÓN SET Nombre = fuente. Nombre, apellido =
Fuente. Apellido
CUANDO NO COINCIDEN, ENTONCES
INSERTAR (Nombre, Apellido, Email)
VALORES (fuente.Nombre, fuente.Apellido, fuente.Correo electrónico)
SALIDA insertada. Nombre, insertado. Apellido, insertado. Email
INTO @ImportedContacts;

--muestra los contactos insertados en LocalDB de SalesForce
seleccione * de @ImportedContacts;

--actualizar / insertar contactos en LocalDB usando Exchange como fuente
Fusión de contactos locales como objetivo
UTILIZANDO (SELECCIONE Nombre, Apellido, Email1Dirección de correo electrónico de
INTERCAMBIO365_CU7...Contacto) COMO FUENTE
ON (target.Email COMO fuente.Email1Dirección de correo electrónico)
CUANDO SE EMPAREJAN ENTONCES
ACTUALIZACIÓN SET Nombre = fuente. Nombre, Apellido =
Fuente. Apellido.
CUANDO NO COINCIDEN, ENTONCES
INSERTAR (Nombre, Apellido, Email)
VALORES (fuente. Nombre, fuente. Apellido,
fuente.Email1Dirección de correo electrónico)
SALIDA insertada. Nombre, insertado. Apellido, insertado. Email
INTO @ImportedContacts;

-Muestra los contactos insertados usando la variable de la mesa
seleccione * de @ImportedContacts;

--copia todo a SalesForce & Exchange para que tengan una copia exacta
--de LocalDB después de que LocalDB esté sincronizado con todos los sistemas
--Tengo que usar cursour y si, porque usando insert....select.... donde no
--no funcionó con las mesas remotas y también la fusión no funciona con
--a las mesas remotas
Declarar @Nombre nvarchar(max)
declarar @Apellido nvarchar(max)
declarar @Email varchar(255)
declarar @SQL nvarchar(max)

DECLARAR LOS CONTACTOS_CURSOR CURSOR FAST_FORWARD PARA
SELECCIONE Nombre, Apellido, Email de LocalContacts;

Contactos ABIERTOS_cursor
BUSCAR EL SIGUIENTE DE CONTACTOS_CURSOR EN @Nombre, @Apellido, @Correo electrónico
MIENTRAS QUE @@FETCH_STATUS = 0
COMIENZA
SI EXISTE (SELECCIONE CORREO ELECTRÓNICO 1Dirección de correo electrónico de la bolsa 365_CU7...Contacto
DONDE Email1Dirección de correo electrónico COMO @Email)
EJECUTAR ('ACTUALIZAR CONJUNTO DE CONTACTO Nombre = ?, Apellido = ? DÓNDE
Email1EmailAddress = ?', @Nombre, @Apellido, @Email)
en el Intercambio365_CU7;
ELSE
EXEC ('Insertar en contacto (Nombre, apellido,
Email1EmailAddress) values(?,?,?)', @Nombre,
@Apellido, @Correo electrónico) en EXCHANGE365_CU7;

SI EXISTE (SELECCIONE EL CORREO ELECTRÓNICO DE SalesForce_CBD... Contacte DONDE QUIERA el correo electrónico
@Email)
Exec ('ACTUALIZACIÓN DE CONTACTO SET Nombre = ?, Apellido = ? DÓNDE
Email = ?', @Nombre, @Apellido, @Email) en
SalesForce_CBD;
ELSE
Exec ('Insertar en los valores de Contacto (Nombre, Apellido, Email)
(?,?,?)', @Nombre, @Apellido, @Correo electrónico) en
SalesForce_CBD;

BUSCA EL SIGUIENTE DE CONTACTOS_CURSOR EN @Nombre, @Apellido, @Correo electrónico
FIN
Cerrar Contactos_cursor;
DESALOJAR Contactos_cursor;

--habilitar el disparador para que cualquier modificación se refleje en el LOB online
Habilitar el disparador en los contactos locales;
FIN

5. Solución en acción

Ahora el primer paso es ejecutar el procedimiento de sincronización almacenado "uspInitSync" como se muestra a continuación, el procedimiento almacenado se ejecutó sin errores.

Integración SQL de Exchange y Salesforce imagen 34

Figura 34: Ejecutar el procedimiento de sincronización almacenada

También pudimos ver que se añadieron nuevos contactos a la MS Exchange

Integración SQL de Exchange y Salesforce picture 35

Figura 35: Actualizaciones de MS Exchange

Y se han añadido nuevos contactos a SalesForce

Integración SQL de Exchange y Salesforce picture 36

Figura 36: Actualizaciones de SalesForce

Y nuestra tabla de base de datos local ahora tiene nuevos contactos

Integración SQL de Exchange y Salesforce picture 37

Figura 37: Actualizaciones en la tabla de contactos locales

Podemos ver la replicación automática en acción también

1. Insertar el contacto de la base de datos local, borrarlo de SalesForce y Exchange

Integración SQL de Exchange y Salesforce imagen 38

Figura 38: Insertar la réplica

2. La actualización del contacto en la base de datos local lo actualiza en SalesForce y Exchange

Integración SQL de las imágenes Exchange y Salesforce 39

Figura 39: Actualización de la réplica

3. Borrar el contacto de la base de datos local, borrarlo de SalesForce y Exchange

Integración SQL de Exchange y Salesforce picture 40

Figura 40: Eliminar la replicación

6. Notas sobre la solución

Tratamos de mantener la lógica de la solución lo más simple posible, sin embargo la lógica podría ser mejorada y ajustada para un mejor rendimiento y características más complejas.

Puede encontrar más información sobre este producto en la página de productos de CB Linked Server for Enterprise Applications.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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.