Hi everyone.
I have a form used to score applicants for an internship.
There are 2 levels of review - Resume (Level 2) and Written (Level 3).
When the ComboBox.Selected.Value is "Assigned Level 2," only Level 2 form fields are visible. When it's "Assigned Level 3," only Level 3 fields are visible.
To make this happen, I've set a variable in the Visible property of the Level 2 form fields (varShowResumeReview).
Level 3 form fields have their Visible property set by a different variable (varShowWrittenSection)
It works fine until I include additional values from the ComboBox ("Level 2 In Progress," "Level 2 Complete, "Level 3 In Progress," "Level 3 Complete")
What happens then is that unless the selected value is "Assigned Level 2," or "Assigned Level 3," all the form fields are Visible.
So, if I select "Level 2 In Progress," instead of showing only Level 2 form fields, the form displays both Level 2 and Level 3 fields.
I can't figure out what I'm missing in my formula:
Switch(
ComboBox1.Selected.Value,
"Assigned Level 2",
"Level 2 In Progress",
"Level 2 Complete" ,
Set(varShowResumeReview, true);
Set(varShowWrittenSection, false),
"Assigned Level 3",
"Level 3 In Progress",
"Level 3 Complete",
Set(varShowResumeReview, false);
Set(varShowWrittenSection, true),
Set(varShowResumeReview, true);
Set(varShowWrittenSection, true))
Any help or ideas are greatly appreciated.
What is the Items property of your Combobox?
The ComboBox Items property is:
Choices([@MySPListDataSource].ApplicantReviewStatus)
Okay...a little bit of "principle" here first. You are using a Choices column to allow flexibility in your app (presumably) for the choices available in your dropdown. However, the choices require logic, which is not represented in your data. So, you are kind of breaking the data/interface rules of app architecture. Meaning that, if you do change your Choices column, then you are still forced to then change your app in order to account for the change. Thus, what value does a Choice column provide?
That all said. If you too see no need then for the Choices column in this case because it requires app logic changes, then consider a static list of Choices for your dropdown. Now, I am going in a different direction than you currently have, and if this has negative implications, then we can go down the other road, but I wanted to take a more simplistic approach first.
That is to provide your logic in the data of the dropdown.
Meaning, Change your Items property to the following:
Table(
{Value: "Assigned Level 2", Show: []},
{Value: "Level 2 In Progress", Show: []},
{Value: "Level 2 Complete" , Show: ["Review"]},
{Value: "Assigned Level 3", Show: ["Written"]},
{Value: "Level 3 In Progress", Show: []},
{Value: "Level 3 Complete", Show:["Review", "Written"]}
)
Then, your Visible properties would be the following:
For the Review Section:
"Review" in Ungroup(yourCombobox.SelectedItems.Show, "Show")
For the Written Section:
"Written" in Ungroup(yourCombobox.SelectedItems.Show, "Show")
This would provide the visibility of the sections you are looking for. (note, I added some "Shows" for an example)
In other words, for each of the choice values in the formula, just put in the Show column the things you want visible for those choices. With the Visible formula above, they will be properly displayed based on the choice.
NOTE: If you are NOT allowing multiple selections, then the above Visible formula can be altered to:
"Review" in yourCombobox.Selected.Show
etc.
Keep in mind with the above changes, the column can still be a Choice column in terms of storing the value, or it can be a text column in terms of storing. The only difference in the above is how your dropdown itself gets its choices.
I would suggest using if condition instead of switch :
If(ComboBox1.Selected.Value ="Assigned Level 2" || ComboBox1.Selected.Value = "Level 2 In Progress" || ComboBox1.Selected.Value ="Level 2 Complete" , Set(varShowResumeReview, true); Set(varShowWrittenSection, false), If(ComboBox1.Selected.Value = "Assigned Level 3" || ComboBox1.Selected.Value = "Level 3 In Progress" || ComboBox1.Selected.Value ="Level 3 Complete", Set(varShowResumeReview, false); Set(varShowWrittenSection, true), Set(varShowResumeReview, false); Set(varShowWrittenSection, false))
You can also use below formula directly on the visible property of the field which you want to hide:
For resume related fields:
If(ComboBox1.Selected.Value ="Assigned Level 2" || ComboBox1.Selected.Value = "Level 2 In Progress" || ComboBox1.Selected.Value ="Level 2 Complete" , true, false)
Hi RandyHayes,
Thank you so much for the time and effort to offer me a solution and in-depth explanation.
As I'm looking over it and trying to understand it, I have a question. Could I set the statement to a variable like this?:
Set(varShowResumeReview, "Review" in Ungroup(yourCombobox.SelectedItems.Show, "Show"))
If I can, I'd like to avoid having to go into each field's Visible property to apply the statement because there's a large number of them. (100+)
Hi NandiniBhagya20,
Thank you for the thoughtful reply. I greatly appreciate it.
But I tried using If with Or and with ||, but then both Level 2 and Level 3 fields were Visible regardless of which selection I made in Combobox1.
¯\_(ツ)_/¯
You can, but you still have the same challenge of changing all the controls to that variable. In general, using variables is not what you want to do in PowerApps. The less you use the better your app is to build, manage and maintain.
Do you really have 100+ fields in your form? That might be a bit difficult to manage as well. But still, the formula provided should only need to be applied at the datacard level Visible property.
That's the good thing...the variable I used in the example I gave is the actual variable I'm using on the Visible property. So it's already there, I wouldn't have to go setting each and every control's Visible property again.
At least that's my hope. I'll try implementing the solution and report back.
One thing. I didn't think of this earlier, and apologies if it's caused any confusion, but when I say "controls," I think maybe I should be saying "datacards" because the variables ( varShowResumeReview and varShowWrittenSection) are applied in the datacards' Visible property.
I fear I've been wrongly using the terms interchangeably.
And yes! It is a pain to manage a form with that many controls. Definitely something to consider in the next project.
Well, the reason I push more away from using variables is that they are very "program" like and quite a pain to manage in PowerApps. PowerApps is not a programming platform, so, although it has variables, they should be used only when necessary.
In this case (and much is all the cases in PowerApps), the goal is to have your controls derive their values based on data in the app itself. So, the Dropdown/Combobox, in this case, is providing the data to control the screen itself. No variables needed and easier to maintain as all your "logic" and control is in one formula only.
This also leads to the point that setting variables is something that is only done in a Behavioral action formula. This means you need to have some behavioral action to set it. That is just more work for you to do.
As for the DataCards...that is all good. There is actually a trick to selecting them, but it is more of a hit-miss pain than just going into the datacard and setting the Visible property. But, once done, they don't need to change.
User | Count |
---|---|
252 | |
106 | |
88 | |
51 | |
44 |