SQL-интеграция Exchange и Salesforce

SQL-интеграция Exchange и Salesforce

Georgii KapanadzeTechnical Leave a Comment

1. Тема

1.1 Введение

Благодаря успеху нашей первой технической статьи, которую можно найти здесь мы решили продолжить. На этот раз мы рассмотрим, как интеграция между Exchange и Salesforce может быть достигнута самым простым способом. Мы будем использовать SQL-запросы.

Для интеграции мы используем CB Linked Server для корпоративных приложений. Обратитесь к нам за бесплатной пробной версией продукта.

2. Требования к сценарию

Сценарий интеграции, необходимый здесь, заключается в синхронизации между таблицей контактов локальной базы данных, контактами Exchange 365 и контактами SalesForce и немедленной репликации из таблицы локальной базы данных на эти 2 целевые системы. Это может быть полезно для резервного копирования контактов в автономном режиме, для создания хранилища данных или по другим причинам.

3. Базовый документооборот

3.1 Настройка анализатора запросов CB

Первым шагом является обеспечение возможности подключения к целевой системе (Exchange и SalesForce в нашем сценарии); самым простым способом сделать это является использование анализатора запросов CB Query Analyzer. Здесь я уже настроил свой сервер ConnectBridge через инструмент Администрирования на подключение к MS Exchange 365 и SalesForce путем создания необходимых групп и пользователей. Я создал имя пользователя "martin"с паролем1234”. Данный пользователь имеет права на подключение к Exchange 365 и SalesForce. Теперь с помощью Query Analyzer я создам 2 подключения к каждой целевой системе и обеспечу успешное соединение.

SQL-интеграция Exchange и Salesforce

Рисунок 1: Администрирование аккаунтов

SQL интеграция Exchange и Salesforce рисунок 2

Рисунок 2: Администрирование групп и пользователей

Image

Рисунок 3: Подключения анализатора запросов

3.2 Проверка отчётов

Как показано выше, мы имеем успешную конфигурацию и подключение к обеим целевым системам. Теперь мы можем протестировать наши заявления

3.2.1 1 Exchange Контакты

В моем аккаунте Exchange у меня есть 3 контакта, как показано ниже.

Image

Рисунок 4: Exchange Контакты

Теперь мы протестируем 4 основные операции SELECT, INSERT, UPDATE и DELETE.

1. Выбор контактов

Выполнение нижеследующего утверждения должно дать нам 3 контакта, показанных на рисунке 5.

ВЫБЕРИТЕ [GivenName], [SurName], [Email1EmailAddress] ОТ [Contact];
SQL интеграция Exchange и Salesforce рисунок 5

Рисунок 5: Выбор контактов

2. Вставка контакта

Выполняя нижеследующее заявление, необходимо вставить новый контакт, показанный на рисунке 6.

INSERT INTO Contact([GivenName],[SurName],[Email1EmailAddress]) VALUES ('Peter','K.','peter@gmail.com');
SQL интеграция Exchange и Salesforce рисунок 6

Рисунок 6: Вставка нового контакта

3. Обновление контакта

Выполнение нижеследующего утверждения должно обновить фамилию контакта, который мы вставили ранее, как показано на Рисунке 7.

UPDATE Contact SET [SurName] = 'Keys' WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
SQL интеграция Exchange и Salesforce рисунок 7

Рисунок 7: Контакт обновления

4. Удаление контакта

Выполнение нижеследующего утверждения должно привести к удалению вновь вставленного контакта, как показано на Рисунке 8.

DELETE FROM Contact WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';
SQL интеграция Exchange и Salesforce рисунок 8

Рисунок 8: Удаление контакта

3.2.2 Контакты отдела продаж

В моем аккаунте SalesForce у меня есть 17 контактов, как показано ниже.

SQL интеграция Exchange и Salesforce рисунок 9

Рисунок 9: Контакты SalesForce

