# How To Create PowerFx Low-Code Plugins ⌨️💎

The Microsoft Power CAT recently announced a new app in the app source called "[Dataverse Accelerator](https://appsource.microsoft.com/en-us/product/dynamics-365/microsoftpowercatarch.dataversekit1?exp=kyyw)". 🏃

The "Dataverse Accelerator" is still in an experimental state, so please do not use it for production solutions as it may be removed by Microsoft. ⚠️🧪

In this blog post, I will show you how to install, configure and use it! 🚀🚀

---

## #1. The power of the Dataverse Accelerator

Yes, you have heard correctly! 🔥🔥

The Dataverse accelerator can help you to create low-code plugins that can be used for various purposes.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686658530144/af51b841-6afb-4cbc-a24a-2a7bb8d58420.png align="center")

With instant low-code plugins, you can create small actions that can be easily called through canvas apps or pages. This can help create a library for common functions that can be used across different apps, holy moly event tenants (❗) because they are stored as normal plugins and/or other new components!!!! 🚀🚀

So no need for those experimental things called "[Named formulas](https://powerapps.microsoft.com/en-us/blog/power-fx-introducing-named-formulas/)". 🤣😉  
Who wants to be the next [Demianrasko](https://github.com/demianrasko/Dynamics-365-Workflow-Tools) and provide us with a huge toolbox, but this time for Canvas or Power Automate development? 🙈

On the other hand, automated low-code plugins can be useful for data initialization, modification, and for implementing easy logic on create/updating or deletion of data. I immediately thought of the awkward way of setting the name of a custom record via a workflow - I hate to use the "old" workflows - they are super useful, but the designer is so slow nowadays.. 😪

These plugins can help you to automate various tasks and processes, which can save time and effort.

---

## #2. Installation

The "Dataverse Accelerator" is free and can be found in the app source:

[App Source - Dataverse Accelerator](https://appsource.microsoft.com/en-us/product/dynamics-365/microsoftpowercatarch.dataversekit1?exp=kyyw)

Click on "Get it now" to install the solution.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686582559633/4ff9a593-508f-466c-80af-84b10065ca3a.png align="center")

You will then be asked for the environment in which the app is to be deployed.  
Also, review the legal terms and privacy statement to continue. 😁

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686582587201/82c51e6d-22b1-498e-b5d0-0a81f9bb00a3.png align="center")

After 5 - 10 minutes the solution should be installed.

---

## #3. Creating Instant Plugins

The concept of instant plugins has the potential to be <mark>the next great thing</mark> for providing canvas developers with a wide toolbox of functionalities.

If you have worked with the built-in actions or workflows, you may know the [Workflow Tools by demianrasko](https://github.com/demianrasko/Dynamics-365-Workflow-Tools).

Imagine there could be something ready to use for canvas apps and/or canvas pages.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686658064959/97f03edd-d59e-4648-9137-9302abde51c8.gif align="center")

You could have a library with common functions, which you can easily run from the canvas app and/or canvas page, the only thing to do would be importing a solution.

I will start with a function that could be useful:

### #3.1 Instant plugin creation

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686658769605/34ff85eb-354d-4999-b7a5-47d11938f175.png align="center")

The definition is as follows:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686672725176/02e79816-26f8-4db9-ac76-1ca017f660c0.png align="center")

The code I used for this is:

```plaintext
{
    RoleAvailable:
        If(
            LookUp('Security Roles', Name = RoleName, Role) in Concat(
                LookUp(Users, User = GUID(UserId)).'Security Roles (systemuserroles_association)', 
                Role & ";"
            ),
            true,
            false
        )
}
```

After you have set the PowerFx in the definition step, you can go to the summary where you can see the set values.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686673072350/dbea6b51-7c38-499e-a356-e1fcc36a8384.png align="center")

### #3.2 Instant plugin testing

After that, you can save and test your instant plugin.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686673512560/1ef2b11d-d388-4335-a1e3-6a2e0d7f1f5c.png align="center")

### #3.3 Integrating the instant plugin

