Use the Power Apps Creator Kit to save your UI development time: The Creator Kit, published by the Microsoft Power CAT team, is a collection of Fluent UI controls and templates for Power Apps makers to create delightful app experiences more rapidly.
Though custom pages provide the same seamless canvas authoring experience, some of the canvas controls are still not available in custom pages. We will need to wait for upcoming releases for these to be available.
With this deprecation, XRM object won’t be available in HTML web resources. This will mainly affect the HTML web resource as part of the SiteMap, parent.Xrm.* also won’t work. Read more here
You can enter a user’s email address and see the list of published apps in your environment and all the access, license, and security information specific to that user. This can be very useful in troubleshooting why a user cannot see a specific app in your environment. The tool can be accessed from the admin center or via direct URL.
As you all know, when working with code for Microsoft Dataverse we have two options late-bound and early-bound. I have seen many people advocating one option over another and explaining why one is better than the other. For me, it’s just a personal choice, if you prefer typed classes go for early bound else go for the late-bound approach. Add some additional details below to help you to select a programming option.
Early Bound
Early-bound programming requires that you first generate a set of classes based on the table and column definitions (entity and attribute schema) for a specific environment using the code generation tool. Once generated you can enjoy better IntelliSense and compile-time checking of all types so that no implicit casts occur. Below is the sample early bind code from Microsoft Docs which creates an account record.
var account = new Account();
// set attribute values
// string primary name
account.Name = "Contoso";
// Boolean (Two option)
account.CreditOnHold = false;
// DateTime
account.LastOnHoldTime = new DateTime(2017, 1, 1);
// Double
account.Address1_Latitude = 47.642311;
account.Address1_Longitude = -122.136841;
// Int
account.NumberOfEmployees = 500;
// Money
account.Revenue = new Money(new decimal(5000000.00));
// Picklist (Option set)
account.AccountCategoryCode = new OptionSetValue(1); //Preferred customer
//Create the account
Guid accountid = svc.Create(account);
Late Bound
Here you don’t need to generate the classes, you directly start wrting your logic, However, you need to refer to tables and columns (entities and attributes) using their LogicalNames in the Entity class. You don’t get compile-time validation on names of entities, attributes, and relationships. Types are checked only when the object is created. Below is the sample late bind code from Microsoft Docs which creates an account record.
//Use Entity class specifying the entity logical name
var account = new Entity("account");
// set attribute values
// string primary name
account["name"] = "Contoso";
// Boolean (Two option)
account["creditonhold"] = false;
// DateTime
account["lastonholdtime"] = new DateTime(2017, 1, 1);
// Double
account["address1_latitude"] = 47.642311;
account["address1_longitude"] = -122.136841;
// Int
account["numberofemployees"] = 500;
// Money
account["revenue"] = new Money(new decimal(5000000.00));
// Picklist (Option set)
account["accountcategorycode"] = new OptionSetValue(1); //Preferred customer
//Create the account
Guid accountid = svc.Create(account);
Now let’s do a comparison on both.
Early-bound
Late-bound
You can verify entity, attribute, and relationship names at compile time
No compile-time verification of entity, attribute, and relationship names
Power Fx is the general-purpose, strong-typed, declarative, and functional programming language used across the Microsoft Power Platform. This excel-like formula language helps app makers to create apps using low code, read more about Power FX here.
With the latest announcement, Microsoft is giving another level of possibilities with Power FX. Now, you can bind the AI model to any control using Power FX. You heard it right! any control. Earlier it was possible to use AI with the AI builder controls only. Now, Microsoft has made it easier than ever to add intelligence to your Power Apps directly through Power FX. Let’s see how to use this feature for a text control to detect the language entered.
Turn on the AI models as data sources option
Figure1: Turn on Ai model as data source
In your power app, under the app settings go to Upcoming features > Preview, and turn on the AI model as data sources.
Add your AI model as Data Source
Under the Data tab, go to Add data and In the AI models list, select a language detection model. To know more about AI models please check the official Microsoft docs here.
Fig 2: Add your AI model to the APP
Add your Controls
Place a text input and two text labels on the canvas as explained below
Rename the text input to TextInput1.
Select Text label and place it on the canvas.
Rename the text label to Language.
Add another text label by selecting Text label and place it to the right of the Language text label.
Call the AI model using Power FX
Now we can use the power FX formula to call the AI model method. Select the text label you added in step 2 and enter the following Power Fx formula.
Now, save and run the app. You can type in random languages in the text box to see the AI model in action.
Fig 4: language prediction.
Now you have bound the AI model to a normal label control using Power FX.
Formula explained
‘Language detection’.Predict(TextInput1.Text).results returns a table of possible languages detected with the score. The language with the highest score (highest possible match) will be the first item in the table. So, using the function ‘First‘ the most matching language code is set to the label.
Another example of a prediction model can be found here.
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 🙂
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
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.
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. 🙂
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.