cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Post Prodigy
Post Prodigy

Canvas app troubleshooting

Hi everyone,

 

I need some help with troubleshooting an issue please.

I have a user, who is able to access my canvas app no problem, I have them listed as an approver in 1 form, but when they try to navigate to the approver screen, they are unable to so, clicking the next button nothing happens. This is what I have tried:

Checked that their email address matches by placing a label on the screen showing the logged in users email. 
Added the user as an approver on another form, again they receive an email notifying them of this action, so the username/email are correct, but again they cannot navigate to the correct screen (and the way I have set up is only an approver can navigate to the approver screen).
Tested with other users, who can successfully navigate to the approver screens if they are named as the approver.
It appears it's linked to this user, but it isn't obvious what else to check to fix this issue 
Help with this will be appreciated

This is my code OnSelect of my Next button, the user entered in both DataCardValue81 and dataCardValue64 can both navigate to Screen1 and Screen3, so there are no issues with any of those fields:

 

If(VarUser = DataCardValue81.Selected.Email, Navigate(Screen1, Fade),
If(VarUser = DataCardValue65.Selected.Email, Navigate(Screen2, Fade),
If(VarUser = DataCardValue64.Selected.Email, Navigate(Screen3, Fade),
If(VarUser = DataCardValue68.Selected.Email, Navigate(Screen4, Fade),
If(VarUser = DataCardValue69.Selected.Email, Navigate(Screen5, Fade),
If(And(VarUser = "email1.uk" || VarUser = DataCardValue90_1.Selected.Email || VarUser = "email2.uk"), 
If(!IsBlank(DataCardValue81.Selected.Email), Navigate(Screen1,Fade),
If(!IsBlank(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
If(!IsBlank(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
If(!IsBlank(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
If(!IsBlank(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
Notify("No approvers have been added", NotificationType.Error)

)))))))))))

 

 

if anyone can help me further troubleshoot my problem please?

Thanks

2 ACCEPTED SOLUTIONS

Accepted Solutions
Highlighted

Ok, so you will need a label on your screen which shows VarUser and one which shows DataCardValue64.Selected.Email as you say the third approver is not working, so that means these two are not equal - what do the labels show you?

 

Additionally, when using Lower() - this turns the text into lowercase, but I feel like your email address/UPN has an uppercase letter in it which is why its not navigating, I've updated the code you put to have both Lower() and to check for admins at the last part - could you try that out?

 

If(
   // Check if any of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email)
      &&
   IsBlank(DataCardValue65.Selected.Email)
      &&
   IsBlank(DataCardValue64.Selected.Email)
      &&
   IsBlank(DataCardValue68.Selected.Email)
      &&
   IsBlank(DataCardValue69.Selected.Email)
      &&
   IsBlank(DataCardValue79.Selected.Email)
      &&
   IsBlank(DataCardValue80.Selected.Email)
      &&
   IsBlank(ComboBox1.Selected.Email)
    ,
   Notify("No approvers have been added", NotificationType.Error)
   
    // Otherwise check if the user is listed in any of the approver items and navigate to the screen that they are an approver for
   ,
   Lower(VarUser) = Lower(DataCardValue81.Selected.Email), Navigate(Screen, Fade),
   Lower(VarUser) = Lower(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
   Lower(VarUser) = Lower(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   Lower(VarUser) = Lower(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
   Lower(VarUser) = Lower(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
   Lower(VarUser) = Lower(DataCardValue79.Selected.Email), Navigate(Screen6, Fade),
   Lower(VarUser) = Lower(DataCardValue80.Selected.Email), Navigate(Screen7, Fade),
   Lower(VarUser) = Lower(ComboBox1.Selected.Email), Navigate(Screen8, Fade),

   AdminUser && !IsBlank(DataCardValue81.Selected.Email), Navigate(Screen1,Fade),
   AdminUser && !IsBlank(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
   AdminUser && !IsBlank(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   AdminUser && !IsBlank(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
   AdminUser && !IsBlank(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
   AdminUser && !IsBlank(DataCardValue79.Selected.Email), Navigate(Screen6, Fade),
   AdminUser && !IsBlank(DataCardValue80.Selected.Email), Navigate(Screen7, Fade),
   AdminUser && !IsBlank(ComboBox1.Selected.Email), Navigate(Screen8, Fade),

   // Otherwise if none of the cases match, then show an error
   Notify("You are not an Approver or Admin", NotificationType.Error)
)

 


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


View solution in original post

Highlighted

Hmmm, that is Very odd, could you create a label with the following in the Text property, as I can't imagine why it wouldn't navigate unless the items being compared are not identical:

"VarUser : " & VarUser & "
DataCardValue64.Selected.Email : " & DataCardValue64.Selected.Email & "
VarUser = DataCardValue64.Selected.Email : " & (VarUser = DataCardValue64.Selected.Email)
&
"
Lower(VarUser) : " & Lower(VarUser) & "
Lower(DataCardValue64.Selected.Email) : " & Lower(DataCardValue64.Selected.Email) & "
Lower(VarUser) = Lower(DataCardValue64.Selected.Email) : " & (Lower(VarUser) = Lower(DataCardValue64.Selected.Email))

 

Then could you create a button that just does that one navigation, and get that specific user to press it:

Button1.OnSelect:

If(Lower(VarUser) = Lower(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   Notify("These two items are not the same!", NotificationType.Error)
)

 

Let me know if anything interesting comes from that,

Thanks! 


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


View solution in original post

13 REPLIES 13
Highlighted
Super User II
Super User II

Hi!

 

I think maybe there's some confusion in your formula logic, will suggest a few clean-up options for you:

During that page's OnVisible action, create a new variable that lists who your Admins are:

 

//If the user is one of the admins or listed 'approve everything' people, set variable
If(
   VarUser = "email1.uk"
      ||
   VarUser = DataCardValue90_1.Selected.Email
      ||
   VarUser = "email2.uk"
   ,
   Set(AdminUser, true)
)
   

 

 

If(
   // Check if all of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email)
      &&
   IsBlank(DataCardValue65.Selected.Email)
      &&
   IsBlank(DataCardValue64.Selected.Email)
      &&
   IsBlank(DataCardValue68.Selected.Email)
      &&
   IsBlank(DataCardValue69.Selected.Email)
   ,
   Notify("No approvers have been added", NotificationType.Error)
   
   // Otherwise check if the user is listed in any of the approver items
   // and navigate to the screen that they are an approver for
   ,

   // If the user is one of the admins OR || if they are from the selected 81 box
   AdminUser
   ||
   (VarUser = DataCardValue81.Selected.Email), Navigate(Screen1, Fade),

   // If the user is one of the admins OR || if they are from the selected 65 box
   AdminUser
   ||
   (VarUser = DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 81 box
   AdminUser
   ||
   (VarUser = DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 68 box
   AdminUser
   ||
   (VarUser = DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 69 box
   AdminUser
   ||
   (VarUser = DataCardValue69.Selected.Email), Navigate(Screen5, Fade),

   // Otherwise if none of the cases match, then show an error
   Notify("You are not an Approver or Admin", NotificationType.Error)
)

 

Can I assume you are using the same code on every Next button for every screen? Having an admin-check on a singular button where multiple options exist (IE check if approver1 or admin then navigate to screen1) will always be true, so it will not ever navigate to another screen other than screen1, what you really should be doing is having separate code for each next button, with each of them removing the previous one's option, so on screen 1, you don't have it check for screen 1 approver rights, you only have it check for screen 2, and so on and so on..

 

Let me know your thoughts,

 

Cheers,

ManCat

 


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


Highlighted

Hi @iAm_ManCat 

 

Thanks for your detailed response.

I had some question, before I change the code based on our suggestions.

 

Setting an Admin variable is brilliant idea, would it better to set it at App OnStart, as I'll be using the admin reference at least 5 times?

 

my second question was around this code:

If(
   // Check if all of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email)
      &&
   IsBlank(DataCardValue65.Selected.Email)
      &&
   IsBlank(DataCardValue64.Selected.Email)
      &&
   IsBlank(DataCardValue68.Selected.Email)
      &&
   IsBlank(DataCardValue69.Selected.Email)
   ,
   Notify("No approvers have been added", NotificationType.Error)

Will the code allow, if there is at least 1 approver, as that what I want, depending on a given scenario, there may only be 1 approver for a request, and other times  there maybe 3, other times all 5. but the user cannot continue if they have failed to provide a minimum of 1 approver?

 

Yes you are correct, I have already set the code I had provided in my post to not include the first screen, and then screen2 does not include the screen2 navigation, etc.... I have it working its just strangely causing a problem for a couple of users and I cannot spot why, hence I thought if I add a further logic to display an error if they are not the approver at least I can troubleshoot why it's not detecting the user as a valid approver. But always love to here from community champions like yourself to do things much more better. Thanks once again.

Highlighted

HI @iAm_ManCat 

Further to my last message, I have implemented the suggestion exactly how you had advised as a test.

My code in the previous set up, the next button would only navigate to the a screen where an approver was stated.

I.e. If Screen1 does not need approving, but Screen3 does contain an approver, then as an admin or as an approver you would be re-directed to screen3, rather than navigating to Screen1 and Screen2 which will not contain any data.

 

Furthermore, currently the way I have it set up, is if there are 3 approvers, on Screen 2, Screen3 and Screen5, Approver2 will only be navigated to Screen2, they will not see Screen3 and Screen5 and vice versa for any of the approvers, they will only navigate to there own approval screen, but the admins navigate to any active (any screens where an approver is stated).
As mentioned my code, although its extremely messy it works, but I cannot understand why 2 users  currently testing, are unable to navigate to the approver screen, and the admin is unable to get passed the first screen. As I have no message pop up maybe this is the first thing  I need to implement, which I have noted you have responded on another question of mine
 

Highlighted

Ahhhh! Ok, I see what you mean now, I didn't understand that the emails were on each of the screens - I will tweak/re-do the statements a bit later once I've cooked and eaten dinner and will try explain things with the notification logic a bit better 🙂


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


Highlighted

Hmmm, ok, having looked at the code I wrote, I still believe your admins should be able to navigate through each screen (they will have to go one screen at a time though as they have rights equal to approver on all screens...)

 

The check for blank items will only apply if ALL of the items are blank, so if any single one of them is filled, then the whole logic block becomes false because && is the same as AND(), so this way even if one approver distilled then it will continue.

So we are saying if all of the approver items are missing then Notify (Notify is now the value that equates to if the statement is true), otherwise continue on with the next logic check.

 

If you're still not able to get it to work then I would suggest labelling Everything, and also create a large label that shows your code block with the variables actually pulling from themselves like:

 

label.Text=

VarUser & " - VarUser " & "
If(
   // Check if all of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email) (" & IsBlank(DataCardValue81.Selected.Email) &")
      &&
   IsBlank(DataCardValue65.Selected.Email) (" & IsBlank(DataCardValue65.Selected.Email) &")
      &&
   IsBlank(DataCardValue64.Selected.Email) (" & IsBlank(DataCardValue64.Selected.Email) &")
      &&
   IsBlank(DataCardValue68.Selected.Email) (" & IsBlank(DataCardValue68.Selected.Email) &")
      &&
   IsBlank(DataCardValue69.Selected.Email) (" & IsBlank(DataCardValue69.Selected.Email) &")
   ,
   Notify(No approvers have been added, NotificationType.Error)
   
   // Otherwise check if the user is listed in any of the approver items
   // and navigate to the screen that they are an approver for
   ,

   // If the user is one of the admins OR || if they are from the selected 81 box
   AdminUser " & AdminUser & "
   ||
   ("& VarUser & " = " & DataCardValue81.Selected.Email & "), Navigate(Screen1, Fade),

   // If the user is one of the admins OR || if they are from the selected 65 box
   AdminUser
   ||
   ("& VarUser & " = " & DataCardValue65.Selected.Email & "), Navigate(Screen2, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 81 box
   AdminUser
   ||
   ("& VarUser & " = " & DataCardValue64.Selected.Email & "), Navigate(Screen3, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 68 box
   AdminUser
   ||
   ("& VarUser & " = " & DataCardValue68.Selected.Email & "), Navigate(Screen4, Fade),
   
   // If the user is one of the admins OR || if they are from the selected 69 box
   AdminUser
   ||
   ("& VarUser & " = " & DataCardValue69.Selected.Email & "), Navigate(Screen5, Fade),

   // Otherwise if none of the cases match, then show an error
   Notify(You are not an Approver or Admin, NotificationType.Error)
)"

 

This way you will also be able to see what is being compared with the user.

 

It also might be that your comparisons are case-sensitive

 

So our admin check was for

"email1.uk"

 

but it might actually be 

"EMAIL1.uk"

 

these are not the same when checked with an = and the same will apply to your VarUser, so we should use something like

Lower(VarUser) = DataCardValue69.Selected.Email

 

Having labels will also let us see the inconsistencies with these - you can see most of these differences by clicking next to an item in the Formula bar, but I find it also helps sometimes to have it labelled out (and you can always get rid of the label later)

 

Cheers,

Sancho


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


Highlighted

Hi @iAm_ManCat 

 

Thanks for this.

It led me to think if this is possible, based on your code but needs your help, rather than the admin user condition being set with the approvers condition I thought if I can separate them, the first 2 parts is your code, i've just added in Lower next to each email and // removed the AdminUser from that condition, and added a seperate, but as soon as I add the 3rd one, nothing works, no navigation and no notification, If i have no approvers then I do get a notification telling me no approvers have been added, but the rest of it doesnt work

 

Like so

 

If(
   // Check if any of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email)
      &&
   IsBlank(DataCardValue65.Selected.Email)
      &&
   IsBlank(DataCardValue64.Selected.Email)
      &&
   IsBlank(DataCardValue68.Selected.Email)
      &&
   IsBlank(DataCardValue69.Selected.Email)
   &&
   IsBlank(DataCardValue79.Selected.Email)
      &&
   IsBlank(DataCardValue80.Selected.Email)
      &&
   IsBlank(ComboBox1.Selected.Email)
    ,
   Notify("No approvers have been added", NotificationType.Error)
   
    // Otherwise check if the user is listed in any of the approver items and navigate to the screen that they are an approver for
   ,
   // If the user is one of the admins OR || if they are from the selected 81 box
   //AdminUser
   //||
   Lower(VarUser) = DataCardValue81.Selected.Email, Navigate(Screen, Fade),
     // If the user is one of the admins OR || if they are from the selected 65 box
   //AdminUser
   //||
   Lower(VarUser) = DataCardValue65.Selected.Email, Navigate(Screen2, Fade),
   // If the user is one of the admins OR || if they are from the selected 81 box
   //AdminUser
   //||
   Lower(VarUser) = DataCardValue64.Selected.Email, Navigate(Screen3, Fade),
   // If the user is one of the admins OR || if they are from the selected 68 box
   //AdminUser
   //||
   Lower(VarUser) = DataCardValue68.Selected.Email, Navigate(Screen4, Fade),
   // If the user is one of the admins OR || if they are from the selected 69 box
   //AdminUser
   //||
   Lower(VarUser) = DataCardValue69.Selected.Email, Navigate(Screen5, Fade),
   Lower(VarUser) = DataCardValue79.Selected.Email, Navigate(Screen6, Fade),
   Lower(VarUser) = DataCardValue80.Selected.Email, Navigate(Screen7, Fade),
   Lower(VarUser) = ComboBox1.Selected.Email, Navigate(Screen8, Fade),

AdminUser, //Now this is looking at the admins - This what I have added in, but seems to be //break the logic and hopefully you can help me here, as this will then allow the admins to //only navigate to screens where an approver is named
!IsBlank(DataCardValue81.Selected.Email), Navigate(Screen1,Fade), //If Reviewer is not blank, navigate to Screen1
!IsBlank(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
!IsBlank(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
!IsBlank(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
!IsBlank(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
!IsBlank(DataCardValue79.Selected.Email), Navigate(Screen6, Fade),
!IsBlank(DataCardValue80.Selected.Email), Navigate(Screen7, Fade),
!IsBlank(ComboBox1.Selected.Email), Navigate(Screen8, Fade),

   // Otherwise if none of the cases match, then show an error
   Notify("You are not an Approver or Admin", NotificationType.Error)
)

 

 

Highlighted

Ok, so you will need a label on your screen which shows VarUser and one which shows DataCardValue64.Selected.Email as you say the third approver is not working, so that means these two are not equal - what do the labels show you?

 

Additionally, when using Lower() - this turns the text into lowercase, but I feel like your email address/UPN has an uppercase letter in it which is why its not navigating, I've updated the code you put to have both Lower() and to check for admins at the last part - could you try that out?

 

If(
   // Check if any of the approver items are blank, notify if they are
   IsBlank(DataCardValue81.Selected.Email)
      &&
   IsBlank(DataCardValue65.Selected.Email)
      &&
   IsBlank(DataCardValue64.Selected.Email)
      &&
   IsBlank(DataCardValue68.Selected.Email)
      &&
   IsBlank(DataCardValue69.Selected.Email)
      &&
   IsBlank(DataCardValue79.Selected.Email)
      &&
   IsBlank(DataCardValue80.Selected.Email)
      &&
   IsBlank(ComboBox1.Selected.Email)
    ,
   Notify("No approvers have been added", NotificationType.Error)
   
    // Otherwise check if the user is listed in any of the approver items and navigate to the screen that they are an approver for
   ,
   Lower(VarUser) = Lower(DataCardValue81.Selected.Email), Navigate(Screen, Fade),
   Lower(VarUser) = Lower(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
   Lower(VarUser) = Lower(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   Lower(VarUser) = Lower(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
   Lower(VarUser) = Lower(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
   Lower(VarUser) = Lower(DataCardValue79.Selected.Email), Navigate(Screen6, Fade),
   Lower(VarUser) = Lower(DataCardValue80.Selected.Email), Navigate(Screen7, Fade),
   Lower(VarUser) = Lower(ComboBox1.Selected.Email), Navigate(Screen8, Fade),

   AdminUser && !IsBlank(DataCardValue81.Selected.Email), Navigate(Screen1,Fade),
   AdminUser && !IsBlank(DataCardValue65.Selected.Email), Navigate(Screen2, Fade),
   AdminUser && !IsBlank(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   AdminUser && !IsBlank(DataCardValue68.Selected.Email), Navigate(Screen4, Fade),
   AdminUser && !IsBlank(DataCardValue69.Selected.Email), Navigate(Screen5, Fade),
   AdminUser && !IsBlank(DataCardValue79.Selected.Email), Navigate(Screen6, Fade),
   AdminUser && !IsBlank(DataCardValue80.Selected.Email), Navigate(Screen7, Fade),
   AdminUser && !IsBlank(ComboBox1.Selected.Email), Navigate(Screen8, Fade),

   // Otherwise if none of the cases match, then show an error
   Notify("You are not an Approver or Admin", NotificationType.Error)
)

 


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


View solution in original post

Highlighted

Thanks @iAm_ManCat 

 

Hmm even after all that, this 1 user still cannot navigate passed this screen, even though PowerApps has sent the same user and email notifying them, they are approver

 

I've added 2 labels to troubleshoot this, but both the VarUser label and  DataCardValue64.Selected.Email show exactly the same email address...... is this as strange as they come, or is there anything else that can be done?

Highlighted

Hmmm, that is Very odd, could you create a label with the following in the Text property, as I can't imagine why it wouldn't navigate unless the items being compared are not identical:

"VarUser : " & VarUser & "
DataCardValue64.Selected.Email : " & DataCardValue64.Selected.Email & "
VarUser = DataCardValue64.Selected.Email : " & (VarUser = DataCardValue64.Selected.Email)
&
"
Lower(VarUser) : " & Lower(VarUser) & "
Lower(DataCardValue64.Selected.Email) : " & Lower(DataCardValue64.Selected.Email) & "
Lower(VarUser) = Lower(DataCardValue64.Selected.Email) : " & (Lower(VarUser) = Lower(DataCardValue64.Selected.Email))

 

Then could you create a button that just does that one navigation, and get that specific user to press it:

Button1.OnSelect:

If(Lower(VarUser) = Lower(DataCardValue64.Selected.Email), Navigate(Screen3, Fade),
   Notify("These two items are not the same!", NotificationType.Error)
)

 

Let me know if anything interesting comes from that,

Thanks! 


@iAm_ManCat

Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


View solution in original post

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

News & Announcements

Community Blog

Stay up tp date on the latest blogs and activities in the community News & Announcements.

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021

Community Highlights

Community Highlights

Check out the Power Platform Community Highlights

Top Solution Authors
Top Kudoed Authors
Users online (10,571)