Теперь мы протестируем те же 4 основные операции SELECT, INSERT, UPDATE и DELETE.

1. Выбор контактов

Выполнение нижеследующего утверждения должно дать нам 17 контактов, как показано на рисунке 10.

ВЫБЕРИТЕ [Имя], [Фамилия], [Электронная почта] ОТ [Контакт];
SQL интеграция Exchange и Salesforce рисунок 10

Рисунок 10: Выбор контактов

2. Вставка контакта

Выполняя нижеследующее заявление, необходимо вставить новый контакт, показанный на рисунке 11.

INSERT INTO Contact([Firstname],[LastName],[Email]) VALUES ('Peter','K.','peter@gmail.com');
SQL интеграция Exchange и Salesforce рисунок 11

Рисунок 11: Вставка нового контакта

3. Обновление контакта

Выполнение нижеследующего утверждения должно обновить фамилию контакта, который мы вставили ранее, как показано на Рисунке 12.

UPDATE Contact SET [LastName] = 'Keys' WHERE [Email] = 'peter@gmail.com';
SQL интеграция Exchange и Salesforce рисунок 12

Рисунок 12: Контакт обновления

4. Удаление контакта

Выполнение нижеследующего утверждения должно привести к удалению вновь вставленного контакта, как показано на Рисунке 13.

DELETE FROM Contact WHERE [Email] = 'peter@gmail.com';
SQL интеграция Exchange и Salesforce рисунок 13

Рисунок 13: Удаление контакта

3.3 Копировать Подключение и выписки

Теперь мы знаем, что можем выбирать, обновлять, вставлять и удалять контакты из Exchange & SalesForce. Что нам нужно сделать сейчас, так это скопировать строку соединения из Query Analyzer и наши протестированные заявления, чтобы использовать их позже в нашем MS SQL Server Solution.

Чтобы скопировать соединение с анализатора запросов, нам нужно просто щелкнуть правой кнопкой мыши на соединении, нажать Edit и перейти в закладку Advanced, а затем скопировать оттуда текст, как показано ниже на рисунке 14.

SQL интеграция Exchange и Salesforce рисунок 14

Рисунок 14: Копирование строки соединения из анализатора запросов

Вот мои соединительные строки для обеих целевых систем.

1ТП23Т

Driver={Media Gateway ODBC Driver};импл='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''.

Теперь мы готовы открыть MS SQL Server и приступить к реализации нашего интеграционного решения SQL Server.

4. Прохождение решения

4.1 MS SQL Server

Чтобы иметь возможность работать с внешними источниками данных с помощью функции SQL Server Linked Server, нам необходимо выполнить следующие конфигурации

1. Запустите Microsoft SQL Server Management Studio и войдите, используя либо аутентификацию Windows, либо имя пользователя и пароль, как показано ниже на рисунке 15.

SQL интеграция Exchange и Salesforce рисунок 15

Рисунок 15: Экран входа в MS SQL Server Management Studio

SQL интеграция Exchange и Salesforce рисунок 16

Рисунок 16: Свойства MSDASQL

2. Перейдите к Северные объекты -> Связанные серверы -> Провайдеры -> MSDASQL разворачивая соответствующие узлы, как показано выше на рис. 16. Щелкните правой кнопкой мыши MSDASQL - Microsoft Data Access SQL - и выберите Свойства чтобы показать диалог на рисунке 17

SQL интеграция Exchange и Salesforce рисунок 17

Рисунок 17: Параметры свойств MSDASQL

3. Мы должны убедиться, что следующие настройки/опции проверены:

a. Только нулевой уровень: Из соображений безопасности мы должны гарантировать, что поддерживаются только те OLE DB-провайдеры, которые соответствуют OLE DB-интерфейсу уровня 0.

