PowerAutomate: Teams Connector Fails to List TimeZones

Connector error saying cannot list timezones.

Recently, I faced a strange issue, I was trying to create teams meeting using cloud flow, and the connector’s create meeting step was not listing timezone and not allowing me to set timezone as a custom dynamic value. It was also giving a retrieval error message as shown below.

Could not retrieve values. The dynamic invocation request failed with error: {
  "error": {
    "code": "ResourceNotFound",
    "message": "Resource could not be discovered.",
    "innerError": {
      "date": "2021-10-28T11:49:20",
      "request-id": "a0e7df5f-d119-4534-a8c3-5332e6f8b906",
      "client-request-id": "a0e7df5f-d119-4534-a8c3-5332e6f8b906"
    }
  }
}.

The Issue

I was testing this using a service account, and this was working fine for my user account. I was sure from the beginning itself that it was going to be some permission issue. However, I had no idea what permission I should look for. Finally, I managed to find that teams and other Microsoft applications use the Outlook Graph APIS to retrieve timezones and languages. I tried calling the APIs using the service account and I could replicate the error response. Now, it’s clear that the user is missing the required permissions to call outlook graph APIs.

The Fix

I am not so proficient with outlook and I raised this concern with our internal outlook team and they fixed this issue. What I could gather from them is that, the service account’s online office mailbox was not correctly enabled , which then they enabled with proper permissions. If you face similar issue, checking the mailbox permissions could save you a few hours 🙂

Hope this helps.

I Wish I Would Have Known #29: Default Environment Limitations

I Wish I Would Have Known strip 29: Default Environment Limitations

A single default environment is automatically created by Power Apps for each tenant and shared by all users in that tenant. Whenever a new user signs up for Power Apps, they’re automatically added to the Maker role of the default environment. The default environment is created in the region closest to the default region of the Azure AD tenant. Read more

Why You Should Care About Web Accessibility

Accessibility is a common term now and you might have heard many definitions of accessibility. For me, accessibility is simply creating a better experience for everyone.

We all know what accessibility means in the physical world, because we see it, right? Handrails for stairs, wheelchair access to the building, dedicated wheelchair parking lots, signboard in a building. Let’s take the signboard as an example, is it helpful only for disabled people? Assume you are visiting a hospital for the first time, and you need to use the washroom. You will search for the washroom signboard, right? Or Take the handrails, it is helpful for fully-abled people as well. This is why I used the word everyone in the introduction paragraph. If we design something with accessibility in mind, it is going to be helpful for everyone including fully-abled people.

Wheelchair Parking Slot
Image: Wheelchair parking slot

What you may or may not realize is that these accommodations also exist in today’s digital technology. In fact, many of them have been there for a while, but perhaps they’re less well known, hidden, or perhaps you’re using them without even knowing it. Some of the common accessibility tools used in the web world are Screen Readers, Screen magnifiers, Color Contrast Combinations, Keyboard and Mouse, Speech to text, Word Prediction, etc…

Have you ever considered if the application you have developed is compatible with the accessibility tools mentioned earlier? If you think you or your users never use such aids, then you need to realize that disability is highly related to the surroundings you are in. In simple words, it’s our situation that disables us rather than a medical impairment. All of us will find ourselves disabled at some time, and we will need an accessible application. For example, when your hands are dirty or busy, we all use voice assistants on our phones, right? Or assume you met with an accident and broke your arm, you may have used some accessible tech. After all, we all are getting aged and our vision, auditory, and mobility sensories may become weak and we will definitely rely on bigger fonts, high contrast screens, or even screenreaders. 🙂

Old man using digital tablet

I hope now you understand the importance of creating accessible applications. The trend now I observe in low-code applications like power platform is that citizen developers originally create an app for personal use, and it’s developed from the creator’s accessibility point of view and the accessibility issues are observed only when it is shared with multiple users. Now when you create an application, please keep in mind that if not today, tomorrow someone is gonna benefit from the accessibility features you have included in the application.

I Wish I Would Have Known #27: Add Spacers in Modern Model Driven App Designer

Image: To add spacer switch back to the classic editor and add.

