1. Onderwerp
1.1 Inleiding
Vanwege het succes van ons eerste technische artikel, dat te vinden is hier hebben we besloten om verder te gaan. Deze keer zullen we bekijken hoe een integratie tussen Exchange en Salesforce op een zeer eenvoudige manier kan worden bereikt. We zullen gebruik maken van SQL queries.
Voor de integratie gebruiken we CB Linked Server for Enterprise Applications. Vraag ons om een gratis proefversie van het product.
2. Scenario-eisen
Het integratie scenario dat hier nodig is, is om te synchroniseren tussen een lokale database tabel met contactpersonen, Exchange 365 contactpersonen en SalesForce contactpersonen en om een onmiddellijke replicatie te hebben van de lokale database tabel naar die 2 doelsystemen. Dit kan nuttig zijn om een back-up van contacten offline te hebben of om een data warehouse of om andere redenen te creëren.
3. Basis-Workflow
3.1 De CB Query Analyzer configureren
De eerste stap is ervoor te zorgen dat je verbinding kunt maken met het doelsysteem (Exchange & SalesForce in ons scenario); de eenvoudigste manier om dat te doen is via CB Query Analyzer. Hier heb ik mijn ConnectBridge server al geconfigureerd via de Administration tool om verbinding te maken met MS Exchange 365 en SalesForce door de benodigde groepen en gebruikers aan te maken. Ik heb een gebruikersnaam “martin” met wachtwoord “1234”. Deze gebruiker heeft rechten om verbinding te maken met Exchange 365 en SalesForce. Nu zal ik vanuit Query Analyzer 2 verbindingen maken met elk doelsysteem en ervoor zorgen dat ik met succes kan verbinden.

Figuur 1: Rekeningenadministratie

Figuur 2: Beheer van groepen en gebruikers

Figuur 3: Query Analyzer Verbindingen
3.2 Test uw verklaringen
Zoals hierboven getoond hebben we een succesvolle configuratie en verbinding met beide doelsystemen. Nu kunnen we onze verklaringen testen
3.2.1 Exchange Contacten
Op mijn Exchange account, heb ik 3 contacten zoals hieronder getoond

Figuur 4: Exchange Contacten
Nu gaan we de 4 basis operaties SELECT, INSERT, UPDATE & DELETE testen
1. Contacten selecteren
Het uitvoeren van het onderstaande statement zou ons de 3 contacten moeten geven die in Figuur 5 worden getoond.
SELECT [GegevenNaam],[SurNaam],[Email1EmailAddress] FROM [Contact];

Figuur 5: Contacten selecteren
2. Een contactpersoon invoegen
Door het onderstaande statement uit te voeren wordt een nieuw contact ingevoegd, zoals weergegeven in Figuur 6
INSERT INTO Contact([GivenName],[SurName],[Email1EmailAddress]) VALUES ('Peter','K.', 'peter@gmail.com');

Figuur 6: Een nieuw contactpersoon invoegen
3. Een contactpersoon bijwerken
Door het onderstaande statement uit te voeren wordt de achternaam van de contactpersoon die we eerder hebben ingevoegd bijgewerkt, zoals getoond in Figuur 7
UPDATE Contact SET [SurName] = 'Keys' WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';

Figuur 7: Contact bijwerken
4. Een contactpersoon verwijderen
Het uitvoeren van het onderstaande statement zou het nieuw ingevoegde contact moeten verwijderen zoals getoond in Figuur 8
DELETE FROM Contact WHERE [Email1EmailAddress] LIKE 'peter@gmail.com';

Figuur 8: Contact verwijderen
3.2.2 Salesforce Contacten
Op mijn SalesForce account, heb ik 17 contacten zoals hieronder weergegeven

Figuur 9: Contactpersonen van SalesForce
Nu gaan we dezelfde 4 basis operaties SELECT, INSERT, UPDATE & DELETE testen.
1. Contacten selecteren
Het uitvoeren van het onderstaande statement zou ons de 17 contacten moeten opleveren die in Figuur 10 worden getoond.
SELECT [Voornaam],[Achternaam],[E-mail] FROM [Contact];