b. Разрешить процесс: позволить провайдеру(ам) данных - "внешним источникам данных" - быть инстанцированным как сервер в процессе - "в том же процессе, что и MS SQL Server". Это необходимо для того, чтобы избежать передачи аутентификационной информации между MS SQL Server и провайдером и иметь возможность работать с такими типами данных, как (varchar(max), nvarchar(max), varbinary(max), text, ntext или image). Без включения этой опции мы не сможем получить данные типа image из Exchange - например, - и вставить их в нашу базу данных MS SQL Server.

4. Теперь нам нужно разрешить MS SQL Server подключаться к внешним провайдерам и выполнять запросы на запрос данных от внешних провайдеров, которые используют OLEDB - давайте их вызовем".Внешние источники данных OLEDB”. Мы сделаем это за три шага:

a. Нам нужно открыть новое окно запроса, нажав на кнопку New Query (Новый запрос), как показано на рисунке 18 ниже. Не имеет значения, какая база данных активна, потому что то, что мы сделаем, повлияет на всю установку MS SQL Server и, в свою очередь, на каждую базу данных в ней. Как показано ниже, у меня есть "хозяин" в качестве активной/целевой базы данных.

SQL интеграция Exchange и Salesforce рисунок 18

Рисунок 18: Анализатор запросов MS SQL Server

b. Нам нужно переконфигурировать MS SQL Server так, чтобы мы могли изменять/конфигурировать его расширенные опции. Для этого мы выполним хранимую процедуру под названием "sp_configure" - это предустановленная системная хранимая процедура - и мы собираемся специально "показать расширенные опции" - установив этот параметр в 1. Для этого мы набираем "exec sp_configure 'show advanced options', 1; reconfigure" и нажимаем F5 для выполнения. Если все идет правильно, вы должны получить сообщение, похожее на то, что показано на рисунке 19 ниже

Рисунок 19: MS SQL Server - отображение дополнительных опций

SQL интеграция Exchange и Salesforce рисунок 19

c. Теперь нам нужно разрешить MS SQL Server опрашивать их".Внешние источники данных OLEDB"используя нечто под названиемСпециальные распределенные запросы". По умолчанию MS SQL Server не разрешает "Ad Hoc Distributed Queries", поэтому нам нужно перенастроить эту расширенную опцию - вот почему мы сделали предыдущий шаг - выполнив хранимую процедуру "sp_configure", передав параметр "Ad Hoc Distributed Queries" и значение 1, чтобы включить его. Если все идет правильно, вы должны получить сообщение, похожее на сообщение на рисунке 20 ниже, после выполнения "exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure"

SQL интеграция Exchange и Salesforce рисунок 20

Рисунок 20: MS SQL Server - Включение специальных распределенных запросов

Теперь мы можем добавить столько Linked Server, сколько захотим, так как наш MS SQL Server правильно настроен для этого.

4.2 Настройка связанного сервера MS Exchange

1. Перейдите к Северные объекты -> Связанные серверы. Щелкните правой кнопкой мыши Связанные сервера и выбирать Новый Связанный Сервер как показано на рисунке 21 ниже

SQL интеграция Exchange и Salesforce рисунок 21

Рисунок 21: MS SQL Server - Добавление нового связанного сервера

2. В диалоге нового связанного сервера, как показано на рисунке 22 ниже, вам нужно указать следующее:

a. Имя связанного сервера: может быть любое действительное имя, я выбираю Exchange365_CU7.

b. Поставщикдолжен быть "Microsoft OLE DB Providers for ODBC Drivers", так как ConnectBridge использует ODBC.

c. Строка поставщикаЗдесь мы вставляем строку соединения, скопированную нами ранее из анализатора запросов.

SQL интеграция Exchange и Salesforce рисунок 22

Рисунок 22: MS SQL Server - Настройка нового связанного сервера - Общие сведения

