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.

Scenario

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 –
globalNotif

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

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

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 https://www.microsoft.com/en-in/) –
learnMoreButton

 

Example

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 () {
Xrm.Navigation.openUrl(“https://microsoft.com”);
}
}
var notificationObj =
{
type: 2,
level: 3, //warning
message: “Please make sure you are not sharing your screen!”,
showCloseButton: true,
action: learnMoreAction
}

Xrm.App.addGlobalNotification(notificationObj).then(
function success(result) {
console.log(“Notification created with ID: ” + result);

// More code here
},
function (error) {
console.log(error.message);
// 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() {}

fnAdded

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!!

Kanban view in Dynamics 365 Sales | 2020 Wave 1 Early Access Feature

Kanban View in D365 is another desired feature for Dynamics 365 Salespeople is here in the 2020  Wave 1 Early Access feature-set!

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.

Enabling Kanban View

  1. Navigate to Opportunities and open the My Open Opportunities view
    openOppView
  2. Then, select Custom Controls to change to a Kanban view
    selectCustomControls
  3. Select Kanban and make sure it’s selected for all device types
    selectKanban
    clickOK
    Finally, just Save and Publish.

Using Kanban View

Now, once changes are published, on your My Open Opportunities view (you should already see it in Kanban). If not, select the Show As to show Kanban as an option and then select Kanban.
showAs
selectKanbanFromView

Once done, you can select the Kanban type i.e. based on Business Process Flow or based on the Stage of the Opportunity.
toggleType

How to Read the Kanban View

In the below, screenshot, the value denotes the total of the relevant Amount in that stage. Say, total of Estimated Revenue when an Opportunity is Open and the one on the right denotes total records that can be currently seen against how many records are actually present in that stage
howToView

Based on Status

Now, the Kanban view based on Status will let you move your Opportunity between two statuses. Say, in this example, the status is in Open, you want to mark it as Won.
dragStatus

And when you drop it on the Won status, the Opportunity Close dialog will appear where you can just fill in the required information and just close.
dialogToFill

Based on Business Process Flow

And in Business Process Flow type, you can just move the Opportunity between different stages of the BPF

bpfType

Moving the card to either direction will open up the actual record itself to make the final change.

Hope this post helps you get started!! 🙂

Save generated PDFs to SharePoint directly – 2020 Wave 1 | Early Access Feature

With Wave 1 of 2020, Early Access lets you use fantastic features in Dynamics 365 CE. For Sales customers, this little feature will definitely be a delight!

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.

Let’s start! Till now post Wave 2 2019, you were able to generate PDF Documents from the Document Templates you created for entity records. You can now take it a step further by having to choose between just downloading the file or Saving it to SharePoint directly behind the record.

Pre-Requisites

  1. SharePoint Integration enabled in D365
  2. Generate PDF option enabled for the entity record you want this feature on.
    If you are looking to enable this feature, check this post – Create & Send PDFs from Word Templates for Quotes in D365 CE Wave 2 Updates
  3. Wave 1 2020 Enabled for your Sandbox Organization.

You don’t need to perform additional settings for enable/disable this feature.

Creating PDF

  1. Just as you used to create a PDF from Wave 2019 updates, you need to do the same.
    createQuote
  2. And you’ll be prompted if you want to also save it to SharePoint.
    saveRec
  3. Once successful, you’ll see that it was saved to SharePoint.
    savedToSP

 

Saved to SharePoint

You can check the Documents grid, the Document will be attached there –
DocView
onSP
In this scenario, it won’t do both -Download and Save to SharePoint.

Hope you find this feature helpful!

Create & Send PDFs from Word Templates for Quotes in D365 CE Wave 2 Updates

And as we continue to ride on the Wave 2 October release features of the D365 for Sales, here’s a much anticipated feature Salespeople have been asking for. The ability to send Quotes as PDF (derived from Word Templates) right from the Quote itself.

At the time of this blog, I had enabled the Wave 2 Updates on the trial instance. Kindly try the same in your Sandbox instance first.

If you’re looking to enable Wave 2 Features for your organization, check this post –  Early Opt-in for October 2019 Wave 2 Updates.It is recommended you try these features on the Sandbox first.

Enable PDF Generation

As a part of the Wave 2 feature, you’ll need to enable this in the App Settings in the Sales Hub (typically).

  1. Navigate to App Settings
    appSettings
  2. In App Settings, look for PDF Generation area as shown below, You’ll notice that the feature might be turned off.
    settingOff.png
  3. You’ll simply need to turn it on and then Apply the changes.
    settingOn
  4. That’s it. You’re all set to use it. You’ll now see the 2 new buttons to Create PDF or Email as PDF.
    newButtons

    When this feature isn’t enabled, you won’t see the buttons –
    noButtons

Generate PDFs only

  1. Now, as the name suggests, if you chose to only Create a PDF out of the Word Templates you already have in place, simply drop down the menu and select the template you wish to get the PDF of.
    createPDF
  2. And the browser will throw a file in your system like any other download.
    downloadedPDF.png

Send Directly in Emails from Quote entity

  1. Typically, once things look good, you want to just send out the PDF as an attachment in an email from Dynamics. This button will let you do just that –
    emailAsPDF
    As you observe, this also works with your personal Word Templates too.
  2. Once you click on the Template, an email is ready for you to start writing and send when ready with the template attached as PDF already.
    draftedEmail

There are also some smart emailing capabilities that let’s you send email right from the context of the record. Check this post of mine for the same: Contextual Email communication in D365 CE Wave 2

Hope this helps!

Nested Editable Grids in D365 CE v9 UCI

Nested Grids – as the name suggests is a grid-within-a-grid (or rather, Grid-ception!). Nested Grids will let you expand a sub-grid entry to look at another grid of the expanded record. This depends on how you configure it.

Be aware, Nested Grids work with Editable Grids and only for Tablet, Phones and Unified Interface. This is not available for the classic Web UI.

Configuring Nested Editable Grid

Here’s my entity structure – I have Account, having multiple Contacts and each Contact, having Opportunities under them. Like in the below diagram –

relationships

Now, I have a Contact grid on my Account form (just like we usually do).

  1. I now will have to choose the grid to be a Editable Grid Control as follows. Also, click on the Nested grid view control as pointed
    editableGridControl
  2. On clicking the Nested grid view pencil, the next dialog box will let you select what entity you want the Nested Grid to be for. Note that this is with respect to the Contact entity and not the Account entity. For this example, I chose Opportunities.
    selectEntity.png
  3. On selecting the entity, I have to make sure my View is also correctly set to show the records
    selectView.png
  4. Now, my dataset will populate from the selected Entity and View. next we will need to select what should be bound as a key. Going back to the Nested grid parent ID pencil this time
    selectNestedGridView
  5. Select what should be the field to bind the data. In this case, I want to show the one that is related to the Contact expanded.
    parentControlIdSelection
  6. Now, click OK for everything and your configuration should look like below.
    Finally save and Publish all customization.
    finalConfig.png

Using Nested Editable Grid

Now, if you look at the Contact grid on the Account form. You’ll see an arrow on each record which indicates that it can be expanded.
collapsed.png
And when you click on it, you’ll see the Nested Grid for Opportunities we configured in the section above
expanded
And yes, Opportunity too is editable in-line!

Hope this helps!!

PSA v3 View Custom Controls used on Project form

Here’s a summary of what all Custom Controls are used in the out-of-the-box PSA v3 Project form. I strongly recommend not changing the existing controls/views.

However, if you accidentally delete any Tab/View, this post will help you get it back! 🙂

Project Task View

Project Task uses AdditionalColumns as the Default View from entity Project Tasks (Project)
projectTaskView

and the Control used is CC_ProjectTaskControl and note that the CC_TrackingView is CC_ProjectTaskControl_NotTracking, you’ll see a different CC_TrackingView used later below.
projectTaskControl

 

Resource Assignments View

Resource Assignment uses Active Estimates as the Default View from entity Project Tasks (Project)

resourceAssignmentView.png

And uses CC_ViewType as CC_EstimatesGridControl_AssignmentView
resourceAssignmentControl

Resource Reconciliation View

Resource Reconciliation View also uses the same Active Estimates View as in Resource Assignments
estimatesView

but uses CC_ReconciliationControl for the control
reconciliationControl

Estimates View

Again, Estimates View uses the same Estimates view as mentioned in the Reconciliation View and Resource Assignments View above.
estimatesView

Also, it uses the same CC_EstimatedGridControl but the CC_ViewType is CC_EstimatesGridControl_FinancialView
estimatesFinancialView

Tracking View

Tracking View uses the All Project Tasks as the Default View
trackingView

It uses the same CC_ProjectTaskControl as used in the Project Task view but CC_TrackingView here is CC_ProjectTaskControl_Tracking
TrackingControl

Expense Estimates View

Again, Expense Estimates View uses the same Estimates view as mentioned in the Reconciliation View, Resource Assignments View & Estimates view above.
estimatesView

But the CC_ViewType used is CC_EstimatesGridControl_ExpenseView
expenseViewControl.png

 

Hope this summarizes and helps you build your custom form quicker.

Sending Image from Canvas PowerApps to SharePoint Document Library using Flows

One of the most common requirements is to upload images to SharePoint using PowerApps. From my learning from various sources, I’ll try to “demystify” my explanation to send/upload an image to SharePoint Document Library using Flows on my Canvas PowerApp.

Ingredients

Assuming you have the following things already  in place in PowerApps as well as in SharePoint

  1. PowerApps’ Camera/Image control and a Submit button. In my case, the image above is a camera so that I capture the image I want and the image below is the Image control to show me what I clicked.
    powerApp
  2. A SharePoint Document Library to record, say, Incidents.
    spDocLibrary
  3. We will get to the Submit button on the PowerApp once we create our Flow.

Flow

Let’s create a Flow to pick the Image from your PowerApp, convert it to binary and send it to the SharePoint Document Folder location called Incidents.

  1. Since we want to trigger the Flow from the PowerApps itself, we will select the trigger of the Flow as ‘From PowerApps’ and hit Create
    createFlow
  2. Once your Flow is ready, leave the first step of PowerApps because that’s the trigger. Add Step to create a SharePoint file and fill in the details of the Document Library you have created.
    createSPFile
  3. Fill in the FileContent as above. You’ll need this to be converted in the intermediate step after this.
  4. Now, you’ll need to add an additional step in between PowerApps and the Create SP File step as below. It will be a Compose action.
    addAction
  5. In Compose action, under Expression, select dataUriToBinary expression and make sure you open the bracket as well.
    dataUriToBinary
    toolTipHidden
  6. Now, go back to the Dynamic Content section and select the CreateFile_FileContent to complete the formula.
    fileContentAvailable
    completedFormula
  7. Click OK on the screenshot above and the formula should be set.
  8. Now, replace the File Content section to take in the Output of the Compose step.
    outputRecorded
  9. Save your Flow and your complete Flow should look like this.
    CompleteFlow
  10. I’m naming my Flow as ‘IncidentFlow’ so that I can identify it.
    incidentFlow

Adding the Flow to Submit button

Going back to the PowerApp, let’s Run this Flow on the selection of the Submit button and pass the image.

  1. Now, select the Submit button, and on the Formula bar, add the Flow you created, I named it IncidentRun. Select the same so that the Formula comes as IncidentRun.Run( for you to pass on the image.
    Now, pass the latest image on the collection i.e. the same image which is being displayed in the image control below.

    runFlowFormula

 

Running the App

I just ran the app on the desktop itself, you could do it from your phone too!
So I clicked on the Camera when I was ready, the image appeared in the image control and I that was what I wanted to upload. So I clicked on Submit button.
hittingSubmit

The flow was successful
FlowSuccessful

And my image was in SharePoint too!
imageUploaded

I know it is a lengthy post but I tried to summarize as much as possible. Make sure you have a way to uniquely name each file or else, the same file will be overridden.

Thank you!

 

Fix Ribbon icons on the Unified Interface in D365 CE

So, since adoption of Unified Interface is growing, people are asking – “What happened to the Ribbon icons?”. Well, a simple answer to this is tweaking the implementation a little.

Typically, you have custom icons on your classic Web UI that look like this –
classicIcon

But the same looks like a puzzle piece in the Unified Interface –
puzzlePiece

So, here’s what you need to do. Icons on the Unified Interface take SVG format. You’ll need to take you existing PNG Web Resources

 

Creating SVG Icons

Like most online services or applications, you can easily convert images to SVG. In this example, I’m using this online tool – https://www.online-convert.com/

Or you can try this too which I found quite a few people recommended – https://www.syncfusion.com/downloads/metrostudio

For this example, I used https://convertio.co/png-svg/ And I got my converted SVG document downloaded.
Now, create a new Web Resource in SVG and Upload the same.
svgWebResource

Ribbon Workbench

Once your Web Resource for the SVG format is set, going back to your Ribbon Workbench customization work space, go to the Button where you wan to update the icon and select the SVG Web Resource under Modern Image as shown below

modernImage

Publish Changes and See

Once your customization are published, you can simply refresh and check that your image has been updated

converted
Note: An online converted might not give you an accurate image. However, it is best recommended to create SVGs on an app. I’ve heard recommendations about https://www.syncfusion.com/downloads/metrostudio

Hope this helps!

Create your first PowerApp! Connect to SharePoint Online List

PowerPlatform is the next big thing in

PowerApps comes with several Dynamics 365 licenses and make sure you have been assigned one as well as below –
license

Navigate to https://web.powerapps.com/ to go to the Admin Center and here you can simply start working on your first app.

In this scenario, I want to be able to read from my SharePoint Online list and make decisions based on what data is in the List
spList

Build your PowerApp from data

  1. Among the options to create your app from either Canvas or Model-driven, I’ll chose to build one based on data which is a Canvas type of application.
    startFromData
  2. Now, I’ll chose SharePoint’s Phone layout since I want to connect to my SharePoint Online site to be able to read from my lists
    selectSPApp
  3. Now, since I already have selected SharePoint connector, I’ll be creating a new connection on the next page.
    createSPConnection
    Since this example is for SharePoint Online, I’ll select Connect directly (cloud services).
  4. Now, since I already had accessed the SharePoint Site, it appears in my list. You can either connect to a new Site from + New Connection button on the left-hand side or enter a new SharePoint Site in the URL and click GO. Or even select a recently visited one like I did –
    selectSPSiteFromRecent
  5. Then, choose your list
    chooseList
  6. And it takes a few moments to build out your App. And when it’s ready to be worked on, here’s what you get.
    appIsReady

Understanding your App Designer space

Won’t be covering much details on what each tool does, but wanted to share how things are placed –

  1. On the left-hand side, the App pages/components are divided into three main sections. (Obviously, you are free to add and modify more screens as needed)
    defaultTreeView
  2. You can add several controls on these screens
    insertTab
  3. And these controls/components can be adjusted from the right-hand side pane as below
    customizeProperties
  4. That’s basically the most of the App basics you need to know at this point. I’ll post more posts on that later. 🙂

Publishing Your App & Share

Presuming that your app is now ready to go, her’s what you can do in order to publish

  1. Navigate to File, give a suitable Name to your App.
    appName
  2. Move over to Save and Save your App.
    saveApp
  3. Once Saved, Share the App.
    shareThisApp
  4. Once you click on Share, you can get to Add users who will have access to this App and you can chose their permission level.
    shareWithUser
    permissionSelection

Running your first PowerApp

Assuming you have installed PowerApps on your device and logged in with your credentials, you’ll see the App as below

And you can start working on your App already

Hope this was quick. And then there’s a tremendous lot to be done with PowerApps and leveraging the PowerPlatform!

Discount Settings for D365 Sales Line Items – Line Items or Per Unit?

For Line Item entities Opportunity Products, Quotes Products, Order Products or Invoice Products, you can chose what type of Discount you want to give out.

This is a simple Organization-wise setting  that you’ll need to set to define how Discount should be given on the Line Item level.

System Setting

Navigate to System Settings and under Sales tab, find this setting
lineItemSetting

You can chose either between Line Item or Per Unit.
options

Discount Behavior

Line Item

Now, when the Discount method is set to Line Item, the Discount value will be given to each of the Line Item regardless of the Quantity
lineItemCalculations

In the above example, the Discount $50 is applied to the entire Line Item entry of 2 quantities of the commodity of the price $1200 is

2 x 1200 = $2400 – $50 = $2350 ($50 Discount given to the Extended Amount)

Per Unit

And in case of Per Unit, the Discount amount of $50 is given to each Quantity in the Line Item
perUnitCalculation

In the above example, the $50 Discount is given to the quantity of commodity of worth $1200 each. i.e.

2 x $1150 ($50 Discount given to each Price Per Unit amount) = $2300

Hence, it vital what setting you want to use while giving Discount to Line Items in D365 Sales

Hope this helps! 🙂

 

“Enable Mobile Offline” for D365 for Phones app in D365 v9.x

Finally! After much await and as April 2019 kicks in, the Mobile Offline capability for D365 Apps is finally setting in. But remember, this is in preview as of April 2019 and is not recommended for Production use.

Here’s you can enable Mobile Offline for any Dynamics 365 App

  1. You can see that you can now turn on Enable Mobile Offline for a certain app.
    beforeEnable
  2. Once you select it to tick, you’ll need to select a Mobile Offline Profile. Out-of-the-box, I have selected Sales Sample.
    selectedProfile
  3. These profiles are available for creation and edit in your Default Solution if you go and see
    profileInSolution
  4. And, they specify what properties should the offline mode have. Also, make sure the Users who should have this capability should be added to Users grid as shown below in the Offline Profiles.
    insideProfile
  5. Once done, save and Publish your Unified Interface app in the App Designer. Make sure the Profile is Published too!

Running Mobile Offline

When you open the Mobile App for that user, there’ll be a notification pop-up saying that changes on the org were made and you’ll need to update the same.

And when the update is complete, you’ll see the entities which are enabled for offline like the ones marked below (by a wifi signal icon)

 

So, let’s assume you are offline, you won’t be able to view records that are not enabled for Offline and will see the below error instead.

 

And the entities like Accounts, which is enabled for Offline, you’ll see the record as below

To summarize, that was the Offline for Mobile which is in preview as of April 2019. Hope this helps!

Import Time Entries in PSA from your Bookings in D365 PSA v3

Often, one of the real-life scenarios is making time entries by either remembering what you did the whole week or looking at the Schedule Board and based on what you were booked, making each Time Entry in PSA manually.

Tiresome and inefficient, right? Not any more, a cool feature let’s you just create Time Entries in PSA v3 by a single click.

Now, let’s say your Bookings look like the below. I’m booked on 2 projects across the week.

scheduleBoard

And now let’s see how we import these.

Import Time Entries

  1. Let’s see you want to make time entries now based on you Bookings in D365. On the Time Entries scree, drop down to the arrow besides Import.
    dropDown
  2. Select Resource Bookings. (Obviously, like this method – you can import from Resource Assignments and Outlook Sync too! But we will keep that for some other day)
    importFromBookings
  3. Then, you can select what all Time Entries should actually make it to the records. So you can select the ones you need and leave the rest.
    summaryOfImport
  4. Once you click on Import, it’s done! Time Entries are created.
    imported

Works like a breeze!

How to add Rating Values to Rating Models in D365 Field Service and PSA

Rating Models and Rating Values are attributed to Bookable Resources in Dynamics 365 PSA and Field Service. Out-of-the-box, there are 3 Rating Values – Familiar, Good & Proficient. But obviously, you want to customize to have your own.

This is a tricky change and this post will exactly describe before you end up doing something wrong.

If you think all you need to do is add a Rating Value to the Rating Model and save, it won’t work

addRating

Because when you do this, the Value field is locked and you can’t enter anything and just saving the record with the name of the Rating Value will result in the error as shown below

errorWhenDirect

Update Max Rating on Rating Model

So, the right way to do it is to update the Max Rating Value on the Rating Model record.

updateMaxRating

As soon as I save the record, see the an additional Rating Value appears. And in fact, these are the new records that were created when you updated the Max Rating Value and not that the old ones were renamed to ‘Enter rating label here…’

newLabelsToEnter

Note: You can simply enter the record and update all the Ratings inside to the corresponding values.

What happens to existing Ratings used for Resources?

They are all there but have been deactivated, if you query all the Rating Values as is, you’ll see the ones created due to the change we did above and the ones that already existed were suffixed with “[Inactive]” label. See below –

newlyCreated

Well, since these are all the new records created, the old ones are ‘Deactivated‘. What remains with the existing Bookable Resource Characteristics records are the Inactive ones.

inactiveAssigned

To update these, you can do a simple Advanced Find by querying one of the inactive Rating Values and updating them using Bulk Edit to set the new one.

  1. Query the inactive ones
    queryInactive
  2. And simply Bulk Edit to update the Inactive ones
    bulkEditInactive

By the way, if you want to Bulk Clear and start fresh, you can check my blog on Bulk Clearing fields using Advanced Find here – D365 Quick Tip: Bulk Clear field values

Hope this helps you!

 

D365 PSA: Restrict Project access only to their Project Managers

Out-of-the-box PSA’s Project Manager security role provides complete access to even other Project Managers. But then, what if you want to bring down the access of the Project Managers to their own Projects only?

Remember, access in D365 PSA is provided for Owner (ownerid) field and not Project Manager (msdyn_projectmanager) field.

PSARoleRestrict

Scenario

Now, I don’t want a Project Manager to have access to others Projects and looks like this can’t be controlled from the Security Level perspective, given the Project Manager is a separate field than Owner of the Project.

So, I’ll limit the access to only the User level (the one who created the record would have the access, obviously)

PSARoleRestrict2

But this remove the access from even the Project Managers since they don’t own the Projects. To overcome this, I’ve written a simple plugin to provide access to the Project Manager whenever they are updated by Sharing and giving PMs the access.

For this, I’ve written a plugin code that will grant all permissions to the Project Manager of that Project and I would like to share this with you all to consume it.

GitHub Project

Here’s the GitHub repository I’ve created which has the plugin code and the Unmanaged Solution that contains only the plugin assembly and the registered step –

Link: D365PSA-PMAccessRights

gitProj

The D365 Unmanaged Solution resides here –

unmanagedSoln

This will work in the following scenarios –

  1. When a Project Manager is changed from Person A to Person B, the access rights of Person A will be removed and granted to Person B.
  2. You can even create a trigger field and use an on-demand workflow to set the trigger. This trigger should be included in the filtering attributes of the plugin step to update the existing records.

This will provide access to the Project Manager of the Project automatically apart from the Owner so that they see/access only Projects that concern them
accessGiven

Make sure no other security role is overriding your restricted access.

Hope this helps! 🙂

Opt-in for April 2019 Preview Updates

Finally, as scheduled on 1st Feb 2019, April 2019 Preview Updates can now be opted in for your organization.

Opting-in is available for Sandbox, Trail and Production environments.

Opt-In

  1. You can now go to https://admin.powerplatform.microsoft.com/ and look for the Organization on the left hand pane
    pPlatformEnv
  2. Select your Organization, look for Updates section on the bottom or right hand side
    manageOrgs
    Zoomed In
    zoomedManage

  3. Click on Activate now. Be careful, these changes can’t be undone.
    activateNow
  4. Enter your Org name and click Continue
    orgName
  5. And it will take some time to activate
    activating

 

And once you are set, you’ll see that the April 2019 update was applied –

aprilApplied

 

Happy D365’ing!

Linear Slider Custom Control in D365 v9.x UCI

Using Custom Controls is the new cool in Dynamics 365. Specifically, if visual cue of approximation or ‘to what extent’ is priority over the textual/numeric data, using Custom Control is the best way forward.

Something like this –

featured

Use Case

In my use case, I want to know the client budget so that I keep Quotes for them around the range they can afford.

Now, number will give me an idea. But a visual cue of the same will let me know the spending capacity of the client in the bigger picture.

So, I’ll use Linear Slider custom control on the Client Budget currency field to show a slider as well as the currency value.

Enabling Linear Slider on Currency Field

  1. So here, Client Budget (new_clientbudget) is my Currency type of field in D365.
  2. On the Form Editor, I’ll go to Properties of the field and go to Controls. Click on Add Control…
    addcontrol

  3. Select Linear Slider among others and click Add.
    addslider
  4. Then, I’ll set the properties of the control. Make sure you enable them for Web, Phone and Tablet as per your preferences.
    sliderproperties
  5. I’ve set the min and max range for the control, also that step which should reflect while moving the slider.
  6. Finally, click OK and publish changes.

 

Linear Slider

featured

You can even input custom number in the box and the slider will set to it.

manualnumber

 

Hope this was useful! 🙂

Thanks for reading.

Use Azure App Passwords for MFA enabled D365 authentication from Console App

If you have a Console App that authenticates to D365 using a credential (typically, an Administrator) but now the administrator is setup for Multi-Factor authentication, your Console App won’t work. So here’s what you can do.

If you first want to check out about enabling Multi-Factor Authentication, you can check my blog post on it here – Office 365 Admin: Quickly Enable Multi-factor authentication for users

Standard Authentication vs MFA enabled User

When there’s not MFA enabled for Dynamics 365 (Office 365) account credentials, you are able to connect to the organization with no issues and get the CRMServiceClient in your application easy.
authenticated

But, if you have Multi-Factor Authentication enabled for a credential that is used in Console Apps to connect to D365, the Console App will not connect and the CrmCerviceClient will have null as below with the error ‘Unable to Login to Dynamics CRM

unabletologin

Managing App Passwords on Azure Portal

Once you have multi-factor authentication enabled for your account, you can go to portal.azure.com and manage App Passwords as follows –

  1. In Azure Portal, go to your account settings.
    gotoaccount
  2. Then, go to Additional security verification
    additionalsecurityverification
  3. Look for App Passwords
    apppasswords
  4. You can manage and create more passwords here
    manageapppasswords
  5. Create a password if you don’t want to use a default one or want to use different passwords for different apps. Give it a suitable name and click Next
    createapppassword
  6. Copy the password as it is the only time it will be displayed.
    copypassowrd
  7. And you can see your passwords as you create them
    morepasswords

 

Implementing App Passwords in Console App

As the name suggests, App Passwords will let you create special passwords for applications to authenticate to Dynamics 365 without needing to go through multi-factor authentication like when you’re running a Console App to connect to Dynamics 365

  1. Go to the Password in the credentials in the App.Config of the Console Application
    oldpassword
  2. And replace it with the App Password
    newpassword
  3. Now, Build the application and run it. It will authenticate successfully.
    authenticated

Hope this helps! 🙂

 

Restrict User Access to a D365 instance using Security Groups

Use Case

You have multiple instances and you don’t want every member with a D365 license to be able to access each of those environments. How do you tackle this? Answer is using Security Groups on the Environments and Users.

Creating Security Group

In Office 365, create a Security Group and add members to it who should have access to the desired environment.

  1. Navigate to Groups in Office 365 and create a New Group. Give it a suitable name.
    creategroup
    groupname
  2. Add members to the Group who should have access. Click on Edit as shown below to Add members to the group and select the members and save it.
    editmembers
    addmembers
    membersadded
  3. Your Security Group is ready.
    securitygroupready

Apply Security Group to the D365 instance

  1. Navigate to Dynamics 365 Admin Center and select Edit on the instance you want to apply the Security Group on.
    editinstance
  2. Select the Security Group field and select the Security Group you created.
    selectsecuritygroup
  3. Click Next.
    clicknext
  4. Save once confirmed that you have selected the correct Security Group.
    saveinstance
    That’s it.

Who all can access the environment

All those are a part of the Security Group applied to the instance will have access to the environment including the Global Administrator
enabledusers

Rest of the users will be in the Disabled Users list
disabledusers

And if they try to access the environment, they will not be able to and will see this –
accessdenied

Hope that was easy! 🙂

Using ‘Clone a Patch’ & ‘Clone Solution’ in D365 Solutions

Doing incremental deployments from Sandbox to Production is a part of every other D365 implementation.

And when do this, typically, you just create a new solution for every single time you move things over. This creates a lot of mess and leaves your Solutions in unorganized dump!

Let’s see how we can stay organized by using Clone a Patch and Clone Solution to keep things synced and clean

Clone a Patch

Clone a Patch should be used when you don’t want parent dependencies in the solution all over again unless you want to change them. So, always use this when you want to add newer things to a previously existing solution.

  1. I have created MainSolution_1 as my main solution, the first time I started my customization. I added only 1 field, called Target Sale for demonstration purpose.
    mainsolution
  2. Now, let’s say I deployed it over, the next time I want to add some more functionality to the existing solution I deployed, I should not create another solution.
  3. Rather, I’ll use Clone a Patch as shown below.
    cloneapatch
  4. In Clone a Patch, I’ll keep the Display name same and the version number is configurable up to the last 2 sub-versions.
    clonepatchproperties
  5. So this is how my Patched solution will look.
    preparedclone
  6. In this solution, I’ll add another field called as Min Target To Achieve and deploy it over to Production, maybe.
    patchcontents

Clone Solution

Clone a Solution is used when you have a main solution and several patches. Clone a Solution will roll up everything into a new “parent” solution and remove every other solution of which you cloned including the source solution.

  1. I’m select MainSolution_1, the first main solution I had created with the field Target Sale field. And then I chose to Clone Solution.
    clonesolution
  2. Similar to Clone a Patch, I have now the version control over the first 2 version numbers and since it is the first Clone, the final numbers are 0.0. I named it MainSolution_1_Cloned.
    clonesolutionproperties
  3. It takes a few moments to Clone everything.
    inprogress
  4. Now, I have cloned the solution and the resultant solution has all the components from the Main Solution as well as from the Patch solution summed into 1 final solution.
    cloned
  5. Also, notice that all the other solutions including the MainSolution_1 from which I cloned this solution is deleted.
    cleanedsolutionsarea

Thereby, you have a clean Solutions area with all sorted work.
Hope this helps. 😊

D365 Quick Tip: Delete Records Imported by mistake

One of the most common blunders often made in Data Import are importing whole lot of records without finalizing.

And when you import, you realize you needed to add something more to the Import or some things were pending in the Excel file and you ended up uploading them all!

Delete Imported Records

  1. Assuming your Import was successful and you want to now just revert what all was imported, navigate to Settings > Data Management > Imports.
    importjob
  2. Open the Import job and look for the option under Delete which says ‘All Records Imported to This Entity During This Import
    mainaction
    There, quite self explanatory.
  3. Once you click on it, a Delete Job is triggered once you fill in the below information
    deletejobset
    Important: When I select ‘In addition to deleting imported records, also delete import job history’, it will also delete the Import Job I started in Step #1. If you still want to keep it, you can according to your personal preference.
  4. Now, when you go to Settings > Data Management > Bulk Record Deletion, find the Import you started in the step above.
    deletedrecords
    Note that there are 4 records deleted here though I imported 3 records. The additional record is of the Import Job deleted while setting up the Deletion job in step#3 above.

Hope this quick tip helps! 🙂

 

Use Learning Path for your D365 v9.x Organization – Part 3 | Guided Tasks

After 2 posts to trying to summarize Learning Paths, here we are to Guided Tasks which conclude this series. We will see D365’s early adopters can get acquainted with processes in your organization and getting them to know the system.

To check the other 2 posts – Please follow the below posts

  1. Setup – Use Learning Path for your D365 v9.x Organization – Part 1 | Setup
  2. Sidebar –Use Learning Path for your D365 v9.x Organization – Part 2 | Sidebar

Configuring Guided Tasks

  1. Assuming you are already in Learning Path > Content Library. Select Guided Task.
    guidedTask
  2. Fill out the properties of the Guided Task like the name and how you want it to behave.
    guidedTaskProperties
  3. One you save, you get a Flow Editor where you can add 4 different types of Guided Task modal.
    flowEditor
  4. So, these 4 types of modals are available. Here’s what each of them do –
    1. Step with Next Button – Simple instruction in Text or Video and a Next Button
    2. Step with User action – Will make you click the button/action it is pinned to. And only then move forward.
    3. User Action with Next Button – This is a combination of A and B above. You can either select the action or skip to next step.
    4. Learning Step – It is like a tip and comes with a Button that can open another Learning Path Published item. Like, Sidebar in my case.
      stepTypes
  5. When you drag either of the above onto the screen, the D365 screen is highlighted with areas where you can drop it and it gets pinned to that item.
    skeleton
  6. On each of the types of modals, you get to either enter Text or add a Video.
    contentTypes
  7. For Learning Step modal, you get to also configure what will open when user clicks Learn More.
    learnMoreEditor
  8. In my case, I’ve opened the existing Sidebar from Part 2 of the blog series.
    sideBar

Finally, my track looks like this –

track

Previewing and Publishing

  1. Once you are done editing, Save your changes and Check In your changes.
    confirmCheckin
  2. Once you proceed, you’ll be asked in the same way as Sidebar to specify which all environments you want to publish this to.
    envSelect
  3. On publishing, you’ll see this notification.
    published

Seeing Guided Tasks Work

    1. Step with Next Button.
      stepWithNextButton
    2. Step with User Action (Notice that it doesn’t have a Next button but is asking you to click on the Gear Icon)
      userAction
    3. User Action with Next button, either of which will take you to the next step.
      nextUserButton
    4. Learning Step (Clicking on Learn More will open the Sidebar on the right hand side)
      learningStep
    5. Sidebar showed up on clicking Learn More from Step 4 above.
      LearnMoreSidebar

Hereby, I conclude Learning Task. I tried to keep it as short as possible. But then, lots of screenshots.

To summarize, you can read previous blogs in this series
1. Setup – Use Learning Path for your D365 v9.x Organization – Part 1 | Setup
2. Sidebar – Use Learning Path for your D365 v9.x Organization – Part 2 | Sidebar

Hope this gets you through Learning Path quickly! 🙂

 

Use Learning Path for your D365 v9.x Organization – Part 2 | Sidebar

Sidebar is a component in Learning Path where you can design a Sidebar that appears like a tray popping from the right side of the screen. You can have quick help items in it so that new users to D365 can use it to get help on the most frequently requested items in your Organization.

Before you begin, you can check my post i.e. Part 1 post of this series on setting up Learning Path in D365 – Use Learning Path for your D365 v9.x Organization – Part 1 | Setup

Also, check out Guided Tasks in this blog post – Use Learning Path for your D365 v9.x Organization – Part 3 | Guided Tasks

In my last, I setup Learning Path in D365 Org, let’s take a look at designing one of the aspects of Learning Path i.e. Sidebar

Creating a Sidebar in Learning Path

  1. Assuming you have gone through the setup of Learning Path and you are now navigated in your Org to Training > Content Library. Content Library is open and you need to select Sidebar
    createSidebar
  2. On opening the same, you’ll be asked to set preferences of what should the details of the Sidebar be
    sidebarProp
  3. On clicking Save, a designer pane will open on the right hand side of the Page like so
    editorOpened

Designing your Sidebar

Now, let’s put a few items on the Sidebar and publish it to see how it looks

  1. I’ve given a suitable Title to my sidebar, I’ll call it CFT117 Helpdesk for now. Then, when I want to first item, I’ll click on Section #1 below that and a Pencil and Delete icon will appear. I will select the Pencil Icon to start editing my first section
    editingSection1
  2. On clicking the Pencil, a menu to show what all I can add appears, for example, I select List of Links (I will just give link to a website here)
    selectContent1
  3. Once I select List of Links, editor to add Links will appear. I’ve given a title to it called as Visit Company Website and I’ll select + Add Link as shown below
    addLink
  4. After clicking on Add Link as in #3 above, I get options to specify what the link will do. For example, I’ll select Webpage since I want to redirect to the company website
    defineLink
    linkDetails
  5. After I click Next, the first Link will be set and will appear like this.
    linkSet
  6. Next, I’ll select to add a Video (you can select what you want to show in subsequent sections as mentioned in step #2 above).
    So, I’ve given a title ‘Using PSA’ and entered the URL of the video I wanted to show. Finally, my section will look like this
    videoProperties
  7. After everything is done, I’ll click on Save
    saveSidebar

Publishing Changes

  1. Next, on the button left, you can select Preview.
    preview
  2. Once someone clicks help, this is how the pane will look. Finally, if you’ve decided to publish it, you can click on Publish button on the bottom left
    previewShown
  3. And you can select which all Orgs you want to publish this Sidebar to –
    publishControls
  4. On confirmation, it will tell you that the content has been published successfully.
    published

Using Sidebar

Now, our Sidebar is ready. And once the user clicks on the Help Icon on the top right as shown below –
clickHelp

They’ll see the Sidebar as you designed
sidebarDisplayed

 

Excuse me for the unusually lengthy post. Hope this helps! Learning Path – Part 3 – Guided Tasks has been published too – Use Learning Path for your D365 v9.x Organization – Part 3 | Guided Tasks!

Use Learning Path for your D365 v9.x Organization – Part 1 | Setup

Learning Path an intuitive feature as compared to Customized Help. Customized Help will take you to an entirely different section whereas Learning Path will guide you through the application when you use the system. This is a multi-part blog series which will walk-through the setup of Learning Path and use of Guided Task and Sidebar in Learning Path.

Also, I’ve you’ve already setup Learning Path on your org, you can read my post on using Sidebars in Learning Path – Use Learning Path Learning Path for your D365 v9.x Organization – Part 2 | Sidebar

And Guided Tasks is here – Use Learning Path for your D365 v9.x Organization – Part 3 | Guided Tasks

Learning Path is available on Customer Engagement and the organization must be on D365 December 2016 Update or later.

Let’s look at how you can enable this for your Organization

Opt-In for Learning Path

  1. First step is to go to Settings > Administration > System Settings. Under General Tab, find ‘Enable Learning Path’ and ‘Enable Learning Path Authoring’. Make sure ‘Use custom Help for customizable entities’ is set to No.
    optIn
  2. When you chose to enable Authoring, a confirmation will be asked for your consent according to Microsoft policies.
    confirmAuthoring

Learning Path Authoring Group

  1. When you’ve opted in for Learning Path Authoring, and in your navigation you go to Training > Content Library under Learning Path.
    lpSiteMap
  2. But you’ll be treated with this message below because you’ve not yet been added to the Group in Office 365.
    lpError

Add to Learning Path Authoring Group in O365

  1. In your Office 365 Admin Center, navigate to Groups as shown below
    authoringGroupInO365
  2. And you should add the Sys Admin user to the Learning Path Author groups as shown below –
    adminAddedToGroup

    Sync Roles in Content Library

    When you’ve enabled Learning Path successfully, you will need to check which Security Roles are enabled in Learning Path designer. The content is shown to users based on the precedence of their security roles.

    1. Navigate to Content Library, you’ll find Configuration button on top as shown below –
      configApp
    2. Under configuration, you’ll see Sync Role button which will sync security roles with Customer Engagement security roles. You can set your precedence of Security Roles before you Sync Roles.
      syncRoles
    3. Click Yes to confirm, it takes a few minutes while it’s happening in the back end.
      confirmSync
    4. Upon completion, you’ll see this message and you know you’re done.
      syncDone
    5. Once everything is setup, you’ll be ready to use Guided Task and Sidebar in Learning Path which I’l be covering in further blog posts in this series.
      lpReady

     

Here’s Part 2 – Use Learning Path Learning Path for your D365 v9.x Organization – Part 2 | Sidebar

And Part 3 – Use Learning Path for your D365 v9.x Organization – Part 3 | Guided Tasks

Use setFormNotification (Client side JS) in D365 v9 while Real-Time workflow is executing

Often, when a real-time workflow is being executed in the background, users don’t know how long it will take for the processing to finish. setFormNotifications in D365 v9 come handy!

Scenario

Here’s how I put my scenario –

  1. I call the Real-Time workflow using JS, example, on change of a certain field or the JS being called from the Ribbon button.
  2. The JS will trigger the Real-Time workflow I have.

Now, while the Real-time workflow is running, the user doesn’t know it has been called and should the user retry the same action? Here’s when the form notification is vital.

While the processing is happening, the message will remain as a notification on the form. Once the processing is complete, the notification will be cleared.

JS Implementation

For the JS code implementation, the function to call the workflow needs ProcessJS which is available on https://github.com/PaulNieuwelaar/

  1. So on the Form, I’ll add my file after ProcessJS file.
    formProperties
  2. Here’s the Account Form code I wrote. I created a JS file to call the Real-Time workflow.
    jsCode
  3. In the above code, the Xrm.Page.ui.setFormNotification(Message, Type of notification, Unique Identifier); This will set the notification.
  4. Page.ui.clearFormNotification(UniqueIdentifier); will clear the notification from screen.
  5. Using this, When the Process enters in Processing mode, the message is shown on screen as “Please wait while processing”
    messageShown
  6. And once the execution is finished successfully, the notification is cleared.
    wfExecuted
    notificationCleared

Similarly, you can even use this approach for WebAPI calls and have clearFormNotification set in the Success/Failure callbacks.

Hope this helps!

BPF Process Stage Name not populating on records in D365 v9 [Deprecated] and workaround.

At times, users are unaware of the deprecation announced for D365 v9 version earlier in 2018 or simply, they’re not aware whether to look for deprecation announcements. One of the most common instances I’ve come across lately are when people complaining about the Process Stage Name entity not updating post the v9 update.

missingData

Deprecated Feature – Process

So when you try to add these columns in you entities’ views, you’ll see that StageID (Process Stage) is now shown as Deprecated.

deprecatedField

Read More About It Here

Here’s the Microsoft link where this is stated and other deprecations for upcoming D365 versions:

https://docs.microsoft.com/en-us/dynamics365/get-started/whats-new/customer-engagement/important-changes-coming#legacy-process-related-attributes-in-entities-are-deprecated

Alternative/Workaround

But, it is important that you also have a workaround at hand to keep the data up to date. Here’s a quick workaround to get the Stage Name.

  1. Create a custom Single Line of Text field on the entity that you need the Stage name on. In this case, Opportunity entity.
  2. Create a Real-time Workflow on the BPF entity itself. In this case, it was the Opportunity Sales Process BPF’s entity called as ‘Opportunity Sales Process’.
    wfCreate
  3. The workflow will be triggered when the Process is Applied and then Active Stage field is updated on the BPF.
    wfBody
  4. And in the Step, it will only update the Opportunity’s custom field to the Active Stage.
    wfUpdateStep
  5. That way, you can have the Stage Name data in your custom field and use that instead.
    populatedDate

 

Hope this helps! 🙂

 

 

Create a New Record button for Activity Type entity using Ribbon Workbench: D365

Problem

Typically, when you create a new Activity type of entity and you want a Create button for the same, it just appears in the Other Activities fly-out button and not on the Main ribbon in Activities to be specific.

currentProblem

And you can’t simply drag it out in the Ribbon Workbench since it is a dynamic button.

dynamicMenu

So, in this blog, I’ll create a button to open a new Create record form for my Activity type of entity called Assignment.

Customization

  1. Create a new Solution in your D365 environment and only add Activity entity into it.
    createSolution
  2. Load this solution into Ribbon Workbench and on the Main ribbon, add a button and give it a Name and Icon
    Note: Since there was no space in the Activity Ribbon, I had to sacrifice on of the least used Activities I had.
    sacrificeButton
  3. On that, I created a new Command and provided the below parameters –
    commandParameters
    Make sure you enter the name of your entity in String Parameter shown above correctly, in my case, it is new_assignment.
  4. Attach this Command to the Button
    mapButton
  5. Now Publish and check.

Create Assignment Button in Action

Now, when I go to Activities, I see my button called Assignments

buttonAppears

 

And when I click it, it open the full form for the Assignment entity

newForm

Hope this was quick!

Bringing back Maintain Bookings Availability View from D365 PSA 1.2.x into 2.4.x

Disclaimer: This is an experimental implementation and is not recommended out-of-the-box. My assumption is Microsoft would not provide support for anything that gets goes wrong while implementing this, with the original MS scripts or anything that intervenes with out-of-the-box functionality. Kindly implement at your own risk, do not change the existing out-of-the-box files and back up entities/files before any customization.

Maintain Bookings Schedule Board view in PSA 2.4.x?

Recently, I upgraded PSA from v1.2.x to v2.4.x. And I missed the classic Availability view of the Maintain Bookings of the older version. 2.4.x has the new Schedule Board approach.

Schedule Board based Maintain Bookings view as below
scheduleBoardView

Instead of the old Availability View from the v1.2.x version which looked like this –
availabilityView

Also, even other projects bookings were seen which wasn’t desired and editing the hours was added effort. Se let’s see what we can do her –

Pre-Requisites

  1. Knowledge of Ribbon Workbench in the XRMToolBox.
  2. Make sure you have any D365 environment having PSA in version 1.2.x. You’ll need the older ProjectTeamActions.js file from that version of D365 PSA 1.2.x.
    originalFile

Customization

  1. I prepared a new JS Web Resource (named it MyCustomProjectTeamActions) in the target PSA 2.4.x environment and added the code from the PSA 1.2.x’s PSA file ProjectTeamActions.js file referred in the Pre-Requisites section above
    customWebResource
  2. In the XRMToolBox, connect to the 1.2.x’s Specify Pattern button on the Team Member Sub-grid view, you can use that as a reference.
    longViewSpecifyPattern
    closeViewSpecifyPattern
  3. In your updated PSA 2.4.x’s Org, assuming you have copied the ProjectTeamActions.js from the older org to your custom Web Resource file in Step 1 above, you can prepare a new custom button next to the existing one and use your custom file instead on your button. I just called it ‘New Maintain Bookings’
    customMaintainBookingButton
    customWRInButton
  4. And Publish your changes. Then go to the Project’s Project Team Member view and see your new button work.

Seeing it Work

  1. Now your new button appears besides the current version’s Maintain Bookings.
    teamMemberView
  2. And that will bring up the Availability View for the Maintain Bookings on how it was in PSA 1.2.x
    availabilityView

Hope this helps you out too!

Talking Points in D365 AI For Sales

Overview

Talking Points is a D365 AI for Sales feature that helps you to start a conversation or bring in ice-breakers if you are going to communicate with a contact the next time.

It gives you highlights on the Contact form about what was communicated in the past and you can use that suggestion to bring it up in your conversation with the D365 Contact.

Talking Points works for the below topics –

Health, Family, Sports and Entertainment

Pre-Requisites

  1. The user who will use Talking Points must have Server Side Sync enabled for their mailbox.
  2. Make sure Analytics feature is enabled for your organization. You can find it in the Admin Center.
  3. Enable Sales AI in your D365 Organization. To learn more about Sales AI, check my post on enabling Sales AI for your Organization – Enable D365 AI For Sales in v9.1.x
  4. Turn on Talking Points by clicking on the check box
    selectTP
  5. And then clicking on Save button show on the top right corner of the screen.
    clickSave
  6. Once Talking Points preferences are saved, you can see what all you selected
    savedSettings
  7. Additionally, also make sure the card to display Talking Points is enabled on the Contact form.
    contactForm1
    visibleByDefault

Talking Points

Now, let’s see an example of it’s working.

  1. Priyesh sent me an email telling me that he’ll be late as he was at a Baseball game. And out of curiosity, asked if I follow Red Sox team.
    redSoxMail
  2. D365 AI For Sales’ Talking Points analyses the conversation and in D365’s Contact for Priyesh Wagh, shows this card telling me that Sports was being discussed/sent in the message
    talkingPoints
  3. So, if I am about to talk to Priyesh and I am looking at the D365 Contact before I speak, Talking Points can tell me what else I can talk about apart from just work.
  4. It’s a great functionality to give a more personal touch to the conversation than just discussing work, maybe.

    Enjoy exploring Talking Points.

Enable entities for Dynamics 365 App For Outlook

So, you’re all set to use D365 App For Outlook from your OWA (Outlook Web App) or even from your Desktop client. Let’s look into enabling any given entity (predefined or custom) to show up while searching in the D365 App For Outlook

Let’s say, you have these entities already enabled when you recently setup the App
noEntityDisplayed

And you don’t have your custom entity, say, Customer Subscriptions enabled yet. So let’s set that up.
actualEntity

Pre-Requisites

  1. Make sure the users’ mailbox is synced using Server Side Sync and they have been enabled to use D365 App For Outlook.
    addToApp
    You can see the above settings from Settings > Dynamics 365 App For Outlook as shown below –
    D365AppOnSiteMap
  2. Make sure the Entity is already enabled for Activities so that it can be used to track records against.
    enableActivities
    Note: I also read on other blogs stating that the entity should also be present in the Categorized Search under Settings > Administration > System Settings – General Tab. But this worked for me without it.

Enable entity for D365 App For Outlook

Now, let’s enable Customer Subscriptions to be available in the D365 App For Outlook

  1. We will need to add it in the D365 App For Outlook itself. Navigate to Settings > My Apps as shown below
    myAppsIf My Apps is missing from your SiteMap, you can refer to my blog for using the shortcut link to access it – ‘My Apps’ missing from D365 SiteMap
  2. In My Apps, find Dynamics 365 App For Outlook app and open it in the App Designer as shown
    openInAppDesigner
  3. Once you open it, on the right hand side, expand Entities
    artifactEntities
  4. Find that Customer Subscriptions (or your entity which you wish to enable) is not enabled yet.
    entityInAppFound
  5. Enable it by clicking the checkbox. It will now appear in blue and selected
    entityInAppEnabled
  6. It will also appear on the left hand side now
    entityInLeftSide
  7. Simply Save and Publish the changes.
    publishChanges

Entity is Enabled

In your Outlook (OWA of Outlook client app), when you restart or re-open open the app, you’ll see that the entity is enabled as below and you can use it to search and track records against.
entityIsEnabled

And we are done. 🙂

Enable Embedded Intelligence and configure its features in D365 v9.1

Embedded Intelligence you features like Relationship Assistant, Auto Capture and Email Engagement. Yes, you’ve seen them before in previous D365 versions and configuring them got easier in D365 v9.1

Read Policy and Accept Terms

  1. Navigate to Settings > Sales AI. Under Overview tab, click on I accept as shown below.
    acceptTerms
    Note: Make sure you read the Privacy Statement if and whether or not it violates your organization’s privacy policies.2. Once Accepted, features like Relationship Assistant, Email Engagement and Auto Capture are available to be configured as follows
    EITurnedOn

Relationship Assistant

Relationship Assistant helps you to draw your attention to what matters about the information in Dynamics 365 at that moment.

It shows you Action Cards that are relevant to the user at the given point of time and where the users can quickly take some common actions associated with it. need to take action on and are relevant given at the point of time.

Example, if an Opportunity is due tomorrow, the Relationship Assistant will show up on the Opportunity and show you this.

relationshipAssistant

Configure – Relationship Assistant
You can configure the Relationship assistant on the next tab in Sales AI itself.
configureRA

 

Email Engagement

Email Engagement will tell you how your communication is being taking shape. Track insights about the emails you send from D365 and accordingly, take your next move.

Like, you can set a reminder to follow up and track what happened to the email you sent.
emailEngagement

Configure – Email Engagement
1. Turn on Email Engagement by simply clicking on the Disabled button to Enable it.
disabledEE

2. Email engagement is turned on now.
EETurnedOn

 

Auto Capture

Get a glance of emails relevant to your D365 records but which aren’t actually tracked in D365 . You can then decide if it matters for you to pull it in D365.

autoCapture

Configure – Auto Capture
All you need is to enable Server Side Sync with your Exchange Online mailbox.

 

Hope I summarized the idea! 🙂

Enable D365 For Teams Integration Preview

Finally, D365 Teams Integration is out in Public Preview and I was excited to try it out on one of the D365 9.1 trial environments.

Currently in Preview so it is not recommended for Production purposes. Anyway, let’s dive into seeing how we can enable the Preview.

Enable the Preview in D365

  1. Enable the Preview of the D365 For Teams from System Settings > Previews.
    systemSettings
  2. And click on Yes to enable it. It will ask for confirmation.
    settingConfirmation
  3. Click OK and it will ask for confirmation
    applyConfirmation
  4. And it takes a few minutes to provision.
    provisionTeams
  5. And in a few minutes, you’d be done.
    provisioned

Logging into Teams and get the App

  1. Now, suppose you already have Teams app on your desktop. Go to Store and look for the Dynamics 365 (Preview) as shown below.
    getInTeamsApp
  2. Click on Add to a Team to disable it and only enabled it for me. Maybe I’ll write another post on what these settings do, but to continue for myself, I’ll select only Me.
    addForMe
  3. And if you wish to open any of those, else close out the window.
    previewAvailable
  4. Now, let’s configure this for first time use. Find the app in the menu like so.
    findTheAppInTeams

Configure the App

  1. Now, let’s configure it by connecting to your D365 environment. Click on Configure.
    configureNow
  2. It will ask you Organization you want to connect to, select the same.
    selectOrg
  3. And provide your credentials –
    credentials.png
  4. Grant consent too.
    grantConsent
  5. Finally, you’ll get it enabled.
    enabledNow

Seeing it work

And to test it out, I put in natural langauge ‘show me alpine sky house’

And I had the results
results

D365 AI for Sales: Notes Analysis feature

Turn on Notes Analysis

Make sure you’ve enabled D365 AI For Sales for your organization. For more information on enabling D365 AI For Sales, check my blog on Enable Dynamics 365 AI for Sales in v9.1.x

You can turn on Notes Analysis once your D365 AI For Sales is setup. Navigate to Settings > Sales AI and look for Notes Analysis and turn it on like so if it appears Disabled –

enableNotesAnalysis

Simply turn it on.

Notes Analysis at work

Remember, you’ll need to have the Timeline control enabled in you D365 Unified Interface. Timeline control is available for Contacts, Opportunities, Leads, Accounts and Case forms (COLAC).

Now, with a normal Note put on Accounts in the Timeline, you’ll see this – where you have your usual Note entered and it appears that it isn’t clickable.

normalNote

But, with the Notes Analysis turned on, you’ll be able to perform Actions on the same.

noteAnalysisRecord

The Note is now a clickable link and once you click on it, based on the context of the Note entered, it will show actionable item to be performed.

 

Notes Analysis can provide suggestions like creating activities, tasks, contacts etc. I’ll keep exploring what else it can do and let you all know!

D365 PSA: Delegated Resource gets error on making time entries for another Resource

Have you been added as a Delegate for a fellow colleague but not able to Read, Create or Submit Time Entries on their behalf?

Let’s see what you are missing.

Before that, if you want to learn about Delegations in D365 PSA, check this Delegating Time Entries in PSA

Scenario

William Contoso wants to make Veronica Quek as his Delegate and let her enter time on his behalf. So William created a Delegate record for Veronica.
delegateAdded

Error for the Delegate Resource

Now, Veronica is attempting to do time entries for William by going to Time Entry Calendar view and switching the user to William.

  1. And when Veronica wants to enter time as William, she’d switch to the User on the Time Entries Calendar View like this –
    switchUser
  2. But, see this error and she don’t know what the issue might be. Even though she’s the Delegate!
    error

Missing Security Role

Yes, this is the first thing you should check

  1. Veronica Quek is missing a Delegate Security Role in PSA to be able to make time entries on behalf of other users.
    Assign Delegate security role to the user to make them enter time on behalf of others.
    securityDelegate

Hoping this is quick fix for you. 🙂

 

D365 Quick Tip – Why should you Reassign Records to another user?

An underrated feature of Dynamics 365 sitting since a long time is the Reassign Records. This is a particularly important feature that if a key person stayed with the organization for quite some time and worked deeper in Dynamics like written plugins or have workflows owned by them, it is imperative that the records they owned need to be reassigned to someone else when that employee leaves.

Given the scenario – An employee, Somesh, left the company but has several records under his ownership. Even some workflows (we’ll get to that a little further.) Sample Original Records owned by the user –
originalRecords

And when the user leaves the company, in general practice, we revoke the D365 license for reuse. In that case, the user is Disabled in the system –

disabledUser

Important: Before you proceed further, please make a list of all Active workflows which are owned by the Disabled user before Reassigning Records. You can use Advanced Find to find such workflows.

Why should you Reassign Records

Workflows

Since the user who left was owner of any workflows having Scope of Organization level, they’d fail and if them being background workflows, you wouldn’t know what happened in the background. On investigating, you’d see error like –

errorInWorkflow

I noticed that workflows which are set to User scope will behave like they didn’t trigger.

Reassign Records

Use this feature to reassign records of the Disabled User to the new Administrator/User who should carry forward the smooth processing of day to day operations of Dynamics.

  1. Go to the user by going to Settings > Security > Users. Find the user and open the record.
    reassignRecords

  2. On clicking on Reassign Records as shown above, you’ll be asked whether you want to assign the records to yourself or some other user.
    reAssignToOtherUser
  3. The loading will complete and once you check, all the records that were previously with Somesh will be assigned to Vishal. See below –

    assignedToNewUser

  4. The workflows get assigned too. But, you have to do some activity before you say you’re done.

Reactive the Workflows

So, the records got swiftly got assigned to the new user. However, the workflow which Somesh owned were Deactivated, assigned to Vishal but were left Deactivated!
deactivatedWorkflows

And with that, you’ve saved some hours trying to find out why certain things went wrong. Hope this helped!

Enable Dynamics 365 AI for Sales in v9.1.x

One of the recent offerings by Microsoft is D365 AI For Sales. I saw this available on my D365 Trial instance which is 9.1.x.

I will quickly summarize on how you can enable D365 AI For Sales on your D365 environment having any of the Sales subscriptions.

d365Version

It has features like –

  1. Relationship Analytics
  2. Predictive Lead Scoring
  3. Predictive Opportunity Scoring
  4. Connecting Insights

More about which, you can read from the Microsoft Documentation – https://docs.microsoft.com/en-us/dynamics365/ai/sales/help-hub

Before we begin

  1. D365 AI For Sales is only available in the (NAM) North America region.
  2. You’ll need a D365 AI For Sales license for the same.

Check if Sales AI is available

Quickly, you can check your Settings area if you already see the Sales AI appears or not.
settingsArea

Or you can simply go to the below link to setup a trial for yourself –

https://dynamics.microsoft.com/en-us/ai/sales/

Or even from the Applications screen in the Dynamics 365 Admin Center –

adminCenterOption

Setup

  1. Let’s assume you’re on this page after you go to Settings > Sales AI. You can accept the terms to enable the Embedded Intelligence or even chose to do so later.
    embeddedIntelligence
  2. Moving further, I chose to directly enable the D365 AI for Sales by scrolling further and clicking on Get it now as shown below.
    aiGetItNow
  3. Then, I provided consent and Accepted.
    acceptConsent
  4. Agree to terms and click on Continue.
    clickContinue
  5. While it’s installing, you’ll see this –
    installing
  6. It took about a few hours until it was being setup in the background. Finally, once successfully done, D365 AI For Sales is now available for you to setup and you’ll see multiple tabs where you can configure each of the functionalities separately.
    aiEnabledYou can then choose to configure each of them separately. Hope this quick initial setup info helps!

Customize Time Entry form on Calendar View for D365 PSA

Many times, users come back requesting that they need to be able to add types of time entries of their own. Sure, you can modify the Time Entry Type OptionSet that comes with D365 PSA by default. But that will only reflect on D365 Form Level and not where users go to Calendar View to enter time.

Microsoft has provided to be able to customize the Time Entry form on Calendar View too. This feature was released in the PSA release v1.2.1.51
msRelease

Check here – https://blogs.msdn.microsoft.com/crm/2017/07/14/dynamics-365-for-field-service-and-project-services-automation-update-3/

Customization

I’ve added an option called as Comp-Off for the available types of Time Entries OptionSet.
timeEntryOS

But, this is only reflected on the Form level of Time Entry entity and not on the Calendar View. On the Calendar View, it continues to show as below –

defaultTypes

Hence, you’ll need to make changes to the TimeEntryType.js file provided by Microsoft out-of-the-box.

Here’s the script that comes out-of-the-box which Microsoft says you can change to customize –

  1. To make changes, look for this file – “msdyn_/Common/Models/OptionSets/TimeEntryType.js
    jsInSolution
    jsWebRes
  2. Modify this file. By default, it will have this script as shown below –
    defaultScript
  3. So, I added just this one line and mapped it to the OptionSet I created. The value should match the OptionSet value entered in the Time Entry Type OptionSet.
    lineAdded
  4. Save and Publish changes. Check if your new option appears as shown below –
    modifiedCalendarView

Remember: The Calendar View to enter time entries has been deprecated in v3 of PSA. So this customization will not be needed in versions 3.x onward.

I hope this was helpful.

Also,

Implement character length validation in a Canvas Power App | Power Platform

Often times, you want to know the size of text entered in a field and want to indicate a user that they need to restrict the text to your specific size, like Twitter. And make sure the user is restricted within the limits. So, I’ve added a button to show that validation –


undefined

And you want to dynamically check the length as you type to see how much is remaining
undefined
And maybe also add some validation like disabling the button if the limit is reached
undefined

Let’s look at how we can implement this in Canvas Power App!

Setup

Let’s get to building this out!

  1. Let’s say you have a Text Input. I’ve simply called it “Message
    undefined
    undefined

  2. Then, I have the Label field called as “CharLength“. This will be a place holder for our counter of characters in the Message textbox.
    undefined
    undefined

  3. And finally, a Submit button which will be disabled if the Text size exceeds the limit.
    undefined
    undefined

Setting Properties

Now, let’s get the properties set to these components so as to validate the character limit

  1. Nothing to set on the Text Input ‘Message’ for this example.
  2. Let’s move to the label CharLength itself. Set the Text handler of the CharLength label control to the following (You can have your own limit)
    undefined
    In the above example, I’ve set the length 60 and then I’m subtracting the length of the Text of the Message.Text (Text entered in Message box) so that as we type on, the remaining value will be shown as below –
    undefined
  3. Now, let’s see the Color property of the text field. It’ll be a visual cue indicating the user that they’ve exceeded the character limit
    undefined
    In the above example, I’ve added a condition to set the color as Red, if the length is exceeded or Black is the length is under the limit and will look something like below –
    undefined

  4. Finally, we’ll go to the Submit button and set the Display Mode property of it to the below
    undefined
    I’ve added a condition, that if the Length of the Message box’s Text goes above the limit, set the Display Mode to Edit i.e. Active or else, Disable. And it will look like below when disabled
    undefined


Execution

This is how it will work when you put this in execution

And that’s it. So you can use this validation as you want. In place of the button, you could have something else put up.

Hope this helps!

Here are some posts on Canvas Power Apps you might want to check –

  1. Logged In User details in a Canvas Power App
  2. Implementing Exit app, Logout and Confirm Exit features in a Canvas Power App
  3. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  4. Variables in Canvas Power Apps | Global and Context
  5. Correctly connect to an Excel file in a Canvas PowerApp
  6. Adding a Canvas PowerApp to Teams
  7. Sending Image from Canvas PowerApps to SharePoint Document Library using Flows

Thanks!!

Logged In User details in a Canvas Power App

You do get some details of the logged in user in a Canvas Power App. Let’s look at what all is available –

undefined

User() Function

User() function provides 3 pieces of information you can retrieve at this point in terms of logged in user.

undefined

Email

Use User().Email to populate a Text field with the Email address of the logged in user.
undefined

Full Name

Use User().FullName to fetch the logged in user’s Full Name and maybe, populate it in a Text/Label field as well
undefined

Image

Use User().Image to be able to populate the Picture control with the logged in User’s Picture. Remember, user needs to add this in their respective Office 365 account in order to appear here
undefined
undefined

User Details

Now, whenever a logged in user comes across these controls which we set above, the User details will vary for each user respectively. Below is how it looks for me.

undefined

You can obviously use it as and where it suits you.

Here are some more Canvas Power Apps posts you might want to look at –

  1. Variables in Canvas Power Apps | Global and Context
  2. Implementing Exit app, Logout and Confirm Exit features in a Canvas Power App
  3. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  4. Adding a Canvas PowerApp to Teams
  5. Sending Image from Canvas PowerApps to SharePoint Document Library using Flows

Hope this was easy and helpful!

Loop through array of objects in a Flow & Create records in CDS | Power Automate

One of the most common scenarios that are looked out for are ways to loop through an array of objects received (say, from HTTP response) and create CDS records

Sample Data

Let’s say this is the sample data coming in which is an array of objects. This is coming from my HTTP trigger which I created and hosted. It could be anything else in your case
undefined

And the body looks something like this –

[{"Name":"FreshBeans Coffee","City":"Mumbai","Phone":999999999},{"Name":"Timber Mart","City":"Pune","Phone":999999999}]

Generate Schema from Payload

I need to first create the Schema to be able to easily read from the JSON response
undefined

Paste a sample Payload in the dialog box
undefined

And it will generate a Schema
undefined

And when this is generated, you can access the attributes further in your Flow
undefined

What if you just enter a blank object and not generate from Schema or enter Schema explicitly as shown below –
undefined
You won’t get the attributes from the JSON Payload which is needed further
undefined

Loop through array and Create in CDS

Now, you can use Apply To Each and pass the Parsed JSON Body. I’ve simply used Compose to see the entire Object while checking results (No other purpose of using Compose in this example)
undefined

And then the next step is to Create CDS records from the looped Objects. So, since I have the schema generated above, I can use the attributes to directly map it to the CDS Create Record action

undefined

Running the Flow

Finally, once I run the Flow and check the actions performed. I’ll create 2 records since there are 2 objects in my array.

I’ll see the Compose step to see what I got in the object. As I mentioned earlier, this is not required- I just intend to put it there to see what data came in
undefined

And the Create Record in CDS step will create record in my Dynamics 365 environment as I intended it to do –
undefined

I can check the same in Dynamics 365
undefined

You might also want to check other posts related to Power Automate –

  1. Get Count of records retrieved in CDS connector in a Flow | Power Automate
  2. Number Formatting in a Flow | Power Automate
  3. Call a Dynamics 365 Action from Flow [Bound and Unbound Actions] | Power Automate
  4. Switch-Case in a Flow | Power Automate
  5. Setting Retry Policy for an HTTP request in a Flow | Power Automate
  6. Make HTTP request from Flow in Power Automate
  7. Button Flow in Power Automate to replicate a Quick Create Form in D365 CE
  8. Enable Flow button on D365 Ribbon

Hope this was easy!

Implementing Exit app, Logout and Confirm Exit features in a Canvas Power App

Most common scenarios are where you need users to be able to Exit the Canvas Power Apps in the below ways –
Scenario – Let’s say you put a close button somewhere in your App.
undefined

  1. Exit the current App but stay logged-in to Power Apps.
  2. Exist and Logout Power Apps entirely.
  3. In both above cases, ask user for confirmation before exiting.

So let’ look at these scenarios one by one –

Exit from current App

  1. Now, let’s say you’ve put a Close button on your App like this. And when you click it –
    undefined
  2. It takes you to the App selection screen in your Power Apps
    undefined
  3. You can implement this using Exit() method on OnSelect property of the Close button as shown below
    undefined

    And that’s it.


Exit and Logout of Power Apps

  1. Another variation to the same feature would be to Exit the App as well as Logging out completely. Now, I’ve put a Lock button here to represent Logout.
    undefined

  2. You can implement this by using Exit(true) method as shown below
    undefined
  3. And, it will logout the PowerApps Application itself.
    undefined
    And you’ll need to log in all over again.

Confirm before Exit

This is a feature that will work with both, Exit() and Exit(true). It will ask you for a confirmation on whether if you really like to close/logout the app?

  1. Select App in the left-hand Tree view, select App
    undefined
  2. And look at the right hand Properties menu – The Confirm exit and Confirm exit message will let you enable this feature with the message you want to display –
    undefined

    And you can set your message
    undefined
  3. And then, when you either Logout or try to Close the App, you’ll be prompted with this message
    undefined

And it’s all that simple! In case you are looking for more articles on Canvas Power Apps, you might want to check these below –

  1. Variables in Canvas Power Apps | Global and Context
  2. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  3. Adding a Canvas PowerApp to Teams
  4. Correctly connect to an Excel file in a Canvas PowerApp
  5. Sending Image from Canvas PowerApps to SharePoint Document Library using Flows

Hope this helps!

Get Count of records retrieved in CDS connector in a Flow | Power Automate

In several applications, you need to know how many record were retrieved in the List records Action in a Common Data Service connector in order to take a decision.

Scenario

Typically, let’s say I know only 1 record should exist in order to take that record forward and do an action. But how do I know when only 1 record was received? That’s when you use Control

Check Count

Now, let’s say you want to want to retrieve Accounts and know how many were returned (Perhaps, you want to proceed only if at least 1 or more were retrieved)

  1. This is my List Records action and I’ve named it as Get All Records.
    defaultListRecords
  2. And just to display how many records are retrieved, I’ll use a variable. Usually, you would use this in condition (which we’ll get to in a bit)
    initVar
  3. So, in the expressions to set the Variable, under Dynamic Content, I’ll write –
    writeHereand write the below expressioncountactualExpression
    which is set to the variable
    setVar
  4. And here are the results. I have 101 Accounts
    count

Using it for comparison

This is one of the typical use cases where you want to proceed only if you have at least 1 record –
typicalUseCase

Here are some more Flow related topics you might want to take a look at –

  1. Number Formatting in a Flow | Power Automate
  2. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  3. Switch-Case in a Flow | Power Automate
  4. Setting Retry Policy for an HTTP request in a Flow | Power Automate
  5. Retrieve only active Dynamics 365 CE licensed Users in CDS connector in Power Automate
  6. Button Flow in Power Automate to replicate a Quick Create Form in D365 CE
  7. Make HTTP request from Flow in Power Automate
  8. Create a To-Do List Item of Important Outlook Emails using Power Automate

Hope this quick tip helps!

Variables in Canvas Power Apps | Global and Context

For all newbies, being able to use Variables is one the most curious questions put out immediately. Here’s a simplistic example of using Variables, both Global and Contextual in this post.

headerImg

Global Variable

Global Variables as the name suggest, run through the entire App itself and can be changed and altered when needed.
Global variables can hold boolean, string, number etc.

  1. Let’s say, I have a Text field called GuestNameField
    guestFieldAdded
    guestNameFieldView
  2. Global Variables are created and set by using Set(variable, value) function.

    Now, on the OnChange event of the GuestNameField above, I’m setting the variable by the formula Set(guestName, GuestNameField.Text). Where, guestName is the field I created on the fly and I’m setting the text from the GuestNameField textbox whenever the Textbox will trigger OnChange Event.
    formulaWritten

  3. And I have a Label called as DisplayValue which will read from the variable and set it’s text.
    readFromVar
  4. Now, when I run the app and type the name, and when I release the focus on the text box, the
    typeName
    And when the focus from the TextBox is released, OnChange of the TextBox will trigger and the Label will display the text written since it’s reading the value from the variable
    appear

Context Variable

Now, a variation to the Context Variable from the Global Variable is that the Context variable have the scope of the only the current screen they are declared in. Navigate function is also a form of Context variable in which case, you can pass values to other screens.

Context variables can hold strings, numbers, records and tables.

  1. Now, in case of Context Variables, you use UpdateContext({variable: value}) in the formula.
    contextVar
  2. And is accessed/read by simply writing the name of the variable directly
    directContextVarName
  3. And it behaves in the same way, you write something and it can be read
    typeName
    And displayed below as seen in the above Global Variable example
    appear

Checking your Variables

In case you’re wondering you’ll lose track of your variables, you can check the File menu and access the Variables section as shown below
menuItem

Global Variables as marked above can be accessed in their own section
globalStored
And if you open any of those, you can see and even navigate to where they are used.
globalUsage

Similarly, for Context Variables are denoted by the Screen names they are in.
contextStored

I tried to summarize this on a high level. You can refer this Microsoft Documentation for details Understand canvas-app variables in Power Apps.

Hope this was easy!

In case you are looking for more post related to Canvas PowerApps, here you go –

  1. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  2. Adding a Canvas PowerApp to Teams
  3. Correctly connect to an Excel file in a Canvas PowerApp
  4. Sending Image from Canvas PowerApps to SharePoint Document Library using Flows

Thank you!

Number Formatting in a Flow | Power Automate

Quite obviously this is one of the most common asks in Flow to format a number. Here are some ways to do so using Format number Action in Flow (Power Automate).

This is available in Format number action in a Flow in Power Automate. This is available in Number Functions connector.
numActions

Commas and Decimals

  1. For a standard simple number, you can simply denote by # and commas or other symbols where needed. Here, I won’t select any locale.
    standardNumberBody
  2. And it would render into this –
    standardNumber

Phone Number

  1. US phone is an example where it is denoted by brackets and dashes in between. I’ll select English (United States) (en-US) in the locale among others. So, my format would be.
    isPhoneBody
  2. And the resultant phone number will be set as below
    usPhone

Currency Input

For currency, this is what I did –

  1. Added ₹ followed by ##,###,###. I’ll select English (India) (en-IN) in the Locale field.
    indCurrencyBody
  2. So even though my number value i.e. (50000) is in thousands and not hundred-thousands as I covered in my format, it’ll consider the correct format used and my output will be – indCurrency

Here’s where you can look at other ways to format numbers –
1. Standard numeric format strings
2. Custom numeric format strings

If you’re looking for some more posts on Flow / Power Automate, I’ve written some in the past. Check these –

  1. Create a To-Do List Item of Important Outlook Emails using Power Automate
  2. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  3. Call a Dynamics 365 Action from Flow [Bound and Unbound Actions] | Power Automate
  4. Switch-Case in a Flow | Power Automate
  5. Setting Retry Policy for an HTTP request in a Flow | Power Automate
  6. Make HTTP request from Flow in Power Automate
  7. Using Parse JSON to read individual List Records in Flow|Power Automate
  8. Secure Input/Output in Power Automate Run History
  9. Button Flow in Power Automate to replicate a Quick Create Form in D365 CE
  10. Enable Flow button on D365 Ribbon

Hope this helps!