Figuur 10: Contactpersonen selecteren
2. Een contactpersoon invoegen
Door het onderstaande statement uit te voeren wordt een nieuw contact ingevoegd, zoals getoond in Figuur 11
INSERT INTO Contact([Voornaam],[Achternaam],[E-mail]) VALUES ('Peter', 'K.', 'peter@gmail.com');

Figuur 11: Een nieuw contactpersoon invoegen
3. Een contactpersoon bijwerken
Door het onderstaande statement uit te voeren wordt de achternaam van de contactpersoon die we eerder hebben ingevoegd bijgewerkt, zoals getoond in Figuur 12
UPDATE Contact SET [LastName] = 'Keys' WHERE [Email] = 'peter@gmail.com';

Figuur 12: Contact bijwerken
4. Een contactpersoon verwijderen
Het uitvoeren van het onderstaande statement zou het nieuw ingevoegde contact moeten verwijderen zoals getoond in Figuur 13
DELETE FROM Contact WHERE [Email] = 'peter@gmail.com';

Figuur 13: Contact verwijderen
3.3 Kopieerverbinding en verklaringen
Nu weten we dat we in staat zijn om contacten te selecteren, updaten, invoegen en verwijderen uit Exchange & SalesForce. Wat we nu moeten doen is het kopiëren van de connection string van Query Analyzer en onze geteste statements om ze later te gebruiken in onze MS SQL Server Solution.
Om de verbinding van query analyzer te kopiëren, hoeven we alleen maar met de rechtermuisknop op de verbinding te klikken, op Bewerken te klikken en naar het tabblad Geavanceerd te gaan en daar de tekst te kopiëren, zoals hieronder in Figuur 14 is te zien.

Figuur 14: Connectiestring kopiëren vanuit Query Analyzer
Hier zijn mijn verbindingsstrings voor beide doelsystemen.
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'
Nu zijn we klaar om MS SQL Server te openen en te beginnen met de implementatie van onze SQL Server integratie oplossing.
4. Doorloop van de oplossing
4.1 MS SQL Server
Om te kunnen werken met externe gegevensbronnen via de SQL Server Linked Server functie, moeten we de volgende configuraties uitvoeren
1. Start Microsoft SQL Server Management Studio en meld u aan met Windows-authenticatie of gebruikersnaam en wachtwoord, zoals getoond in Figuur 15

Afbeelding 15: MS SQL Server Management Studio Aanmeldscherm

Figuur 16: MSDASQL-eigenschappen
2. Navigeer naar Sever Objecten -> Gekoppelde Servers -> Providers -> MSDASQL door de overeenkomstige knooppunten uit te vouwen, zoals hierboven in Figuur 16 is aangegeven. Klik met de rechter muisknop op MSDASQL - Microsoft Data Access SQL - en selecteer Eigenschappen om het dialoogvenster in figuur 17 te tonen

Figuur 17: MSDASQL Eigenschappen Instellingen
3. We moeten ervoor zorgen dat de volgende instellingen/opties zijn aangevinkt:
a. Alleen niveau nul: Om veiligheidsredenen moeten wij ervoor zorgen dat alleen OLE DB providers die voldoen aan niveau 0 van de OLE DB interface worden ondersteund.
b. In behandeling nemen toestaanWe hebben de volgende stap genomen om de dataprovider(s) - “externe databronnen” - te instantiëren als een in-process server - “in hetzelfde proces als MS SQL Server”. We moeten dit doen om te voorkomen dat authenticatie-informatie wordt doorgegeven tussen MS SQL Server en de provider en om te kunnen werken met datatypes zoals (varchar(max), nvarchar(max), varbinary(max), text, ntext of image). Zonder deze optie aan te zetten, kunnen we bijvoorbeeld geen data van het type afbeelding ophalen uit Exchange en invoegen in onze MS SQL Server Database.
4. Nu moeten we MS SQL Server in staat stellen om verbinding te maken met externe providers en query's uit te voeren om gegevens op te vragen van externe providers die OLEDB gebruiken - laten we ze “" noemen.“Externe OLEDB gegevensbronnen”. We zullen dat in 3 stappen doen:
a. We moeten een nieuw Query-venster openen door op de knop New Query te klikken, zoals weergegeven in afbeelding 18 hieronder. Het maakt niet uit welke database actief is, want wat we gaan doen heeft invloed op de hele MS SQL Server-installatie en op elke database daarin. Zoals hieronder te zien is, heb ik “master” als actieve/doeldatabase

