Language format for Whole Number field in Dynamics 365 CE

If you create a Whole Number field in Dynamics 365 CE environment, you’ll notice a Format which is available for you to choose i.e. Language among other formats like None, Duration, Time Zone.

Let’s see what the field is and what it stores.


  1. Let’s say you are creating a field on the Contact i.e. Preferred Language.

  2. And, it is represented in the below way – like a Drop Down

  3. Now, if you wonder which all Languages are displayed? Well, the ones which are Enabled for the D365 Organization are displayed in the Drop-down. They simply are set as data and doesn’t affect the record apart from the data value itself.

    So, if you go to the Settings > Languages

    Any other language apart from the Base Language of the Organization which is enabled is considered.

    You’ll find all the Microsoft Locale IDs here:


Now, let’s see what the field stores.

  1. I’ve written a short JS to pick what the field has stored as data. When I debugged, here’s what the field holds.
    It stored

  2. Also, if you try to set data which is not enabled i.e. tried to set Language which is not enabled for your Dynamics 365, you’ll see the below validation error which says that the value is out of the allowed range.

Hope this post was useful!

Here are some more posts for Dynamics 365 Customer Engagement / CRM you might find useful!

  1. Custom Help Pages and Guided Tasks for Unified Interface in Dynamics 365
  2. Make Managed fields Required in Dynamics 365 – Managed Properties Error [Workaround] | D365 CE Quick Tip
  3. Sign up for a Dynamics 365 Project Operations (Lite Deployment) environment and provision a new instance | Power Platform
  4. Filter records in a View owned by a Team you are a member of | Dynamics 365 CRM
  5. Duration field in Dynamics 365 converts Hours value to Days in Dynamics 365 | [Flow Workaround to convert in Hours and Mins]
  6. Show custom ribbon button based on Security Role of the logged in User in Dynamics 365 | Ribbon Workbench in XrmToolbox
  7. Form Access Checker in new Power Apps Form Designer | Model-Driven Apps in Dynamics 365
  8. Connecting XrmToolBox to an MFA enabled Dynamics 365 environment | Azure AD
  9. Make On-Demand Flow to show up in Dynamics 365 | Power Automate
  10. Find deprecated JS code used in your Dynamics 365 environment | Dynamics 365 v9 JS Validator tool | XrmToolBox

Thank you!!

Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate

As Dataverse connector keeps getting updated from time to time, here’s a new Search rows (preview) Action which you must be seeing in the Dataverse connector in Power Automate. Let’s see how we can use this Action.

As it suggests, that this is still in preview! So kindly take a note of that.

Search Rows (Preview)

  1. Search rows is an Action in the Dataverse connector and you’ll be able to see it like this

Enable Relevance Search

  1. Let’s assume you went ahead and used this connector in your Flow without having Relevance Search enabled in your D365 CE organization, you’ll see the Search Rows throw the below error.

    And the error is described as –

  2. To make Search Rows work, Relevance Search must be enabled for you Dynamics 365 CE / CRM environment. Head over to the System Settings in Dynamics 365 under Settings > Administration > System Settings. And in General tab, look for Relevance Search option, check-mark it and save.

  3. Here’s the full Microsoft Documentation on how to use queries for Relevance Search –

Using Search Rows action