3.Теперь нам нужно установить отношения между пользователем, использующим/обрабатывающим MS SQL Server, и пользователем, использующим/обрабатывающим CB. Пользователь, использующий MS SQL Server, называется Локальный Логин (в нашем сценарии это "sa"), а пользователь, использующий/обрабатывающий CB, называется Удаленный Пользователь (в нашем сценарии это Martin с логином Martin). Это то, что мы должны настроить, и для этого мы нажимаем ".безопасность"закладка для отображения диалога, показанного на рисунке 23 ниже.

SQL интеграция изображения Exchange и Salesforce

Рисунок 23: MS SQL Server - Настройка нового связанного сервера - Безопасность

4. Когда отобразится вышеуказанное диалоговое окно, мы нажимаем кнопку Добавить и вводим Локальный логин и Удаленный пользователь, как мы договаривались. Вот что я сделал здесь, на рисунке 24.

SQL интеграция Exchange и Salesforce рисунок 24

Рисунок 24: MS SQL Server - Настройка нового связанного сервера - Логины

5. Хорошо, я знаю, что ты хочешь закрыть диалог, но подожди! Нам нужно сделать еще один шаг. Теперь мы должны перейти кОпции сервера"в закладке слева, чтобы показать диалог, показанный на рисунке 25 ниже, и включить 2 функции

a. RPC: чтобы включить определенную функцию безопасности, которая нам понадобится, когда мы используем какую-нибудь унаследованную функцию под названием Удалённый сервер - не волнуйтесь об этом сейчас - так что проверка логина между CB и MS SQL Server возможна.

b. RPC Outчтобы "Удаленный вызов процедуры"так как мы должны позволить нашим хранимым процедурам работать удаленно.

SQL интеграция Exchange и Salesforce рисунок 25

Рисунок 25: MS SQL Server - Настройка нового связанного сервера - Параметры сервера

6. Теперь нажимаем "Хорошо" и все! Да! Мы настроили MS SQL Server на подключение к Exchange. Теперь мы видим платформу Exchange в качестве базы данных сервера MS SQL, мы видим таблицу под названием Контакты, мы можем показать список контактов с Exchange, все это, без доступа к базе данных Exchange, как показано на рисунке 26 ниже

SQL-интеграция Exchange и Salesforce

Рисунок 26: MS SQL Server - Связанный сервер настроен успешно

4.3 Тестирование связанного сервера MS Exchange

Прежде чем разрабатывать наше интеграционное решение, мы должны быть уверены, что сможем выполнять манипуляции с базовыми данными на MS Exchange с помощью нашего только что настроенного Linked Server.

1. Выбор контактов

Выполнение нижеприведенного утверждения должно дать нам 3 контакта из MS Exchange.

ВЫБЕРИТЕ GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contact;

Почему "..."? Потому что он следует синтаксису SERVER.DATABASE.SCHEMA.TABLE и, как видно из рисунка 26 выше, наш сервер - Exchange365_CU7, наша база данных - "без имени", наша схема - "без имени", и, наконец, наша таблица - Contacts.

SQL-интеграция Exchange и Salesforce

Рисунок 27: Выбор контактов

2. Вставка контакта

При выполнении нижеследующего заявления необходимо вставить новый контакт.

