9.2 Dataverse Connector Triggers & Operational Filters

Key Takeaways

  • The flagship Dataverse trigger 'When a row is added, modified or deleted' supports granular Change types: Added, Modified, Deleted, Added or Modified, Added or Deleted, Modified or Deleted, and Added, Modified or Deleted.
  • Trigger Scope determines the organizational boundary for event interception: Organization (tenant-wide), Business Unit (same BU), Parent: Child business units (BU plus descendants), or User (owned records only).
  • The 'Select columns' property is vital for performance and preventing infinite trigger loops when a flow updates the same record that triggered it.
  • Filter Rows uses OData filter syntax (e.g., statuscode eq 1 and revenue gt 50000) to pre-filter events at the Dataverse database layer before a flow run is instantiated.
  • The 'Run as' property controls the security execution identity of the flow: Flow owner (default), Triggering user (calling context), or Modifying user/Record owner.
Last updated: August 2026

Dataverse Connector Triggers & Operational Filters

The Microsoft Dataverse connector provides the primary integration pipeline between Microsoft Dataverse and Power Automate cloud flows. Unlike generic polling connectors, the unified Dataverse connector integrates directly with the Dataverse Event Execution Pipeline via high-performance, asynchronous webhooks. For the PL-200: Microsoft Power Platform Functional Consultant exam, you must demonstrate mastery over trigger event types, organizational scope boundaries, OData query filters, schema attribute filtering, execution security contexts, and custom action triggers.


1. The Dataverse Trigger Architecture

The core trigger for Dataverse automation is When a row is added, modified or deleted. This trigger replaces legacy Common Data Service (CDS) and Dynamics 365 connectors, providing native support for solutions, connection references, and enterprise security models.

+-----------------------------------------------------------------------------+
|                   DATAVERSE EVENT PROCESSING PIPELINE                       |
|                                                                             |
|   [DATAVERSE DATABASE EVENT] (Create / Update / Delete)                     |
|                 |                                                           |
|                 v                                                           |
|   +---------------------------------------+                                 |
|   |           1. SCOPE FILTER             |  <-- Evaluates User / BU /      |
|   | Is record owner within target scope?  |      Parent-Child / Org scope   |
|   +---------------------------------------+                                 |
|                 | (Pass)                                                    |
|                 v                                                           |
|   +---------------------------------------+                                 |
|   |         2. SELECT COLUMNS             |  <-- Did any specified columns  |
|   | Were targeted attributes modified?    |      change? (Prevents loops!)  |
|   +---------------------------------------+                                 |
|                 | (Pass)                                                    |
|                 v                                                           |
|   +---------------------------------------+                                 |
|   |          3. FILTER ROWS               |  <-- Evaluates OData expression |
|   | Does record meet OData criteria?      |      (e.g., statuscode eq 1)    |
|   +---------------------------------------+                                 |
|                 | (Pass)                                                    |
|                 v                                                           |
|   +---------------------------------------+                                 |
|   |         4. TRIGGER CONDITIONS         |  <-- Evaluates WDL expressions  |
|   | Do advanced @settings expressions pass|      in trigger Settings tab    |
|   +---------------------------------------+                                 |
|                 | (Pass)                                                    |
|                 v                                                           |
|   [INSTANTIATE CLOUD FLOW RUN] (Under configured 'Run as' identity)         |
+-----------------------------------------------------------------------------+

Change Types

The Change type parameter determines which database lifecycle events activate the trigger:

  • Added: Fires when a new record is inserted (Create event).
  • Modified: Fires when an existing record is updated (Update event).
  • Deleted: Fires when an existing record is deleted (Delete event).
  • Added or Modified: Fires on both creation and subsequent updates (Upsert event).
  • Added or Deleted: Fires when records are inserted or removed.
  • Modified or Deleted: Fires on record updates or removals.
  • Added, Modified or Deleted: Universal trigger firing on all database state changes.

2. Trigger Scope Configuration

The Scope parameter defines the organizational boundary within the Dataverse business unit hierarchy where record modifications will be intercepted.

+-----------------------------------------------------------------------------+
|                        DATAVERSE TRIGGER SCOPES                             |
|                                                                             |
|   [ORGANIZATION]                ---> Triggers tenant-wide across ALL BUs    |
|                                                                             |
|   [PARENT: CHILD BUSINESS UNITS]---> Triggers in user's BU & ALL child BUs  |
|                                                                             |
|   [BUSINESS UNIT]               ---> Triggers ONLY in user's direct BU      |
|                                                                             |
|   [USER]                        ---> Triggers ONLY on records owned by      |
|                                      the flow owner / triggering user       |
+-----------------------------------------------------------------------------+

