Using Custom Process Action with Code for integration – Dynamics 365 / Microsoft Dataverse

There are 2 ways to create a custom message in Dataverse, one is through action, and the other is through Custom API.

Check the post on Custom API

Custom Process Action vs Custom API –

With custom process action we can define business logic using a workflow, and we can extend it using either custom workflow activities or registering the plugin.

If we are just defining action just for the custom message and then using plugin/custom workflow activity for defining all the logic (and not using workflow), it is recommended to use the Custom API feature instead.

Here however we will have a look at the way we had implemented global custom action for integration with the external system for any inbound call to CRM.

Below is our sample custom global action with one input and output parameter.

For the output parameter, we are setting the value in the step.

Next, we have 2 plugin steps registered one on the pre-validation stage and the other on post-operation.

Pre-validation because we want to run the logic outside the transaction, perform validation, log exceptions, etc.

Pre-validation example –

Post-operation because action’s output parameter would only be available in the post-operation and used Shared Variable to pass the custom response from pre-validation plugin to post-operation.

On executing the action

We get the following plugin trace logs as expected.

One for pre-validation


Hope it helps..


How to – Use the new command designer to customize the command bar – Dynamics 365 / Power Apps

Using the modern app designer either open an existing model-driven app or create a new model-driven app in

Select Edit >> Edit in preview

Select any entity/table and select the Edit command bar (preview)

The different command bars that can be edited are the Main grid, main form, subgrid view, and the associated view.

  • Main Grid view

  • Main Form view –

  • Subgrid view–

  • Associated view –

The legacy / classic button is not supported currently.

Check out all the known limitations


Let us try adding a new command/button in the Main Form, and see what options do we get there.

Select + New command or the + New option

It adds a new button with the label NewCommand with options to duplicate, hide, move up and down, etc.

The different properties that can be configured for the new command –





To set the label


To set the icon either using icon or web resource


Set tooltip title and its description.

Order Number

Customize the Order of the command


Either run formula or run javascript


Open Formula Bar


Library for Run JavaScript




Open Formula Bar for Show on Condition

Let us Save and Publish

Click on Play and open a lead form.

We can see the new command added.

Get all the details here –

Hope it helps..


Set Auto Number field value conditionally in Dynamics 365 / Dataverse

Recently we had a requirement to use auto numbers for lead records.

However, based on where the lead records are being created from, we wanted to specify a different prefix to it.

For leads created manually, the format should be prefixed “L” followed by “– “and then 10 digit sequence number.


And if created through API the prefix should be B.


To achieve this, we can define an auto-number field with the following format.

Next, we can have a bool field (default – false) in the lead table, to identify if it is being created from the API, which we can set while creating the lead record through API.

And a Pre Create Plugin on Lead to check the value of that field.

If it is set (true), that we can replace the Prefix from L to B in the auto-number field within the context.

In the Pre Create plugin, we get the next sequence in the auto-number field, so simply replacing/setting the value of the auto numbering field did the trick.

Lead created through Web Application –

Lead created through API –

Here uniqueness was more important than the next sequence of the lead record so this solution worked.

Also check –

Hope it helps..


Lookup Behavior – Minimum character to trigger search and delay between trigger – Dynamics 365

Within Power Platform Admin Center – (  through Environments >> [Name] >> Settings >> Behavior >> Lookup Behavior settings we can control the minimum number of characters entered before triggering the search in the and delay before the search is triggered for the lookups.

  • Minimum number of characters to trigger typeahead search – Default (2)
  • Delay between character inputs that will trigger a search – Default (250ms)

Here we have updated the value to 5 and 5000 respectively for our testing.

The result –

Lookup Behaviour

After 5 characters are entered, it waits for 5 seconds before searching (loading..)

Also check –

Hope it helps ..


Few key points – Auto Number field in Dataverse (Dynamics 365 CE / CRM)

  • Can we convert the existing text field to the Auto Number field?

Yes, e.g. we can update the Last Name attribute of the lead’s data type to be of Auto number from Text.

  • Can we convert the auto number field back to the normal text field?



  • Can the auto number field have duplicate values?

Yes, the platform allows having more than one record to have the same value. It doesn’t throw an error.

Multiple lead records have null values for the auto number field as shown below.

  • What if the Seed value increases than the digits specified?

The platform will assign the next value and will not throw an exception.

  • Can we change the format of the existing auto number field?


It will affect any new records created.

  • What other things we can do with the auto number fields?

We can make the field readonly in the form so that users do enter the values manually, we make the field required and for uniqueness, we can enable alternate keys on it.


  • What is the min and max length of the RANDSTRING placeholders?

Between 1-6

  • What about maximum seed value?

The auto number field is similar to a text field, it is different in that it generates a unique number when there is no value specified for it.

Get all details here –

Hope it helps..


Using DataSourceInfo and RecordInfo function for checking permissions for a Dataverse table or record in Canvas App

DataSourceInfo function can be used to check the Table / Entity level permission.

We can check for Create, Read, Edit, and Delete Permission and can disable, hide and show the corresponding create, edit and delete buttons for the users.

  • DataSourceInfo.CreatePermission
  • DataSourceInfo. DeletePermission
  • DataSourceInfo. EditPermission
  • DataSourceInfo. ReadPermission

DataSourceInfo function can also be used to obtain information about a particular column of the data source like Display Name, Max Length, Max Value, Min Length, Required.

  • DataSourceInfo.DisplayName
  • DataSourceInfo.MaxLength
  • DataSourceInfo.MaxValue
  • DataSourceInfo.MinValue
  • DataSourceInfo.Required


Similarly, the RecordInfo function can be used to get the information about the record of a Dataverse data source.

We can check for the Read, Edit, and Delete Permission.

  • RecordInfo. ReadPermission
  • RecordInfo. EditPermission
  • RecordInfo.DeletePermission

Hide Show control based on Security Role in Canvas App

Here for our sample Canvas App we have a button and a Gallery  having Data source as Cases




If(DataSourceInfo(Cases,DataSourceInfo.ReadPermission), true, false)




If(RecordInfo(Gallery1.Selected, RecordInfo.EditPermission),true, false)




If(RecordInfo(Gallery1.Selected, RecordInfo.DeletePermission),true, false)

Now to test it, we have assigned the below custom security role/rights to another user – Test User 1 (along with Basic User security role)

i.e. Read, Write and Delete permission at the User Level on Case.

We have also shared the Average order shipment time record with Test User 1 assigning him the Write Permission.

Now when Test User 1 will open the Canvas App, the first button will be visible as he has the Read permission on the Case table.

In the gallery only the one record shared will be visible along with the Edit button on the same.

Let us just share one more case record with only Read permission to Test User 1.

We can see the record displayed for Test User 1.

It shows the Edit button for the new record, although we shared the record with the Read permission.

We have the following formula for the Edit button’s OnSelect

Patch(Cases, LookUp(Cases,’Case Number’ = lblCaseNumber.Text), {‘Case Title’:”Sample Title”})

So clicking on Edit for the new record shared ‘Complete overhaul required‘ gives the below Permission error

Now pressing the same edit button for the ‘Average order shipment time’ record will update the record (set title as Sample Title) as it was shared with Write permission with Test User 1.

Get all the details here –

Hope it helps..

%d bloggers like this: