OnStart of my app, I am checking to see if the current user is part of one of three security groups. Depending on which security group they are a part of will determine which fields are editable or viewable and what will be displayed in a specific text field. For example... If I look up the current user, I check to see if they are in a traditional undergrad student security group in Azure AD. If they are, I want to change the Student's email field to be view only. I would like to grab the name and email address from Azure AD and populate those fields.
If the current user is in the Staff security group in Azure AD, then I want the email address field to be editable, allow them to enter a student's email, and look the user up by email address in Azure AD and grab the student's name and populate the Student's Name field with it.
To do this as seamlessly as possible in your app, I recommend doing a few things in the OnStart of your app:
Once you've done that, you can use these variables in your app as necessary. A textinput box can be made view only for students with a statement like this in the DisplayMode property:
If(varIsStudent, DisplayMode.View, DisplayMode.Edit);
Alternatively, it may make for a cleaner app to have completely separate screens for different roles. In that way, you know only the intended user is getting access to that entire screen. Again, this can be controlled with the varIsStudent variable.
Hope that helps,
Does it make sense to store the record if I am only needing 2 fields stored? Does it really make sense to create a 2nd form if the only difference between the 2 is whether the email address field is viewable or editable, and how how the full name is populated?
If it makes more sense to create a new form for that, is there an easy way to copy my current form to a second form?
If I should keep it to one form, do I just set local variables to equal each field I need and then use those variables in each field? I haven't done much in the way of variable usage and multiple commands in a single statement. What would it look like?
For two fields, it's probably a wash for effort for which way you go. And it is always the developer's decision in the end.
You can copy-paste entire controls in Power Apps and it will rename the copy for you.
Yes, set at least the Default property of the form card to the value from the variable you want to use to pre-populate. If you want to control the edit-ability of a control, use an If() statement on its DisplayMode property to toggle it between DisplayMode.Edit and DisplayMode.View.
The field I am trying to change between Edit and View is DataCardValue2. In my IF() statement on OnStart of the app, I am using the following statement:
If(User().Email in Concat(AzureAD.GetGroupMembers("StaffGroupID").value,mail), DataCardValue2.DisplayMode.Edit, DataCardValue2.DisplayMode.View);
However, it doesn't make the field editable, even though the result of the IF statement should be true.
You will need to put this If() in the DisplayMode property of the card itself:
If(User().Email in Concat(AzureAD.GetGroupMembers("StaffGroupID").value,mail), DisplayMode.Edit, DisplayMode.View);
Can you share the error message? It is more likely having problems with the condition in the If() statement than being in the DisplayMode property.
Is there an easy way to get the error messages? I can select the App Checker, but it's not easy to see all of them at once.
Here is a screenshot of my App Checker:
Let me know if you want me to drill into any of them or if there is a way to display them all in one larger screen.
That points to a couple of errors we should check, one in the card and one in your OnStart. There should be a little red X symbol on your card and if you activate its dropdown you will see a choice to "Edit in the formula bar". Select that and the problem code should be highlighted with red lines above. Copy/paste that, including all the red, which will help us troubleshoot.
Keep up to date with current events and community announcements in the Power Apps community.
A great place where you can stay up to date with community calls and interact with the speakers.
Check out the latest Community Blog from the community!