Let’s see how this Action from the Dataverse connector will work –

  1. Now, once you have selected the Search rows action, below are the features which I’ll explain one by one –

  2. Let’s first look at the last item i.e. Return row count. As it says, will result the count of results returned if set to Yes.
    Will return -1 if set to No.

  3. For Search Type and Search Mode to be covered, these need to be explained extensively since it covers several factors. To keep it short for now, I’ve linked the Search Type and Search Mode documentation as below

    And the short Summary of the same is:
    Search Type:simple | full” There are 2 types called as simple and full. Default = simple. Both have different functions within them that you can use on the Search Term.

    Search Mode: “any | all” By Default – any. This defines if any criteria of the Search Term is to be considered or all must be true based on different syntax and operators used.
  4. Row Count denotes how many records should the results Return which is standard across other Dataverse actionss.
  5. Also, Row Filter uses OData style filtering which we’ll omit in this example to keep it simple. 😊
  6. Now, let’s enter a Search Term and keep it simple, I’ll pick an example: “Contoso“.
    Next, look at the Table filter – If I leave it blank it’ll search for Contoso across all Tables in Dataverse.

    Result to show from all Tables as per the above Search rows term –

    Now, I’ll add account and contact (I do have some records in the Opportunity as well which has the keyword ‘Contoso’. So those will be filtered out)

    And the result will be as follows –

    And if we look at the Raw Outputs to see how data is retrieved, we get the below –

  7. Now, let’s look at Sorting.
    Now, in the Sort by filter, I’ll enter the field name ‘name‘ and desc as the order of the Sort.
    And then, we’ll check the results

    And the results were as below –

  8. Next, let’s look at Facet Query. basically, it drills down on the Results which are already returned as a part of the main query and serve as metadata for the same to gather similar information together.
    Here’s how I enter a Facet query – Ex: contact.address1_city. Meaning, it’ll return Address 1: City from all the returned Data and store it under Facet Query.

    Now, when we run this, we’ll get the following results –

  9. Let’s look at what Skip Rows does.
    It’ll only omit the records from the already returned Results. Example: Even if the Result returned 5 records, it’ll Omit/Skip first x records. But still show that the Results returned are whatever the Query is supposed to return.

    In the below example, out of 5, I’ll skip 4 rows.

    And when you run the Query, you’ll find that the Record Count is 5, but only 1 entry was available in the Output.

Which Columns are Searchable?

There are 2 points to keep in mind to know and configure which all columns will the Search be performed on.

  1. If you are aware of how you can configure the Quick Find views in Dynamics 365 CE, same is applicable here since this works off of Relevance Search itself.
    In any Table/Entity’s Quick Find view, make sure the columns are selected in the Add Find Columns

  2. The ones selected in Find Columns are the ones on which the Search will be performed.

Here’s a YouTube video I made to demonstrate the same –

Hope this was useful!

Here are some more Power Automate / Cloud Flow posts you might want to check –

  1. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  2. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  3. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  4. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  5. Asynchronous HTTP Response from a Flow | Power Automate
  6. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  7. Tag a User in a Microsoft Teams post made using Power Automate
  8. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  9. Formatting Approvals’ Details in Cloud Flows | Power Automate
  10. Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
  11. Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate
  12. Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip

Thank you!

Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate

Retrieving OptionSet Labels from CDS data in a Cloud Flow / Power Automate / Flow is an extra step than just picking from the Dynamic Values. Check this post!!


While working with data that is either a result of a Dataverse Trigger (on Create/Update) or Action like (Get record, list record), the OptionSet fields from CDS/Dataverse return the Values of the OptionSet instead of the Text Labels –

  1. Let’s say this is the OptionSet in Dynamics

  2. And when you pick the OptionSet field from CDS either from an Action or a Trigger like this
    Let’s say I’m capturing this in a variable to show you

    I’m storing this in a variable for this example to show you

  3. I’ll capture the Value of the OptionSet i.e. the Value part

    Result –

  4. What needs to be displayed is the Label of the OptionSet! Let’s see how we can do this –
    1. Triggers
    2. Actions – List records (Inside Loops)
    3. Actions – Get record (Single record)

triggerOutputs() / triggerBody() to read the OptionSet values from Triggers

Let’s see how to read the OptionSet values from CDS Triggers, Create or Update –

  1. When a Flow is triggered using CDS/Dataverse Triggers (I’m using Common Data Service Environment(Current Environment) trigger), you can read the OptionSet value by using triggerOutputs() / triggerBody() function –
    Here’s a triggerBody() example

    Now, notice that the name of the field is cf_accounttype. So, the label in Triggers can be retrieved as _cf_accounttype_label and NOT cf_accounttype.

    Same way, you can also use triggerBody() function instead as well to yield the same result

    Here’s a post on triggerBody() / triggerOutputs() for your reference – Using triggerBody() / triggerOutput() to read CDS trigger metadata attributes in a Flow | Power Automate