Scope Hierarchy & Security Boundaries

Scope OptionEvaluated Record OwnershipArchitectural Use Case
OrganizationAny record across the entire environment, regardless of owner or business unit.Global enterprise workflows (e.g., ERP synchronization, centralized compliance auditing, cross-department notifications).
Parent: Child business unitsRecords owned by users/teams in the flow runner's business unit OR any subordinate descendant business unit.Regional supervisor automations (e.g., an East Coast VP overseeing regional sales branches).
Business UnitRecords owned by users/teams within the exact same business unit as the flow runner.Department-isolated processes (e.g., HR onboarding workflows confined to a single branch).
UserRecords owned directly by the user identity executing the flow.Personal productivity automations and user-specific tasks.

[!CAUTION] Scope Mismatch Failures: If a flow is configured with Scope set to Business Unit or User, and a record is created by a user in a different business unit, the flow will NOT trigger, even if the flow owner has System Administrator privileges. Default to Organization scope for enterprise-wide background automations unless strict departmental isolation is required.


3. Operational Filtering: Select Columns & Filter Rows

High-volume Dataverse environments require precise operational filtering to optimize platform throughput, reduce API consumption, and prevent catastrophic infinite trigger loops.

Select Columns (Attribute-Level Trigger Filtering)

When a flow monitors the Modified or Added or Modified change type, Dataverse triggers by default whenever any column on the record is updated. This introduces two major risks:

  1. Unnecessary Executions: Updating an unrelated column (e.g., updating a phone number) triggers a flow meant only to process credit limit increases.
  2. Infinite Trigger Loops: If Flow A triggers on Account modification, and Action Step 3 updates the Account's LastProcessedDate column, the update action causes Dataverse to fire Flow A again, creating an infinite recursive execution loop.

To resolve this, populate the Select columns property with a comma-separated list of schema column names:

statuscode,creditlimit,telephone1,cr123_approvalstage

With Select columns configured, Dataverse fires the trigger only if one or more of the specified columns were modified during the transaction.

Filter Rows (Server-Side OData Query Filtering)

The Filter rows property evaluates standard OData v4 expressions at the Dataverse database layer before instantiating a cloud flow run. If the expression evaluates to false, Dataverse discards the event without consuming Power Automate run quota.

// Example 1: Active Accounts with Revenue exceeding 100,000
statecode eq 0 and revenue gt 100000

// Example 2: Specific Choice Column Value (Approved status)
statuscode eq 864500001

// Example 3: Text column starts with prefix and lookup is populated
startswith(accountnumber, 'CORP') and _primarycontactid_value ne null

// Example 4: Date comparison (Created on or after specific date)
createdon ge 2026-01-01T00:00:00Z

Common OData Operators for PL-200

OperatorMeaningExample Syntax
eqEqual tostatuscode eq 1
neNot equal tostatecode ne 1
gt / geGreater than / Greater than or equalrevenue ge 50000
lt / leLess than / Less than or equalcreditlimit lt 10000
and / or / notLogical conjunction / disjunction / negationstatuscode eq 1 and (revenue gt 100000 or creditlimit gt 50000)
nullNull check (Lookup columns use _columnname_value)_parentcustomerid_value ne null
startswithString begins with prefixstartswith(name, 'Contoso')
containsString contains substringcontains(emailaddress1, '@contoso.com')

Trigger Conditions (Settings Tab)

In addition to Filter Rows, makers can configure Trigger Conditions in the trigger's Settings > Trigger Conditions pane using Power Automate Workflow Definition Language (WDL) expressions:

@equals(triggerOutputs()?['body/statuscode'], 864500001)
@and(greater(triggerOutputs()?['body/revenue'], 50000), not(empty(triggerOutputs()?['body/emailaddress1'])))

All configured trigger condition lines must evaluate to true for the flow to execute.


4. Run-As Execution Identity & Security Context

When a Dataverse-triggered flow executes downstream actions (such as reading sensitive records or updating related tables), the permissions evaluated by Dataverse depend on the trigger's Run as configuration.