EXEC ('INSERT INTO Contact([GivenName], [SurName], [Email1EmailAddress])
VALUES ('Peter', 'K.', 'peter@gmail.com');') AT EXCHANGE365_CU7;
SQL интеграция Exchange и Salesforce рисунок 28

Рисунок 28: Вставка нового контакта

3. Обновление контакта

Выполнение нижеследующего утверждения должно обновить фамилию контакта, который мы вставили ранее.

EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') НА EXCHANGE365_CU7;
SQL интеграция Exchange и Salesforce рисунок 29

Рисунок 29: Обновляющий контакт

4. Удаление контакта

Выполнение нижеследующего заявления должно привести к удалению вновь вставленного контакта.

EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') В EXCHANGE365_CU7;
SQL интеграция Exchange и Salesforce рисунок 30

Рисунок 30: Удаление контакта

4.4 Настройка сервера SalesForce Linked Server

Мы будем следовать шагам из раздела "4.2 Настройка MS Exchange Linked Server", за исключением, конечно, использования строки подключения для SalesForce. После выполнения этих шагов, ваш Связанный Сервер должен быть успешно настроен, как показано ниже.

SQL интеграция Exchange и Salesforce рисунок 31

Рисунок 31: Сервер SalesForce Linked Server настроен успешно

4.5 Тестирование сервера Salesforce Linked Server

Как и ранее в случае с MS Exchange Linked Server, нам необходимо убедиться в том, что мы можем выполнять задачи по базовому управлению данными через SalesForce Linked Server.

Для сокращения руководства ниже на рисунке 32 проверяются все следующие утверждения

1. Выбор контактов

Выполнение нижеприведенного заявления должно дать нам контакты из SalesForce.

ВЫБЕРИТЕ GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contact;

2. Вставка контакта

При выполнении нижеследующего заявления необходимо вставить новый контакт.

EXEC ('INSERT INTO Contact([GivenName], [SurName], [Email1EmailAddress])
VALUES ('Peter', 'K.', 'peter@gmail.com');') AT EXCHANGE365_CU7;

3. Обновление контакта

Выполнение нижеследующего утверждения должно обновить фамилию контакта, который мы вставили ранее.

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

4. Удаление контакта

Выполнение нижеследующего заявления должно привести к удалению вновь вставленного контакта.

EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";') В EXCHANGE365_CU7;
SQL интеграция Exchange и Salesforce рисунок 32

Рисунок 32: Тестирование SalesForce Linked Server

4.6 Таблица локальной базы данных

Отсюда нам нужно иметь актуальную локальную базу данных на нашем локальном MS SQL сервере. Если она у вас уже есть, то вы можете ее использовать, в противном случае нам нужно будет создать новую базу данных. Я создал базу данных под названием ConnectingSoftware с 1 таблицей под названием LocalContacts. В этой таблице есть только одна запись, как показано ниже на рисунке 33.

Рисунок 33: Таблица локальных контактов

4.7 Триггер таблицы репликации

SQL интеграция Exchange и Salesforce рисунок 33

Первым шагом в нашем решении является репликация изменений в нашей локальной таблице базы данных на обе базы данных SalesForce и Exchange. Мы реализуем это с помощью триггера таблицы.

Ниже показан скрипт SQL для триггера:

CREATE TRIGGER [dbo]. [trgSyncContact]
ON [dbo]. [LocalContacts]
ПОСЛЕ ВСТАВКИ, ОБНОВЛЕНИЯ, УДАЛЕНИЯ
AS
НАЧАЛО РАБОТЫ
объявить @Операционный варвар(50)
объявить @FirstName nvarchar(max)
объявить @Последнее имя nvarchar(max)
объявить @Email varchar(255)
объявите @Deleted_FirstName nvarchar(max)
объявите @Deleted_LastName nvarchar(max)
объявить @Deleted_Email varchar(255)

ЕСЛИ COLUMNNS_UPDATED() > 0
НАЧАЛО РАБОТЫ
--Если мы обновили столбцы, то либо вставили, либо удалилили
запись
ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ СПИСКА УДАЛЕННЫХ)
НАЧАЛО РАБОТЫ
--Если мы удалили значения, то это была операция обновления.
SELECT @FirstName = inserted.FirstName, @LastName =
insert.LastName, @Email = inserted.Email,
@Deleted_FirstName = deleted.FirstName,
@Удалено_Последнее имя = удалено.Фамилия, @Удалено_Электронная почта =
удалённый адрес электронной почты
FROM удалено, вставлено
-ПродажиФорс
Exec ('UPDATE Contact SET FirstName = ?, LastName = ?, Email = ??
ГДЕ Имя = ? и фамилия = ? и адрес электронной почты = ?',
@Первое имя, @Последнее имя, @Электронная почта, @Удалено_Первое имя,
@Deleted_LastName, @Deleted_Email) в SALESFORCE_CBD;
--Exchange
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ??,
Email1EmailAddress = ? ГДЕ GivenName = ? и SurName = ?
? и Email1EmailAddress = ?', @FirstName, @LastName,
@Email, @Deleted_FirstName, @Deleted_LastName,
@Deleted_Email) по адресу EXCHANGE365_CU7;
КОНЕЦ
ELSE
НАЧАЛО РАБОТЫ
--Если это не было операцией обновления, то это была вставка
SELECT @FirstName = имя, @LastName = фамилия, @Email =
Email
FROM вставлен
-ПродажиФорс
Выполнить ('Вставить в контакт (Имя, Фамилия, Электронная почта) значения).
(?,?,?), @Первое имя, @Последнее имя, @Электронная почта) по адресу
SALESFORCE_CBD;
--MS Exchange
EXEC ('Вставить в контакт (GivenName, SurName),
Email1EmailAddress) значения(?,?,?)', @FirstName,
@Последнее имя, @Электронная почта) по адресу EXCHANGE365_CU7;
КОНЕЦ
КОНЕЦ
ELSE
НАЧАЛО РАБОТЫ
--Если операция не была обновлена/вставлена, то она была удалена.
ВЫБРАТИТЬ @Удалено_Электронная почта = Электронная почта FROM удалена
-ПродажиФорс
Выполнить ('Удалить из контакта, где электронная почта = ?', @Удаленная_Электронная почта) по адресу
SALESFORCE_CBD;
--MS Exchange
Выполнить ('Удалить из контакта, где Email1EmailAddress = ?'),
@Deleted_Email) по адресу EXCHANGE365_CU7;
КОНЕЦ
КОНЕЦ

