Cancelled Bookings Imported in Time Entries in Dynamics 365 PSA issue | [Quick Tip]

Import Bookings is one of the important features provided by PSA for users to do Time Entries quickly and efficiently!

But out of the box, they also Import Cancelled Bookings!

Scenario

Now, let’s say we have some Bookings for a Resource and they look like this-

  1. These are the original Bookings for Priyesh on Tuesday and Thursday respectively i.e. 27th and 29th Oct 2020.

  2. Now, let’s cancel the 27th Oct 2020 booking. You can do so by right-clicking and changing the Status to Canceled. Once done, it will look like below –

  3. By default, when Priyesh tries the use the Import Bookings feature in Time Entries, he sees the below Canceled Booking as well.
    It can happen that the one who imports doesn’t recollect about the Canceled Booking and might Import it by mistake.


    To solve this, here’s what we do!

Resource Bookings for Time Entry Import view

So, here’s the view you care for.

  1. Open the Resource Bookings for Time Entry Import view as shown below

  2. In this view, change the Criteria

    The default criteria will look like below –
  3. Add another condition to it on top level i.e. the Booking Resource Booking entity itself for Booking Status field.


    Add this condition

    This should be it. Save and Publish your changes.

Correct Bookings Imported

With that small change, Canceled Bookings will not be imported for Time Entries.

Hope this helps!

Here are some more Dynamics 365 PSA (Project Service Automation) related posts you might want to look at –

  1. Change Booking Status colors on Schedule Board for Field Service/PSA [Quick Tip]
  2. Modify Project tab’s view in Schedule Board in PSA v3 | Quick Tip
  3. Dynamics 365 PSA v2 to v3 Upgrade failed? Here’s what to do.
  4. Additional columns in PSA v3 Schedule view
  5. Update Price feature in D365 PSA v3
  6. A manager is required for non-project time entries, absence, and vacation error in D365 PSA v3
  7. Set Work Hours Template to a Bookable Resource in D365 PSA v3
  8. Booking Resources more than their capacity in D365 PSA v3
  9. Time/Expense Entry Rejection comments in D365 PSA v3
  10. PSA v3 View Custom Controls used on Project form

Thank you!

Remove ‘This Email has been blocked due to potentially harmful content.’ message in Dynamics 365 Emails | OrgDbSettings utility

It’s annoying to see this message on every email you Track in Dynamics 365 and just how it takes all the critical space on your timeline instead of showing you the actual email message.


Let’s look at how we can disable it using OrgDbSettings tool.

Note: I wouldn’t recommended to do these changes since we are looking to by-pass security flags dictated by Microsoft for your Org. However, if you really need to so, make sure you’ve backed up your Org before proceeding.

OrgDbSettings Editor Tool [Managed Solution]

You can download OrgDbSettings Managed Solution Utility from here – https://github.com/seanmcne/OrgDbOrgSettings

The link highlighted above is where the Releases are: https://github.com/seanmcne/OrgDbOrgSettings/releases

Once you download the Managed Solution, import it in your Org

  1. Once Imported in Dynamics, it appears like this in Solutions. Open it up.


  2. In the solution, look for SecuritySettingForEmail. Click once on the row to reveal the Description at the bottom, you’ll see the legends of what each value means.
    It’s defaulted to 1, meaning, you’ll see the warning which is what we want to hide.


  3. Next, double click on the Row and on the 1 which is the Default value as shown below.

  4. It’ll open up a Dialog to set your value of choice. In our case, we can to hide it, so I’ll put the value 3 and click on Update as shown below.

  5. It’ll update in a few seconds and you can refresh and see, the warning will be gone.



