Skip to main content

Migrating to the new Microsoft Exchange Online connectivity

Perform the following steps to migrate to the new version of Microsoft Exchange Online connector.

On-prem environments

For on-prem environments, download the new connectivity package from the Omada Hub.

Remove the previous Exchange Online mappings

Before configuring the new Exchange Online connector, remove the previous mappings. Go to Queries and mappings. Locate and delete the following entries with the source set to Mailboxes or Mailbox access:

  • Online user mailboxes
  • Online shared mailboxes
  • Online mailbox access
  • Online send on behalf
Removing mappings

Create new Resource Assignment queries

  1. In the Queries and mappings view, create a new resource assignment query by clicking New.
  2. In the dialog that appears, select Resource assignment as the object type for the query. Click OK.
  3. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeUserMailbox
FilterType=="User mailbox"
DescriptionOnline user mailboxes assignments

Mappings:

DestinationOperatorSource
Resource Business keyExpressionstring.Format("<system>{0}</system><genericresource>{1}</genericresource>",BuiltIn.SystemShortName,RecipientTypeDetails)
Account - CBKLookupBusinessKey=ExternalDirectoryObjectID
Business keyExpressionType=="User mailbox"?"<exchangeguid>"+ExchangeGuid+"</exchangeguid>":null
PRIMARY_EMAILMapPrimarySmtpAddress
ADDITIONAL_EMAILSMapEmailAddresses
HIDEINADDRESSLISTMapHiddenFromAddressListsEnabled
ISSUEWARNINGQUOTAMapIssueWarningQuota
PROHIBITSENDQUOTAMapProhibitSendQuota
PROHIBITSENDRECEIVEQUOTAMapProhibitSendReceiveQuota
WEBMAILMapOWAEnabled
  1. (second query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeUserMailbox, RoomMailbox, EquipmentMailbox
FilterType=="Send on behalf"
DescriptionOnline user mailbox access assignments - send on behalf

Mappings:

DestinationOperatorSource
Resource Business keyExpressionstring.Format("<system>{0}</system><genericresource>sendonbehalfofmailboxaccess</genericresource>",BuiltIn.SystemShortName)
Account – CBKLookupBusinessKey=GrantSendOnBehalfTo
Target – CBKExpressionstring.Format("{0}_<exchangeguid>{1}</exchangeguid>", BuiltIn.SourceSystemID, ExchangeGuid)
Business keyExpressionstring.Format("<account>{0}</account><resource>{1}</resource><target>{2}</target>", GrantSendOnBehalfTo, Type, ExchangeGuid)
PRIMARY_EMAILMapPrimarySmtpAddress
IdentityMapIdentity
RecipientTypeDetailsMapRecipientTypeDetails
ExternalDirectoryObjectIDMapExternalDirectoryObjectID
GrantSendOnBehalfToMapGrantSendOnBehalfTo
MAILBOXREFExpressionstring.Format("{0}_<exchangeguid>{1}</exchangeguid>", BuiltIn.SourceSystemID, ExchangeGuid)
  1. (third query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeUserMailbox, RoomMailbox, EquipmentMailbox
FilterLinkedMasterAccount != null && LinkedMasterAccount != "NT AUTHORITY"
DescriptionOnline mailbox access assignments - Full Access and Send As

Mappings:

DestinationOperatorSource
Resource Business keyExpressionstring.Format("<system>{0}</system><genericresource>{1}</genericresource>",BuiltIn.SystemShortName, Type == "Full access" ? "fullmailboxaccess": "sendasmailboxaccess")
Account – CBKLookupDistinguishedName=LinkedMasterAccount
Target – CBKstring.Format("{0}_<exchangeguid>{1}</exchangeguid>", BuiltIn.SourceSystemID, ExchangeGuid)
Business keyExpressionstring.Format("<account>{0}</account><resource>{1}</resource><target>{2}</target>", LinkedMasterAccount, Type, ExchangeGuid)
LinkedMasterAccountMapLinkedMasterAccount
AccessTypeMapType
MAILBOXREFExpressionstring.Format("{0}_<exchangeguid>{1}</exchangeguid>", BuiltIn.SourceSystemID, ExchangeGuid)
  1. (fourth query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeDiscoveryMailbox, SchedulingMailbox, RoomMailbox, EquipmentMailbox
FilterIdentity != null && Type !="Full access" && Type !="Send as"&& Type !="Send on behalf"
DescriptionOnline mailboxes assignments - DiscoveryMailbox, SchedulingMailbox, RoomMailbox, EquipmentMailbox

Mappings:

DestinationOperatorSource
Resource Business keyExpressionstring.Format("<system>{0}</system><genericresource>{1}</genericresource>",BuiltIn.SystemShortName,RecipientTypeDetails)
Account – CBKLookupBusinessKey=ExternalDirectoryObjectID
Business keyExpressionType=="Usermailbox"?"<exchangeguid>"+ExchangeGuid+"</exchangeguid>":null
PRIMARY_EMAILMapPrimarySmtpAddress
ADDITIONAL_EMAILSMapEmailAddresses
HIDEINADDRESSLISTMapHiddenFromAddressListsEnabled
ISSUEWARNINGQUOTAMapIssueWarningQuota
PROHIBITSENDQUOTAMapProhibitSendQuota
PROHIBITSENDRECEIVEQUOTAMapProhibitSendReceiveQuota
WEBMAILMapOWAEnabled

Create new Resource queries

  1. In the Queries and mappings view, create a new resource query by clicking New.
  2. In the dialog that appears, select Resource as the object type for the query. Click OK.
  3. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeSharedMailbox
DistinctYes
DescriptionOnline SharedMailbox - FullAccess

Mappings:

DestinationOperatorSource
Business keyExpressionExchangeGuid + "_FullAccess"
Security resource business keyExpressionExchangeGuid + "_FullAccess"
NameDisplayName + "_FullAccess"
CategoryConstantPermission
TypeExpressionRecipientTypeDetails == "RoomMailbox" ? "Exchange Room Mailbox" : RecipientTypeDetails == "SharedMailbox" ? "Exchange Shared Mailbox" : RecipientTypeDetails == "EquipmentMailbox" ? "Exchange Equipment Mailbox" : null
Short NameExpressionDisplayName + "_FullAccess"
Logical keyExpressionstring.Format("<exchangeguid>{0}</exchangeguid>", DisplayName)
PrimarySmtpAddressMapPrimarySmtpAddress
RecipientTypeDetailsMapRecipientTypeDetails
PRIMARY_EMAILMapPrimarySmtpAddress
ADDITIONAL_EMAILSMapEmailAddresses
HIDEINADDRESSLISTMapHiddenFromAddressListsEnabled
ISSUEWARNINGQUOTAMapIssueWarningQuota
PROHIBITSENDQUOTAMapProhibitSendQuota
PROHIBITSENDRECEIVEQUOTAMapProhibitSendReceiveQuota
LINKEDMAILBOXDOMAINMapLinkedMasterAccount
WEBMAILMapWEBMAIL
IdentityMapIdentity
  1. (second query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeSharedMailbox
DistinctYes
DescriptionOnline SharedMailbox - SendAs

Mappings:

DestinationOperatorSource
Business keyExpressionExchangeGuid + "_SendAs"
Security resource business keyExpressionExchangeGuid + "_SendAs"
NameDisplayName + "_SendAs"
CategoryConstantPermission
TypeExpressionRecipientTypeDetails == "RoomMailbox" ? "Exchange Room Mailbox" : RecipientTypeDetails == "SharedMailbox" ? "Exchange Shared Mailbox" : RecipientTypeDetails == "EquipmentMailbox" ? "Exchange Equipment Mailbox" : null
Short NameExpressionDisplayName + "_SendAs"
Logical keyExpressionstring.Format("<exchangeguid>{0}_SendAs</exchangeguid>", DisplayName)
DescriptionExpressionstring.Format("<exchangeguid>{0}_SendAs</exchangeguid>", DisplayName)
PrimarySmtpAddressMapPrimarySmtpAddress
RecipientTypeDetailsMapRecipientTypeDetails
PrimarySmtpAddressMapPrimarySmtpAddress
RecipientTypeDetailsMapRecipientTypeDetails
PRIMARY_EMAILMapPrimarySmtpAddress
ADDITIONAL_EMAILSMapEmailAddresses
HIDEINADDRESSLISTMapHiddenFromAddressListsEnabled
ISSUEWARNINGQUOTAMapIssueWarningQuota
PROHIBITSENDQUOTAMapProhibitSendQuota
PROHIBITSENDRECEIVEQUOTAMapProhibitSendReceiveQuota
LINKEDMAILBOXDOMAINMapLinkedMasterAccount
WEBMAILMapWEBMAIL
IdentityMapIdentity
  1. (third query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailboxes
Mailbox subtypeSharedMailbox
DistinctYes
DescriptionOnline SharedMailbox - SendOnBehalf

Mappings:

DestinationOperatorSource
Business keyExpressionExchangeGuid + "_SendOnBehalf"
Security resource business keyExpressionExchangeGuid + "_SendOnBehalf"
NameDisplayName + "_SendOnBehalf"
CategoryConstantPermission
TypeExpressionRecipientTypeDetails == "RoomMailbox" ? "Exchange Room Mailbox" : RecipientTypeDetails == "SharedMailbox" ? "Exchange Shared Mailbox" : RecipientTypeDetails == "EquipmentMailbox" ? "Exchange Equipment Mailbox" : null
Short NameExpressionDisplayName + "_SendOnBehalf"
Logical keyExpressionstring.Format("<exchangeguid>{0}_SendOnBehalf</exchangeguid>", DisplayName)
DescriptionExpressionstring.Format("<exchangeguid>{0}_SendOnBehalf</exchangeguid>", DisplayName)
PrimarySmtpAddressMapPrimarySmtpAddress
RecipientTypeDetailsMapRecipientTypeDetails
PrimarySmtpAddressMapPrimarySmtpAddress
RecipientTypeDetailsMapRecipientTypeDetails
PRIMARY_EMAILMapPrimarySmtpAddress
ADDITIONAL_EMAILSMapEmailAddresses
HIDEINADDRESSLISTMapHiddenFromAddressListsEnabled
ISSUEWARNINGQUOTAMapIssueWarningQuota
PROHIBITSENDQUOTAMapProhibitSendQuota
PROHIBITSENDRECEIVEQUOTAMapProhibitSendReceiveQuota
LINKEDMAILBOXDOMAINMapLinkedMasterAccount
WEBMAILMapWEBMAIL
IdentityMapIdentity

Create new Resource Assignment queries

  1. In the Queries and mappings view, create a new resource assignment query by clicking New.
  2. In the dialog that appears, select Resource assignment as the object type for the query. Click OK.
  3. Use the following configuration:

Parameters:

ParameterValue
SourceMailbox access
Mailbox subtypeSharedMailbox
FilterLinkedMasterAccount != null && LinkedMasterAccount != "NT AUTHORITY" && Type == "Full access"
DescriptionOnline Shared mailbox access - Full Access

Mappings:

DestinationOperatorSource
Resource Business keyExpressionExchangeGuid + "_FullAccess"
Account - CBKLookupBusinessKey=Identity
Business keyExpressionstring.Format("<account>{0}</account><resource>{1}</resource><target>{2}</target>", LinkedMasterAccount, Type, ExchangeGuid)
LinkedMasterAccountMapLinkedMasterAccount
AccessTypeMapType
  1. (second query) Create a new query using steps 1 and 2. Use the following configuration:

Parameters:

ParameterValue
SourceMailbox access
Mailbox subtypeSharedMailbox
FilterLinkedMasterAccount != null && LinkedMasterAccount != "NT AUTHORITY" && Type == "Send as"
DescriptionOnline Shared mailbox access - Send as

Mappings:

DestinationOperatorSource
Resource Business keyExpressionExchangeGuid + "_SendAs"
Account - CBKLookupBusinessKey=Identity
Business keyExpressionstring.Format("<account>{0}</account><resource>{1}</resource><target>{2}</target>", LinkedMasterAccount, Type, ExchangeGuid)
LinkedMasterAccountMapLinkedMasterAccount
AccessTypeMapType
  1. (third query) Create a new query using steps 1 and 2. Use the following configuration:
ParameterValue
SourceMailboxes
Mailbox subtypeSharedMailbox
FilterType=="Send on behalf"
DescriptionResource Assignment - SharedMailbox, EquipmentMailbox, RoomMailbox - SendOnBehalf
  • Mappings:
DestinationOperatorSource
Resource Business keyExpressionExchangeGuid + "_SendOnBehalf"
Account - CBKLookupBusinessKey=GrantSendOnBehalfTo
Business keyExpressionstring.Format("<account>{0}</account><resource>{1}</resource><target>{2}</target>", GrantSendOnBehalfTo, Type, ExchangeGuid)
PRIMARY_EMAILMapPrimarySmtpAddress
IdentityMapIdentity
RecipientTypeDetailsMapRecipientTypeDetails
ExternalDirectoryObjectIDMapExternalDirectoryObjectID
GrantSendOnBehalfToMapGrantSendOnBehalfTo

Edit the Distribution Groups Resources query

  1. In the Queries and mappings view, select the query with Source = Distribution groups. Click Edit.

    Distribution groups - resource query configuration
  2. In the editor, update the content to match the configuration provided for the new Exchange Online connector:

Parameters:

ParameterValue
SourceDistribution groups
DistinctYes
FilterType=="DistributionGroups" && DistributionGroupIsDirSynced == "False" && !(Convert.ToString(DistributionGroupType).Contains("SecurityEnabled"))
DescriptionDistribution Groups

Mappings:

DestinationOperatorSource
Business keyMapDistributionGroupGuid
Security resource business keyMapDistributionGroupGuid
NameMapDistributionGroupName
CategoryConstantDistribution Group
TypeConstantExchange Distribution Group
Display nameMapDistributionGroupDisplayName
Short nameMapDistributionGroupName
Logical keyExpression!string.IsNullOrEmpty(DistributionGroupCustomAttribute1) ? DistributionGroupCustomAttribute1 : DistributionGroupGuid
Distinguished NameMapDistributionGroupDistinguishedName
DistributionGroupTypeMapDistributionGroupType
DistributionGroupExternalDirectoryObjectIdMapDistributionGroupExternalDirectoryObjectId
DistributionGroupIsDirSyncedMapDistributionGroupIsDirSynced

Edit the Distribution Resource Assignments query

  1. In the Queries and mappings view, select the query named Distribution groups. Click Edit.

    Distribution groups - query edit
  2. In the editor, update the content to match the configuration provided for the new Exchange Online connector:

Parameters:

ParameterValue
SourceDistribution groups
DistinctYes
FilterType=="DistributionGroupMembers" && MemberRecipientTypeDetails == "UserMailbox" && DistributionGroupIsDirSynced == "False" && !(Convert.ToString(DistributionGroupType).Contains("SecurityEnabled"))
DescriptionOnline distribution groups members

Mappings:

DestinationOperatorSource
Resource business keyMapDistributionGroupGuid
Account - CBKLookupBusinessKey=MemberExternalDirectoryObjectId
DescriptionMapMemberRecipientTypeDetails
MemberExternalDirectoryObjectIdMapMemberExternalDirectoryObjectId

Queries and mappings - import prerequisites

Before starting the import, create an event definition to populate the Prevent Self-Service field of the Shared Mailbox resources.

  1. In Omada Identity, go to Setup > Administration > Process configuration > Event definitions. Click New. Enter the following details:1. - In Omada Identity, go to Setup > Administration > Process configuration > Event definitions. Click New. Enter the following details:

    • Name: Exchange Online - Prevent self-service
    • Event is triggered when: Select the A new object is created checkbox
    • Triggers on objects of type: Resources
  2. Click Apply.

  3. At the bottom of the screen, click New to create a new Execute code method action.

  4. Select Modify object. Use the following configuration:

    Distribution groups - query edit
  5. Click OK.

  6. Click Filter.

  7. Create 3 new filters:

  • Left side: Resource Type

  • Right side (reference): Exchange Shared Mailbox

    Filter

  • Left side: System

  • Right side(reference): Choose the name of your Exchange Online System

    Filter

  • Left side: Name

  • Right side (value): Shared mailbox

    Filter
  1. Click Close and OK.
  2. Run the import.

Provisioning - task mappings

  1. Open and edit the MailboxAccess task mapping:

    Filter
  2. In the Task Mappings screen, locate the row MailboxAccess.

  3. Select the MailboxAccess row checkbox (it should be the first in the list). Click Edit.

  4. In the configuration window, adjust the following settings:

DestinationOperatorSource
Object IdMapObjectId
Object typeConstantMailboxAccess
OperationMapOperation
IdentityMapROPE_AccountName
mailboxPermissionExpressionROPE_Resource.ToUpper()
userMailboxGuidMapROPE_ATTR_MAILBOXREF
  1. Go back to the Task mappings screen. Locate the DistributionGroup row.
  2. Select the DistributionGroup row checkbox. Click Edit.
  3. In the configuration window, adjust the following settings:
DestinationOperatorSource
Object IdMapObjectId
Object typeConstantDistributionGroup
OperationMapOperation
IdentityExpressionOperation == "Create" || Operation == "CreateIfNotExists" ? RLM_NAME : RLM_ODWBUSIKEY.Substring(RLM_ODWBUSIKEY.IndexOf("_") + 1, RLM_ODWBUSIKEY.LastIndexOf("<") - RLM_ODWBUSIKEY.IndexOf("_") - 1)
NameMapRLM_NAME
DisplayNameMapRLM_NAME
TypeConstantDistribution
bundledAttributesExpressionstring.Format("CustomAttribute1={0}", RLM_ODWLOGICKEY)
  1. Go back to the Task mappings screen. Locate the DistributionGroupAssignment row.
  2. Select the DistributionGroupAssignment row checkbox. Click Edit.
  3. In the configuration window, adjust the following settings:
DestinationOperatorSource
Object IdMapObjectId
Object typeConstantDistributionGroupAssignment
OperationMapOperation
IdentityMapROPE_DistinguisedName
distributionGroupGuidExpressionROPE_ResourceCBK.Substring(ROPE_ResourceCBK.IndexOf("_") + 1, ROPE_ResourceCBK.LastIndexOf("<") - ROPE_ResourceCBK.IndexOf("_") - 1)