Figuur 18: MS SQL Server Query Analyzer
b. We moeten MS SQL Server opnieuw configureren zodat we de geavanceerde opties kunnen wijzigen/configureren. Om dat te doen gaan we een opgeslagen procedure genaamd “sp_configure” uitvoeren - het is een voorgeïnstalleerde systeem opgeslagen procedure - en we gaan specifiek “show advanced options” - door deze optie op 1 te zetten. Om dat te doen typen we “exec sp_configure 'show advanced options', 1; reconfigure” en drukken op F5 om uit te voeren. Als alles goed gaat, zou je een bericht moeten krijgen dat lijkt op het bericht in Figuur 19 hieronder
Afbeelding 19: MS SQL Server - Geavanceerde opties weergeven

c. Nu moeten we MS SQL Server toestaan om deze “Externe OLEDB gegevensbronnen”met behulp van iets dat “Ad hoc gedistribueerde zoekopdrachten”. Standaard staat MS SQL Server “Ad Hoc Distributed Queries” niet toe. Daarom moeten we deze geavanceerde optie opnieuw configureren - daarom hebben we de vorige stap uitgevoerd - door de opgeslagen procedure “sp_configure” uit te voeren met de instelling “Ad Hoc Distributed Queries” en de waarde 1 om deze in te schakelen. Als alles goed gaat, zou je na het uitvoeren van “exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure” een bericht moeten krijgen dat lijkt op het bericht in Figuur 20 hieronder.”

Figuur 20: MS SQL Server - Ad hoc gedistribueerde query's inschakelen
Nu kunnen we zoveel Linked Server toevoegen als we willen, aangezien onze MS SQL Server goed geconfigureerd is om dat toe te laten.
4.2 Configureren van MS Exchange Gekoppelde Server
1. Navigeer naar Sever Objecten -> Gekoppelde Servers. Klik met de rechtermuisknop op Gekoppelde Servers en kies Nieuwe gekoppelde server zoals weergegeven in onderstaande figuur 21

Figuur 21: MS SQL Server - Nieuwe gekoppelde server toevoegen
2. In het nieuwe "Linked Server" dialoogvenster, zoals getoond in Figuur 22 hieronder, moet u het volgende opgeven:
a. Naam gekoppelde server: kan elke geldige naam zijn, ik kies Exchange365_CU7.
b. Aanbiedermoet “Microsoft OLE DB Providers for ODBC Drivers” zijn, omdat ConnectBridge ODBC gebruikt.
c. Aanbieder String: hier plakken we de verbindings string die we eerder van query Analyzer hebben gekopieerd.

Figuur 22: MS SQL Server - Nieuwe gekoppelde server configureren - Algemeen
3.Nu moeten we een relatie leggen tussen de gebruiker die MS SQL Server gebruikt/benadert en de gebruiker die CB gebruikt/benadert. De gebruiker die MS SQL Server gebruikt heet Local Login (in ons scenario is dat “sa”) en de gebruiker die CB gebruikt/benadert heet Remote User (in ons scenario is dat Martin met login martin). Dit is wat we moeten configureren en om dat te doen klikken we op “veiligheid” tabblad om het dialoogvenster in Figuur 23 hieronder weer te geven

Figuur 23: MS SQL Server - Nieuwe gekoppelde server configureren - Beveiliging
4. Wanneer het bovenstaande dialoogvenster wordt weergegeven, klikken we op de knop Toevoegen en typen we de Lokale Login en de Remote Gebruiker zoals we hebben afgesproken. Dat is wat ik hier heb gedaan in Figuur 24

Figuur 24: MS SQL Server - Nieuwe gekoppelde server configureren - Aanmelden
5. Oké, ik weet dat je het dialoogvenster wilt sluiten, maar wacht! We moeten nog één stap doen. Nu moeten we naar “Server Opties” aan de linkerkant om het dialoogvenster in Figuur 25 hieronder weer te geven en 2 functies in te schakelen
a. RPC: om een bepaalde veiligheidsfunctie in te schakelen die we nodig hebben als we een oude functie gebruiken genaamd Server op afstand - maak je er nu geen zorgen over - zodat login validatie tussen CB en MS SQL Server mogelijk is
b. RPC uit: om “Remote Procedure Call” functie, omdat we onze opgeslagen procedures op afstand moeten kunnen uitvoeren