items() to read the OptionSet values from Action Step – List Records (Multiple Records)

Let’s look at this example where you are retrieving multiple records using List Records and now, you apply a loop on each of those to read individual records.

  1. Assuming you are using List Records and you loop through the outputs of each of these records

  2. Now, the value is represented by items() function on the Loop that you are in i.e. Apply to each.
    Hence, the function is

    This will show the label of the OptionSet in the results

outputs() to read the OptionSet values from Action Step – Get a record (Single Record)

Similar to items() function, we can use outputs() function to read from the Output’s of the Get a Record Action from Common Data Service (Current Environment)

  1. Get an Account is a ‘Get a record’ Action in CDS/Dataverse Current Environment connector. It’ll only fetch a single record.

  2. Now, let’s look at how outputs() function, similar to items() function used in case of Loops is used.
    Formula is –

    In the above scenario, I’m reading under body hierarchy for cf_accounttype@OData.Community.Display.V1.FormattedValue

Using JSON Parse to get the values

Finally, there’s also a method in which you can create a Parsed JSON from the Outputs

  1. Pick JSON from the Actions, it is under Data Operations connector and is a very popular one.

  2. Now, you’ll need to pass Outputs of the CDS Step to the Inputs of the Parse JSON step. Now, since you don’t already have a schema yet, Just put {} and save (else, you won’t be able to save)

  3. Now, Run the Flow once where the CDS step was successful and copy the Outputs from the Body

  4. Now, go to the same Parse JSON Step and click on Generate from Sample

  5. Now, paste the copied Body to generate the schema.

  6. Once you click OK, the schema will be generated.

  7. Finally, you can select the Parsed schema and use it as Outputs.

    And it will appear as below –

    Again, this will also show the same results as the above approaches.

Hope this helps!

Here are some Power Automate / Cloud Flow posts you might find helpful –

  1. InvalidWorkflowTriggerName or InvalidWorkflowRunActionName error in saving Cloud Flows | Power Automate Quick Tip
  2. Create a Team, add Members in Microsoft Teams upon Project and Team Members creation in PSA / Project Operations | Power Automate
  3. Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip
  4. Adaptive Cards for Outlook Actionable Messages using Power Automate | Power Platform
  5. ChildFlowUnsupportedForInvokerConnections error while using Child Flows [SOLVED] | Power Automate
  6. Run As context in CDS (Current Environment) Flow Trigger | Power Automate
  7. Using outputs() function and JSON Parse to read data from missing dynamic value in a Flow | Power Automate
  8. Setting Retry Policy for an HTTP request in a Flow | Power Automate
  9. Make On-Demand Flow to show up in Dynamics 365 | Power Automate
  10. Task Completion reminder using Flow Bot in Microsoft Teams | Power Automate
  11. BPF Flow Step as a Trigger in CDS (Current Environment) connector | Power Automate
  12. Pause a Flow using Delay and Delay Until | Power Automate

Thank you!!

Calendar View for Work Order Bookings in Field Service | Wave 2 2020 Update [Early opt-in]

So here’s a nice improvement to see your Bookable Resource Bookings in a Calendar View as a part of the 2020 Wave 2 Update for Field Service!

Disclaimer: his is a preview feature and is planned, it’s no guarantee that this feature will make it to the final release of Wave 2 Updates.

Pre Requisites

  1. Make sure Wave 2 2020 Updates are available to your either via Early Opt-in or having directly applied to Org if you’re reading this from the future 😊

    Here’s the Microsoft Docs official link for the same –

Switch to Calendar View