Hope this is helpful! Here are some more Dynamics 365 CE related posts you might want to check –

  1. Get GUID of the current View in Dynamics 365 CRM JS from ribbon button | Ribbon Workbench
  2. Get Dynamics 365 field metadata in a Canvas App using DataSourceInfo function | Common Data Service
  3. Dynamics 365 App For Outlook missing on SiteMap in CRM? Use shortcut link [Quick Tip]
  4. Pass Execution Context to JS Script function as a parameter from a Ribbon button in Dynamics 365 | Ribbon Workbench
  5. Find Created On date of solution components in Solution Layers | Dynamics 365 [Quick Tip]
  6. Import lookup referencing records together in Dynamics 365 CRM | [Linking related entity data during Excel Import]
  7. Add multiple Opportunity Products at once in Dynamics 365 Sales | Enhanced Experience [Preview]
  8. Mailbox Alerts Hide/Show behavior in Dynamics 365 CRM
  9. Excel Importing Notes (Annotation) entity in Dynamics 365 CRM
  10. Dynamics 365 PSA v2 to v3 Upgrade failed? Here’s what to do.

Thank you!!

Task Completion reminder using Flow Bot in Microsoft Teams | Power Automate

We can be a little creative and put Flow Bot to use in Power Automate’s Microsoft Teams connector! Let’s look at a use case where you can use it to make sure Task Reminders can be handled in a friendly way.

An Open Task

Let’s look at a typical Task in Dynamics –

  1. Let’s say there’s a Task set to Joe to have a meeting with Adam which looks like this in Dynamics.

  2. In this example, I’ll ask if the user forgot to mark it as closed since the time has passed.
  3. If the user is reminded that they actually worked on it but forgot to close, they can simply click on Mark as Complete right from Teams and not bother about going into Dynamics to close it.

Flow

Here’s how I constructed the Flow. It could be different in your case. I just wanted to put an example out –

  1. My Flow runs on Recurrence. Once a day to check whether any Tasks are left Open in the past 4 hours. Then it could be tasks from the previous day or anything older than 4 hours. (Not being stringent here 😊)
    Next, I’ll get all Tasks which are open over past 4 hours. Using Fetch Xml Query as I was comfortable doing that.

  2. Furthermore, in the Fetch Xml, I’m using Link Entity to get related data. I’ll need the record Owner’s Email address and I’m fetching it from User’s entity.

    To understand how to also read related records and use them as variables, you can follow Sara Lagerquist’s post on the same with a superb explanation – https://saralagerquist.com/2019/11/25/how-to-avoid-the-get-record-action-to-retrieve-related-data-in-power-automate/
  3. Post that, I’m Parsing JSON so that I can use fields later on in the Flow to put in the Flow Bot.

  4. Now, since the Get All Tasks will get all open Tasks from the system which may belong to other users too, an Apply to Each will open up to now treat each of these Tasks as a different Flow Bot message.
    This will loop through all the Parsed results from the step above so I can easily use fields from the Task

  5. Next, is the important step. In Microsoft Teams’ connector, you’ll find this Action called as ‘Post a choice of options as the Flow bot to a user’.
    As the name suggests, this Action can post buttons as choices to the user in their chat and capture responses. Simple!

  6. This Actions will demand the following details. My Flow bot card looks like this

    Now, the Options Item 1-, 2 etc. are the places where you can provide what all options the users can get to select.

    The Recipient above should be the email address of the Teams user who should get this Flow Bot. Hence, I had selected the FetchXML query above to get the Email address from the Owner of the Task itself and parsed it to select as a field in here.

    Finally, what should be the Message inside and the Headline. Which obviously will be read by the user to understand what the message is about. Hence, Description of the Task and Subject in them respectively.
  7. Later on, based on the response of the user, if they click on
    I’ll go ahead and mark the Task as Completed in Dynamics.

  8. And just set the Task record to Completed state.

  9. And that’s it. Yours can be even more basic or complex depending on how you want to use it.

Flow Bot

Now, every once a day according to above scenario, my Flow Bot will post the below message to the user’s Teams chat.

  1. You’ll see this card posted in the chat.

  2. Now, you have two options, Mark as Complete and This is Pending. Let’s say the user wants to Mark the Task as Complete. So selecting either of the options, you’ll get place to add Comments.

    I’m NOT doing anything to the passed comments, but you can do so based on your use case.
    Also, I’m NOT doing anything when the user clicks on This is Pending.

  3. On clicking Submit, the user sees as below and the buttons go away.

  4. And when you check the Task in Dynamics, it’ll be marked as Completed.