Figuur 25: MS SQL Server - Nieuwe gekoppelde server configureren - Serveropties
6. Nu klikken we op okay en we zijn klaar! Ja! We hebben MS SQL Server geconfigureerd om verbinding te maken met Exchange. Nu kunnen we het Exchange platform zien als een database in MS SQL Server, we kunnen de tabel Contacts zien, we kunnen een lijst van contacten van Exchange laten zien, dit alles, zonder toegang tot de Exchange database zoals u kunt zien in Figuur 26 hieronder

Figuur 26: MS SQL Server - Gekoppelde server met succes geconfigureerd
4.3 Testen MS Exchange gekoppelde server
Alvorens onze integratie-oplossing te ontwikkelen, moeten wij er zeker van zijn dat wij in staat zijn de Basic Data manipulatie uit te voeren op MS Exchange via onze nieuw geconfigureerde Linked Server.
1. Contacten selecteren
Het uitvoeren van het onderstaande statement zou ons de 3 contacten van MS Exchange moeten geven.
SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contact;
Waarom de “...”? Omdat het de syntax SERVER.DATABASE.SCHEMA.TABLE volgt en zoals je kunt zien in bovenstaande afbeelding 26, is onze server Exchange365_CU7, onze database is “zonder naam”, ons schema is “zonder naam” en tot slot is onze tabel Contacts.

Figuur 27: Contacten selecteren
2. Een contactpersoon invoegen
Door het onderstaande statement uit te voeren, wordt een nieuw contact toegevoegd.
EXEC ('INSERT INTO Contact([GegevenNaam], [SurNaam], [Email1EmailAddress])
VALUES ("Peter", "K.", "peter@gmail.com");") AT EXCHANGE365_CU7;

Figuur 28: Een nieuw contactpersoon invoegen
3. Een contactpersoon bijwerken
Door het onderstaande statement uit te voeren wordt de achternaam van de contactpersoon die we eerder hebben ingevoegd bijgewerkt
EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";") BIJ EXCHANGE365_CU7;

Figuur 29: Contact bijwerken
4. Een contactpersoon verwijderen
Het uitvoeren van het onderstaande statement zou het nieuw ingevoegde contact moeten verwijderen
EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";") BIJ EXCHANGE365_CU7;

Figuur 30: Contact verwijderen
4.4 SalesForce Linked Server configureren
We volgen de stappen uit paragraaf “4.2 MS Exchange Linked Server configureren”, behalve natuurlijk dat we de Connection String voor SalesForce gaan gebruiken. Na het volgen van deze stappen zou je Linked Server succesvol geconfigureerd moeten zijn zoals hieronder weergegeven.

Figuur 31: SalesForce Linked Server met succes geconfigureerd
4.5 Testen van Salesforce Linked Server
Zoals we eerder ook met MS Exchange Linked Server hebben gedaan, moeten we ervoor zorgen dat we de Basic Data Manipulation-taken kunnen uitvoeren via de SalesForce Linked Server.
Om de gids in te korten, test figuur 32 hieronder alle volgende beweringen
1. Contacten selecteren
Het uitvoeren van het onderstaande statement zou ons de contacten van SalesForce moeten geven.
SELECT GivenName, SurName, Email1EmailAddress FROM EXCHANGE365_CU7...Contact;
2. Een contactpersoon invoegen
Door het onderstaande statement uit te voeren, wordt een nieuw contact toegevoegd.
EXEC ('INSERT INTO Contact([GegevenNaam], [SurNaam], [Email1EmailAddress])
VALUES ("Peter", "K.", "peter@gmail.com");") AT EXCHANGE365_CU7;
3. Een contactpersoon bijwerken
Door het onderstaande statement uit te voeren wordt de achternaam van de contactpersoon die we eerder hebben ingevoegd bijgewerkt
EXEC('UPDATE Contact SET [SurName] = "Keys" WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";") BIJ EXCHANGE365_CU7;
4. Een contactpersoon verwijderen
Het uitvoeren van het onderstaande statement zou het nieuw ingevoegde contact moeten verwijderen
EXEC ('DELETE FROM Contact WHERE [Email1EmailAddress] LIKE
"peter@gmail.com";") BIJ EXCHANGE365_CU7;

Figuur 32: Testen van SalesForce Linked Server
4.6 Lokale Database tabel
Vanaf hier, moeten we een actuele lokale database hebben op onze lokale MS SQL Server. Als u er al een hebt, dan kunt u die gebruiken, anders moeten we een nieuwe database creëren. Ik heb een database aangemaakt genaamd ConnectingSoftware met 1 tabel genaamd LocalContacts. In die tabel is er slechts één record zoals hieronder getoond in Figuur 33.
Figuur 33: Tabel met lokale contacten
4.7 Replicatietabel trigger

De eerste stap in onze oplossing is het repliceren van de wijzigingen in onze Lokale database tabel naar zowel SalesForce als Exchange. we gaan dit implementeren via tabel trigger.
SQL Script voor de trigger wordt hieronder getoond:
CREATE TRIGGER [dbo].[trgSyncContact]
OP [dbo].[LocalContacts]
NA INVOEGEN, BIJWERKEN, VERWIJDEREN
AS
BEGIN
declareer @Operation varchar(50)
@Voornaam nvarchar(max)
@LastName nvarchar(max) vastleggen
@Email declareren varchar(255)
@Deleted_FirstName nvarchar(max) vastleggen
@Verwijderde_LastName nvarchar(max) vastleggen
@Verwijderd_Email varchar(255) verklaren
ALS KOLOMMEN_BIJGEWERKT() > 0
BEGIN
--als we bijgewerkte kolommen hebben, dan hebben we ofwel een record ingevoegd of verwijderd
record
IF EXISTS (SELECT * FROM DELETED)
BEGIN
--als we waarden hebben verwijderd, dan was het een update operatie
SELECT @FirstName = inserted.FirstName, @LastName =
inserted.LastName, @Email = inserted.Email,
@Deleted_FirstName = deleted.FirstName,
@Deleted_LastName = deleted.LastName, @Deleted_Email =
verwijderd.Email
FROM deleted, inserted
--SalesForce
Exec ('UPDATE Contact SET FirstName = ?, LastName = ?, Email = ?
WHERE FirstName = ? en LastName = ? en Email = ?",
@FirstName, @LastName, @Email, @Deleted_FirstName,
@Deleted_LastName, @Deleted_Email) bij SALESFORCE_CBD;
--Exchange
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ?
Email1EmailAddress = ? WHERE GivenName = ? en SurName =
? en Email1EmailAddress = ?", @FirstName, @LastName,
@Email, @Deleted_FirstName, @Deleted_LastName,
@Deleted_Email) bij EXCHANGE365_CU7;
END
ELSE
BEGIN
--als het geen update operatie was, dan was het een insert
SELECT @FirstName = FirstName, @LastName = LastName, @Email =
Email
FROM ingevoegd
--SalesForce
Exec ('Voeg in Contact (Voornaam, Achternaam, Email) waarden
(?,?,?)", @FirstName, @LastName, @Email) op
SALESFORCE_CBD;
--MS Exchange
EXEC ('Voeg in Contact (Voornaam, SurName,
Email1EmailAddress) values(?,?,?)", @FirstName,
@LastName, @Email) bij EXCHANGE365_CU7;
END
END
ELSE
BEGIN
--als de bewerking niet bijwerken/invoegen was dan was het verwijderen
SELECT @Deleted_Email = Email FROM deleted
--SalesForce
Exec ("Delete From Contact Where Email = ?", @Deleted_Email) op
SALESFORCE_CBD;
--MS Exchange
Exec ("Delete From Contact Where Email1EmailAddress = ?
@Deleted_Email) in EXCHANGE365_CU7;
END
EINDE
Waarschuwing: na het uitvoeren van het bovenstaande script, moeten we niets invoegen uit de lokale databasetabel totdat we synchroniseren tussen onze 2 doelsystemen (Exchange en SalesForce) en onze lokale database, anders kunnen we per ongeluk records dupliceren omdat de logica hier niet controleert of er al een nieuwe record bestaat op die doelsystemen.
4.8 Synchronisatie opgeslagen procedure
De tweede stap in onze oplossing is de synchronisatie tussen MS Exchange, SalesForce en onze tabel met lokale contactpersonen, zodat elk systeem dezelfde set contactpersonen heeft.
Om dat te doen gaan we een opgeslagen procedure schrijven. De logica van de procedure is om:
1. Het is erg belangrijk om de trigger die we hierboven hebben gemaakt uit te schakelen “omdat we de synchronisatie uitvoeren, moeten we de automatische replicatie die door de trigger wordt geïmplementeerd niet inschakelen”.”
2. Synchroniseer tussen SalesForce en mijn database
Het e-mailadres van een contactpersoon gebruiken als een overeenkomende sleutel; Is er een contactpersoon in SalesForce en niet in mijn tabel met lokale contactpersonen?
a. Ja: Contact toevoegen aan mijn lokale contactpersonen tabel
b. Nee: werk de voornaam en achternaam van de contactpersoon bij in mijn tabel met lokale contactpersonen
3. Synchroniseer tussen MS Exchange & mijn database
Het e-mailadres van een contactpersoon gebruiken als een overeenkomstige sleutel; Is er een contactpersoon op Exchange en niet in mijn tabel Lokale contactpersonen?
a. Ja: Contact toevoegen aan mijn lokale contactpersonen tabel
b. Nee: werk de voornaam en achternaam van de contactpersoon bij in mijn tabel met lokale contactpersonen
Op dit punt bevat mijn lokale tabel Contactpersonen alle contactpersonen uit zowel SalesForce als MS Exchange, naast de records die oorspronkelijk in de tabel stonden. Nu moeten we elk doelsysteem bijwerken met de contactpersonen van het andere doelsysteem en de lokale database
4. Update contacten op SalesForce (door contacten uit Exchange & mijn lokale tabel)
Het e-mailadres van een contactpersoon gebruiken als matchingsleutel; Staat er een contactpersoon in mijn tabel met lokale contactpersonen en niet in SalesForce?
a. Ja: Contact toevoegen aan SalesForce
b. Nee: Werk de voor- en achternaam van de contactpersoon bij in SalesForce
5. Update contacten op Exchange (door contacten uit SalesForce & mijn lokale tabel)
Het e-mailadres van een contactpersoon gebruiken als een overeenkomende sleutel; Staat er een contactpersoon in mijn tabel Lokale contacten en niet op Exchange?
a. Ja: Contact toevoegen aan MS Exchange
b. Nee: Werk de voor- en achternaam van de contactpersoon bij op Exchange.
6. Nu kunnen we de trigger inschakelen die we eerder hebben uitgeschakeld, zodat de automatische replicatie weer AAN is.
Het volgende SQL script zal de hierboven besproken logica implementeren
CREATE PROCEDURE [dbo].[uspInitSync]
-- Voeg hier de parameters voor de opgeslagen procedure toe
AS
BEGIN
-- SET NOCOUNT ON toegevoegd om te voorkomen dat extra result sets
-- interfereren met SELECT statements.
SET NOCOUNT ON;
--uitschakelen van trigger zodat, tijdens het invoegen vanuit SalesForce we niet eindigen in
--het opnieuw toevoegen van de contacten aan SalesForce
DISABLE TRIGGER [trgSyncContact] ON LocalContacts;
--gegevens van SalesForce samenvoegen in LocalDB
DECLARE @ImportedContacts Tabel(Voornaam nvarchar(max), Achternaam
nvarchar(max), E-mail varchar(255));
-contactpersonen bijwerken/invoegen in LocalDB met SalesForce als bron
MERGE LocalContacts AS doel
USING (SELECT voornaam, achternaam, e-mail FROM SalesForce_CBD...Contact)
ALS bron
ON (target.Email LIKE source.Email)
WANNEER GEVONDEN DAN
UPDATE SET FirstName = bron.FirstName, LastName =
bron.LastName
INDIEN NIET GEVONDEN DAN
INSERT (FirstName, LastName, Email)
VALUES (bron.voornaam, bron.achternaam, bron.e-mail)
OUTPUT ingevoegde.voornaam, ingevoegde.achternaam, ingevoegde.e-mail
INTO @ImportedContacts;
-geïntegreerde contacten in LocalDB van SalesForce weergeven
selecteer * uit @ImportedContacts;
-update/invoegen contacten in LocalDB met Exchange als bron
MERGE LocalContacts AS doel
USING (SELECT GivenName, SurName, Email1EmailAddress FROM
EXCHANGE365_CU7...Contact) AS source
ON (target.Email LIKE source.Email1EmailAddress)
WANNEER GEVONDEN DAN
UPDATE SET FirstName = bron.GivenName, LastName =
bron.SurName
INDIEN NIET GEVONDEN DAN
INSERT (FirstName, LastName, Email)
VALUES (bron.GivenName, bron.SurName,
bron.Email1EmailAddress)
OUTPUT ingevoegde.voornaam, ingevoegde.achternaam, ingevoegde.e-mail
INTO @ImportedContacts;
-ingebrachte contacten weergeven met behulp van tabelvariabele
selecteer * uit @ImportedContacts;
--kopieer nu alles naar SalesForce & Exchange zodat ze een exacte kopie hebben
-vanuit LocalDB nadat LocalDB gesynchroniseerd is met alle systemen
--Ik moet cursour en if gebruiken omdat het gebruik van insert....select....where not
--exists niet werkte met remote tabellen en ook merge niet werkt met
--remote tabellen
declareer @FirstName nvarchar(max)
@LastName nvarchar(max) opgeven
@Email varchar(255) verklaren
@SQL nvarchar(max) verklaren
DECLARE Contacts_cursor CURSOR FAST_FORWARD FOR
SELECT Voornaam, Achternaam, E-mail van LocalContacts;
OPEN Contacts_cursor
FETCH NEXT FROM Contacts_cursor INTO @FirstName, @LastName, @Email
TERWIJL @@FETCH_STATUS = 0
BEGIN
IF EXISTS (SELECT Email1EmailAddress FROM EXCHANGE365_CU7...Contact
WHERE Email1EmailAddress LIKE @Email)
EXEC ('UPDATE Contact SET GivenName = ?, SurName = ? WHERE
Email1EmailAddress = ?", @FirstName, @LastName, @Email)
in EXCHANGE365_CU7;
ELSE
EXEC ('Voeg in Contact (Gegevennaam, SurNaam,
Email1EmailAddress) values(?,?,?)", @FirstName,
@LastName, @Email) in EXCHANGE365_CU7;
IF EXISTS (SELECT Email FROM SalesForce_CBD...Contact WHERE Email LIKE
@Email)
Exec ('UPDATE Contact SET FirstName = ?, LastName = ? WHERE
Email = ?", @FirstName, @LastName, @Email) op
SalesForce_CBD;
ELSE
Exec ('Voeg in Contact (Voornaam, Achternaam, Email) waarden
(?,?,?)", @FirstName, @LastName, @Email) bij
SalesForce_CBD;
FETCH NEXT FROM Contacts_cursor INTO @FirstName, @LastName, @Email
END
CLOSE Contacts_cursor;
DEALLOCATE Contacts_cursor;
--activeer trigger zodat elke wijziging wordt weerspiegeld in online LOB
ENABLE TRIGGER [trgSyncContact] ON LocalContacts;
END
5. Oplossing in actie
De eerste stap is nu het uitvoeren van de synchronisatie stored procedure “uspInitSync” zoals hieronder getoond, de stored procedure werd zonder fouten uitgevoerd.

Figuur 34: de opgeslagen synchronisatieprocedure uitvoeren
We konden ook zien dat er nieuwe contacten waren toegevoegd aan MS Exchange

Figuur 35: Updates op MS Exchange
En nieuwe contacten toegevoegd aan SalesForce

Figuur 36: Updates op SalesForce
En onze lokale database tabel heeft nu nieuwe contacten

Figuur 37: Updates in de tabel Local Contacts
We kunnen de automatische replicatie ook in actie zien
1. Invoegen contact uit lokale database, verwijdert het uit SalesForce en Exchange

Figuur 38: Replicatie invoegen
2. Updaten van contact in lokale database werkt het bij in SalesForce en Exchange

Figuur 39: Update replicatie
3. Verwijderen van contactpersoon uit lokale database, verwijdert het uit SalesForce en Exchange

Figuur 40: Replicatie verwijderen
6. Opmerkingen over de oplossing
We hebben geprobeerd de logica van de oplossing zo eenvoudig mogelijk te houden, maar de logica kan verder worden verbeterd en aangepast voor betere prestaties en complexere functies.
Meer info over dit product vindt u op de productpagina van CB Linked Server for Enterprise Applications.