The "Integrate" tab located in the upper left corner of the last screenshot provides instructions on how to integrate your instant plugin into a canvas app, canvas page, or Power Automate.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686673293530/b61ce40a-ac9f-41dc-9474-1e022c455a08.png align="center")

### #3.4 My thoughts about instant plugins

While the instant plugin feature is awesome and I'm really hyped, there is definitely room for improvement. 📈 It seems like the results can be a bit unpredictable at times, which can be frustrating. 🤬

However, I believe that with more development and testing, this feature has the potential to be something truly remarkable and to be a game changer in scalable canvas development. It's exciting to see what the future holds for this experimental feature! 💎

---

## #4. Automated Plugins

Nowadays if you don't want to create a workflow, you have no option to create a synchronous process in a low-code way. An automated plugin could be the answer to the question: "How do I create a synchronous process without using workflows?".

Sure you can use and build workflows, but as far as I know workflows are working on an old engine and there will be a change in the future. Maybe automated plugins are the answer to that, maybe it's an experimental feature that will be removed in the future - who knows?

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686674732001/db9be109-2f82-444c-9e62-4e5ce20e47cc.gif align="center")

## #4.1 Automated plugin creation

To create an automated plugin you have to set the following properties:

* Name
    
* Table
    
* On which operation the plugin should be executed
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686676551028/9656b115-52b2-4d23-b92e-751ee588bec4.png align="center")

```plaintext
Patch(
    Accounts,
    ThisRecord, 
    {
        'Account Number':         Year(Today())     & "-" 
                                & Month(Today())    & "-"
                                & RandBetween(0, 1008)
    }
)
```

Under advanced options, you can choose when the plugin should be executed.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686675132246/68aca9be-7bfd-43aa-bf1f-fde798d10d31.png align="center")

And that's it.

A plug-in step is created in the background. Since you can select a solution in the designer (upper right corner), I had assumed that the step would be inserted into the solution. But this was not the case for me. 😕

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686676121912/0a9d385b-c2ba-4fac-8937-9533f57d931d.png align="center")

### #4.2 Testing the automated plugin

To test the plugin I just have to create an account. The usefulness of the account number is debatable, it should only be a test scenario for automated plugins. 🙈

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686676469326/cc9eef97-1e47-41ff-b494-e286861358a6.png align="center")

To test whether the value was set correctly, I simply added the "Account Number" column to my account view.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686676694055/41b94250-d6dd-414a-99d7-e9e822f6a4ec.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686676893527/f654f462-2085-491f-b557-f67c6130e055.gif align="center")

### #4.3 My thoughts about automated plugins

Automated plugins are a fantastic tool to streamline processes and make development more efficient. Their ease of use and flexibility make them a great option for developers looking to implement small logic quickly and effectively.

For larger logic, I will still use C# plugins, but I don't see the need to use workflows anymore. Maybe it's just me - but I absolutely don't like workflows. 🤓

I'm excited to see this feature reach preview and general availability (GA), and I'm sure many developers will find it to be a valuable addition to their toolkit.

---

## #5. Final words on it

The Dataverse Accelerator, provided by the Power CAT team, is a valuable gift to the Power Platform community. 🎁

However, it's important to note that, due to its experimental nature, caution should be exercised, and it is <mark>not recommended for use in productive solutions</mark> at this time.

As already mentioned, I am very curious whether the solution will be generally available in the future, I think it really deserves it.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686678159915/b3bfe1c3-c7b8-46dd-bdb7-c17f60dbd03c.gif align="center")

---

If you are hungry for more information, please check out the following sites:

* [Use Dataverse low-code plug-ins (experimental)](https://learn.microsoft.com/en-us/power-apps/maker/data-platform/low-code-plug-ins)
    
* [Low-code plug-ins Power Fx (experimental)](https://learn.microsoft.com/en-us/power-apps/maker/data-platform/low-code-plug-ins-powerfx)
    
* [Connect to Microsoft Dataverse](https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/connections/connection-common-data-service#call-dataverse-actions-directly-in-power-fx-experimental)