Hope this is useful to get your going! You can use this in several use-cases to capture something from the user through their Teams chat and update and forward it to other systems.

Here are some more Power Platform, Flow, Teams posts you might like to check –

  1. Using triggerBody() / triggerOutput() to read CDS trigger metadata attributes in a Flow | Power Automate
  2. Adaptive Cards for Teams to collect data from users using Power Automate | SharePoint Lists
  3. Send a Power App Push Notification using Flow to open a record in Canvas App | Power Automate
  4. Accept HTTP Requests in a Flow and send Response back | Power Automate
  5. Call HTTP Request from a Canvas Power App using Flow and get back Response | Power Automate
  6. Terminate a Flow with Failed/Cancelled status | Power Automate
  7. Pause a Flow using Delay and Delay Until | Power Automate
  8. BPF Flow Step as a Trigger in CDS (Current Environment) connector | Power Automate
  9. Generate Dynamics 365 record link in a Flow using CDS connector | Power Automate
  10. Loop through array of objects in a Flow & Create records in CDS | Power Automate
  11. Using Parse JSON to read individual List Records in Flow|Power Automate
  12. Call a Dynamics 365 Action from Flow [Bound and Unbound Actions] | Power Automate

Thank you!

Turn Teams On / Off at Org Level, provisioning users | M365 Admin Center Tip

Here’s a tip you’ll probably need. You can quickly turn Teams On/Off at the Org level.

Typically, if the Teams is not enabled at the Org Level, you’ll see this error message

if you click on the Enable Teams button, it’ll take you to this Microsoft Docs page – https://docs.microsoft.com/en-us/MicrosoftTeams/office-365-set-up?WT.mc_id=DX-MVP-5003911

Turn Teams On or Off at Org Level

To skip searching through the Microsoft Documentation on turning Teams On at the Org Level, do the following –

  1. Go to the Microsoft 365 Admin Center, then look for Settings, expand it. Then, go to Org settings


  2. Now, look for Microsoft Teams in the list of Services. Click on it.

  3. Once the Teams’ Settings open, you can see that you can either enable the Team On or Off for all Users. Also, you can manage Guest Access as well.

Check Teams Provisioning Access

Post the above, there might be a few users or new users who might have been Teams provisioned through their licenses.

Here’s how you can check it –

  1. Use this link to check if Teams has bee provisioned to the users or not – https://admin.microsoft.com/AdminPortal/Home#/teamsprovisioning

  2. If not assigned yet, make sure you enable Microsoft Teams for the users by going into their Licenses and expanding Apps section.

    And then, look for Microsoft Teams

  3. Teams should then be enabled for Users.

Hope this helps. Here are some more Office 365 / Microsoft 365 Admin / Teams related posts you might want to check –

  1. Adaptive Cards for Teams to collect data from users using Power Automate | SharePoint Lists
  2. Adding a Canvas PowerApp to Teams
  3. Import multiple Users in Office 365
  4. Office 365 Admin: Quickly Enable Multi-factor authentication for users
  5. Create new Sandbox and copy Production over to it in PowerPlatform Admin Center
  6. Restrict User Access to a D365 instance using Security Groups
  7. D365 Quick Tip: Audit User Access in Dynamics 365 v9 CRM

Thank you!

There are missing dependencies. Install the following solutions before installing this one: “Active” | Connection References missing in Power Platform Solution

While importing and Unmanaged Solution into another environment, you must’ve come across these error messages like “There are missing dependencies. Install the following solutions before installing this one: “Active”

Now, there are various factors as to why this error is seen. I’ll try to cover one of them. Missing Connection References! Let’s take a look.

So, out of other reasons, one could by that there are some Flow’s Connection References that are not yet added to the Solution when it was exported out.

Error on Import

Let’s say you trying to import this Unmanaged Solution in an environment.

  1. This is your Source Solution which you want to Export and Unmanaged and Import into other environment.

  2. You see the following error on Import.

  3. Now, there are many other reasons why you are getting this error. But, in this case, it’s about missing Connection References from the Source Solution

