Sync appointments bidirectionally with Exchange
Two-way sync between Dime.Scheduler and resource Outlook calendars. Plan in either system; the other follows. The rule engine decides which appointments reach Outlook, and the resource filters keep personal calendar items off the planning board.
Before you start
This is the longest recipe in the book, and most of the time goes on the Microsoft side rather than on Dime.Scheduler. The connectorConnectorAn integration that links Dime.Scheduler to a back-office system, routing data in and scheduling decisions back out. runs on Microsoft Graph, which means an Entra ID app registration with the right permissions and consent. Line that up with whoever owns your tenant before you begin, because it is the step most likely to stall waiting on somebody else.
Know the default before you configure anything: every appointmentAppointmentA task scheduled to a resource for a specific period - the scheduled instance you see on the planning board. assigned to a synced resourceResourceAn entity that can carry out work - a person, vehicle, tool, or room - that you schedule on the planning board. ends up in that person's Outlook calendar. That is rarely what anyone wants. Temporary appointments and placeholders add no value in a calendar and clutter it. The rule engine in step 5 is what narrows it, so treat that step as required rather than optional.
1. Understand the two directions
The Exchange connector is genuinely bidirectionalBidirectional synchronizationTwo-way data flow between Dime.Scheduler and a back-office system: work comes in, scheduling decisions go back out., and it is two mechanisms rather than one:
- Outbound: something listens for planning boardPlanning boardThe main graphical scheduling surface where dispatchers drag tasks onto resources across a timeline. changes and pushes them into Outlook.
- Inbound: Microsoft notifies the connector when a calendar changes, and the connector adjusts the planning to match.
They fail independently. When one direction works and the other does not, this is the split to reason about.
2. Register the Entra ID app
Registering the app is how your tenant decides exactly which permissions an external application gets. Everything downstream depends on it, and a permissions gap here surfaces much later as a sync that silently does nothing.
3. Install and configure the connector
Follow installation and configuration. The settings page is split by direction, and the two directions are switched on separately. The app registration's credentials on the General tab are enough for the outbound direction. The inbound direction stays off until you turn on Enable two-way sync on the Exchange → Dime.Scheduler tab, which is also where the sync window and the default busy-status and sensitivity filters live.
Save before you click Test: it checks the saved credentials, not what is typed. A passing test proves the credentials, not the Graph permissions, so a sync that does nothing after a green test points back to step 2.
4. Enable the resources
There is no connector account to create. Whether a resource takes part is decided on their resource record, in the Exchange section of the edit dialog, and the two directions have separate switches there. Exchange Integration Enabled is the administrator's switch for the outbound direction. Exchange Integration Enabled (from Exchange) is the resource's consent for the inbound one, narrowed by the Show asShow asThe Outlook free/busy status of a calendar event: Free, Tentative, Busy, Out of office and so on. The Exchange settings pick which statuses are allowed back into the planning. and SensitivitySensitivityThe Outlook sensitivity level of an event: Normal, Personal, Private or Confidential. Together with show as, it filters which Outlook events reach the planning board. filters (the "Show as" field and the "Private" toggle in Outlook). A resource with the first switch on and the second off syncs one way only, which is a legitimate setup rather than a fault.
Whether resources may manage those filters themselves is your call, made with Allow users to manage preferences on the configuration page. Switched on, each resource sets their own on the preferences page, which finds their resource record by e-mail address, so a user whose account carries a different address sees nothing to manage. Either way the fields on the resource record are the source of truth, and an administrator can always set or correct them from the resource dialog. That is the place to check when one person's calendar behaves differently from everyone else's.
5. Tune the rule engine
The rule engine decides which appointments are allowed through to Outlook. It governs the outbound direction only; what comes back is decided by the resource filters in step 4. A rule set takes effect as soon as it is saved, with nothing to restart.
Rules are built on the Rules page. Each rule is a flat list of conditions chained with AND or OR, on properties of the appointment, the task behind it, and the job behind that task. The JSON Output view shows what is stored but is read-only, so the builder is the only way to author. An appointment has to pass every rule to be sent, so keep one rule per concern and write each Error message so that it names the test: that message is what tells you why a held appointment never reached Outlook. Anything that needs parentheses to mix AND and OR is a sign to split it into two rules.
Start restrictive. It is far easier to widen a rule after planners ask for more than to explain why private calendars filled with placeholder appointments.
6. Verify both directions separately
Test outbound and inbound as two separate exercises, because passing one says nothing about the other:
- Plan an appointment in Dime.Scheduler and confirm it appears in the resource's Outlook calendar.
- Change something in Outlook and confirm the planning follows.
Then test an appointment your rules should exclude and confirm it does not reach Outlook. A rule engine that passes everything looks identical to a correctly configured one until the day it does not.
See bidirectional sync for the full behavior.
If something does not arrive
The Exchange logs and the Exchange tab of the errors page are the two places to look for the outbound direction. For the inbound one, the deltas page shows what the connector actually received from each resource's mailbox and over which window, which settles whether Microsoft ever sent the change. A change outside the sync window is never seen at all, however relevant it is, and that is usually the missing piece when a sync appears to skip an appointment. Sync changes made in Exchange on the configuration page forces a pull when you do not want to wait for the next scheduled one.
Related
- Connect Business Central for the back-office side.
- Categories to keep board colors aligned with Outlook categories.