Sunday, September 15, 2024

D365CE | Alternative to Input Mask PCF control

It's been quite a while since the input mask PCF control has been retired in Dynamics 365 CE.

I recently had to implement a mask on phone number fields and was disappointed to learn that Microsoft had retired the control and hasn't offered any alternatives.

So I had to look for other options and I came across this Check Phone Number PCF control which I found it to be very comprehensive. You can read the full documentation on github.

Steps and options to configure

  • Once you download and import the solution, you can select the field on which you want to enable the component.
  • The Output format helps you transform to the following:
    • International: +91 87855 85545
    • National: 87855 85545
    • E164: +918785585545
Note: I prefer the E164 format. Sure it isn't readable, but it is easier during search because it is impossible to remember the correct format for all the country codes. Having said that, it depends if you're implementing this for only a particular country, then an International or National format could work better for you.
  • You can setup the default country code. When you enter the number without any code, a default country code is automatically setup.
  • You can also setup a list of allowed and excluded country codes. To setup the allowed country codes, you can follow the list here or check the screenshot for an example: ISO 3166 (alpha 2) country codes needs to be used.
  • You can also specify whether you want to phone call button to be shown and which app must be the default calling app.

Here are some sample numbers I have entered for UAE, Italy and India.



Hope this helps!

Wednesday, June 19, 2024

All about Addresses in Dynamics 365

We had a requirement regarding addresses that had to be addressed in Dynamics 365 CE. I thought to share it.

Requirements

  • To be able to select the following fields as a dropdown, preferably a lookup. Fields: District, City and Country because the District and City list may continue to expand in the future.
  • To be able to add multiple addresses against the Account. 2 or more.
  • In case we need to update an address, there must be a provision in the Address table to select the District, City and Country as well. i.e., these fields must be available in the Address table as lookup fields.
These requirements sound simple to implement, however the address entity lacks flexibility due to which we had to think of a workaround.

Things I have learnt about Addresses

  1. On the Account we can add maximum 2 addresses. Address 1 and Address 2. Let's call this embedded address. If we need to add a 3rd address related to an account, we need to create a new address record (in the related system Address table).
  2. While the Country and State fields are available, these are text fields in the embedded address and related system address table.
  3. The related address table is non-customizable. We cannot add additional lookup fields in that entity.
  4. When an Account or Contact record is created, blank Address records are automatically created and linked to the Account (or Contact). These are associated with the embedded address records and are numbered as "addressnumber" 1 and 2. addressnumber 1 represents invoice address and 2 represents delivery address by default.
  5. The system Address tables don't have lookup to Account or Contact. The relationship is identified by 2 fields namely, "objecttypecode" and "parentid". objecttypecode recoginzes if this related address is linked to "Account" or "Contact" and parentid is the actual GUID value of the Account or Contact.

Workaround to address the limitations

Since the system Address entity is linked and tightly integrated in Dynamics 365 CE, we couldn't replace the system Address table with new custom Address table. I am saying this because, system Address primarily linked to Account and Contact, but when we update the address on Lead and qualify it, the embedded Address and correspondingly the system Address records are also updated. Also, indirectly linked with Opportunities, Quotes and beyond. If you're considering dual write integration with Dynamics 365 F&O, these are again tightly integrated there.

Having analyzed this, we went ahead with a custom Address entity but ensured we are keeping the system Address entity records in sync as well.

What did we do?
  1. We created 3 custom lookup fields called District, City and Country on the Lead, Account and Contact tables for easy data entry from users perspective. When the user selects these fields, we populate the OOB District, State and Country text fields and those are automatically updated in the related system address records.
  2. We introduced a custom address entity and ensured the user uses this for their data entry and viewing. When the user updates the embedded address, we also need to create custom address records related to Account.
  3. When the custom address records are updated, we need to update the related system address entity records.
  4. When a new custom address is created, we create a related system address entity record and link it with the respect Account by updating the objecttypecode and parentid.
  5. When the custom address is deleted, we need to also delete the related system address record and update the embedded addresses if the addressnumber matches. By update I mean we had to clear the values in the embedded address fields on the Account record.
  6. For the most part we can treat system Addresses as a target only, as they are a copy of the custom Address entity data. We can set up a business process and data entry process in such a way that system addresses are not updated, however, if some process we don’t know about updates a system Address, it needs to get reflected up to the custom Address as well.
Hope that helps!

Saturday, March 30, 2024

D365 CE | Identify and clean up storage space

Accumulation of data over time can lead to storage issues that in turn impacts system performance in Dynamics 365 Customer Engagement (CE). If you're receiving constant notifications, it means you are reaching the capacity limits or already over capacity.

Here's how you can analyze the database capacity usage and steps you can follow to clean up the data using Power Platform, Bulk Record Deletion and Advanced Find.

Check Database Capacity