While modern app designer provides phenomenal low code experience, it still misses some small and useful components in the classic editor. One such component is spacer control. Currently, this can be added to the form only by switching back to the classic designer, once added, we can switch back to the modern editor. Please upvote the Idea suggestion here to enable this component in the modern designer.

Tired of creating a new console application to connect to Dynamics 365 CRM/Dataverse? Use a template!

XRM Tricks (Power Platform & Dynamics CRM )

Sometimes we are asked to create console applications that interact with Dynamics CRM/ Dataverse, and like every new developer, we create a new project and look for a piece of code on the internet to start, or we copy existing code from an old project. I used this approach during all my projects, today I say stop, I want something more automatic and practical to start any new project of this kind.

Today I will share with you my experience on how to create a console app template project to connect dataverse and how to share the project template using a visual studio extension.


Let’s start with a demo. After following the steps in this blog, you will have the possibility to create a console app project that connects to Dataverse/Dynamics 365 CRM. The objective is to start implementing the business logic of the application without worrying about other aspects…

View original post 474 more words

I Wish I Would Have Known #26: Web API “RetrieveAllEntities” Function

Strip 26: Web API “RetrieveAllEntities” Function

The Web Api method “RetrieveAllEntities” function can be a bit confusing as it was not included in the early versions and will give you errors, if you have the older end point hardcoded in your code.

GET {{webapiurl}}RetrieveAllEntities(EntityFilters=Microsoft.Dynamics.CRM.EntityFilters'Entity', RetrieveAsIfPublished=true)

This function should be used with caution and appropriate filters, since it can return a huge amount of data. Read mode about the function here

Power Automate Import Failure: ‘GetTable’ failed with status code ‘Unauthorized’

‘GetTable’ failed with status code ‘Unauthorized’

Recently, one of our business users had left the firm, and handed over the canvas apps he was developing to his colleagues. There was one canvas app with flows that update SharePoint list. He had shared the app .zip file with the team and told, it’s a completed app and just needs to import to the target environment after creating the SharePoint list. So, the team didn’t bother much to collect further details about the source tenant where this was developed. He had created the app on a trail tenant which was tied with his account and was lost as soon as he left the firm.

But, the business users were unable to import the app and came to us with the below error.

Flow save failed with code
'DynamicOperationRequestClientFailure' and message
'The dynamic operation request to API 'sharepointonline' operation 'GetTable' failed with status code 'Unauthorized'. 
This may indicate invalid input parameters.
Error response: { "error_description": "Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown." }'.

The Issue

The issue here was the SharePoint site dependency. The definition.js files of the Power Automate flows had references to the old site and the current user does not have access to the original site, hence the flow was failing with error ‘Unauthorized’ even though, SharePoint connection was created in the target environment.

The Fix

The fix was to edit the definition.js file and replace the SharePoint URL and List ID with the new site information. The definition.js file is in the exported zip file. We had to replace all the occurrence of the URL, list ID (defined under table) and view ID, and saved the definition.js file and copied it to the zip file. Importing the updated zip file worked.

{"dataset":"https://***.sharepoint.com/","table":"d2**826-e05a-4972-be****8","view":"**-27f2-4ace-a289-ef41a**"}

The Right Way

This is a known issue when moving PowerApps/ Power Automate to a new tenant. This behaviour is not consistent as some flows were imported with no errors and others were rejected due to Unauthorized exception on GetTable().

One way to avoid this issue, is to use variables instead of directly selecting the SharePoint site, list and view in the SharePoint actions inside your flow.

Another option is to use environment variables in your flow. This will also help us avoid direct SharePoint references in your flow.

Hope this helps.

If you know any alternate option to handle this, please let us know in the comments.

I Wish I Would Have Known #24: Bypass User Consent Pop-up

Every time when a user runs a powerapp with connectors for the first time, they will receive a popup asking their consent to use the connectors in the specific app.

User Consent Pop-up

Use the Set-AdminPowerAppApisToBypassConsent cmdlet to bypass this pop-up, so that users are are not required to authorize API connections for the input app. The command changes the bypassConsent flag of an app to true. Using this command, end users will observe consent is bypassed for First Party connectors that support single sign-on and custom connectors that don’t require authentication. This includes custom connectors with or without a gateway. Read more here.