Here’s how you can leverage the Calendar View control for the Bookings.

  1. When you are in your Bookable Resource Bookings view, you might not have this view by default. So, you look to switch the view.
    look for Show As option on the ribbon button

  2. Now, you can see that a BookingCalendarControl is available for you to select.

  3. Once your switch, you’ll see the Calendar Control on the view with the Bookings arranged in a Calendar like control
    The default Month view looks like below

  4. You can even switch to look at 2 other views, Week and Day views.

  5. The Day view looks like below

  6. And the week View looks like the below

  7. Selecting the Booking will simply open the record in Dynamics as usual.
  8. And this is how you see it on the phone.

Config Options

To first address the most important question, it’s isn’t enabled by Default.

  1. But, you can make it defaulted on the Web application of Dynamics by changing it at the Entity level as shown below.

  2. These are the Properties that can be configured.

    Hope this was helpful!!

Here are some more Dynamics 365 / PSA posts you might find useful –

  1. Change Booking Status colors on Schedule Board for Field Service/PSA [Quick Tip]
  2. How to add Rating Values to Rating Models in D365 Field Service and PSA
  3. A manager is required for non-project time entries, absence, and vacation error in D365 PSA v3
  4. Modify Project tab’s view in Schedule Board in PSA v3 | Quick Tip
  5. Restrict User Access to a D365 instance using Security Groups

Thank you!!

Generate Dynamics 365 record link in a Flow using CDS connector | Power Automate

There are several ways to formulate a Dynamics 365 record URL and make it clickable in a Flow in Power Automate.

Here’s one of the ways I follow for most scenarios – Let’s say I want to open a PSA Time Entry record from my Flow, here’s how I do it

Get record action to retrieve URL

Since this post is focused on CDS connector, I can get the D365 record link in body of Get record action for Common Data Service connector.

Unfortunately, I didn’t see this if the trigger was a CDS action, so I made a separate Get record call.

But, we’ll retrieve the same without having to select/parse body object. So let’s see –

Generating Link

First, I’ve initialized a variable that’ll hold the String format of the end URL
Now, first – I’ve appended https://. This won’t come directly using the uriHost() method

Then, the uriHost() holds the formula ‘uriHost(body(‘Get_record’)?[‘’])

Meaning, get the uriHost name i.e. Environment name itself.

Then, I’ve appended options for the window to open which are mentioned below in this post.

Finally, I’ve appended the Primary Key of the record itself at the end


Now, let’s talk about the options –

  1. cmdBar = [true | false]
    It’ll show the ribbon on the record. If false is chosen, it’ll be hidden
  2. navBar = [off | on]
    It’ll show the Navigation Bar on top if on. If off, it’ll be hidden
  3. newWindow=[true | false]
    This didn’t affect in my case. It anyway opened in a new tab. This could be different is the link is not opened from Email but is used elsewhere
  4. pagetype=entityrecord
    Since we are targeting a Dynamics 365 entity record, the above is used.
  5. etn= [name of the entity]
    Name of the entity
  6. id
    GUID of the record itself.

Here’s an Email that I composed to show how the URL will end up looking –

Which will result in Email like this


And open the record like this.
As per my settings in the URL I created, I don’t have the Nav Bar or Command Bar visible. It’s up to you to decide your preference

Here are some more Power Automate / Flow content you might want to check –

  1. Text Functions in a Flow | Power Automate
  2. Loop through array of objects in a Flow & Create records in CDS | Power Automate
  3. Get Count of records retrieved in CDS connector in a Flow | Power Automate
  4. Number Formatting in a Flow | Power Automate
  5. Call a Dynamics 365 Action from Flow [Bound and Unbound Actions] | Power Automate
  6. Make HTTP request from Flow in Power Automate
  7. Switch-Case in a Flow | Power Automate
  8. Setting Retry Policy for an HTTP request in a Flow | Power Automate

Hope this helps!!

Dynamics 365 Solutions’ New Experience in Power Apps, Solution Checker and more