Предупреждение: после выполнения вышеуказанного скрипта, мы не должны ничего вставлять из таблицы локальной базы данных, пока мы не синхронизируем между нашими 2 целевыми системами (Exchange и SalesForce) и нашей локальной базой данных, в противном случае мы можем закончить в случайном дублировании записей, так как логика здесь не проверяет, если новая запись уже существовала на этих целевых системах.

4.8 Сохраненная процедура синхронизации

Вторым шагом в нашем решении является синхронизация между MS Exchange, SalesForce и нашей таблицей локальных контактов, так что каждая система будет иметь один и тот же набор контактов.

Для этого мы собираемся написать сохраненную процедуру. Логика процедуры заключается в том, чтобы:

1. Очень важно, чтобы отключить триггер, который мы создали выше "как мы делаем синхронизацию, мы не должны включать автоматическую репликацию, реализованную триггером".

2. Синхронизация между SalesForce и моей базой данных.
Использование адреса электронной почты контакта в качестве совпадающего ключа; есть ли контакт в SalesForce, а не в таблице "Локальные контакты"?

a. Да: Добавить контакт в таблицу локальных контактов.

b. Нет: Обновите имя и фамилию контакта в моей таблице локальных контактов.

3. Синхронизация между MS Exchange и моей базой данных.
Использование адреса электронной почты контакта в качестве совпадающего ключа; есть ли контакт на Exchange и нет ли его в таблице "Локальные контакты"?

a. Да: Добавить контакт в таблицу локальных контактов.

b. Нет: Обновите имя и фамилию контакта в моей таблице локальных контактов.

На данный момент в моей локальной таблице "Контакты" в дополнение к записям, которые изначально были в таблице, есть все контакты как из SalesForce, так и из MS Exchange. Теперь нам нужно обновить каждую целевую систему по контактам из другой целевой системы и Локальной базы данных.

4. Обновить контакты на SalesForce (по контактам из Exchange и моей локальной таблицы).

Использование адреса электронной почты контакта в качестве совпадающего ключа; есть ли контакт в моей таблице локальных контактов, а не в SalesForce?

a. Да: Добавить контакт в SalesForce