Adding Connection Reference

In my case, it was missing adding the Connection References in the Source Solution, so here’s what I did –

  1. Go to the Add existing in your source Solution

  2. Look for Connection Reference (preview)

  3. When I add that, I can select what all Connection References are available to add.
    Here, you’ll have to select all those Connection References which you have utilized in your Solution Components.
    To understand more on Connection References, here’s a post by Alex Shlega’s posts on Connection Reference – https://www.itaintboring.com/powerapps/connection-references/

  4. When you click that, it’s added behind the scenes. Now, export the Unmanaged Solution again.



Re-Importing into Source Instance

Now, In your Source Instance, re-import this newest Unmanaged Solution.

  1. Now, importing the 1.0.0.2 version, you’ll see no issues.

  2. And when you click next, you’ll be asked to Create a Connection right away

  3. In this example, I’m supposed to create a CDS (Current Environment) connection. Because that’s what I had selected as a Connection Reference while exporting from the Source Instance.

    Skipping a few intermediate steps. My connection is created as below.

  4. Going back to the Import tab where I was importing the Solution, I’ll just refresh as directed.

  5. Any my Connection is available.

  6. I can just continue to Import as usual and it’ll be imported.

Hope this helps!

Here are some more Power Platform related posts you might want to check out –

  1. Using triggerBody() / triggerOutput() to read CDS trigger metadata attributes in a Flow | Power Automate
  2. Send a Power App Push Notification using Flow to open a record in Canvas App | Power Automate
  3. Count of total CDS records returned in a Canvas Power App connection [Quick Tip]
  4. Call HTTP Request from a Canvas Power App using Flow and get back Response | Power Automate
  5. Implement character length validation in a Canvas Power App | Power Platform
  6. Accept HTTP Requests in a Flow and send Response back | Power Automate
  7. Terminate a Flow with Failed/Cancelled status | Power Automate
  8. Generate Dynamics 365 record link in a Flow using CDS connector | Power Automate
  9. Launch URL on a Data Table Text column selection in a Canvas PowerApp | SharePoint Lists
  10. Get Dynamics 365 field metadata in a Canvas App using DataSourceInfo function | Common Data Service
  11. Call a Dynamics 365 Action from Flow [Bound and Unbound Actions] | Power Automate
  12. Setting Retry Policy for an HTTP request in a Flow | Power Automate

Thank you!!

Clear a field value & Reset Form in a Canvas Power App [Quick Tip]

One of the most useful features to provide in a Form Control in a Canvas Power App is the ability to “Clear/Reset a Form” and “Clear a Field value”.

Let’s look at how Power Apps’ existing feature can help you achieve this.

Clear Field

Let’s say Description field is a lengthy field and often times, you want to clear the entire field instead of just backspacing the entire field.

  1. Let’s say Description is a DataCardValue in a typical form. Usually Descriptions are lengthy and need to be cleared if you go wrong. So, every form field value is stored in a data card value field.

  2. On the right hand properties, look for Clear Field option from the list of Text Input properties.

  3. Notice that a X appears on the field when in focus/active. So when you make a mistake in a field, click on it to clear that field.

  4. And it get’s cleared.


    This didn’t work in Multi-Line Text Box. Not sure if it’s a bug or not supported yet. I’ll confirm and update here.

Reset Form

Fairly basic way to clear out an entire form is to use a button to do so.

  1. A suitable approach is to add a ResetForm(<FormName>) function. I’ve put a sample button that denotes a reload/reset logo which I selected from Icons.


  2. Now, let’s say I want to clear this form.

  3. The form will be cleared.

Hope this quick tip helps!!

