Som jeg tidligere har beskrevet, i mine kommentarer til Opdateringspakke 7, er der sket nogle fundamentale ændringer omkring Outlook og MS CRM, herunder specielt omkring synkronisering. Dette indlæg handler om netop dette.
Læs evt. også indlægget Gentage synkronisering af slettede kontaktpersoner i Outlook...
Hvad er det nye?
Den største nyhed er, at der nu anvendes SQL Server Compact Edition, på klienterne, til håndtering af synkronisering mellem Outlook og MS CRM. Det er ikke selve dataene, der lagres i SQL Compact-databaserne, men alene synkroniseringsoplysninger.
Hvis man har installeret MS CRM til Outlook uden offline-adgang, lagres dataene i Outlook (MAPI).
Hvis man har installeret MS CRM til Outlook med offline-adgang, lagres dataene henholdsvis SQL Server Express (som er installeret på klienten) og i Outlook (MAPI).
Hvordan håndteres synkroniseringen?
Synkroniseringen håndteres forskelligt. Dette afhænger af hvor man har oprettet eller opdateret sine data, da dette jo kan foregå i såvel Outlook som i webbrugerfladen til MS CRM.
Synkronisering af data oprettet eller redigeret i Outlook
Hvis man f.eks. har oprettet en Kontaktperson i Outlook, som skal synkroniseres over i MS CRM, skal man huske at spore denne "Spor i CRM". Hvis man har redigeret f.eks. en Kontaktperson, som allerede er sporet i MS CRM skal man ikke gøre yderligere.
Synkroniseringen fra Outlook til MS CRM foregår på følgende måde:

I de enkelte trin foregår følgende:
- Man opretter eller redigerer f.eks. en Kontaktperson. Hvis denne ikke er sporet "Spor til CRM" skal dette gøres.
- MS CRM til Outlook identificerer oprettelsen eller ændringen af Kontaktpersonen og...
- ...opdaterer tabellerne OutlookSyncTable og IDMappingTable opdateres, så Outlook er opdateret med hvad der er synkroniseret.
- Når synkroniseringen igangsættes (manuelt eller automatisk).
- Synkroniseringsprocessen sørger for, at opdatere MS CRM, herunder også tabellen SyncEntry_<GUID>.
Synkronisering af data oprettet eller redigeret i MS CRM
Hvis man f.eks. har oprettet eller redigeret en Kontaktperson i MS CRM, som skal synkroniseres over i Outlook, skal man, som sådan intet gøre.
Synkroniseringen fra MS CRM til Outlook foregår på følgende måde:

I de enkelte trin foregår følgende:
- MS CRM til Outlook (synkroniseringsprocessen) kalder prepareSync() processen på MS CRM Serveren.
- Processen prepareSync() undersøger hvad der skal synkroniseres, herunder hvad der tidligere er synkroniseret og hvilke objekter (f.eks. Kontaktpersoner) der er oprettet eller opdateret siden sidste synkronisering. Der kigges bl.a. i tabellen SyncEntry_<GUID>, hvor GUID er klientens unikke synkroniseringsID.
- Processen prepareSync() returnerer liste med ændringer i MS CRM. Denne sammenlignes med tabellerne OutlookSyncTable og IDMappingTable, og ændringer i forhold til disse udgør den egentlige nettoliste over elementer der skal synkroniseres.
- Tabellerne OutlookSyncTable og IDMappingTable opdateres, så Outlook er opdateret med hvad der er synkroniseret.
- Processen postSync() kaldes med en liste over de elementer der skal synkroniseres, og bl.a. tabellen SyncEntry_<GUID> opdateres.
- Outlook opdateres med de elementer som enten er nye eller opdaterede i MS CRM
Information om SQL Server Compact-databaserne
SQL Server Compact-databaserne er på klienten, altså derpå hvor MS CRM til Outlook er installeret, og findes på følgende lokation:
- %AppData%\Microsoft\MSCRM\Client
Når man ikke har opsat MS CRM til Outllok med Offline-mulighed, så vil der eksisterer 2 databaser i mappen, nemlig:
- EmailCache.sdf: Håndterer E-mail som er sendt fra MS CRM via Outlook.
- OutlookSyncCache.sdf: Håndterer synkroniseringen af data mellem Outlook og MS CRM.
Databasen OutlookSyncCache.sdf indeholder følgende tabeller:

- EmailSyncTable: Håndterer synkronisering af E-mail.
- IdMappingTable: Holder styr på hvad samt status på det der er synkroniseret.
- OutlookSyncTable: Holder styr på bl.a. hvad der er slettet og derfor skal fjernes eller ikke synkroniseres.
Tabellen IdMappingTable indeholder følgende kolonner/felter:
| Kolonne |
Datatype |
| MapId |
Primary Key |
| CrmId |
uniqueidentifier |
| EntryId |
nvarchar (400) |
| ObjectType |
int |
| DeletedLocally |
bit |
| Linked |
bit |
| Visited |
bit |
| VerifiedTime |
datetime |
Kolonnen DeletedLocally indikerer om man har slettet et element, f.eks. en Kontaktperson, fra Outlook. Er dette tilfældet vil denne ikke blive synkroniseret igen, hvilket kan "drille" lidt hvis man gerne vil have elementer synkroniseret igen. Denne problemstilling har jeg lavet et særlig tillæg om, læs mere om at Gentage synkronisering af slettede kontaktpersoner i Outlook...
Tabellen OutlookSyncTable indeholder følgende kolonner/felter:
| Kolonne |
Datatype |
| ChangeId |
Primary Key |
| MapId |
Foreign Key |
| OutlookTimestamp |
datetime |
| OutlookChange |
int |
| CrmTimestamp |
datetime |
| CrmChange |
int |
Kolonnerne OutlookTimestamp og CrmTimestamp identificerer hvilke elementer der er blevet opdateret sidst, hvilket har indflydelse på synkroniseringen. Den seneste overskriver den tidligere.
Kolonnerne OutlookChange og CrmChange identificerer i hvilke programmer (Outlook eller MS CRM) dataene er blevet ændret.
Læs evt. mere i følgende (Engelsk): Outlook_Synchronization_in_MS_CRM_4.0.pdf (504,98 kb)