b. Нет: Обновить имя и фамилию контакта в SalesForce.

5. Обновить контакты на Exchange (по контактам из SalesForce и моей локальной таблицы).

Использование адреса электронной почты контакта в качестве совпадающего ключа; есть ли контакт в таблице моих локальных контактов, а не на Exchange?

a. Да: Добавить контакт в MS Exchange

b. Нет: Обновить имя и фамилию контакта на Exchange.

6. Теперь мы можем включить триггер, который мы отключили ранее, поэтому автоматическая репликация снова включена.

Следующий SQL-скрипт будет реализовывать логику, описанную выше.

CREATE PROCEDURE [dbo]. [uspInitSync].
-- Добавьте сюда параметры хранимой процедуры
AS
НАЧАЛО РАБОТЫ
-- ВКЛЮЧЕНИЕ УСТАНОВКИ НА НАБЛЮДЕНИЕ, чтобы предотвратить дополнительные наборы результатов от
-- ...вмешиваться в заявления SELECT.
ЗАДАЙТЕ НОКАУТ;

-отключить спусковой крючок, чтобы, вставляя из SalesForce, мы не попадали
--...снова добавив контакты в SalesForce...
ДИСКУЛЬТАТНЫЙ ТРИГГЕР [trgSyncContact] НА Локальные Контакты;

-записи о продажах от SalesForce до LocalDB.
ДЕКЛАРЕ @ Импортированные контакты Таблица(FirstName nvarchar(max), LastName)
nvarchar(max), Email varchar(255));

-обновление/вставка контактов в LocalDB с использованием SalesForce в качестве источника
MERGE LocalContacts AS цель
ИСПОЛЬЗОВАНИЕ (SELECT FirstName, LastName, Email FROM SalesForce_CBD...Contact)
AS-источник
ON (target.Email LIKE source.Email)
КОГДА ПОДОЙДЁТ
UPDATE SET FirstName = source.FirstName, LastName =
источник. Фамилия
В СЛУЧАЕ НЕСОВПАДЕНИЯ
ИНСЕРТ (Имя, фамилия, электронная почта)
ЦЕНЫ (source.FirstName, source.LastName, source.Email)
OUTPUT inserted.FirstName, insert.LastName, insert.Email
INTO @ImportedContacts;

- показать вставленные контакты в LocalDB от SalesForce
выберите * из @ImportedContacts;

-обновление / вставка контактов в LocalDB с использованием Exchange в качестве источника
MERGE LocalContacts AS цель
ИСПОЛЬЗОВАНИЕ (ВЫБЕРИТЕ GivenName, SurName, Email1EmailAddress FROM)
EXCHANGE365_CU7...Контакт) AS источник
ON (target.Email LIKE source.Email1EmailAddress)
КОГДА ПОДОЙДЁТ
UPDATE SET FirstName = source.GivenName, LastName =
источник.фамилия
В СЛУЧАЕ НЕСОВПАДЕНИЯ
ИНСЕРТ (Имя, фамилия, электронная почта)
ЦЕНЫ (источник.GivenName, источник.SurName,
source.Email1EmailAddress)
OUTPUT inserted.FirstName, insert.LastName, insert.Email
INTO @ImportedContacts;

- отображение вставленных контактов с помощью табличной переменной
выберите * из @ImportedContacts;

--Скопируйте все в SalesForce & Exchange, чтобы у них была точная копия.
-из LocalDB после того, как LocalDB синхронизирован со всеми системами.
-Я должен использовать курсор, и если из-за использования вставки... выберите... где нет...
-эквизиты не работают с удаленными столами, а также слияние не работает с
-отъездные столы
Объявите @Первое имя nvarchar(max)
объявить @Последнее имя nvarchar(max)
объявить @Email varchar(255)
объявить @SQL nvarchar(max)

