About the series

This series will introduce you to two major areas related to Outlook Synchronization in Microsoft Dynamics CRM for Outlook:

Concepts & Rules

Troubleshooting

 

Introduction

In order to further understand the Outlook Synchronization, let’s look at some synchronization scenarios of the Outlook Synchronization. 

In this article, we will review the synchronization flow when an item (ACT – Appointment, Contact, Task) is tracked in Outlook and how the changes are processed by the Outlook client and Dynamics CRM.

 

Track an item in Outlook (ACT)

Synchronization flow:

(1) The user tracks a contact record in Outlook.

(2) The track process is synchronous for non-e-mail objects.

This means that the track request is transmitted immediately to the server when the user clicks the Track button from the explorer, or when the user clicks Track and then ‘Save and Close’ in the inspector.

As part of the initial SDK create request, the MAPI properties of the Outlook item are retrieved by the add-in and passed to the CRM platform over the organization web service.

The location of the MAPI store depends on whether the user has enabled Exchange Cached Mode (OST or Exchange server).

(3) As an item is marked for synchronization, entries are added to the OutlookSyncTable and the IDMappingTable.

(4) When the server receives this request, the platform will perform a series of validations before the request is fulfilled and a response is generated. This includes:

    • Checking the user’s security privilege to ensure that the user has the appropriate permissions to create the requested object type. 
    • Running duplicate detection, if applicable for the entity type.
    • Invoking internal or 3rd party synchronous plugins, if applicable.
    • Creation of the requested record, which would be performed as an insert on the appropriate table. 
    • Inserting a row into the user’s SyncEntry table for the newly created record.
    • Create response (CRM record’s GUID).

Note: If any of the above actions on the server cannot be completed, the track process will fail.

 

(5) Create Response is sent back to the client, containing the CRM record’s GUID.

(6) When an Outlook object is manually tracked, several user-defined fields are created in the Outlook object to complete the track process.

 

Troubleshooting sample

Let’s show a sample of how to use the troubleshooting tools (article Dynamics CRM Outlook client: Simple list of Troubleshooting Tools) considering this synchronization scenario: track an item in Outlook (ACT).

 

Steps:

(1) Navigate to CRM server, open the server side tools and clean up old traces:

Platform traces (CRMDiagTool)

(2) Still on the CRM server, open the SQL Server Management Studio (SSMS) and prepare the queries:    

select contactid,fullname,SubscriptionId

from ContactBase

order by CreatedOn desc

                               

select SubscriptionId, MachineName,LastSyncStartedOn, CompletedSyncStartedOn, SubscriptionType, SyncEntryTableName

from subscription

where systemuserid in (select SystemUserId from systemuserbase where DomainName = '<domain>\<user>')

 

select * from SyncEntry_<SubscriptionID>

where objectid = '<ContactId>'

               

Note:

    • SyncEntry_<SubscriptionID> = SyncEntryTableName from query 2.
    • <ContactId> = Contactid from query 1.

 

(3) Navigate to client machine, open the client side tools and clean up old traces:

Fiddler (enable decrypt HTTPS traffic, if necessary)

               

(4) Still on the client machine, open the SQL CE Toolbox tool > OutlookSyncCache.sdf database file and prepare the queries:

SELECT * FROM [IdMappingTable]; 

SELECT * FROM [OutlookSyncTable];

               

(5) Start the collections (server-side):

Platform traces (CRMDiagTool)

               

(6) Start the collections (client-side)

Fiddler (F12)

               

(7) Create a new contact record in Outlook and track it

(8) After the tracking process stop all collections

(9) Review the server-side collections:

(a) Open Platform Traces through Notepad++:

    • Search for "message 'Create' for 'contact'
    • Follow the Thread number
    • Looking for the topics, showing the calls:

Privileges

Duplicate detection (i.e. HasDuplicatesPlugin Status)

Plug-ins (i.e. AuditCreateUpdatePlugin)

Creation (i.e. insert into)

SyncEntry

Response XML (latest call for thread)

                                               

(b) Go to SSMS and run the queries, reviewing the outcomes

               

(10) Review the client-side collections:

(a) Review the Fiddler traces, looking for the Create Request/Response (Inspectors > XML)

(b) Go to SQL CE Toolbox and run the queries, reviewing the outcomes

               

(11) Open the record and the User-defined fields (Design This Form button):

(a) Review the main fields, such as crmid, crmEntryId and crmLinkState

               

(12) Open MFCMAPI tool and review the user-defined fields as well:

(a) Select EntryId (idMappingTable) and localize Entry ID

(b) Display the details

 

References

Outlook Synchronization in Microsoft Dynamics CRM 

CRM for Outlook Client Synchronization Blog Series Part 1: What happens when you track an item in Outlook 

CRM for Outlook Client Synchronization Blog Series Part 2: What happens when you track an item in Outlook 

Diagnostics Tool for Microsoft Dynamics CRM 2011/2013/2015 

Fiddler 

SQL Server Compact & SQLite Toolbox 

MFCMAPI