Solution Version Change Log
Triggered on solution import event via Dataverse. Compares incoming version to the last logged entry in a changelog table, writes the delta, and posts a Teams summary of what changed.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
Monitors the Dataverse solution table for version changes. When a solution is imported or updated, the flow compares the new version against the last recorded entry in a changelog table. If the version has changed (or this is the first import), it creates a changelog record in Dataverse and posts a summary notification to a Teams channel.
Use Case
Power Platform teams that manage multiple solutions across environments need visibility into when solutions are updated and by whom. This flow provides an automated audit trail of every solution version change, making it easy to track deployment history, identify unexpected imports, and maintain a changelog for compliance or governance purposes.
The flow is ideal for teams that:
- Track solution imports across Dev, UAT, and Prod environments
- Detect unexpected or unauthorized solution updates via Teams alerts
- Build a historical version timeline for any solution in the environment
- Support change management and audit requirements
Flow Architecture
When a Solution is Modified
Dataverse SubscribeWebhookTriggerSubscribes to the Dataverse `solution` entity (message type: Update, scope: Organization). Fires whenever any solution record is modified in the environment.
Init varTeamsGroupId
Initialize VariableReads `flowlibs_TeamsGroupId` env var into a string variable. Runs in parallel with the other init steps.
Init varTeamsChannelId
Initialize VariableReads `flowlibs_TeamsChannelId` env var into a string variable. Runs in parallel with the other init steps.
Init varSolutionUniqueName
Initialize VariableExtracts `uniquename` from the trigger output. Runs in parallel with the other init steps.
Init varNewVersion
Initialize VariableExtracts `version` from the trigger output. Runs in parallel with the other init steps.
Get Last Changelog Entry
Dataverse ListRecordsQueries `flowlibs_solutionchangelogs` filtered by solution unique name, ordered by `createdon desc`, top 1. Waits for Init varSolutionUniqueName and Init varNewVersion to complete.
Check If Version Changed
If conditionTrue if no previous entry exists OR the previous version differs from the new version. Waits for Init varTeamsGroupId, Init varTeamsChannelId, and Get Last Changelog Entry.
- Create Changelog Record — Dataverse CreateRecord — writes a new row to `flowlibs_solutionchangelogs` with solution name, previous version, new version, imported by, timestamp, and change summary.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_TeamsGroupId | String | <configure> | The Microsoft 365 Group ID for the Teams team that should receive change-log notifications. Find via Teams admin center or Graph API. |
| flowlibs_TeamsChannelId | String | <configure> | The channel ID within the team where notifications will be posted. Find via Teams > channel link > extract from URL. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Dataverse | shared_commondataserviceforapps | SubscribeWebhookTrigger (trigger) ListRecords CreateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Filter specific solutions
- Add a Condition after the trigger to check triggerOutputs()?['body/uniquename'] against a list of monitored solutions so you only log changes to the solutions you care about.
- Add email notification
- Add an Outlook SendEmailV2 action alongside the Teams post for email-based alerting in addition to (or instead of) the Teams channel message.
- Enrich with component count
- Query solutioncomponents filtered by solutionid to include a component count in the change summary, so the changelog captures how many artifacts shipped with each version.
- Cross-environment tracking
- Deploy to Dev, UAT, and Prod — entries flow to each environment's own local changelog table. Use Dataverse virtual tables or Power BI to aggregate across environments for a unified view.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Extract solution unique name from trigger
Used in Init varSolutionUniqueName to capture the modified solution's unique name.
EXPR.02Extract new version from trigger
Used in Init varNewVersion to capture the updated solution version string.
EXPR.03Last logged version for comparison
Used in the Condition and in Create Changelog Record to get the most recent logged version for delta comparison.
EXPR.04Resolve user who triggered the update
Used in Create Changelog Record to record the display name of the user who imported/modified the solution.
EXPR.05Changelog record primary name
Used in Create Changelog Record (Name column) to generate a human-readable primary name for the changelog entry.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.