See which form is displayed in Dynamics 365 CRM | [Quick Tip]

At times, it is not clear which form is displayed when looking at a record.

It may seem like Account form is displayed based on what the label says but things could be different.

And you assume it is this form that is being displayed.

But, this is now always the case. So, let me explain!

See Form Name

Here’s how you can see the true form name –

  1. Hover on the tab where Dynamics 365 CRM is opened.
    You’ll see the actual form that is being displayed even if the name under the record Name is shown as “Account”. In this case, it’s the entity name.

  2. Here, the form name displayed is “Account for Interactive Experience”

When does this happen?

  1. This happens if there are no other forms in the App you are using which have been enabled for your Security Role.
    And then there’s no other form left for you to see.

Fallback Form?

  1. The fallback form will take into effect if no other form is enabled for your security role. In my example, the form “Account for Interactive Experience” was in fact enabled for my Security Role and hence, I didn’t see the default “Account” form even though it was ranked higher in the Form Sequence.

Hope this helps!

Advertisement

Publishing Error | Cannot start the requested operation | [Quick Tip]

At times, there are scenarios where multiple developers are working together in a project and making cosmetic changes to the customization.

The error reads – “Cannot start the requested operation [EntityCustomization] because there is another [PublishAll] running at this moment. Use Solution History for more details.

And, if there are any Publishing activities going on which was initiated by some other user/developer but others don’t know and they then try to also Publish.

Error

You’ll see the below error, in case you made changes to certain customization and click on Publish Customization

If you click on See Solution History, here’s the URL shortcut for the same – https://[ORGName].[CRMRegion].dynamics.com/main.aspx?forceUCI=1&pagetype=entitylist&etn=msdyn_solutionhistory

And it’ll open up Solution History as below –

What this means?

This means, that there was another Publish operations going on in the background which was running and the current Publish operation need to wait till that one is finished.

Example – If you are publishing Ribbon Button changes from Ribbon Workbench, which looks like this –

So, you must wait for any Publish operation like this to finish.

Or there could also be because some solution is being imported. You can see this in the Solution History

Hope this helps!

Here are some Power Automate posts you want to check out –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Asynchronous Merge in Dynamics 365 CRM Power Apps | Power Platform

If you are familiar with Dynamics 365 CRM and it’s Merge feature for records, here’s a new feature that will let you merge records asynchronously and not hold your time on the screen.

Scenario

Below is how Merging operations would run had Asynchronous Merging not been turned on for your environment –

  1. When you select 2 records, you’ll see the Merge button, of course.

  2. And when you see the preferences which you have to select and move the fields into the Active/Master record.

  3. Once you click OK, you’d see this loading screen as the operation would happen in the background.

  4. Now, depending on how many related/child records you had for the selected records, it would take that longer time to process and it’s inefficient to hold your screen while the merging is happening – much like a Synchronous plugin.
  5. The only advantage is that you would know if anything failed.

    Let’s look at how you can enable Asynchronous Merge on your environment and how this will affect your experience along with some pet-peeves.

Enable Asynchronous Merge