If you’ve recently noticed Settings > Solutions area in Dynamics 365, you’ll see a notification that this has been moved

And you’ll be redirected to Solutions Area in Power Apps –

Solution Checker

Solution Checker is a helpful feature where it runs a validation of components in the Solution itself –

  1. If you see for your custom Solutions, if you haven’t ever Run a check on the solution, the status will be Hasn’t been run
    I’ll zoom it below –
  2. Now, you can run the Solution Checker against your entity to find potential issues and add/remove component that matter.
  3. Once the Run starts, it will show the status of Running… for the solution as well as in the Power App ribbon.
  4. Once the run is complete, you can see the time stamp it completed on and also View/Download the results –
  5. You can see the results as below –
    So basically, it’ll show what best practices should be followed in order for the Solution to be meeting highest standards of configurations and customization.
  6. Another example from another solution is this –
  7. Or something like – under Upgrade Readiness category

    Full details can be found here on Microsoft’s official document –

Solution Export Versioning

Now, every time you export a solution, by default it is set to Managed unlike Unmanaged in the Classic UI.

Also, notice the Version number is auto-incremented to x.x.x.1

And in further exports, the version keeps on auto-incrementing

Hope this helps!!

Show Loading Screen in Dynamics 365 using Client API reference

Suppose, you want to show a loading/waiting screen to let people know there’s some heavy processing going on in the back-end and they shouldn’t navigate away to do anything else with the record, you can use loading screen by using showProgressIndicator() and closeProgressIndicatory() methods.

Xrm.Utility methods

There are 2 methods are documented in the Xrm.Utility of Microsoft Docs that you can use to achieve this. Microsoft reference here.

In this scenario, let’s say you want to show the Loading page while your Action is being performed by the JavaScript code.

  1. You can place the Xrm.Utility.showProgressIndicator(message); before you begin your code to invoke an action and place Xrm.Utility.closeProgressIndicator(); in your success and failure messages.


Whenever your JS code will call the action, the progress message will be displayed on the screen as below  –

In Classic UI

In Unified Interface –

And once the process is complete, the Xrm.Utility.closeProgressIndicator will remove the message as below and bring back the form you were working on –


Side Note: If you are using action calling from JS using invokeProcessAction, as of the day of this post – This doesn’t work well and results in action not supported error on the UCI – invokeProcessAction does not work in UCI

Hope this helps!

Global Notification in Dynamics 365 Unified Interface App [Preview]

Here’s a great feature to add a warning/error notification which is scoped globally unlike setFormNotification() which is commonly used and remains within a form itself.

Xrm.App.addGlobalNotification(notificationObject).then(success, error); serves this purpose. Let’s see how –

Disclaimer: Please be aware this is a preview feature yet and I’ll update on this post once this is out of preview.

This is only available for the Unified Interface.


Let’s say you have opened an Account form and you want to warn the user in case they are working remotely with someone and might have their screen shared. You want to show a message like this –

And even if they navigate away from the form, it will remain on the screen since it’s scope is global.

Or, user can chose to close it manually which appears at the end of the strip on top-right corner.

