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 u in staat bent om verbinding te maken met het doelsysteem (Exchange & SalesForce in ons scenario); gemakkelijkste 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 met SalesForce door de vereiste groepen en gebruikers aan te maken. Ik heb een gebruikersnaam aangemaakt genaamd "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 naar elk doelsysteem en ervoor zorgen dat ik succesvol 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 toestaan: om de dataprovider(s) - "externe gegevensbronnen" - te laten instantiëren als een in-process server - "in hetzelfde proces als MS SQL Server". We moeten dat doen om te voorkomen dat authenticatie-informatie tussen MS SQL Server en de provider wordt doorgegeven en om te kunnen werken met datatypes als varchar(max), nvarchar(max), varbinary(max), tekst, ntext of image). Zonder deze optie kunnen we bijvoorbeeld geen gegevens van het type afbeelding uit Exchange halen 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 queries uit te voeren om gegevens op te vragen bij externe providers die OLEDB gebruiken - laten we ze "Externe OLEDB gegevensbronnen”. We zullen dat in 3 stappen doen:
a. We moeten een nieuw Query venster openen door op de New Query knop te klikken zoals in Figuur 18 hieronder is weergegeven. Het maakt niet uit welke database actief is, want wat we gaan doen heeft invloed op de gehele MS SQL Server installatie en op elke database daarin. Zoals hieronder te zien is, heb ik "master" als de actieve/doel database
Figuur 18: MS SQL Server Query Analyzer
b. We moeten MS SQL Server opnieuw configureren zodat we de geavanceerde opties kunnen wijzigen/configureren. Daartoe gaan we een opgeslagen procedure genaamd "sp_configure" uitvoeren - het is een vooraf geïnstalleerde systeem opgeslagen procedure - en we gaan specifiek "show advanced options" - door deze optie in te stellen op 1. 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 u 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 genaamd "Ad hoc gedistribueerde zoekopdrachten". Standaard staat MS SQL Server de "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, krijgt u na het uitvoeren van "exec sp_configure 'Ad Hoc Distributed Queries', 1; reconfigure" een bericht 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. Aanbieder: moet zijn "Microsoft OLE DB Providers for ODBC Drivers", aangezien 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/toegang heeft en de gebruiker die CB gebruikt/toegang heeft. De gebruiker die MS SQL Server gebruikt, heet Local Login (in ons scenario is dat "sa") en de gebruiker die CB gebruikt/toegang heeft, 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 te tonen
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 in zoals we hebben afgesproken. Dat is wat ik hier gedaan heb 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" tabblad aan de linkerkant om het dialoogvenster in Figuur 25 hieronder te tonen 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" eigenschap, omdat we moeten toestaan dat onze opgeslagen procedures op afstand kunnen draaien
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 volgt SERVER.DATABASE.SCHEMA.TABLE en zoals je kon zien in Figuur 26 hierboven, is onze Server Exchange365_CU7, onze database is "zonder naam" ons schema is "zonder naam" en tenslotte 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 gaan de stappen volgen van sectie "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 uw Linked Server met succes moeten zijn geconfigureerd zoals hieronder wordt getoond.
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 in de lokale database tabel totdat we synchroniseren tussen onze 2 doelsystemen (Exchange en SalesForce) en onze lokale database, anders kunnen we per ongeluk dubbele records krijgen omdat de logica hier niet controleert of een nieuw record al bestond 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. Zeer belangrijk om de trigger die we hierboven hebben aangemaakt uit te schakelen "omdat we de synchronisatie doen, 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 overeenstemmende sleutel; Is er een contactpersoon in SalesForce en niet in mijn tabel Local Contacts?
a. Ja: Contact toevoegen aan mijn lokale contactpersonen tabel
b. Nee: Werk de voornaam en achternaam van een contactpersoon bij in mijn tabel met lokale contactpersonen
3. Synchroniseer tussen MS Exchange & mijn database
Gebruik het e-mailadres van een contactpersoon als een sleutel die overeenkomt; Is er een contactpersoon op Exchange en niet in mijn Local Contacts tabel?
a. Ja: Contact toevoegen aan mijn lokale contactpersonen tabel
b. Nee: Werk de voornaam en achternaam van een 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 een overeenstemmende sleutel; Is er een contactpersoon in mijn tabel Local Contacts en niet in SalesForce?
a. Ja: Contact toevoegen aan SalesForce
b. Nee: Werk de voornaam en achternaam van een 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 sleutel die overeenkomt; Is er een contactpersoon in mijn Local Contacts tabel en niet op Exchange?
a. Ja: Contact toevoegen aan MS Exchange
b. Nee: Werk de voornaam en achternaam van een 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 om de synchronisatie opgeslagen procedure "uspInitSync" uit te voeren, zoals hieronder getoond, de opgeslagen 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.