ELM Integration — Provisioning Hooks¶
This document describes how the Cross-Solution Integration layer connects to Environment Lifecycle Management (ELM) to automatically initialize governance solutions when new environments are provisioned.
Overview¶
When ELM provisions a new Power Platform environment, the integration layer automatically:
- Detects the ProvisioningCompleted event via Dataverse trigger
- Extracts environment metadata (ID, name, URL, zone, security group)
- Registers the environment in ACV's
fsi_environmentregistrytable - Logs the initialization action back to ELM's
fsi_provisioninglog - Notifies administrators via Teams
This closes the lifecycle gap where new environments existed but were unknown to governance solutions until their next scheduled scan.
Trigger Mechanism¶
Event Source¶
The ELM-SolutionInitializer flow triggers on new records in fsi_provisioninglog where:
This event is written by ELM's Main Provisioning flow as the final step after all creation, configuration, and security group binding steps complete.
Data Available from ELM¶
| Field | Source | Description |
|---|---|---|
fsi_environmentid |
fsi_environmentrequest |
Power Platform environment GUID |
fsi_environmentname |
fsi_environmentrequest |
Display name (DEPT-Purpose-TYPE) |
fsi_environmenturl |
fsi_environmentrequest |
Dataverse URL |
fsi_zone |
fsi_environmentrequest |
Zone classification (1/2/3) |
fsi_securitygroupid |
fsi_environmentrequest |
Entra security group (Zone 2/3) |
fsi_requestnumber |
fsi_environmentrequest |
ELM request reference |
fsi_environmenttype |
fsi_environmentrequest |
Sandbox/Production/Developer |
Cascade Contract¶
Phase 1 (v1.0.0) — ACV Registration Only¶
On ProvisioningCompleted, the integration layer:
| Downstream Solution | Action | Data Written |
|---|---|---|
| ACV | Create fsi_environmentregistry record |
name, environmentId, zone, status=Active, environmentType, environmentUrl, discoveredOn, notes |
ACV idempotency: If fsi_environmentid already exists in fsi_environmentregistry, the flow updates the existing record's zone and status instead of creating a duplicate.
Phase 2 (v1.1.0+) — Extended Cascade¶
Future integration could cascade to additional solutions:
| Downstream Solution | Action | Data | Status |
|---|---|---|---|
| AAM | Trigger initial access scan | environmentId, zone | Planned |
| CMM | Register for moderation monitoring | environmentId, zone | Planned |
| FUS | Register for file upload monitoring | environmentId, zone | Planned |
| SSC | No action (tenant-level) | — | N/A |
Rationale for Phase 1 scope: AAM, CMM, and FUS naturally discover environments during their daily scans. ACV is the exception because it maintains a persistent environment registry that other solutions don't. Registering in ACV supports inclusion of the new environment in the first daily scan.
PowerShell Alternative¶
For environments where Power Automate is not available, use Register-ProvisionedEnvironment.ps1:
.\Register-ProvisionedEnvironment.ps1 `
-DataverseUrl "https://org.crm.dynamics.com" `
-TenantId "tenant-guid" `
-EnvironmentId "env-guid" `
-EnvironmentName "TRADING-AgentOps-PROD" `
-EnvironmentUrl "https://trading-agentops.crm.dynamics.com" `
-Zone 3 `
-EnvironmentType 1 `
-Interactive
Logging¶
The integration flow logs its actions back to ELM's fsi_provisioninglog table:
| Field | Value |
|---|---|
fsi_name |
INT-Init-{environmentName} |
fsi_action |
11 (BaselineConfigApplied — reused for integration init) |
fsi_actiondetails |
JSON with action, acvRegistered, zone, environmentId |
fsi_actor |
CrossSolutionIntegration |
fsi_actortype |
3 (System) |
fsi_success |
true/false |
ELM Integration Guide v2.0.0 — February 2026