Skip to content

Config & Reference Data Migration

Not everything a project needs in a target environment travels inside a solution. This chapter covers the data and configuration that is not solution-aware, or only partially so, and therefore needs an explicit migration step rather than relying on solution import alone.

What is and isn't solution-aware

Artifact Solution-aware? How it moves between environments
Tables, columns, forms, views, processes Yes Solution import.
Environment variable definitions Yes Solution import.
Environment variable values No Set per environment; see Env Variables & Connection References.
Connection reference definitions Yes Solution import.
Connection reference connections No (user-specific) Re-assigned per environment, per user.
Security roles, teams Yes Solution import.
Team templates, queues, calendars, SLAs, routing rules, bulk delete jobs, document templates, Outlook templates, user roles No dgtp export / dgtp import.
Business/reference data (option set seed data, configuration tables) No dgtp export / dgtp import, or a dedicated data migration tool for larger volumes.

dgtp export / dgtp import

DGT-ALM-120 — For the non-solution-aware Dataverse configuration objects listed above, use the matching dgtp export/dgtp import command pair rather than recreating them by hand in each environment:

dgtp export teamtemplates --filedir ./config/teamtemplates
dgtp export queues --filedir ./config/queues
dgtp export calendars --filedir ./config/calendars
dgtp export slaconfigs --filedir ./config/sla
dgtp export routingruleconfigs --filedir ./config/routing
dgtp export documenttemplates --filedir ./config/doctemplates
dgtp export outlooktemplates --filedir ./config/outlooktemplates
dgtp export bulkdeletes --filedir ./config/bulkdeletes
dgtp export userroles --filedir ./config/userroles
dgtp import teamtemplates --filedir ./config/teamtemplates
# ...same pattern for each importer, plus:
dgtp import secureconfigs --filedir ./config/secureconfigs

Treat the exported files the same way as the unpacked solution: commit them to source control under config/, review changes in pull requests, and run the corresponding import as a deployment step for environments that need that configuration — not necessarily every environment needs every config object, so scope the import step per target rather than running the full set blindly everywhere.

secureconfigs is import-only

There is no dgtp export secureconfigs — secure configuration values are written, not read back, by design. Maintain the source values outside Dataverse (a secret store or an encrypted file outside source control) and import them explicitly per environment.

Larger reference/business data sets

For bulk reference data beyond what the commands above cover (e.g. seeding a large lookup table, migrating legacy records), use a dedicated data migration tool (Configuration Migration Tool, or a custom import) rather than scripting it through dgtp, which is not designed for high-volume record migration. Document the chosen tool and its mapping files alongside the project's other ALM scripts.

Where this fits in the pipeline

Config/reference data migration is typically a post-deployment task, run after the solution import has completed against the target environment — see Pre- & Post-Deployment Tasks. On a project using Power Platform Pipelines, this is a natural candidate for a gated extension flow rather than a manual step a release manager has to remember.