I'm having some trouble with a SharePoint form created with PowerApps
The form is working fine in every respect, except for clearing the form of previous values when opening a new form. It would appear that ResetForm() isn't working correcty.
My research tells me to add a ResetForm() command in the OnSuccess action:
Even though this is set correctly, I still see previous values when opening a new form.
Is anyone else seeing this? Is this incorrect placement?
Is this something that happens with a specific applciation? For example, if you create a brand new application (File/New/Start with your data) out of your SharePoint list, does the same problem show up there?
Please note that if ou have any default values configured for your SharePoint fields then those values will be set automatically on resettting a form that is in the "new" mode.
Yes, this is specific to one application.
I'm creating a tabbed SharePoint form based on ideas presented here: PowerApps Tabbed SharePoint Form
I'm using a global variable and field values to calculate a score. When I open a new form, values from the previous saved form will display in the fields.
I'm not sure why ResetForm() isn't clearing the values.
It is hard to come up with the exact issue since I cannot reproduce this issue. I hope the ideas below will help you find the problem:
1. Note that when a form is reset, it resets all its controls
2. When a control is reset, it copies its default values. For example, if you have a ComboBox control that has some values in its DefaultSelectedItems property but has something else selected, the values from DefaultSelectedItems will automatically become selected on Reset
3. If yous SharePoint form is linked to a list that has default values, those values should be populated on resetting the form.
4. Make sure that the Form is reset after it is switched to the "New" mode and not before.
This reply will be quite lengthy, so I apologize ahead of time. 🙂
To zero-in on the issue, I decided to simplify the form. I created a new list with very few columns:
I created a basic form with an extra label to display the variable value during runtime
I made these changes to the form:
Created a global variable in the OnNew event:
Added this to the OnChange event for each Question field to calculate responses
If(DataCardValue3.Selected.Value="Yes", Set(varRunningTotal,varRunningTotal + 1))
Attempted to pull the list value into the variable in the OnEdit event, but both approaches displayed an error
complaining of a data type mismatch
Removed it for now
Added this to the three events shown to reset the variable when the form closes
Added varRunningTotal to the Default property of the Score field to display the value.
The idea is that when a user selects "Yes" to any of the questions, varRunningTotal will increment by 1 and the value is saved back to the Score field
When I saved and ran the form from the list, I input a simple form to give me a score of 3 and saved it.
I clicked on the list item to get into the edit form
The form loads and Score initially displays as 3 and then updates to 6 by the time the form loads
I have two main questions
I'm pretty sure this has something to do with the way I'm handling these variables, but not sure what I'm doing wrong.
Thanks for all your help!
Thank you for the detailed information. I think I know what the issues are.
1. I assume you have ComboBox controls in the cards that are bound to the 3 choices fields. If so then please note that ComboBox does not have an output property named "Text". You can get the selected value as DataCardValue2.Selected.Value in case of a choice field with "allow multiple selections=false" (which I believe is your case).
2. The reason you get extra submits is actually because of a problem in the ComboBox control. Unfortunately, it issues the "OnChange" events even in cases when the value is updated internally and not by user interaction. The workaround for this issue would be to store the previous value and increment the "varRunningTotal" only in case the new value is "yes" and it is different from the previous value.
Hope that heps.
This is great!
Can you give me an example of the syntax to make it work? I'm struggling with the syntax of multiple conditions and actions. I took a stab at it, but I get errors. 🙂
If((DataCardValue3.Selected.Value="Yes" And Last(DataCardValue3.SelectedItems).Value != "Yes"), Set(varRunningTotal,varRunningTotal + 1))
The following should work:
If(DataCardValue3.Selected.Value="Yes", If(PrevValue<>"Yes", Set(varRunningTotal , varRunningTotal +1);Set(PrevValue, DataCardValue3.Selected.Value)),Set(PrevValue, DataCardValue3.Selected.Value))
It would be good to initialize the variables (for example in Screen1.OnStart):
Thanks for thre great help!
Unfortunately, this didn't work for me either. It kept throwing errors.
After days of struggle, I finally removed the running total feature and added a "Calculate" button on the form. It seems more stable when the calculations are done all together. Not my most elegant solution, but it works to get the right value in the box! 🙂
I found the issue with saving back to the list was a problem of my own creation. 🙂
In my many attempts to troubleshoot this issue, I tried to use a variable in the Update property. Unfortunately, I forgot to set it back.
The update field (now) correctly reads: