On a client recently I helped deploy Microsoft D365 App for Outlook. Unfortunately, the behaviour requested by the client and the default behaviour of the Server Side synchronisation was not aligned.
This led to long discussions with Microsoft about some of the DB Org Settings we could utilise to tweak the way SSS works. As I researched these settings and discussed with my colleagues and during networking events, it became clear they remain unknown to most developers and administrators. If your deployment needed to tweak the settings, then people knew, but it is not common knowledge.
Further, there seemed to be very little documentation on what each setting does, apart from Microsoft’s own information here.
This is a series of posts explaining each of the Org settings, understanding how it affects your environment. Hopefully it will raise awareness of these settings.
Bear in mind that there a lot of settings that I can not find any information on or have no experience on. This is frustrating for me, but assume someone in the community will push me in the right direction and I will update the page when I find out.
How to Change Org DB Settings
Sean McNellis has an excellent tool on GitHub here which allows interaction with the org settings via a solution in your environment.
One the solution is imported, selecting the solutions gives you an interface where you can check the current status of each setting and change them.
To change the default, you need to select the Add hyperlink. This creates an XML file including your property which is uploaded to your system to change the setting.
Selecting the Edit link for the attribute now gives you a popup window, where you can edit the value
Also, Sean has included a copy of the Microsoft description with each setting.
On the right side of the grid is a link to to the KB article that mentions the setting, though normally it is just to KB 2691237 which is the central list of all Org settings.
ActivityRollupChildRecordLimit
Default Value | 50,000 |
Type | Number |
Description | Limit the number of total aggregated activities to rollup in the Activity Rollup Default:50,000. Used with: VisibleRecordThreshholdSwitchToMultiplelineTVF and TotalRecordThreshholdSwitchToMultiplelineTVF |
Min Version | 9.1.0.8031 |
Max Version |
This is a new one on me. Activities roll up. You put an email against a contact, the email is available on the account the contact is associated with. This applies to custom entities as well, if you configure the relationship correctly. Inogic has a great post on it here.
This setting must have come about to limit this as the numbers where getting too big for some. I have not got the data to do this one justice unfortunately.
AddressBookMaterializedViewsEnabled
Default Value | True |
Type | Boolean |
Description | Changes the way the CRM Client queries SQL CE |
Min Version | 5.0.9690.2903 |
Max Version |
The description doesnt tie up with the title, and when you google it, this setting revolves around a previous setting, Disable MAPI cache, that was around in CRM 2011 and helped improve performance. Not a lot more I can say.
AllowPromoteDuplicates
Duplicates in D365 are not unheard of, but when Outlook sync comes in, there are more chances to get duplicates. When a user syncs an Outlook Contact,
AllowSaveAsDraftAppointment
Default Value | False |
Type | Boolean |
Description | Setting value to true will provide the capability to create appointments in Dynamics 365 as “draft” without synchronizing with Exchange. Appointment form will have a “Save as Draft” command and a “Send” command, so that you can save, add details and update an appointment activity without synchronizing to Exchange. Default value is set to false to preserve existing behavior. |
Min Version | 9.0.2.2275 |
Max Version |
This flag opens up the possibility that you don’t always get a meeting correct the first time and allows you to save a draft.
Ulrik Carlsson aka @CRMChartGuy from eLogic solutions has a great article about this attribute.
The default behaviour is that users are not presented with a Save as Draft option for appointments, when a appointment is saved, if you are using SSS it will synchronise to Outlook and send out invites to the attendees as normal.
If you change AllowSaveAsDraftAppointment to true, the users get a different set of buttons.
Both Send and Send & Close buttons behave like the original Save and Save & Close. They will initiate a server side sync one the record is saved.
The new button Save as Draft will save the appointment but not send it to Outlook etc. It adds a [Draft] prefix to the appointment header and also a new field on the appointment, isdraft, is populated with true.
Weirdly, this field can not be added to a form. It just doesn’t appear in the field list. You can add it as view filter criteria, but you can’t display it as a column in a view.
AutoCreateContactOnPromote
Default Value | True |
Type | Boolean |
Description | Disables the ability of the organization to create contact records automatically when an email message is tracked in CRM. This option can also be disabled from the user settings area for each user. False - Disables the automatic creation of contacts. True - Enables the automatic creation of contacts. |
Min Version | 5.0.9688.583 |
Max Version |
By default, when a user sets regarding within the Outlook app, if any email address is in the To / CC / BCC etc that D365 does not know about, it creates it automatically.
Most of the time this is fine, but consider when your business process requires a lot more data fields to be populated in the contact, this default process will create a contact that hasn’t got what your business needs. Forcing the contact creation away from this automation may be required.
Users have an option under their personal settings which will mimic this settings, but this does it for everyone.
Setting the AutoCreateContactOnPromote to false removes the option from users and no contacts are created automatically when emails etc are synced.
AutoTrackSentFolderItems
Default Value | False |
Type | Boolean |
Description | Setting value to TRUE will result in Server Side Sync auto tracking of emails from Sent Items. This setting only applies if the mailbox is configured to track "All Email Messages" Default value is set to False to preserve the existing behavior. To enable functionality on the organization "AutoTrackSentFolderItems" should be set to True. |
Min Version | 8.2.2.0840 |
Max Version |
This setting works in hand with the selected option under “Select the email messages to track in D365” option under Personal Options.
By default, sent emails are ignored, only picking up emails that arrive to send to D365.
By marking the AutoTrackSentFolderItems to true, sent items will also be tracked, from the next sync, not retrospectively
BackgroundSendBatchSize
Default Value | 10 |
Type | Integer |
Description | Sets the number of email messages to download in one batch for the BackgroundSend API. |
Min Version | 5.0.9690.583 |
Max Version |
ClientDisableTrackingForReplyForwardEmails
Default Value | False |
Type | Boolean |
Description | Enables a user not to automatically track replies and forwarded email messages. Set this to "True" to disable tracking replies and forwarded email messages. NOTE: This setting only applies to Dynamics 365 for Outlook (not Dynamics 365 App for Outlook). |
Min Version | 5.0.9690.2903 |
Max Version |
When a user receives a reply to an email that has already been tracked, the reply will also be tracked by default. This is great for keeping the chains of emails all within D365. Unfortunately, this may lead to conversations being tracked that shouldn’t and give visibility to sensitive conversations - a manager receiving an email that was a complaint about a particular email that their report sent for example.
Whilst this is mostly a training exercise, it can be quite embarrassing and this setting stops that. It does mean that you could lose out on a part of a conversation and rely on the user to track a response separately.
This settings, as noted, only works with D365 for Outlook not the App for Outlook.
DisableClientUpdateNotification
Default Value | False |
Type | Boolean |
Description | Setting DisableClientUpdateNotification to true will disable the outlook client from checking for newer versions |
Min Version | 7.0.0000.3027 |
Max Version |
Only for the D365 for Outlook, will prevent the application checking for a new version. This will help if you are in a locked down environment and need the stability.
With the D365 App for Outlook, it is a constant deployment rolled out with other fixes by Microsoft.
DisableImplicitSharingOfCommunicationActivities
Default Value | False |
Type | Boolean |
Description | Changing this to "True" will disable implicit sharing of records to recipients that are added to existing activities. |
Min Version | 5.0.9690.2903 |
Max Version |
When an email, meeting, phone call etc. is created and an internal user is included in the recipients list, it shares the record with them. This allows the internal user to have visibility of the record within D365.
If your security model has an issue with this, then this implicit sharing can be removed.
Your model may restrict the visibility of activities depending on what record the activity is associated with in a team scenario. If the original recipient is no longer in the team, they should not have access to that information any longer. With the OOTB logic, this activity will still be visible.
This email will still be in the recipients Outlook, nothing changes to the visibility in exchange, it is just the visibility in D365.
DisableLookupMruOnOutlookOffline
Default Value | False |
Type | Boolean |
Description | LookupMRUItems in UserEntityUISettings can cause a large data volume when going online, setting this to true will stop MRU's from syncing back ONLINE |
Min Version | 6.1.0002.0106 |
Max Version |
This one is not obvious to me and there is no information online. I’ll update when I find anything out
DisableMapiCaching
Default Value | False |
Type | Boolean |
Description | When this value is set to "True," users can still pin the views. However, the query is sent to the CRM Server to retrieve the results instead of to the local cache to prevent performance issues. Note This value is not valid with CRM 2013. |
Min Version | 5.0.9690.2903 |
Max Version |
This was present to prevent server performance issues, typically seen with on-premise solutions, when results are retrieved from the cache of the server, rather than direct from the database. It is unclear if still needed.
DisableSmartMatching
Default Value | False |
Type | Boolean |
Description | Disables the smart matching functionality and relies on the tracking token on the incoming e-mails for email tracking. False - Enables smart matching. True - Disables smart matching. |
Min Version | 5.0.9688.583 |
Max Version |
Smart Matching is how Microsoft works out that the email you just sent in belongs to a conversation that you have already synced, hence it will sync that email when it comes in.
In System Settings, you have several options when it comes to matching. Correlation is the default, where it is using a conversation id on each email to match them. You can supplement this with a tracking token and/or smart matching.
Token is generally used for support scenarios, to ensure any replies to an email are tracked against the same case.
Smart matching does what it suggests, using keywords in the subject and an algorithm to determine if the email is linked to a previous conversation.
Using the DisableSmartMatching flag does the same as un-ticking the box on the system settings, where conversation id and tracking tokens are relied on.
DistinctPhysicalAndLogicalDeletesForExchangeSync
Default Value | False |
Type | Boolean |
Description | Server-Side synchronization needs a mechanism to distinguish between Logical and Physical deletes of entities in CRM False : No distinction between physical and logical deletes for exchange sync delete scenario True : Physical and logical deletes will be distinguished for exchange sync delete scenario |
Min Version | 8.2.2.0840 |
Max Version |
This is another where security takes over and users expectations can differ from the way Microsoft thinks it should work.
If a user has been invited to a meeting, and it is recorded in D365, a copy of that exists within D365 and Exchange. If, for whatever reason, the user loses access (reas access) to that meeting in D365, the default behaviour would be to delete the copy in Exchange. Makes sense, to keep those in sync.
With the DistinctPhysicalAndLogicalDeletesForExchangeSync set to true, lose of access to any activity does not mean that the activity is deleted in Exchange. Use this with DisableImplicitSharingOfCommunicationActivities to fully get control of activity access.
DoNotIgnoreInternalEmailToQueues
Default Value | Version 5.0.9690.1533 to 8.2.2.1300: False Version 8.2.2.1309 and higher: True |
Type | Boolean |
Description | If you disable the "Track email sent between CRM users as two activities" setting, email messages from a CRM user to a queue are not delivered. Additionally, if a workflow rule sends an email message to a queue, email messages that are sent by the workflow rule are not delivered. False - Internal email messages to queues will not be delivered. True - Internal email messages to queues will be delivered. |
Min Version | 5.0.9690.1533 |
Max Version |
This is used in combination with the Track emails sent between Dynamics 365 users as two activities available in the system settings
If you enable the Track as a separate option, normally any email from internal user to a queue mailbox will be ignored. This seems a weird consequence, but they have provided you with an override so that these internal mails are not ignored.
EnableAppointmentBroadcastingForOutlookSync
Default Value | 0 |
Type | Number |
Description | Setting for Appointment broadcasting for Outlook Synchronization |
Min Version | 7.0.1.121 |
Max Version |
I can’t find any information on this. Will update when I find out.
EnableCrmStatecodeOnOutlookCategory
Default Value | True |
Type | Boolean |
Description | Enables Statecode data on contact sync |
Min Version | 6.1.0.581 |
Max Version |
EnableSssItemLevelMonitoring
Default Value | False |
Type | Boolean |
Description | Setting value to True will enable a new dashboard accessible by users and administrators called Server-Side Synchronization Failures. This dashboard allows the owner of a mailbox to have information about all non-synched incoming/outgoing emails and also appointment, contact, and task (ACT) items. Information is provided for the reason items are not synchronized. Default value is set to False to preserve the existing behavior. You can use the ExchangeSyncIdMappingPersistenceTimeInDays setting to control how long the data for failed emails is retained. |
Min Version | 8.2.2.1661 |
Max Version |
There is a dashboard available to admin already called Server-Side Sync failures, without this setting. Not sure what this does, as the dashboard seems to be available regardless.
ExchangeSyncIdMappingPersistenceTimeInDays
Default Value | 3 |
Type | Int |
Description | The number of days for which the ExchangeSyncIdMappings are to be persisted for failed emails. This setting is used in relation to the EnableSssItemLevelMonitoring setting. It is not recommended to increase this value higher than 7 days as it can lead to the table growing very large. |
Min Version | 8.2.2.2059 |
Max Version |
This setting defines how many days of sync failures are kept, useful when you are troubleshooting, but table will get huge quickly, so only increase if you need to.
ExpireSubscriptionsInDays
Default Value | 90 |
Type | Number |
Description | Max number of days before deleting inactive Outlook client subscriptions. We recommend you keep this to the default unless you absolutely need to change it, be mindful of keeping the tracking info too long, or deleting it too soon. |
Min Version | 6.0.0.0 |
Max Version |
On creating my second post in this series I came across several configurations that were not documented in the KB article and hence were missed when I wrote this.
When you track an contact in Outlook, you are subscribing to changes made to those contacts in D365 so that they are mimicked in your Outlook. This is great, but each subscription is stored in a database record, hence impacting storage costs. There is a deletion service that works through the subscriptions and deletes these expired lines. after the value is reached, with an outlook Client refreshing it’s subcriptions as part of it’s sync routine.the
HideEmailAutoTrackOptions
Default Value | False |
Type | Boolean |
Description | Default value is false, if it's set to True: do not show the following track options in Personal Options (Email): 'All email messages', 'Email messages from D365 Leads, Contacts and Accounts', 'Email messages from D365 records that are email enabled' |
Min Version | 9.1.0.1639 |
Max Version |
This setting goes one further to the one below by stripping out “All email messages”, “Email messages from D365 Leads, Contact and Accounts” and “Email messages from D365 records taht are email enabled”, just leaving you with the two below.
HideTrackAllOption
Default Value | False |
Type | Boolean |
Description | Removes “All email messages” option from users’ Personal Options under Email tab Select the email messages to track in Microsoft Dynamics 365 area. False – "All email messages" option is shown in the dropdown. True – "All email messages" option is not shown in the dropdown. If a user already has "All email messages" selected, their synchronization option is not updated in DB. Administrators will need to update this value via SDK. |
Min Version | 9.0.2.264 |
Max Version |
Under personalisation settings for each user, they can decide to track all emails they receive from any source. Great for a shared mailbox or customer mailbox, but not for a normal user who receives spam and invites to cake sales etc.
The default here is Email messages in response to D365 mail, but to stop users filling your D365 instance, setting the HideTrackAllOption to true will remove that top option.
Any users that had this setting prior to it’s removal need to be updated manually or via the SDK.
IgnoreCopiedItemsInSSSForMailbox
Default Value | False |
Type | Boolean |
Description | Ignore creating duplicate for copied items for Server Side Sync |
Min Version | 9.1.0.11129 |
Max Version |
Normally, when an email or meeting or task is synced, it doesn’t matter where that content came from. If it appears new, it will be created new, even if it is a copy of another item. This will reduce the amount of synced items but may be a concern for your environment.
MailboxStatisticsPersistenceTimeInDays
Default Value | 3 |
Type | Number |
Description | If value is 0, dont store ANY MailboxStatistics Data, if the value is greater than zero then store that number of days statistics data. Max value arbitrarily chosen at 1 year, this generates at lot of data so 1 year should be plenty of time |
Min Version | 8.0.0.1088 |
Max Version |
The Mailbox statistics records how frequently a mailbox is accessed and synced. This way, the more active mailboxes are synced more regularly. A mailbox that is infrequently used will be checked less regularly.
On a high user system, with SSS on, it can get populated quickly, so 3 days will normally be appropriate.
OutlookClientEmailTaggerEnabled
Default Value | False |
Type | Boolean |
Description | here are 3 values for this Boolean setting - true, false, and NULL (which is the value when NOT set). True: Will override any and all client registry setting to True. False: Will override any and all client registry setting to False. NULL: If the setting is NULL the outlook clients will use whatever is in the registry of the client. TO SET THIS VALUE TO NULL YOU WILL NEED TO CLICK EDIT, THEN REMOVE THE VALUE TO HAVE IT DEFAULT TO NULL. |
Min Version | 7.0.1.121 |
Max Version |
OutlookSyncDataSubscriptionClientsBatchSize
Default Value | 100 |
Type | Number |
Description | This setting is used to determine how many record changes (deletes, inserts, and updates) to send back to a syncing client for each request. |
Min Version | 7.1.0.1059 |
Max Version |
OverrideTrackInCrmBehaviour
Default Value | 0 |
Type | Int |
Description | When this option is Enabled, the ‘Track in CRM’ button functions as the Set Regarding button in Dynamics 365 for Outlook. In Dynamics 365 App for Outlook, ‘Track without regarding’ command is not displayed, with Set Regarding as the only way to synchronize Outlook items to Dynamics 365. 0 - Normal behavior of the "Track in CRM" button not having to set a Regarding record in Dynamics 365 for Outlook. ‘Track without regarding’ command is displayed in Dynamics 365 App for Outlook. 1 - The ‘Track in CRM’ button functions as the ‘Set Regarding’ button, and makes you select a regarding record in Dynamics 365 for Outlook. In Dynamics 365 App for Outlook, ‘Track without regarding’ command is not displayed, with Set Regarding as the only way to synchronize Outlook items to Dynamics 365. NOTE: This setting applies to both Dynamics 365 for Outlook and Dynamics 365 App for Outlook. |
Min Version | 9.1.0.6200 |
Max Version |
Normally, a user can track an activity to D365 without associating with a record, the Set regarding. This could lead activities in your tenant not associated with a record, orphaned. Depending on your business requirements, disabling this feature could be required.
Normally, under the … under Not Tracked, the user has an option to Track without Regarding
Setting OverrideTrackInCrmBehaviour to 1 will override this behaviour, removing the ellipses button altogether. The user has to establish a link to an existing record to sync the email or activity.
OverrideV5SenderConflictResolution
Default Value | False |
Type | Boolean |
Description | When multiple records with the same email address exist in the Dynamics CRM Organization and email is automatically tracked, the email address is resolved to the record for the owner record that was created first. This option lets you override that functionality. False - E-mails are tracked to the first record created. True - E-mails are not tracked automatically if there are multiple records with the same email address. |
Min Version | 5.0.9690.2243 |
Max Version |
Michael Sulz has a good write up on this, here.
Normally, if there are 2 or more contacts with the same email address (data quality is always a problem, however much you take care of it, though data8 do a real good job of removing duplicates and improving your data) the contact chosen is the first contact owned by the syncing user, sorted by create date or the first created if that doesn’t match.
Setting this option to true will force the user to make a decision and not sync the email automatically.
RestrictIRMEmailItems
Default Value | False |
Type | Boolean |
Description | Setting value to TRUE will result in Server Side Sync NOT synchronizing ALL emails that are marked as IRM emails. Default value is set to False to preserve the existing behavior. To enable this restriction on the organization " RestrictIRMEmailItems " should be set to True. |
Min Version | 8.2.2.0840 |
Max Version |
Bhavesh Shastri has a great write up of this configuration here
Restricted messages, those that the sender has marked as any of the restricted types in Azure information Protection, may not be suitable to be included in your D365 system.
If you set his flag to true, the user will not be able to sync those that are protected and will be given an error message if they try to.
SecuritySettingForEmail
Default Value | False |
Type | Number |
Description | 1: Display a Warning Message And give an option to open - 2: Display a Warning Message and do not give an option to open 3: Do not display a Warning Message and do not give any option to open. This setting is NOT SUPPORTED IN CRM2013 as of build 809 |
Min Version | 5.0.9690.3731 6.1.0.581 |
Max Version |
The majority of emails that a user receives and hence sync to D365 contain HTML to some degree, whether it is simple formatting or full on marketing emails.
In all scenarios, the interface presents a stripped down version of the email, but formatting etc will be lost.
There is a risk when these are displayed in all their glory in D365, that parts of the email could be nefarious, including scripts etc that could include phishing or other attacks. Microsoft by default warns the user that this is the case, but allows the user to click through to the content, putting the decision in the users’ hands.
If you change the setting to 2, the link to the full content is removed
Changing the setting to 3 removes the message and always shows the full version of the email
SendEmailSynchronously
Default Value | 0 |
Type | Int |
Description | If you have a plugin registered on the email send flow, you should change this setting to "1." 0 - Email is sent asynchronously. 1 - Email is sent synchronously. |
Min Version | 5.0.9690.2720 |
Max Version |
Depending on your logic, you may interact by workflow when an email is sent via Outlook. This setting moves the send email to a synchronous operation rather than asynchronous, allowing a more immediate interaction with the email. This may have a performance impact on the user in Outlook.
SortEmailByReceivedOn
Default Value | False |
Type | Boolean |
Description | When the Activities tab of the social pane is show, the data ordered by the 'modifiedon' date in descending order, toggling this setting to True will enable the social pane to sort emails by RecievedOn Desc instead of modifiedon |
Min Version | 8.0.1.79 |
Max Version |
I am not sure that this is a problem any more, in Social pane in D365 we have a lot of options for searching, but back in the legacy UI this allowed you to change the email sorting from the date the email was edited or added to D365 to the date the email was received. This could be several days difference, so it could give a different perspective to the conversation.
TraceExchangeSyncData
Default Value | true |
Type | Boolean |
Description | Enables exchange sync tracing |
Min Version | 6.0.0.809 |
Max Version |
Logging of the sync data is essential for any troubleshooting, but it adds to the size of your database. With the separation of log and data in storage costs, I am not sure this should ever be turned off if you are using SSS.
TrackAppointmentsFromNonOrganizer
Default Value | True |
Type | Boolean |
Description | Enabled users to track appointments organized by another Dynamics 365 user via Dynamics 365 App for Outlook. False – Dynamics 365 App for Outlook and Server-Side Synchronization users cannot track Outlook appointments whose organizer is a Dynamics 365 user. True – Dynamics 365 App for Outlook and Server-Side Synchronization users can track Outlook appointments whose organizer is a Dynamics 365 user. |
Min Version | 9.1.0.0294 |
Max Version |
You can always track a meeting if it was sent from an external user and by default, you can track any appointment where the organiser is a D365 user. This setting prevents the user from tracking an appointment if it is not them organising it.
TrackCategorizedItems
Default Value | True |
Type | Boolean |
Description | Setting value to False will remove the category tracking flag and functionality. Default value is set to True to allow category tracking and tracking status visibility for users whom do not use Dynamics 365 for Outlook or Dynamics 365 App for Outlook. |
Min Version | 8.2.2.0840 |
Max Version |
Using Category based tracking is a great way to allow users to track multiple emails at once. In the App for Outlook, this is the only way.
With the OOTB behaviour, the user gets a new category added and is able to select multiple emails to sync. It also appears as a great indicator in Outlook that the activity is synced.
Setting the flag to false removes this category and ability.
Be warned on this, if you leave any item with the category on it after you have disabled this functionality, re-enabling the functionality will mean that these items will be synced. Also, this category doesn’t respect the fact you upgrade. An email with the category that was synced to an on premise version will create a duplicate if that user is moved to the online version and the originating email was migrated as part of the data migration from on-prem to online.
UseCrmOrganizerForEmptyExchangeOrganizer
Default Value | False |
Type | Boolean |
Description | Use the CRM Organizer of an Appointment if the Exchange Organizer doesn't exist. |
Min Version | 8.1.1.1020 |
Max Version |
I think this is more to do with rare cases when the sync doesn’t work correctly, but another one that I can not find any information for.
UseFilteringMethodOfSyncingMailboxOnlyForCorrelation
Default Value | False |
Type | Boolean |
Description | This is for controlling which users’ filtering settings will be used for correlation. False – filtering method of all recipients of the email will be checked to decide if any user/queue accepts email or not. True – filtering setting of user who synced email to CRM will be used. Filtering setting of other recipients of the emails will be ignored. |
Min Version | 8.2 |
Max Version |
Each user has a seperate filter list to decide which emails are synced to D365. These can be various settings on what that individual user requires.
The default for this setting, the standard OOTB behaviour, is false, where any user can sync this email if it matches their settings. True means that the user who created the email or synced it will be able to have the email included in the selection for the filter. It is in effect an additional filter for the user to only include emails I have created.
UsePlainTextForEmailTemplateBody
Default Value | False |
Type | Boolean |
Description | Changes the Email Template to use plain text where otherwise text with the following symbols would not appear <text>. |
Min Version | 5.0.9690.2720 |
Max Version |
This is one of the older settings, presumably when people had email clients that could not handle html formatted text.