+-----------------------------------------------------------------------------+
|                     DATAVERSE 'RUN AS' EXECUTION IDENTITIES                 |
|                                                                             |
|   [FLOW OWNER (DEFAULT)]                                                    |
|   - Runs under the identity and security roles of the flow creator/owner    |
|   - Uniform execution regardless of who triggered the change in Dataverse   |
|   - Ideal for system-level integrations and automated data transformations  |
|                                                                             |
|   [TRIGGERING USER]                                                         |
|   - Impersonates the exact user who performed the database modification     |
|   - Actions respect that user's specific Dataverse security roles and depth |
|   - Write/Update actions tag the triggering user in 'Modified By' columns   |
|                                                                             |
|   [RECORD OWNER] / [MODIFYING USER]                                         |
|   - Impersonates the user assigned as the owner of the modified row         |
|   - Ideal for routing tasks and activities on behalf of account managers    |
+-----------------------------------------------------------------------------+

[!IMPORTANT] Security Implications of Triggering User: When Run as is set to Triggering user, if User A modifies a record that triggers a flow containing an action to read a restricted financial table, the flow will FAIL with an AccessDenied error if User A does not possess Read privileges on that financial table. Ensure security roles are appropriately assigned when using user impersonation.


5. The 'When an action is performed' Trigger

Beyond basic table row mutations, Microsoft Dataverse allows developers and functional consultants to define custom business operations called Custom Process Actions and Custom APIs. Cloud flows can intercept these invocations using the When an action is performed trigger.

+-----------------------------------------------------------------------------+
|                 'WHEN AN ACTION IS PERFORMED' ARCHITECTURE                  |
|                                                                             |
|   [DATAVERSE CUSTOM API / ACTION INVOCATION]                                |
|   (Called via JavaScript, C# Plug-in, Power Pages, or External REST API)    |
|                 |                                                           |
|                 v                                                           |
|   [TRIGGER: When an action is performed]                                    |
|   - Catalog: Core / Custom Business Domain                                  |
|   - Category: Sales, Service, or Custom Category                            |
|   - Table name: (Optional: Bound to Account/Contact or Unbound/Global)      |
|   - Action name: contoso_CalculateCreditRiskScore                           |
|                 |                                                           |
|                 v                                                           |
|   [ACCESS ACTION INPUT & OUTPUT PAYLOADS]                                   |
|   - Parses complex JSON parameters passed into the action                   |
|   - Executes downstream logic and returns calculated results                |
+-----------------------------------------------------------------------------+

Bound vs. Unbound Actions

  • Bound Actions: Tied to a specific Dataverse table (e.g., contoso_ApproveInvoice bound to Invoice). The trigger requires selecting the Table Name and provides the targeted row GUID (Target/accountid).
  • Unbound (Global) Actions: Not associated with any specific table (e.g., contoso_SendTenantBroadcast). The Table Name is set to (none), and the action accepts global parameters.
Test Your Knowledge

A functional consultant builds an automated cloud flow using the Dataverse trigger 'When a row is added, modified or deleted' on the 'Account' table with Change type set to 'Modified'. Inside the flow, an 'Update a row' action updates the Account's 'LastReviewDate' column with the current timestamp. During user acceptance testing, updating an account causes the flow to execute hundreds of times in a continuous loop until the platform throttles the API limit. How should the consultant reconfigure the flow to eliminate this recursive loop?

A
B
C
D
Test Your Knowledge

An enterprise corporation has a top-level Business Unit called 'Corporate HQ' and three regional child Business Units: 'North America', 'EMEA', and 'APAC'. A sales operations director assigned to 'Corporate HQ' requires an automated cloud flow to execute whenever an Opportunity record owned by any sales representative in 'Corporate HQ' or any of its subordinate regional business units is closed as Won ('statuscode eq 3'). Which Scope property should be configured on the Dataverse trigger?

A
B
C
D
Test Your Knowledge

A healthcare provider requires that when a clinical technician updates a patient chart in Dataverse, an automated cloud flow triggers to generate a diagnostic order. For strict regulatory compliance and auditability, the flow must execute using the exact security privileges of the technician who made the change in Dataverse, ensuring that users without appropriate security roles cannot create orders on restricted patient records. Which Dataverse trigger property should the consultant configure?

A
B
C
D
Test Your Knowledge

A solution architect creates a Dataverse Custom API named 'contoso_ProcessRefund' bound to the 'Invoice' table. The Custom API is invoked from JavaScript on a model-driven form command button when a customer requests a billing refund. A functional consultant must build a cloud flow that triggers whenever this Custom API is invoked, receiving the refund amount and approval code. Which trigger should the consultant use?

A
B
C
D