Here are the steps:

  • To check database capacity navigate to Power Platform Admin Center.
  • Click on Resources > Capacity. This takes you to the summary page that shows you the overall database usage and percentage available / over. In this case you can see that the Log is much over capacity. So let's see what do these Logs contain.


  • If you click on Dataverse located across  the page as a tab next to Summary, you can see all the Environments and usage based on area like Database, File or Log storage.
  • Click on the chart icon to see the details.


  • Here you can see based on the area and tables that are occupying the most storage. In the below image you can see how the Log usage for table AuditBase has been growing exponentially.
So let's delete the Audit Logs and follow other methods to delete data from specific tables.



Free up storage capacity

  • To do so, navigate to Power Platform Admin Center and click on the Environments.
  • Select the Environment for which we need to delete the audit logs.


  • Select Delete Audit Logs. You can also setup how long you want to retain the logs for for automatic ongoing maintenance.


  • A window will pop-up from the right where one can select appropriate action.


Note: The system can take up to 24 hours to update storage information. It is recommended to wait up to 24 hours and monitor your storage.

This is one of the methods you can use to free up storage space.
  • Similarly you can delete PluginTraceLogs (Advanced Settings > Settings > PlugIn Trace Logs).
  • WorkflowBase


  • Notes with attachments.


Hope this helps!

Tuesday, March 19, 2024

D365 CE | Preferred solution in Dataverse

Interesting concept that I recently came across is to "Set your Preferred Solution" in Dataverse.

By default if you do any unmanaged customizations in PowerApps Maker, are created under the default solution. The drawback is if I add a new field, instead of using the prefix for the solution that I have created, it would use the Common Data Service Default Solution prefix (i.e., new_ or cr_).

Microsoft has now provided an option to setup your preferred solution, so any customization you perform even outside your custom solution will automatically be added under your custom solution. To do so, we need to setup the custom solution as a Preferred Solution.

Here are the steps:

  • When you login to PowerApps Maker, you can see there is an option to select the preferred solution.
  • Click on Manage or click Set preferred solution.

Set up preferred solution in Dynamics 365 CE PowerApps Maker

  • Select the solution from the dropdown or create a new solution.
select the preferred solution from the dropdown list

  • Once the preferred solution has been setup, you can test by going to the default solution and creating a new field or updating the character limit of an existing field. You will notice that the changes are automatically reflect in the preferred solution too.


Hope it helps!

Monday, March 11, 2024

How to use Power Query in Excel and connect to D365 CE (Part 1: Legacy)

Power Query is a robust tool that can be used to connect to the online services (like, Dynamics 365, SharePoint Online, Azure SQL DB, etc.) 

Below are the steps to connect to D365 CE:

  • Open Excel
  • Click Data > Get Data > From Online Services > From Dynamics 365 (online)
Get data in excel from Dynamics 365 CE
  • Go to Advanced Settings in Dynamics 365 CE.
Advanced Settings to access classic settings in D365
  • Select Customizations > Developer Resources
  • Fetch Web API URL from developer resources.
Web API URL
  • Enter in the dialog box (this is a legacy connector)
D365 Online legacy connector
  • Click Organization Account and Sign in
Sign in to connector
  • Once sign in is successful, click Connect.
  • The Navigator will show all the tables that one can use to develop pivot tables, pivot charts etc.
  • Select one or multiple tables that you want to use and transform and load the data into Excel.
Here are the steps to use the Dataverse connector.

Hope it helps!


How to use Power Query in Excel and connect to D365 CE (Part 2: Dataverse connector)

Microsoft has a released a new way to connect to Dynamics 365 via the Dataverse connector. To use the dataverse connector follow these steps:
  • Open Excel > Data > Get Data > From Power Platform > From Dataverse
Dataverse connector in Excel

  • Login using the user who has access to the data.
  • Select one or multiple tables as required.
  • Transform and Load data.
Hope it helps!

Saturday, February 17, 2024

Solved – Power Automate: Cannot write more bytes to the buffer than the configured maximum buffer size: 104857600

We had designed a power automate flow and used the List rows action step. While running the flow, we received the below error.

BadRequest. Http request failed as there is an error: 'Cannot write more bytes to the buffer than the configured maximum buffer size: 104857600.'.

Screenshot of the error below.

Cannot write more bytes to the buffer than the configured maximum buffer size

This happens because there is a 100 MB Message Size limits in Power Automate.

Solution

  • Allow Chunking if it is supported by the action.
Allow chunking in power automate
  • Or be specific with the columns you want to return. In the List Rows action, update the Select columns to limit the data returned.
  • Temporarily update the data in the system so that fewer rows are returned. For example, if your condition is to return all the rows where field_name does not contain data. Say this is return 5000 rows. Now update few rows with some sample data and run the flow so that it returns limited rows for processing. (This is not recommended in production, but could be a quick fix if the client agrees to it).
Hope this helps!