Synkronisering er blevet mere stabil, hurtigere og mere smidig med Opdateringspakke 7. I indlægget Sådan virker Outlook synkronisering efter Opdateringspakke 7 kan du læse hvordan de nye synkroniseringsmekanismer fungerer.
Dette indlæg handler om den problemstilling, der opstår hvis man sletter en kontaktperson, som er synkroniseret fra MS CRM til Outlook. Problemet består i, at slettede kontaktpersoner ikke, som udgangspunkt, vil blive synkroniseret igen, hvilket jo er ærgerligt hvis man er kommet til at slette kontaktpersonerne ved en fejl.
Et eksempel
I MS CRM er der oprettet 3 Kontaktpersoner:

De 3 Kontaktpersoner er synkroniseret over i Outlook:

Problemerne begynder...
I Outlook slettes nu 2 af de 3 Kontaktpersoner, så der kun er 1 Kontaktperson tilbage:

Hvis man, i Outlook, synkronisere igen (Benyt menuen CRM, Synkroniser med CRM), får man følgende meddelelse:

Meddelelsen indikerer, at 3 Kontaktpersoner er synkroniseret, men kun 1 Kontaktperson vises i Outlook.
Hvad er problemet?
Lad os kigge lidt på teknikken bagved synkroniseringen. I indlægget Sådan virker Outlook synkronisering efter Opdateringspakke 7 kan du læse hvordan de nye synkroniseringsmekanismer fungerer.
Der er to steder vi skal kigge nærmere på:
- I SQL Server Compact-databasen OutlookSyncCache.sdf, hvor vi skal have identificeret hvorfor de manglende Kontaktpersoner ikke synkroniseres.
- I <organisation>_MSCRM, hvor vi skal have identificeret nogle synkroniseringstabeller.
1. Synkroniseringstabellerne i databasen OutlookSyncCache.sdf
Databasen OutlookSyncCache.sdf finder du på klienten i mappen %AppData%\Microsoft\MSCRM\Client.
Da det er en SQL Server Compact Edition 3.0-database kan du benytte SQL Server 2008 Management Studio til at åbne databasen. Hvis du ikke allerede har denne kan du hente en gratis Express-udgave
Åbn derefter OutlookSyncCache.sdf.

Databasen indeholder følgende tabeller:

Opret en forespørgsel (Højreklik på øverste linje og vælg New Query).
Indtast følgende: select * from IdMappingTable
Klik på knappen Execute
Du vil nu se følgende resultat:

Ovenstående forespørgsel viser de 3 Kontaktpersoner, der er synkroniseret til Outlook.
Feltet Type indeholder ObjectTypeCode 2, hvilket er Kontaktpersoner.
Feltet IsDeletedLocally viser, at 2 af Kontaktpersonerne er slettet i Outlook (tallet 1, som er lig med True), og det er bl.a. derfor disse ikke synkroniseret til Outlook ved fremtidige synkroniseringer.
2. Identifikation af synkroniseringstabeller i <organisation>_MSCRM
Det er ikke nok at kigge på klientens OutlookSyncCache, vi skal også lige kigge på synkroniseringstabellerne i MS CRM-databasen <organisation>_MSCRM. Man kan identificerer synkroniseringstabellen på 2 måder - i Registreringsdatabasen eller MS CRM SQL Server:
Registreringsdatabasen
I Registreringsdatabasen kig under HKEY_CURRENT_USER\Software\Microsoft\MSCRMClient, og læg mærke til GUID'et. I dette tilfælde er det {B07B70C3-3D42-DF11-97CB-0003FF365955}.

MS CRM SQL Server
Åbn databasen <organisation>_MSCRM og opret evt. følgende forespørgsel (View):
SELECT dbo.SystemUserBase.FullName, dbo.Subscription.SyncEntryTableName, dbo.SubscriptionClients.SubscriptionId
FROM dbo.Subscription INNER JOIN
dbo.SubscriptionClients ON dbo.Subscription.SubscriptionId = dbo.SubscriptionClients.SubscriptionId INNER JOIN
dbo.SystemUserBase ON dbo.Subscription.SystemUserId = dbo.SystemUserBase.SystemUserId
Kørslen af forespørgslen giver følgende resultat:

Som det ses hedder synkroniseringstabellen SyncEntry_b07b70c33d42df1197cb0003ff365955, samme GUID fandt vi også i Registreringsdatabasen tidligere, dog uden bindestreger. Alle klienter, der er opsat til synkronisering (med eller uden offline-mulighed) har en SyncEntry_<GUID>-tabel.
Tabellen SyncEntry_b07b70c33d42df1197cb0003ff365955 indeholder følgende:

Indholdet er identisk med det vi tidligere fandt i Outlook's SQL Server Compact-database OutlookSyncCache i tabellen IdMappingTable.
Så skal Kontaktpersonerne gendannes...
Efterfølgende handler det om at få genskabt de 2 Kontaktpersoner i Outlook. Dette gøres på følgende måde:
- Slet de 2 registreringer, i SQL Server Compact-database OutlookSyncCache i tabellen IdMappingTable, som indeholder posterne hvor IsDeletedLocally er sat til 1. Dette gøres ved at:
- Oprette en oprette en forespørgsel (Højreklik på øverste linje og vælg New Query)
- Indtast følgende: delete from IdMappingTable where IsDeletedLocally = 1
- Klik på knappen Execute
- Slet alle registreringer i tabellen SyncEntry_b07b70c33d42df1197cb0003ff365955 (I databasen <organisation>_MSCRM). Dette kan evt. gøres med forespørgslen delete from [SyncEntry_b07b70c33d42df1197cb0003ff365955]
- I Outlook gennemføres en manuel synkronisering ved at vælge CRM, Synkroniser med CRM
De 2 slettede Kontaktpersoner skulle nu gerne være gendannet, således at Outlook nu indeholder alle 3 Kontaktpersoner igen.