Applies to: Dynamics 365 Contact Center—embedded, Dynamics 365 Contact Center—standalone, and Dynamics 365 Customer Service
Use solutions and the Configuration Migration tool to migrate the configurations from the source environment to the target environment for record routing.
For information on how to use solutions or the Configuration Migration tool, go to Overview of tools and apps used for ALM in Power Platform.
Prerequisites
The following prerequisites must be met:
- Make sure that the user who performs the channel configuration migration has the following privileges:
- To export solutions from the source environment.
- To import solutions to the destination environment.
- Read permission on all tables migrated from the source environment using the Configuration Migration tool.
- Full permission on all tables migrated to the destination environment using the Configuration Migration tool.
- In the source environment, if any table or column refers to the following, then make sure that they exist in the target environment before you proceed with the migration:
- Custom tables (entities)
- Columns (attributes)
- Relationships
- Choices (option sets)
- Lookup values
Record routing configuration migration steps
You must perform the steps in the order they're listed to migrate your configuration data successfully:
- Migrate configuration for session templates and notification templates.
- Migrate configuration for skill-based routing rulesets.
- Migrate configuration for new capacity profiles.
- Migrate configuration for queues.
- Migrate configuration for intake rules and workstreams.
Migrate configuration for session templates and notification templates
If the following components are available in your setup, add them to a solution, then export and import the solution into the target environment:
Add the following components to a solution and export it from the source environment:
- Agent Script (msdyn_productivityagentscripts)
- Agent Script Step (msdyn_productivityagentscriptsteps)
- Application Tab Template (msdyn_applicationtabtemplates)
- Notification Field (msdyn_notificationfields)
- Notification Template (msdyn_notificationtemplates)
- Macro (processes)
- Session Templates (msdyn_sessiontemplates)
- Template Parameter (msdyn_templateparameters)
Import the solution into the target environment.
For more information on solutions go to Solutions in Power Apps.
Migrate configuration for skill-based routing rulesets
If skill-based routing rulesets are used in your unified routing setup, perform the steps to migrate the corresponding configuration.
For sample schema to get all the required records, see Sample schema for skill-based routing configuration.
Use the Configuration Migration tool to create the schema and export data from the source organization for skill-based routing configuration.
- Entity display name: When you create the schema, select the entities in the sequence that's mentioned in the table.
- Attribute display name: We recommend that you select the attributes defined in the following table. You don't need to select the out-of-the-box system-defined attributes like Created By, Created On, Modified By, Modified On, and Owner. You can select custom attributes if necessary.
Important
You must manually create bookableresourcecharacteristictype (Global option set value) in the target organization, if necessary.
Entity display name (Logical name) Attribute display name (Logical name) Use FetchXML to filter records Characteristic (characteristic) - Characteristic Type (characteristictype)
- Characteristic (characteristicid)
- Description (description)
- Name (name)
Rating Model (ratingmodel) - Max Rating Value (maxratingvalue)
- Min Rating Value (minratingvalue)
- Name (name)
- Rating Model (ratingmodelid)
Rating Value (ratingvalue) - Name (name)
- Rating Model (ratingmodel)
- Rating Value (ratingvalueid)
- Value (value)
Generate the schema and save it.
Export the data and generate the compressed (zip) file.
Use the Configuration Migration tool, and select the option to import data into the target organization using the compressed file.
Migrate configuration for capacity profiles
If you have configured capacity profiles in your unified routing setup, perform the steps to migrate the corresponding configuration.
For sample schema to get all the required records, see Sample schema for capacity profiles.
Use the Configuration Migration tool to create the schema and export data in source organization for capacity profiles configuration.
- Entity display name: When you create the schema, select the entities in the same sequence as mentioned in the table.
- Attribute display name: We recommend that you select the attributes defined in the following table. You don't need to select the out-of-the-box system defined attributes like Created By, Created On, Modified By, Modified On, and Owner. You can select custom attributes, if necessary.
- Use FetchXML to filter records: For each entity, use the appropriate FetchXML query that's mentioned in the following table to get single, multiple, or all records based on your requirement. For single or multiple records, you need to use source organization to get the correct name in uiname and GUID in value. If required, you can use the ADVANCED FIND menu item to construct the appropriate FetchXML query.
- Configure import settings:
For the Decision contract entity, ensure that you select the Do not update existing records checkbox.
For every entity, including the Decision contract entity, ensure that you select the primary key field of the entity to be used as a field to compare on update. An example for Account is as follows.
Note
The sample query listed in the following table gets single or multiple records. The query has considered the entity as incident and task. Based on your requirements, ensure that you update the entity logical name in the FetchXML query.
The following table summarizes the entities and corresponding FetchXML samples.
Entity display name (Logical name) Attribute display name (Logical name) Use FetchXML to filter records Capacity Profile (msdyn_capacityprofile) - Block Assignment (msdyn_blockassignment)
- Capacity Profile (msdyn_capacityprofileid)
- Default Max Units (msdyn_defaultmaxunits) Name (msdyn_name)
- Reset Duration(msdyn_resetduration)
- Unique Name (msdyn_uniquename)
Sample 1: For all capacity profile records <fetch>
<entity name="msdyn_capacityprofile">
<filter type="and">
<condition attribute="ismanaged" operator="eq" value="0" />
</filter>
</entity>
</fetch>
Sample 2: For a single capacity profile record
<fetch>
<entity name="msdyn_capacityprofile">
<filter type="and">
<condition attribute="msdyn_capacityprofileid" operator="eq" uiname="Demo Capacity Profile 1" uitype="msdyn_capacityprofile" value="{F57CFE3C-14BD-D53E-F423-A1E7F9749DFB}" />
</filter>
</entity>
</fetch>
Sample 3: For multiple capacity profile records
<fetch>
<entity name="msdyn_capacityprofile">
<filter type="and">
<condition attribute="msdyn_capacityprofileid" operator="in">
<value uiname="Demo Capacity Profile 1" uitype="msdyn_capacityprofile">{F57CFE3C-14BD-D53E-F423-A1E7F9749DFB}</value>
<value uiname="Demo Capacity Profile 2" uitype="msdyn_capacityprofile">{D0B8ABFB-4A9F-0B1F-6FF4-8003E29A623C}</value>
</condition>
</filter>
</entity>
</fetch>
Generate the schema and save it.
Export the data and generate the compressed (zip) file.
Use the Configuration Migration tool, and select the option to import data into the target organization.
Migrate configuration for record queues
Use the Configuration Migration tool to create the schema and export data from the source organization for the record queues configuration.
- Entity display name: When you create the schema, select the entities in the same sequence as mentioned in the table.
- Attribute display name: We recommend that you select the attributes defined in the following table. You don't need to select the out-of-the-box system defined attributes like Created By, Created On, Modified By, Modified On, and Owner. You can select custom attributes, if necessary.
- Use FetchXML to filter records: For each entity, use the appropriate FetchXML query that's mentioned in the following table to get single, multiple, or all records based on your requirement. For single or multiple records, you need to use source organization to get the correct name in uiname and GUID in value. If required, you can use the ADVANCED FIND menu item to construct the appropriate FetchXML query.
- Configure import settings:
For the Decision contract entity, ensure that you select the Do not update existing records checkbox.
For every entity, including the Decision contract entity, ensure that you select the primary key field of the entity to be used as a field to compare on update. An example for Account is as follows.
Note
The sample query listed in the following table gets single or multiple records. The query has considered the entity as incident and task. Based on your requirements, ensure that you update the entity logical name in the FetchXML query.
If you're using the out-of-the-box assignment methods for queues, such as highest capacity and round robin, skip the following entities:
- Decision rule set
- Assignment configuration
- Assignment configuration step
The assignment rulesets must be available in the system before the Configuration Migration tool imports the selection criteria. Hence, you need to perform the following steps in the specified order to migrate configuration for record queues:
Important
- For every import of queue records, you must create new queue records or update existing queue records. Don't mix the actions in the same data import.
- When all records in the data.xml of the queue table are for creation, make sure that the following line is present in the schema.xml:
<field displayname="Queue type" name="msdyn_queuetype" type="optionsetvalue" customfield="true"/>
, and the corresponding data will also have the field for msdyn_queuetype. - When all records in the data.xml of queue table are for an update, ensure that you remove the following line in the schema.xml:
<field displayname="Queue type" name="msdyn_queuetype" type="optionsetvalue" customfield="true"/>
, and the corresponding data also won't have that field for msdyn_queuetype. - When the queue that you want to migrate has an overflow condition set, then you must export and import the decision ruleset first. The migration sequence should look as follows:
- Decision contract
- Decision ruleset
- Queue
- Assignment Configuration
- Assignment Configuration Step without selection criteria
- Operating Hour
- Overflow Action
- You can't migrate the Calendar item associated with the Operating Hour table. You'll need to set it correctly after you import the Operating Hour table into the target environment.
Step 1: Export and import rulesets without selection criteria
The following table summarizes the entities and corresponding FetchXML samples.
Entity display name (Logical name) | Attribute display name (Logical name) | Use FetchXML to filter records |
---|---|---|
Queue (queue) |
|
Sample 1: All queues for records Sample 2: Single queue for records Sample 3: Multiple queues for records |
Decision contract (msdyn_decisioncontract) |
|
Sample 1: Decision contract for all record queues Sample 2: Decision contract for a single record queue Sample 3: Decision contract for multiple record queues |
Decision ruleset without selection criteria (msdyn_decisionruleset) |
|
Sample 1: Decision ruleset for all record queues without selection criteria defined Sample 2: Decision ruleset for a single record queue without selection criteria defined Sample 3: Decision ruleset for multiple record queues without selection criteria defined |
Assignment Configuration (msdyn_assignmentconfiguration) |
|
Sample 1: Assignment configuration for all record queues Sample 2: Assignment configuration for a single record queue Sample 3: Assignment configuration for multiple record queues |
Assignment Configuration Step without selection criteria (msdyn_assignmentconfigurationstep) |
|
Sample 1: Assignment configuration step for all record queues without selection criteria defined Sample 2: Assignment configuration step for a single record queue without selection criteria defined Sample 3: Assignment configuration step for multiple record queues without selection criteria defined |
Operating Hour (msdyn_operatinghour) |
|
Sample 1: Operating Hours for all record queues Sample 2: Operating Hours for a single record queue Sample 3: Operating Hours for multiple record queues |
Overflow Action Config (msdyn_overflowactionconfig) |
|
Sample 1: Overflow Action Config filtered to specific records |
Perform the following steps to export and import the rulesets:
Generate the schema and save it.
Export the data and generate the compressed (.zip) file.
Extract the .zip file, open the data.xml file present in the extracted folder, and do the following:
In the source and target environments, run the following OData API call and note the GUID of
msdyn_decisioncontractid
.https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_assignmentoutput'
In the data.xml file, replace all the occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
In the source and target environments, run the following OData API call and note the GUID of
msdyn_decisioncontractid
.https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_selectionruleoutput'
In the data.xml file, replace all occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
In the source and target environments, run the following OData API call and note the GUID of msdyn_decisioncontractid.
https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_queueoverflowrulesetinput'
In the data.xml file, replace all the occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
In the source and target environment, run the following OData API call and note the GUID of msdyn_decisioncontractid.
https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_queueoverflowrulesetoutput'
In the data.xml file, replace all occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
Package the extracted content again.
Use the Configuration Migration tool, select the option to import data, and then select the compressed file.
Note
Set the Calendar Item associated with the Operating Hour table correctly after you import the Operating Hour table into the target environment.
For sample schema to get all the required records, go to Sample schema for record queues step 1.
Step 2: Export and import rulesets with selection criteria defined
The following table summarizes the entities and corresponding FetchXML samples.
Entity display name (Logical name) | Attribute display name (Logical name) | Use FetchXML to filter records |
---|---|---|
Decision ruleset with selection criteria (msdyn_decisionruleset) |
|
Sample 1: Decision ruleset for all record queues with selection criteria defined Sample 2: Decision ruleset for a single record queue with selection criteria defined Sample 3: Decision ruleset for multiple record queues with selection criteria defined |
Assignment Configuration Step with selection criteria (msdyn_assignmentconfigurationstep) |
|
Sample 1: Assignment configuration step for all record queues with selection criteria defined Sample 2: Assignment configuration step for a single record queue with selection criteria defined Sample 3: Assignment configuration step for multiple record queues with selection criteria defined |
Perform the following steps to export and import the rulesets:
Generate the schema and save it.
Export the data and generate the compressed (.zip) file.
Extract the .zip file, open the data.xml file present in the extracted folder, and do the following:
In the source and target environments, run the following OData API call and note the GUID of
msdyn_decisioncontractid
.https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_assignmentoutput'
In the data.xml file, replace all the occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
In the source and target environments, run the following OData API call and note the GUID of
msdyn_decisioncontractid
.https://<OrgURL>/api/data/v9.1/msdyn_decisioncontracts?$select=msdyn_decisioncontractid&$filter=msdyn_uniquename eq 'msdyn_selectionruleoutput'
In the data.xml file, replace all occurrences of the msdyn_decisioncontractid GUID in the source environment with the msdyn_decisioncontractid GUID of the target environment.
Package the extracted content again.
Use the Configuration Migration tool, select the option to import data, and then select the compressed file.
For sample schema to get all the required records, go to Sample schema for record queues step 2.
FetchXML for queues
<fetch>
<entity name="queue">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</entity>
</fetch>
<fetch>
<entity name="queue">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</entity>
</fetch>
<fetch>
<entity name="queue">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</entity>
</fetch>
FetchXML for decision contracts
Sample 1: Decision contracts for all queues
<fetch distinct="true">
<entity name="msdyn_decisioncontract">
<filter type="or">
<filter type="and">
<condition attribute="msdyn_queuetype" entityname="aw" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" entityname="aw" operator="eq" value="1" />
<condition attribute="queueid" entityname="aw" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
<filter type="and">
<condition attribute="msdyn_isomnichannelqueue" entityname="be" operator="eq" value="1" />
<condition attribute="msdyn_queuetype" entityname="be" operator="eq" value="192350001" />
<condition attribute="queueid" entityname="be" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
<filter type="and">
<condition attribute="msdyn_isomnichannelqueue" entityname="bm" operator="eq" value="1" />
<condition attribute="msdyn_queuetype" entityname="bm" operator="eq" value="192350001" />
<condition attribute="queueid" entityname="bm" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</filter>
<link-entity name="queue" from="msdyn_assignmentinputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="aw"></link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_inputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bb">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bc">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bd">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="be"></link-entity>
</link-entity>
</link-entity>
</link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_outputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bj">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bk">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bl">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="bm"></link-entity>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 2: Decision contracts for a single queue
<fetch distinct="true">
<entity name="msdyn_decisioncontract">
<filter type="or">
<filter type="and">
<condition attribute="queueid" entityname="aw" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
<filter type="and">
<condition attribute="queueid" entityname="be" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
<filter type="and">
<condition attribute="queueid" entityname="bm" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</filter>
<link-entity name="queue" from="msdyn_assignmentinputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="aw"></link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_inputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bb">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bc">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bd">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="be"></link-entity>
</link-entity>
</link-entity>
</link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_outputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bj">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bk">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bl">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="bm"></link-entity>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 3: Decision contracts for multiple queues
<fetch distinct="true">
<entity name="msdyn_decisioncontract">
<filter type="or">
<filter type="and">
<condition attribute="queueid" entityname="aw" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
<filter type="and">
<condition attribute="queueid" entityname="be" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
<filter type="and">
<condition attribute="queueid" entityname="bm" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</filter>
<link-entity name="queue" from="msdyn_assignmentinputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="aw"></link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_inputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bb">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bc">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bd">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="be"></link-entity>
</link-entity>
</link-entity>
</link-entity>
<link-entity name="msdyn_decisionruleset" from="msdyn_outputcontractid" to="msdyn_decisioncontractid" link-type="outer" alias="bj">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="outer" alias="bk">
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="outer" alias="bl">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="outer" alias="bm"></link-entity>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
FetchXML for decision rulesets for queues
Sample 1: Decision rulesets for all queues without selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 2: Decision rulesets for a single queue without selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 3: Decision rulesets for multiple queues without selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
FetchXML for assignment configurations
Sample 1: Assignment configurations for all queues
<fetch>
<entity name="msdyn_assignmentconfiguration">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="bi">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</link-entity>
</entity>
</fetch>
Sample 2: Assignment configurations for a single queue
<fetch>
<entity name="msdyn_assignmentconfiguration">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="bi">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</link-entity>
</entity>
</fetch>
Sample 3: Assignment configurations for multiple queues
<fetch>
<entity name="msdyn_assignmentconfiguration">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="bi">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</entity>
</fetch>
FetchXML for assignment configuration steps
Sample 1: Assignment configuration steps for all queues without selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 2: Assignment configuration steps for a single queue without selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 3: Assignment configuration steps for multiple queues without selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="ne" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</link-entity>
</entity>
FetchXML for decision rulesets for queues
Sample 1: Decision rulesets for all queues with selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 2: Decision rulesets for a single queue with selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 3: Decision rulesets for multiple queues with selection criteria
<fetch distinct="true">
<entity name="msdyn_decisionruleset">
<link-entity name="msdyn_assignmentconfigurationstep" from="msdyn_rulesetid" to="msdyn_decisionrulesetid" link-type="inner" alias="am">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="an">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="ao">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
FetchXML for assignment configuration steps
Sample 1: Assignment configuration steps for all queues with selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001" />
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1" />
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}" />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 2: Assignment configuration steps for a single queue with selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="queueid" operator="eq" uiname="Test Queue 1" uitype="queue" value="{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}" />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
Sample 3: Assignment configuration steps for multiple queues with selection criteria
<fetch>
<entity name="msdyn_assignmentconfigurationstep">
<filter>
<condition attribute="msdyn_type" operator="eq" value="192350001" />
</filter>
<link-entity name="msdyn_assignmentconfiguration" from="msdyn_assignmentconfigurationid" to="msdyn_assignmentconfigurationid" link-type="inner" alias="bq">
<link-entity name="queue" from="queueid" to="msdyn_queueid" link-type="inner" alias="br">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
FetchXML for operating hours
Sample 1: Operating hours for all queues
XMLCopy
<fetch>
<entity name="msdyn_operatinghour">
<link-entity name="queue" from="msdyn_operatinghourid" to="msdyn_operatinghourid" link-type="inner" alias="aa">
<filter type="and">
<condition attribute="msdyn_queuetype" operator="eq" value="192350001"/>
<condition attribute="msdyn_isomnichannelqueue" operator="eq" value="1"/>
<condition attribute="queueid" operator="ne" uiname="Default entity queue" uitype="queue" value="{5A4B76B0-DAB5-4717-9743-9490F2F822C6}"/>
</filter>
</link-entity>
</entity>
</fetch>
Sample 2: Operating hours for a single queue
XMLCopy
<fetch>
<entity name="msdyn_operatinghour">
<link-entity name="queue" from="msdyn_operatinghourid" to="msdyn_operatinghourid" link-type="inner" alias="ab">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</entity>
</fetch>
Sample 3: Operating hours for multiple queues
XMLCopy
<fetch>
<entity name="msdyn_operatinghour">
<link-entity name="queue" from="msdyn_operatinghourid" to="msdyn_operatinghourid" link-type="inner" alias="ab">
<filter type="and">
<condition attribute="queueid" operator="in">
<value uiname="Test Queue 1" uitype="queue">{A5ED5CAA-3A54-EC11-8F8F-000D3A1CBB9E}</value>
<value uiname="Test Queue 2" uitype="queue">{B2862B31-3B54-EC11-8F8F-000D3A1CBB9E}</value>
</condition>
</filter>
</link-entity>
</entity>
</fetch>
FetchXML for overflow action configurations
XMLCopy
<fetch>
<entity name="msdyn_overflowactionconfig">
<filter type="and">
<condition attribute="msdyn_overflowactionconfigid" operator="eq" uiname="QueueTransfer_caae99a1-dcc4-ed11-83ff-00224805c003 " uitype="msdyn_overflowactionconfig" value="{6D49F66F-68F3-ED11-8848-00224805C003}"/>
</filter>
</entity>
</fetch>
Migrate configuration for intake rules and record workstreams
Do the steps in the following sections in the order specified to migrate intake rules and record workstreams from the source environment to the destination environment.
Create a solution for record routing workstreams
- Create a solution to export configurations from the source environment for record routing workstreams.
- Add the required records to the solution using the Add existing button in the command bar.
- Select the Work Stream (msdyn_liveworkstream) table. When you add the Work Stream table, related records from the following tables are automatically added to the solution:
- Capacity Profile (msdyn_capacityprofile) - These records must be migrated using the Configuration Migration tool.
- Master Entity Routing Configuration (msdyn_masterentityroutingconfiguration).
- Decision Contract (msdyn_decisioncontract) for intake rules and record workstreams.
- Decision Rule Set (msdyn_decisionruleset) for intake rules and record workstreams.
- Routing Configuration (msdyn_routingconfiguration).
- Routing Configuration Step (msdyn_routingconfigurationstep).
- Ruleset Entity Mapping (msdyn_rulesetdependencymapping).
Add relationships
You must add routable object relationships based on the unique identifiers of routed records. These records are generated from entities that have been enabled for Unified Routing and require at least one Workstream to be configured such as msdyn_ocliveworkitem_email_msdyn_routableobjectid
and msdyn_ocliveworkitem_incident_msdyn_routableobjectid
.
- Navigate to the solution editor and select Add Existing
- Select Conversation tables.
- Make sure that Include all objects and Include table metadata options are cleared.
- Select Edit Object and search for
RoutableObjectId
- Select the required relationships based on the Workstream types that have been added to your solution.