Gentage synkronisering af slettede kontaktpersoner i Outlook

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å:

  1. I SQL Server Compact-databasen OutlookSyncCache.sdf, hvor vi skal have identificeret hvorfor de manglende Kontaktpersoner ikke synkroniseres.
     
  2. 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:

  1. 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:
    1. Oprette en oprette en forespørgsel (Højreklik på øverste linje og vælg New Query)
    2. Indtast følgende: delete from IdMappingTable where IsDeletedLocally = 1
    3. Klik på knappen Execute
       
  2. Slet alle registreringer i tabellen SyncEntry_b07b70c33d42df1197cb0003ff365955 (I databasen <organisation>_MSCRM). Dette kan evt. gøres med forespørgslen delete from [SyncEntry_b07b70c33d42df1197cb0003ff365955]
     
  3. 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.

Om Henrik Jensen

Jeg har altid fingeren på pulsen når det drejer sig om Microsofts produkter & teknologier, og især når det handler om Microsoft Dynamics CRM.

Henrik Jensen

Jeg har arbejdet professionelt i IT-branchen mere end 16 års, deraf 12 år med CRM-systemer, og samtidig indehaver af mere end 30 Microsoft-certificeringer.

Jeg er ansat som Microsoft Dynamics CRM-arkitekt hos Logica.

Læs mere...

Downloads, værktøjer og installation

Downloade komponenter til MS CRM:
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Liste over Opdateringspakker (Rollups):
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Værktøjer til MS CRM 2011:
    • Liste med værktøjer til MS CRM 2011

Krav vedrørende installation:
    • Installation: Krav og opsætninger

Månedsliste

Forbehold

Alt hvad du læser på denne blog er alene udtryk for mine egne holdninger og meninger, og kan ikke henføres til andet end som så.

De løsninger jeg fremstiller på denne blog er ikke nødvendigvis testet i et driftsmiljø. Hvis du gør brug af mine løsninger er det på eget ansvar.