Tip #1459: How to bypass Dataverse plug-ins and flows in Power Automate actions

When you need to insert, update, or delete a large number of records in Dataverse, synchronous plug-ins can get in the way. Asynchronous plug-ins and Power Automate flows are triggered independently (out of process) but can be overwhelming for the system and can be throttled down. Did you know you can bypass either? Did you know you can do it in Power Automate?

Dataverse operations in Power Automate are usually done using the connector. But as you probably already know, you can send direct requests to the Web API using either HTTP with Entra ID or HTTP with Entra ID (preauthorized). For example, this is how a contact can be created:

The image displays a properties panel from a Microsoft Power Automate flow, specifically for an action designed to create a contact via a web API. The panel has several sections including "Parameters", "Settings", "Code View", "Testing", and "About". The "Method" is set to "POST". Under "URL of the Request", there is a placeholder URL for a Dynamics CRM entity set for contacts. The "Advanced parameters" dropdown is partially visible, indicating more options are available. The "Body of the Request" section contains a JSON payload with "firstname" set to "Nancy" and "lastname" set to "Davolio".

The magic sauce is in the headers that you can set under Advanced parameters. The following are available bypass options and bypass options in preview:

MSCRM.BypassCustomPluginExecutiontrueBypass synchronous plug-ins.
MSCRM.SuppressCallbackRegistrationExpanderJobtrueBypass all Power Automate flows triggered by the operation. No special privilege is required 😳.
CustomSync, CustomAsync
Bypass either synchronous plug-ins, asynchronous plug-ins, or both. Note: flows are not bypassed using this option.
MSCRM.BypassBusinessLogicExecutionStepIdsList of steps guidsBypass specified registered plug-in steps.

Additional privilege prvBypassCustomPlugins is required for all settings except SuppressCallbackRegistrationExpanderJob. As one would expect, core operations and operations published by Microsoft are not bypassed.

The image shows an updated properties panel from a Microsoft Power Automate flow, where an action to create a contact via a web API is configured. The panel includes "Parameters", "Settings", "Code View", "Testing", and "About" tabs. The method is set to "POST", and the URL for the request is provided, pointing to a Dynamics CRM contacts entity set, although the URL includes a placeholder domain. In the "Advanced parameters" section, the "Headers" subsection has been revealed, showing an entry for "MSCRM.BypassBusinessLogicExecution" with values "CustomSync,CustomAsync" specified. This indicates custom settings for header values to be sent with the API request. Below, the "Body Of The Request" field contains a JSON object with the first name "Nancy" and last name "Davolio".

Tested and confirmed:

  • It does work nicely, thank you very much.
  • It does bypass the plug-ins and/or flows, as advertised.
  • Bypassing synchronous plug-ins can potentially make your operation faster.
  • Bypassing asynchronous logic is not usually required or recommended. There are better strategies.
  • There is a lot more to it, and I strongly recommend putting on a Real Developer™️ hat and reading the documentation here and here.