ДЕКЛАРЕ Контакты_курсор КУРСОР ФАСТ_БЕСПЛАТНОЕ ПРЕДУПРЕЖДЕНИЕ ЗА ДЛЯ
ВЫБЕРИТЕ Имя, Фамилию, Электронную почту из LocalContacts;

ОТКРЫТЫЕ Контакты_курсор
ИЗВЛЕЧЕНИЕ СЕКЦИИ ОТ Контакты_курсор Вход @Первое имя, @Последнее имя, @Электронная почта
В ТО ВРЕМЯ КАК @@FETCH_STATUS = 0
НАЧАЛО РАБОТЫ
ЕСЛИ ИСПОЛЬЗОВАТЕЛИ (ВЫБЕРИТЕ Email1EmailAddress FROM EXCHANGE365_CU7...Contact
Где Email1EmailAddress LIKE @Email)
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ?? ГДЕ
Email1EmailAddress = ?', @Первое имя, @Последнее имя, @Электронная почта)
на EXCHANGE365_CU7;
ELSE
EXEC ('Вставить в контакт (GivenName, SurName),
Email1EmailAddress) значения(?,?,?)', @FirstName,
@Последнее имя, @Электронная почта) по адресу EXCHANGE365_CU7;

ЕСЛИ ВЫБОРЫ (ВЫБОР электронной почты от продажForce_CBD...Контактная информация ГДЕ ЛАЙК эл. почта
@Email)
Exec ('UPDATE Contact SET FirstName = ?, LastName = ?? ГДЕ
Email = ?', @Первое имя, @Последнее имя, @Электронная почта) по адресу
SalesForce_CBD;
ELSE
Выполнить ('Вставить в контакт (Имя, Фамилия, Электронная почта) значения).
(?,?,?), @Первое имя, @Последнее имя, @Электронная почта) по адресу
SalesForce_CBD;

ИЗВЛЕЧЕНИЕ СЕКЦИИ ОТ Контакты_курсор Вход @Первое имя, @Последнее имя, @Электронная почта
КОНЕЦ
CLOSE Контакты_курсор;
DEALLOCATE Контакты_курсор;

-податливый триггер, чтобы любое изменение отражалось в онлайн LOB.
ENABLE TRIGGER [trgSyncContact] НА Локальные Контакты;
КОНЕЦ

5. Решение в действии

Теперь первым шагом является запуск хранимой процедуры синхронизации "uspInitSync", как показано ниже, хранимая процедура была выполнена без ошибок.

SQL интеграция Exchange и Salesforce рисунок 34

Рисунок 34: запуск хранимой процедуры синхронизации

Мы также видели, что были добавлены новые контакты в MS Exchange.

SQL интеграция Exchange и Salesforce рисунок 35

Рисунок 35: Обновления на MS Exchange

А в SalesForce добавлены новые контакты

SQL интеграция Exchange и Salesforce рисунок 36

Рисунок 36: Обновления на SalesForce

И в нашей таблице локальной базы данных теперь появились новые контакты.

SQL интеграция Exchange и Salesforce рисунок 37

Рисунок 37: Обновления в таблице Локальные контакты

Мы можем видеть автоматическую репликацию в действии.

1. Вставка контакта из локальной базы данных, удаление его из SalesForce и Exchange.

SQL интеграция Exchange и Salesforce рисунок 38

Рисунок 38: Вставить репликацию

2. Обновление контакта в локальной базе данных обновляет его в SalesForce и Exchange.

SQL интеграция Exchange и Salesforce рисунок 39

Рисунок 39: Репликация обновления

3. Удаление контакта из локальной базы данных, удаление из SalesForce и Exchange.

SQL интеграция Exchange и Salesforce рисунок 40

Рисунок 40: Удалить репликацию

6. Примечания к решению

Мы постарались максимально упростить логику решения, однако логику можно было бы усовершенствовать и откорректировать для лучшей производительности и более сложных функций.

Более подробную информацию об этом продукте вы можете найти на странице продукта в разделе CB Linked Server for Enterprise Applications.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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