Here are some more Canvas Power App posts you might want to check –

  1. Get Dynamics 365 field metadata in a Canvas App using DataSourceInfo function | Common Data Service
  2. Debug Published Canvas Power App with other users using Monitor | Power Platform
  3. Download a File from a Canvas Power App using a button | Power Platform
  4. AddColumns() function to dynamically add columns to a Data table in Canvas Power App | SharePoint List
  5. Implement real-time search in Gallery of CDS records in a Canvas Power App | Power Platform
  6. Log Canvas Power App telemetry data in Azure Application Insights | Power Apps
  7. Call HTTP Request from a Canvas Power App using Flow and get back Response | Power Automate
  8. Implement character length validation in a Canvas Power App | Power Platform
  9. Send a Power App Push Notification using Flow to open a record in Canvas App | Power Automate
  10. Count of total CDS records returned in a Canvas Power App connection [Quick Tip]

Thank you!

Get GUID of the current View in Dynamics 365 CRM JS from ribbon button | Ribbon Workbench

You already know the GUID of a view, nothing surprising. But, you want to get what current view is active. Because at times, you want to compare and return values to a CustomRule based on what view is being set currently!

Let’s take a look!

Passing Parameter to JS function in Ribbon Workbench

Let’s assume the below scenario –

  1. You have a Ribbon button on the Account entity. And it looks like below.

  2. So here’s what you pass to the function that this button will call. No matter where that function is being called i.e. on Press of the button in Command or as a Custom Rule in an Enable Rule. You can pass this parameter called as PrimaryControl (If you are calling your function on selection of a record, you can even use SelectedControl and continue as is)

Reading GUID of the current view in Browser’s Dev Console

Now, let’s say you have a button on the selection of a Row or even on press of the button itself and it calls the function to which you’ve already passed PrimaryControl, here’s how you read it –

  1. Notice that the argument is passed, set a debugger; so that you don’t have to manually set breakpoints.

  2. Now, go to Console, and check this variable in which PrimaryControl is being passed. You’ll notice that _getCurrentView() is available for you

  3. Simply, select it in the function and press enter, you’ll see details inside.

  4. And you can simply read the id like you read an attribute.

Hope this helps!!

Here are some more Ribbon Workbench / JS / customization related posts you might want to look at –

  1. Pass Execution Context to JS Script function as a parameter from a Ribbon button in Dynamics 365 | Ribbon Workbench
  2. Pass selected rows’ GUIDs to ribbon button in D365 | Ribbon Workbench
  3. Debug Ribbon button customization using Command Checker in Dynamics 365 CE Unified Interface
  4. Show Ribbon button only on record selection in Dynamics CRM
  5. Hide Custom Ribbon Button [Easy Way] – Ribbon Workbench
  6. Enable Flow button on D365 Ribbon
  7. [SOLVED] Navigating URL from Ribbon’s custom button in Dynamics for Phones app
  8. Fix Ribbon icons on the Unified Interface in D365 CE
  9. Create a New Record button for Activity Type entity using Ribbon Workbench: D365
  10. D365 Ribbon Button shortcut to open a Document in SharePoint Online

Thank you!!

Get Dynamics 365 field metadata in a Canvas App using DataSourceInfo function | Common Data Service

Mostly, Gallery and Forms are used to work with CDS (Common Data Service) Entities data are in Dynamics 365 like Accounts, Contacts, Opportunities etc.

Some of the common field level metadata info you can retrieve is: MinValue, MaxValue, MaxLength of a field. This is dependent on whether it is supported/provided by Data Source itself, be it CDS or any other Data Source, depends.

You can leverage DataSourceInfo function to enrich your CDS form in a Canvas Power App by showing some metadata about fields. Something like below –

DataSourceInfo function

DataSourceInfo is a function that provides some info about the DataSource itself or the columns present in the Data Source.

Not necessarily all DataSources will provide all information.

In this post, I’m trying to show some metadata of the Dynamics 365 using CDS Data Source.

Microsoft’s official documentation on DataSourceInfo https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/function-datasourceinfo?WT.mc_id=DX-MVP-5003911
In my example, I’ve added some labels to show these values.


MaxLength