Given that you have correct rights for your Power Platform Admin Center [PPAC] (https://admin.powerplatform.microsoft.com/environments), here’s how you can turn the Asynchronous Merge for your environment –

  1. Select the Environment which you want to enable this on –

  2. Expand the Product section and click on Features.

  3. Now, scroll down till you see the option and you’ll see that it is turned off by default.
    You can turn this On and Save the Settings.

  4. Once this is turned on, you can see this –


  5. And that’s it, you’ve turned on the Asynchronous Merge for your environment.
    Let’s look at how it will behave in the next step.


    Please note that this takes about 20-30 minutes to take effect in my experience.

Behavior

Now, let’s select another pair of records to Merge –

  1. I’ve selected the below records to Merge and I can see the Merge button as well.

  2. And you’ll see your usual dialog box to select the fields you want to merge into the master record.

  3. Now, when you click OK, they’ll be merged post they have completed the Parent Check.
    To read more about Parent Checking while merging records, you can check this – Parent Check for Merging Records in Dynamics 365 CRM | Power Apps
    And the records will be processed in the background for merging and you can continue to work.

  4. Now, in order to find what happened to the merge operation, you can go to Settings > System Jobs.
    And look for this operation.

  5. Once you know how to solve the error (see an example in #3 above), the successful Merge operations’ Job start in the background and you’ll see a toast notification on the top right as below

  6. And then, when you look at the System Jobs, you’ll find that the Job has succeeded.




Here’s Microsoft’s Learn document on the same – https://learn.microsoft.com/en-gb/power-platform/admin/async-cascading#merge-record-example?WT.mc_id=DX-MVP-5003911

Hope this helps!

Here are some Power Automate posts you want to check out –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Parent Check for Merging Records in Dynamics 365 CRM | Power Apps

In case you ever tried to Merge records in Dynamics 365 CRM and it failed, you’d usually see the below error –


The error reads – “Unable to merge because sub-entity will be parented differently. You can disable the parent check prior to execution as part of Merge dialog.

Let’s see why this error occurs and how to solve this.

Scenario

This scenario occurs because the records you are trying to Merge had different Parent records already.
Example –

  1. Notice the below records selected for Merging –
    The Contacts to be Merged already belong to different Parent Account

  2. And when you select them for Merging using the Merge button upon their selection.

  3. You’ll also be given Parent Checking selected by Default.

  4. This is what causes the error.
    Now, if they either had the same Parent or one of them doesn’t have a parent, this won’t appear and they’ll be Merged.

  5. Now, they’ve been correctly Merged and only 1 record exists.

Hope this helps!

Here are some Power Automate posts you want to check out –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Calendar Control View in Dynamics 365 CRM | Power Apps

A Read-Only Grid can only always provide you with a static view of data. At times, it’s important to visualize some data in Dynamics 365 which offer more than just columns.

In most common scenarios, your custom records / customizations might have Start End Dates which is better viewed in a visual way. Here’s where Calendar Control comes into play –

Read-Only Grid

Normally, below is how you visualize your data in Dynamics 365 where you have Start Date and End Date –

  1. As you can see, the data looks like in any other entity you’d design.

Calendar Control

Here’s how you can enable the Calendar Control to change the View in question into Calendar Control –

  1. Go to the Entity/Table itself and click on Controls.

  2. Then, look for Calendar Control in the View.

  3. Then, configure the Start Date, End Date, Description, Duration fields.
    And also make sure the selection is on the Calendar Control itself

  4. Once you save and publish the changes, let’s see how the control looks like.

Viewing Data in Calendar Control

Now that all the customization are published, here’s what the Calendar Control will look like –

  1. If you refresh, you’ll see the same in Calendar Control and not the Read Only grid.

  2. Also, you can switch between Day/Week/Month view

  3. If you click on any of the records, you’ll see the details of the record.

  4. And this will open the record itself.

Switching to Read-Only View

Since the default is now set to the Calendar View, you’ll need to switch it back to Read-Only.

  1. Look for the 3 ellipses or you might just see the View As button on the ribbon already.

  2. And select Read Only.

  3. And you’ll see the default shown

Hope this was useful!

Here are some Power Automate posts you want to check out –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Create Custom APIs in Dynamics 365 CRM | Power Platform

Custom APIs in Dataverse is a great way to build your own API messages to encompass complex business operations into a single API. And Power Platform Admin Center provides a great way to keep things simple and yet build your custom APIs just like writing Plugins in Dynamics 365 CRM itself.

Pre Requisites

In order to build your own APIs, you must know the following –

  1. Writing Plugins in Dynamics 365 CRM – In case you are new to plugin development itself, you can follow this blog series wherein I’ve demonstrated how you can start writing your own C# Plugins for Dynamics 365 CRM.
    Link: Plugins Development in Dynamics 365 CRM for Beginners | [Blog Series]
  2. You’ll also need to know how to connect Postman to your Dynamics 365 CRM environment in order to test your APIs before you can use it in your custom application. I have a blog for the same as well.
    Link: Setup Postman to connect to Dynamics 365 CRM using OAuth 2.0 | Azure App Registration

Scenario

Here’s a scenario where I’ll demonstrate how you can use Custom API to do an operation in Dynamics 365 CRM and send back result to the calling application.

  1. Custom API is exposed to the calling application. Postman in this case.
  2. Once API is called and parameters is passed, a simple update of a field to an Account will take place.
  3. Result will be returned to the calling application. Again, Postman in this case.

Create your Custom API & Parameters in Power Platform Admin Center

Let’s create a Custom API that’ll pass on parameters to a plugin and plugin in-turn will send back the result itself –

  1. Assuming you have created a Solution in the correct Dynamics 365 / Dataverse environment. Click on New, and look for Custom API.

  2. Give it a suitable Name and fill in the Attributes which are required. Here, the unique name of the API is cf_processaccountapi.
    I will cover the other properties in a different blog post.

  3. Now, I’ll create 2 attributes which I need to pass as parameters to the API call itself.
    Hence, I’ll now create 2 new API Request Parameters in the solution by following the below menu.

  4. First will be the Account Code. I’ll select the Process Account API from the Custom API lookup on the form and then give unique name.
    Here, my parameter is of type String.

  5. And once I save this, this is how my parameter 1 i.e. Account Code is supposed to look.

  6. Similarly, my second parameter is as follows which accepts a String value. This parameter is called Grade Code. Again, this is just an example. Your scenario could be anything.

  7. Finally, I’ll also create a Response Property for the Custom API in order to send back the response to the caller.

  8. And just like how I defined the Request Parameters, I’ll also create the Response property as below.
    The form is quite self-explanatory by now.


  9. Once all of this is done, here’s how my API structure looks like in the solution.

Sample Plugin for Custom API & Registering it using Plugin Registration Tool

Given that you know how to work with Plugins in Dynamics 365 CRM, here’s how you can register the plugin as usual –

  1. In my plugin, I’m capturing the values from the attributes just like I would identify the context of a Plugin which runs on Update of an Account.

  2. Then, I’m finding the Account using the Account Code that was passed and updating that Account with the Option Set value which will be the Grade Code.

  3. Then, once all the processes are done, I’m setting the Output Parameter accountProcessResult with the success message.


  4. Open the Plugin Registration Tool and log into your environment. Then, Register the Assembly itself.

  5. Once your plugin has been registered, you’ll need to open the Custom API record again and associate this registered plugin on the Custom API record.
    Open the Custom API record which we created above –

  6. When you associate the Plugin Type, make sure you Save and Publish the customization.
  7. Now, we will test using Postman. Before we test, notice the Account Grade column which is of type OptionSet – we will update this using the Custom API we built.


    The OptionSet fields looks like below –

Testing Using Postman

Now that the code for the Custom API is ready as well as the Plugin too has been registered, let’s test the same using Postman –

  1. Again, in case you haven’t set the Postman to authenticate and connect to your D365 CRM environment, you can follow this post and set up your Postman to be able to call Dynamics 365 CRM.
    Link: Setup Postman to connect to Dynamics 365 CRM using OAuth 2.0 | Azure App Registration
  2. Now, given that you were able to successfully connect Postman to Dynamics 365, you can do a simple metadata call and check if you connection was successful.

  3. Now, look at the unique name of the Custom API we created.
    Now, switch the method to Post, and append the name of the Custom API itself.
    Then, in raw – select JSON type data and construct the JSON to be sent.

  4. And the result will be returned based on what Output Parameters was set.

  5. And you’ll see the data on the OptionSet being updated through this example.

Hope this was useful and this helped in clarifying the concept!

Here are some Power Automate posts you want to check out –

  1. See Trigger Outputs using Edit Columns in Flow Runs | Power Automate [Quick Tip]
  2. Adding Image field on the form in Dynamics 365 CRM | Power Platform Modern Form Designer [Quick Tip]
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Fiscal Year Settings in Dynamics 365 CRM

You or your customers might be in different geographies which need their Sales cycle to follow their respective Fiscal Year (or Financial Year).
Here’s how you setup Fiscal Year settings in your Dynamics 365 Sales CRM and how you can see data accordingly –

Fiscal Year Settings

Promoting use of Power Platform Admin Center, here’s how you can set your Fiscal Year settings from PPAC –

  1. Go to the Settings of the environment.

  2. In Settings, expand Business section and then select Calendar.

  3. It’ll open the Fiscal year settings in a new Tab.

  4. If you are still using the Classic UI in CRM, you need to go to the Business Management area in Settings from the navigation menu.

  5. And there, you’ll find the Fiscal Year Settings

  6. And it’ll open the same Fiscal Year settings dialog.

  7. Now, you can set a prior date to where a new Fiscal Year starts, in the below example, Indian Fiscal Year starts from 1st Apr, so – I’ve set this to 1st Apr 2022. And the Fiscal periods are Quarterly.

  8. Once you click OK, the Fiscal Year will be considered from 1st April. All he subsequent quarters and fiscal year end will be set which will help you see data accordingly.

Viewing Sales Data

Based on the Settings for Fiscal Year set above –

  1. Now, here are all the Won Opportunities.

  2. If you look at Won Opportunities and filter for a particular Fiscal Period (Quarter)
    You’ll see the below Opportunities closed in the current quarter.
    I’ll add a Filter here to show the current Fiscal Period.


    You’ll see data only for current Quarter –

  3. If you select, Fiscal Year (Fiscal Year starting from 1st Apr to 31st Mar), it’ll show the below data.


    And for this Fiscal Year, you’ll see Opportunities closed post 1st Apr 2022.

  4. Similarly, Last Fiscal Year will show data from prior to 1st Apr.


    It’ll show you the Opportunities closed prior to 1st Apr 2022.

  5. Additionally, you also have options to filter for last X Fiscal Period/Year

Hope this helps in setting correct Fiscal Year settings to see correct Sales data.

Hope this was useful!

Here are some Power Automate posts you want to check out –

  1. See Trigger Outputs using Edit Columns in Flow Runs | Power Automate [Quick Tip]
  2. Adding Image field on the form in Dynamics 365 CRM | Power Platform Modern Form Designer [Quick Tip]
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Migrate data with original record GUIDs using Excel Import in Dynamics 365 CRM

Although, there are many tools/provisions which you can use to migrate data in one-go which also helps you retain or take over the original GUIDs from source instance to target instance.

Scenario

Let’s look at this scenario –

  1. You have a Source Environment (https://chcft166.crm.dynamics.com/) from which you want to move data over to the Target environment (https://cft166sales.crm.dynamics.com/).

    Source



    Target

  2. Now, you want to move Accounts from the Source to Target environment and also want to retain the GUIDs from the Source environment.


  3. Let’s note the Source GUID in a Notepad just to show an example –

  4. Now, when we export these records and import into the Target instance, the source GUID should be retained. Let’s look in below sections as to how we can achieve this.

Export to Dynamic Sheet

Here’s how you use Export to Dynamic Sheet in order to also get supporting fields to be imported into Production –

  1. In your desired view, expand on Export to Excel option and look for Dynamic Worksheet.

  2. Select the fields you need and click on Export.

  3. When you Export, you’ll get the Excel file in your system. Open it up!

  4. Just notice that there are 3 hidden fields in the Excel which have other data stored in them. The Excel columns start from “D” instead of “A”.

  5. And when you expand the columns, you’ll see the A, B & C as well. Now, A column has the GUID which you need to be set in the Target instance.

  6. Save this file as .CSV in case this is .XLS

Import into Target Instance

Once you have saved the File in .CSV, let’s import the CSV into the Target instance –

  1. In any view, expand on Import (Look in the Ellipses menu).

  2. You’ll find the Import from CSV button.

  3. Now, choose File by clicking on this button and selecting the File from your system.

  4. Once the File is selected, click on Next.

  5. Proceed further if you don’t wish to change any other preferences.

  6. In Mapping, you can see the fields from the Excel file i.e. (Do Not Modify) Account which is Not Mapped.

  7. Then, for this field look for the Primary Key field of the entity in question. Account’s Primary Key field in this example.

  8. Once this is mapped, you can Finish Import.

  9. Once you Finish Import and check back and open the Imported record.

  10. When you open the Imported record, look at the GUID of the record itself.

  11. If I click on the URL and see the end of the URL, I’ll have the same GUID as the Source record from the Source environment.


    And when you try to match the GUID, you’ll find the same GUID on the target instance.

And that’s how you can Excel Import / Export without other tools to move data with source GUIDs to the Target GUIDs.

Hope this was useful!

Here are some Power Automate posts you want to check out –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Blocking Attachment Extensions in Dynamics 365 CRM
  4. Upgrade Dataverse for Teams Environment to Dataverse Environment
  5. Showing Sandbox or Non Production Apps in Power App mobile app
  6. Create a Power Apps Per User Plan Trial | Dataverse environment
  7. Install On-Premise Gateway from Power Automate or Power Apps | Power Platform
  8. Co-presence in Power Automate | Multiple users working on a Flow
  9. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  10. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  11. Call a Flow from Canvas Power App and get back response | Power Platform\
  12. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  13. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  14. Asynchronous HTTP Response from a Flow | Power Automate
  15. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  16. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!