Events
Power BI DataViz World Championships
14 Feb, 16 - 31 Mar, 16
With 4 chances to enter, you could win a conference package and make it to the LIVE Grand Finale in Las Vegas
Learn moreThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
[This topic is pre-release documentation and is subject to change.]
Microsoft Dataverse offers a powerful solution for achieving more efficient data architecture and reducing client-side workload through low-code plug-ins. These plug-ins are reusable, real-time workflows that execute a specific set of commands within Dataverse, running server-side and triggered by personalized event handlers.
Important
Traditionally, plug-ins were created as custom classes compiled into a .NET Framework assembly, which were then uploaded and registered within Dataverse. However, with the introduction of low-code plug-ins, users can create these event handlers with minimal or no coding required, and without the need for manual registration.
Low-code plug-ins are stored within a Dataverse database and can be seamlessly integrated into Power Apps and Power Automate. The behavior of the workflow is defined using the Power Fx expression language and can directly connect with Dataverse business data and external data sources through Power Platform connectors. With low-code plug-ins, makers can rapidly construct complex workflows with minimal coding expertise, resulting in a more streamlined and efficient data architecture.
Defining server-side business logic offers several benefits, including:
There are two types of low-code plug-ins supported in Dataverse:
Type | Trigger | Supports parameters | Supported scope |
---|---|---|---|
Instant | Manually run | Yes | Global and table |
Automated | Dataverse table event | No | Table |
All low-code plug-ins have the following common properties:
Property | Description |
---|---|
Display name | The human-readable name of the plug-in. Can't be changed once created. |
Name | The internal name of the plug-in. It's used by the platform to identify the component in code and database operations. Can't be changed once created. |
Description | Used to provide additional context about the plug-in (purpose, behavior, or other important details). |
Solution | Used to group components and export to other environments. Learn more about solutions. |
Expression | This is the custom function that can be used to perform actions or calculations, defined using the Power Fx expression language. Power Fx is a formula language used in Power Apps canvas apps, and has been extended to be used in low-code plug-ins. See supported functions for more details. |
An instant low-code plug-in is custom code logic that's manually triggered by a user. Custom input and output parameters can be used.
Unique properties:
Property | Description |
---|---|
Scope | Used to associate a plug-in to a specific table. It can be set to either table (shown as entity) or global, where table (entity) scope means the plug-in is triggered with the context of a specific table record, and global scope means the operation isn't associated with a table (learn more). |
Parameters | Parameters allow you to pass information between the plug-in and the context that runs it, making it easier to design business logic that can be reused in varying situations. Input parameters are used to provide data to the plug-in, and allow you to control how the function behaves by passing in different values you specify in the Power Fx formula. Output parameters allow you to retrieve the results of a function or method for further use in your program. Supported data types:
|
More information about how to integrate from a canvas app or in a Power Automate cloud flow: Integrate a low-code plug-in
Design time
Makers who have system customizer or system administrator security role membership in the Power Platform environment can access all plug-ins in that environment. Custom security roles can be used to restrict access to low-code plug-ins.
Run time
When a plug-in is invoked, it accesses the table data involved in the plug-in definition (the tables that are part of the formula, or if the table is associated with the settings of an automated plug-in) in the context of the user who invoked it.
Connections
Using security roles, connector access within plug-ins can be restricted to a specific set of users within your organization. Specify which roles have create, read, update, or delete privileges.
Tip
All new environments have the Dataverse accelerator app automatically installed as of October 1st 2023. If you already had the Dataverse accelerator installed, you can manually update the Dataverse accelerator.
Update the Dataverse accelerator
Tip
Enable auto app updates for the Microsoft - Power CAT publisher to automatically receive updates when available (not necessary for new environments created after October 1st 2023).
Note
If you previously installed the optional Low-Code Plug-ins for Connectors solution, it will be automatically deleted when you update after June 29, 2023. The capabilities will be available in the main solution.
{ Out: "Return value" }
.ThisRecord
to access column values in the table row associated with the plug-in run, such as ThisRecord.'Account Name'
.Tip
Note the intellisense in the Expression box. Underlined red is invalid. Squiggly yellow means your logic might be affected by delegation limitations. Avoid delegation issues by using delegable functions.
Example: Calculate the sum of two integers.
X
and Y
(both of type integer), and one output parameter, Z
(type string).{Z: X + Y }
ThisRecord
to access column values in the table row associated with the plug-in run, such as ThisRecord.'Account Name'
.Power Platform connectors can be used in low-code plug-ins to easily integrate data and functionality from systems outside of Dataverse, such as SQL Server, Salesforce, and SharePoint, without the need for complex coding or custom development.
You can easily use connectors and custom connectors from within a low-code plug-in a Power Fx formula.
new_connectorName
, not the display name).Before using a connector in a low-code plug-in, review the connector's documentation to ensure that you're passing the input and output parameters correctly.
More information: example
Note
From the Home screen, select an instant plug-in from the list, then select Test on the command bar. You can also get to this screen from the instant plug-in editor in the command bar after it's been saved.
Provide values for any input parameters that are defined in the low-code plug-in, and then select Run.
Observe the response.
Tip
Use output parameters to help validate expected behavior and results. Otherwise, you only see a success or failure when testing.
Test automated plug-ins by invoking the data event. Observe if the plug-in ran successfully by validating expected changes that were defined in the formula.
Tip
During the preview, you can invoke the associated data event using the table editor in Power Apps:
OnSelect
property.Value
to reference the corresponding input controls:
Environment.new_CalculateSum({ X: Value, Y: Value });
, it could be rewritten as: Environment.new_CalculateSum({ X: TextInput1.Text, Y: TextInput2.Text });
Environment
with the table display name to access the plug-in.Set()
or UpdateContext()
formula: Set( ActionResult, Environments.CalculateSum({ X: TextInput1.Text, Y: TextInput2.Text }) );
. Display the variable in a label. Alternatively use the Notify()
formula to display data in a notification.Learn more about how you can call Dataverse actions directly from Power Fx in canvas apps.
Follow the steps for Unbound action or Function bound to table sections in the Invoking custom APIs from the Web API documentation (depending on the appropriate scope of the plug-in).
If you encounter issues creating or running your low-code plug-in, go to these tips for common issues that can occur: Microsoft Dataverse low-code plug-ins tips and known issues
For issues with the Dataverse Accelerator solution installation or low-code plug-ins not covered in Microsoft Dataverse low-code plug-ins tips and known issues, such as undocumented errors received, use the Help + support experience and include the following information:
For a few examples of how to create a low-code plug-in, go to Example Dataverse low-code plug-ins (preview)
The environment language object needs to be readded to access new plug-ins inside existing canvas apps. For any plug-ins created after you have added the environment table data source to an existing canvas app, you have to remove and readd the Power Fx environment language object. Then you see the updated list of plug-ins as actions.
Intellisense requires explicit notation in automated plug-ins if you want to refer any tables in the formula. Use the following disambiguation syntax such as [@Accounts]
, using square brackets and the @
symbol (not Accounts
).
Nested support. Plug-ins can only call first-party actions published by Microsoft from Power Fx expressions.
Some Collect
scenarios require Patch
. There are some scenarios where Collect()
doesn't work. The workaround is to use Patch()
as shown in the populating regarding column example below. If you're creating an automated plug-in, prepend @ to each table referenced in the Power Fx formula.
Patch(Faxes,
Collect(Faxes, { Subject : "Sub1" } ),
{ Regarding : First(Accounts) }
)
When low-code plug-ins interact with connectors and DLP is employed, the admin can block creation of connections using DLP. However, existing connection references in the Dataverse environment continue to function. In case the admin needs to block all low-code plug-in interactions with any connectors, they can disable the organization setting Allowconnectorsonpowerfxactions
. This setting is enabled by default and can be disabled by usual SDK methods (WebAPI, SDK, PowerShell, and so on). You can disable this using a low-code instant plug-in as follows:
Patch(Organizations, First(Organizations), { 'Enable connectors on power fx actions.': 'Enable connectors on power fx actions. (Organizations)'.No })
Plug-ins that use connectors can only output results from specific fields. Due to this, you need to map specific primitive values from the connector response to output values.
If you have low-code plugins with custom connectors, the custom connectors must be imported first, before connection references or flows.
If your environment doesn’t contain the custom connector in a solution, import a separate solution that only includes the custom connector. Do this import before you import the actual solution. You need to do this first because Azure must register the custom connector before the other solution components can be imported.
If you import a solution that contains custom connectors and flows, Azure isn't able to register the custom connector while it's registering your connection references or flows. This also applies to connection references for the custom connector that wasn't previously imported in a separate solution. If Azure didn't register your custom connector, the import fails, or you aren't able to start the import.
More information: Create custom connectors in solutions: Known limitations
Low-code plug-ins Power Fx (preview)
Use a prebuilt prompt in a Dataverse low-code plug-in in Power Apps
Create an automated low-code plug-in with Power Apps (video)
Events
Power BI DataViz World Championships
14 Feb, 16 - 31 Mar, 16
With 4 chances to enter, you could win a conference package and make it to the LIVE Grand Finale in Las Vegas
Learn moreTraining
Module
Use common low-code plug-in scenarios - Training
Learn about using common low-code plug-in scenarios.
Certification
Microsoft Certified: Power Platform Developer Associate - Certifications
Demonstrate how to simplify, automate, and transform business tasks and processes using Microsoft Power Platform Developer.
Documentation
Low-code plug-ins Power Fx - Power Apps
Supported Power Fx expressions for use with Microsoft Dataverse low-code plug-ins
Example Dataverse low-code plug-ins - Power Apps
Examples of Microsoft Dataverse low-code plug-ins
Tips when working with low-code plug-ins in Microsoft Dataverse (preview) - Power Apps
Describes tips and known issues when working with low-code plug-ins in Microsoft Dataverse