MaxLength is used to show the maximum allowed capacity of a field. Most useful to show the maximum length of lengthy fields such as a Multi-line Text Field in Dynamics 365 CRM.

  1. Let’s say Description field in Dynamics 365 has Length provided as 600

  2. I’ve placed maxLen label below the Description field

  3. And the formula is to show the info “Max Length: <value>” is written using Concatenate() function so that I can add some text as I want to make it look more informative.

    In the above formula, in Text() function, I’ve written
    DataSourceInfo in blue. That is the formula that will take arguments like Data Source, DataSourceInfo.<Function> & Column name.
    Accounts marked by showing orange arrow is the Data Source itself since it is connected to Accounts entity in Dynamics 365.
    MaxLength is the attribute which will tell us the Maximum allowed length for the field we will enter next.
    “description” denotes the name of the column in double-quotes of which we want to know the MaxLength.

To enrich this feature, you can use this to dynamically show how much more characters are remaining in real-time as the user types into the field. Refer this post – Implement real-time search in Gallery of CDS records in a Canvas Power App | Power Platform


MinValue & MaxValue

MaxValue & MinValue are used to show the minimum & maximum value allowed in the field. Most apt is having Numeric fields in Dynamics 365 CRM.

  1. Let’s say Grading is a custom field called as Grading which is Whole Number.

  2. I’ve placed minVal and maxVal labels below Grading field in the Canvas Power App.

  3. And the formula is to show the info “Min : <value>” & “Max: <value>” is written using Concatenate() function so that I can add some text as I want to make it look more informative.

    In the above formula, in Text() function, I’ve written
    DataSourceInfo in blue. That is the formula that will take arguments like Data Source, DataSourceInfo.<Function> & Column name.
    Accounts marked by showing orange arrow is the Data Source itself since it is connected to Accounts entity in Dynamics 365.
    MinValue and MaxValue is the attribute which will tell us Minimum & Maximum allowed data values for the field user can enter  in the field in the next parameter.
    new_grading denotes the name of the column in double-quotes of which we want to know the Minimum allowed Value and Maximum allowed Value.

Hope this is useful!

Here are some more Canvas Power Apps posts you might want to check out

  1. Restore older version of a Canvas Power App | Power Platform
  2. Debug Published Canvas Power App with other users using Monitor | Power Platform
  3. Download a File from a Canvas Power App using a button | Power Platform
  4. AddColumns() function to dynamically add columns to a Data table in Canvas Power App | SharePoint List
  5. Implement real-time search in Gallery of CDS records in a Canvas Power App | Power Platform
  6. Log Canvas Power App telemetry data in Azure Application Insights | Power Apps
  7. Call HTTP Request from a Canvas Power App using Flow and get back Response | Power Automate
  8. Send a Power App Push Notification using Flow to open a record in Canvas App | Power Automate
  9. Launch URL on a Data Table Text column selection in a Canvas PowerApp | SharePoint Lists
  10. Aggregate functions in a Canvas Power App | Using on SharePoint Lists
  11. Get N:N records in a Canvas Power App using Common Data Service connector | Power Platform
  12. Correctly connect to an Excel file in a Canvas PowerApp

Thank you!!

Dynamics 365 App For Outlook missing on SiteMap in CRM? Use shortcut link [Quick Tip]

If you are using an older Dynamics 365 online/on-premise, you might likely be missing seeing the Dynamics 365 App For Outlook because it wasn’t originally added to SiteMap and you might not have added.

Use Shortcut provided by Microsoft Support

  1. Let’s say your Organization URL is https://<org&gt;.crm.dynamics.com/
    Then, append the below link to the Organization URL to make it look like this
    https://<org&gt;.crm.dynamics.com/tools/appsforcrm/AppForOutlookAdminSettings.aspx

    And this will open up the Dynamics 365 App For Outlook

  2. You can also add it permanently to your SiteMap by following this Microsoft Support article from which I picked the link for you –
    https://support.microsoft.com/en-in/help/4339287/dynamics-365-app-for-outlook-missing-from-dynamics-365-navigation

    One a side note, Dynamics 365 App For Outlook is also supported for D365 on-prem. Follow this Microsoft article to know more – https://cloudblogs.microsoft.com/dynamics365/no-audience/2016/12/13/dynamics-365-app-for-outlook-support-matrix?WT.mc_id=DX-MVP-5003911

Hope this helps!!