You can also optionally add a button and make it navigate to another URL in case you want to share more info with the users (In my example, I redirected to –


Xrm.App has 2 methods to do the needful –

Xrm.App.addGlobalNotification(notificationObject).then(success, error) & Xrm.App.clearGlobalNotification(notificationObject).then(success, error)

In my scenario, I want to trigger the warning message as soon as the user wanders into one of the Account records. So, in my case, I’ve registered the method onLoad of the Account form itself.
Here’s the code in my JS file for the same –

Some notes before we proceed with the code –

  1. type in the notification object is supported as 2 at the moment and no other types are supported.
  2. The levels are as below
    1. Success
    2. Error
    3. Warning
    4. Information

account = {
globalNotification: function () {

var learnMoreAction =
actionLabel: “Learn more”,
eventHandler: function () {
var notificationObj =
type: 2,
level: 3, //warning
message: “Please make sure you are not sharing your screen!”,
showCloseButton: true,
action: learnMoreAction

function success(result) {
console.log(“Notification created with ID: ” + result);

// More code here
function (error) {
// handle error here


I’ve registered the Function as account.globalNotification. You can directly use globalNotification is you are writing function directly as function globalNotification() {}


This notification remains App-wide unless closed by closed by a user of closed using clearGlobalNotification method as mentioned by Microsoft.

Source documentation by Microsoft is here – Xrm.App

Since we are transitioning into Unified Interface, here are some other related posts that you may like looking at –

  1. D365 Quick Tip: Why BPF wouldn’t appear in D365 Unified Interface?
  2. Fix Ribbon icons on the Unified Interface in D365 CE
  3. Change the Unified Interface App Icons
  4. Unified Interface App URLs – 3 different ways

Hope this helps!!

Easier template selection & Manage Activities with ease in Dynamics 365 | 2020 Wave 1 Feature

Easier template selection and a improved Activities management view are pretty important features that got added in this 2020 Wave 1 Early Access. Here’s what they are!

Disclaimer: Before we proceed, please note that this is a part of the Wave 1 2020 Early Access. We can’t be sure if this will make it to the final release. Also, you can enable Early Access into your Sandbox instance only and test since it’s not recommended for Production at this point.

Easier Template Selection

Now, you can preview how the Email will look like before you select the template in the Activities
First, you need to click on Insert Template once you select the recipient of the Email

And you can preview what each applicable template will look like before making the selection

And when you select Apply Template, it was applied to the actual email.

Please note that this is only in Dynamics 365 and doesn’t translate the same to Dynamics 365 App For Outlook’s Add Template feature. By the way, if you’re looking to set up D365 App For Outlook, please check these related posts –

Summarizing D365 App For Outlook Setup in 3 steps with Exchange Online mailbox

Using Templates from D365 CE in D365 App For Outlook

Old Template Selection

Old Template selection was just selecting the Template itself and you had to rely on your knowledge of what template to use from your system

Manage Activities with Ease

Now, with the 2020 Wave 1 Updates, you can now manage your Activities with ease. Simply by going into Activities, you can directly choose how you want to filter what Activities should be seen instead of going into several branches of Views and then making the selection.


Now, you can filter by the Due Date of the Activity, by default is set to All so that All Activities show


And you can also select what type of Activities you want to see by selecting from Activity Type

These very simple yet powerful features are sure to make your work around Activities area a lot better. Hope this helps!

Approval Process using Power Automate

Approvals have been around for quite some time now in Power Automate. Let’s look at the simplest example of how we can make use of Approvals in Flow / Power Automate and then you let your imagination and creativity take over!


For the sake of simplicity, I have a custom entity called Request where users submit a Request and the Approval simply has to Approve/Reject.

The Approved/Reject status should be set in Dynamics 365 accordingly. Simple!

Power Automate for Approval

And then, my Power Automate looks like this –

  1. I will trigger this off the CDS connector on create of the Request record and then select Approvals in the next step.
  2. The Type of Approval selection is asked.
  3. And my Approval body is simple, just providing the basic details and whom the Approval request should go to. In this case, Kuldeep Gupta
  4. In the next Condition step, based on whether the Outcome is Approve or not, I’ll simply update the record’s status to either Accepted or Rejected.
  5. If Yes, the following will execute
  6. And if No, then the below

That’s it. Let’s see it in action!

Approval Process

  1. Let’s say Priyesh has created a Request record in Dynamics
  2. As I submit this request, an Email from Power Automate goes out to Kuldeep asking for approval. And right on the email itself, he can chose to Accept/Reject
  3. Let’s say the request was Accepted
  4. The request will be Approved.
  5. And in Dynamics, the status of the record will be changed to Accepted as defined in the conditions.

Hope this quick tutorial helps!