How it Works:

The Server Side Synchronization Profiler installs several SDK Message Processing Steps that capture the properties of ExchangeSyncIdMapping records as they are created, updated, or deleted. These steps run on Post Operation for Create and Update, and on Pre Operation for Delete. Since these messages frequently occur in the platform, it is recommended that only a few mailboxes and ACT records be selected for profiling at a single time.

As seen in the source code, you will notice that the profiler will never throw an exception during execution. This is to prevent any disruption from occurring during the synchronization process and to improve the safety of the solution. Instead, all exceptions are caught and then logged in the Profiler Logs.

When the SDK Message Processing Steps are executed, the profiler (Profiler.cs) performs the following operations:

  • Determine if the incoming action is Create / Update / Delete
  • Determines the synchronizing user for the mapping
  • Determines the mailbox associated with the synchronizing user
  • Determines if there is an active profiler associated with the mailbox
    • If Filtering is enabled, the profiler checks the following:
      • Gets a list of the Profiler Filter records
      • If "Profile Orphaned Records" is selected, the profiler checks if the current mapping is related to a record that no longer exists in CRM, but still exists in Exchange (blank CRMID).
      • If "Profile Create Events" is selected, the profiler checks if the current mapping is related to an incoming create action in CRM
  • If the conditions are met, a Profiler Data record is created, which mirrors the properties and data types of the properties found in the ExchangeSyncIdMapping record
Deletion Handling:

Due to how ExchangeSyncIdMapping records are deleted, in order to profile records that have been deleted from CRM during sync (such as open activities that are deleted in Exchange), you must have Profile Orphaned Records selected in the filter criteria.

The reason for this is because the ExchangeSyncIdMapping record is not deleted synchronously with the parental ACT record. Instead, it is deleted in a subsequent synchronization cycle after CRM determines that the object is no longer being synchronized by the user. This causes the plugin's internal logic to not be able to determine if the previously synchronized object was being profiled by the user since the pointer reference is gone. In a future update, the deleted object reference will be added in the DeletedObjectId column, along with it's ObjectTypeCode.

Please note that deletions of ExchangeSyncIdMapping records for underlining ACTs that still exist in CRM work as expected. 

Entity Configuration:
  • Profiler
    • This entity stores the configuration of the specified mailbox and filtering options and is used as the primary user interface. The Profiler Results tab displays a grid of the Profiler Data records that are captured for the profiler during execution.
      • The Clear Results button can be used to delete the Profiler Data rows associated with the profiler.
      • The Records to Profile grid contains a list of the associated Profiler Filter records for which the profiler will capture.
      • The Debug Logging tab allows the user to enable debug logging for the profiler record, as well as provides a grid for the debug logs. As of this release, global logging is enabled by default and cannot be toggled.
  • Profiler Filter
    • This entity acts as a pointer between the Profiler records and the target ACT items a user wishes to profile. This configuration allows multiple profiler records to target the same ACT items through their own Profiler Filter record.
  • Profiler Data
    • This entity contains the data that was captured during profiling of qualified ExchangeSyncIdMapping events for which the Profiler is configured. The data represented here is a snapshot of the state of the ExchangeSyncIdMapping record as it was being processed in the specified mapping operation type.
      • The View Current Mapping button in the Profiler Data record allows the user to inspect the current state of the given ExchangeSyncIdMapping record for comparison purposes.
  • Profiler Logs
    • This entity stores debug logging information related to the execution of the profiler code. All exceptions related to the execution of profiler code are captured here without disrupting the core ExchangeSyncIdMapping operations. Please submit any errors that are discovered so they can be addressed.  

Last edited Apr 4, 2016 at 12:22 AM by DerekBraun, version 5