This must be one of the most common scenarios Dynamics 365 Users must’ve come across. The Whole Number’s Duration field shows Duration in Days once it crosses 24 hours, it shows the Duration in Days. Like below –
And once you leave the control, it’ll be converted to it’s equivalent Days conversion
But if you click on it, you can in fact see the Hours
However, It’s not ideal to click on the field and check the Hours on the form. Also, this doesn’t work in case the field is seem from a View on the entity. Unfortunately, we can’t change this behavior. So, to have a workaround, I created a new field to store the translated value.
Hope this implementation is useful to you. In case of any better ideas, kindly suggest in the comments and I’ll be happy to update this post in order to serve full purpose. 😊
To understand the core conversion using long division, refer this post – https://www.calculatorsoup.com/calculators/conversions/minutes-to-hours.php
New Single Line of Text Field and a Flow
Let’s look at how the implementation is –
We’ll need to also review the following Logic Apps’ Math Functions to understand how to apply them – https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#math-functions?WT.mc_id=DX-MVP-5003911
Also, to understand how to read data from triggerOutputs(), check this post – Using triggerBody() / triggerOutput() to read CDS trigger metadata attributes in a Flow | Power Automate
- I’ve created a new Single Line of Text field called as Time In Hours (cf_timeinhours) which will hold the translated Hours & Minutes. Making the field as Read-Only is recommended so that no one changes it on the form post update.
- Now, here’s a Flow (You can configure it either on demand for existing records of on Create/Update of the Duration field which itself to calculate once the value is changed field). Just for example’s sake, my field is on Contact and hence, I’m triggering the Flow on Update of the contact on the change of the Avg Turnaround Time (Whole Number of format Duration) field.
See, that the Body of the step will have the Avg Turnaround Time field storing the duration in minutes.
- First actions is to use Divide to get the Hours. I’m creating a variable called as Divide To Get Hours of type Float.
Here’s how the div function included above looks like –
Explanation: Duration field in Dynamics 365 stores Minutes. First, we divide these minutes by 60 to get the Hours value.
If you divide 3375/60, you get 56.25. But the Div will give you the Integer value. (The right way to divide to get exact float is to also store the 60 in a variable and then work with variables. See this post https://powerusers.microsoft.com/t5/General-Power-Automate/How-to-receive-decimal-number-result-after-dividing/td-p/195399) However, in this case, we anyway need to 56 part, so this is fine for now.
- Next, we’ll multiply the result of the Hours we got from the step above i.e. Divide to Get Hours.
Here’s how the Mul function looks –
mul(60,int(variables('Divide to Get Hours')))
Explanation: Now, we multiple the result of the Divide to Get Hours. This will be used to subtract from the actual value of Avg Turnaround Time field.
Here, we multiple 60 x 56 = 3360 and get 3360
- Finally, to get Minutes, we use the third variable that uses a Sub function
The Sub function looks like below –
sub(triggerOutputs()?['body/cf_avgturnaroundtime'], variables('Number to Subtract From'))
Explanation: Now, we subtract the result of the Number To Subtract step from the value of the Duration field i.e. Avg Turnaround Time field itself. These will be the minutes.
Now, to get the minutes we subtract the result of the Number to Subtract from the actual minutes value of the duration field i.e. 3375 – 3360 = 15. These are your minutes!
- Final step is to simply arrange it in a String (you can also form the string elsewhere directly and skip the below)
- And to make sense of this conversion, I’ll update the field on the record to show what the converted Hours and Minutes is.
- Here’s the final result once the Flow runs successfully.
Hope this helps! You might always want to check more Power Automate / Dynamics 365 posts –
- Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
- FormatDateTime function in a Flow | Power Automate
- Formatting Approvals’ Details in Cloud Flows | Power Automate
- Trigger Conditions not working in a Cloud Flow? Here’s Why | Power Automate Quick Tip
- Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate
- InvalidWorkflowTriggerName or InvalidWorkflowRunActionName error in saving Cloud Flows | Power Automate Quick Tip
- Store ‘Today’s Date’ in a field to use in workflow conditions in D365 CE
- Create a Team, add Members in Microsoft Teams upon Project and Team Members creation in PSA / Project Operations | Power Automate
- Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip
- Using outputs() function and JSON Parse to read data from missing dynamic value in a Flow | Power Automate
- Run As context in CDS (Current Environment) Flow Trigger | Power Automate
- Adaptive Cards for Teams to collect data from users using Power Automate | SharePoint Lists