cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

Unsaved Property of Edit Form Is Always True

The Unsaved property of my Edit Form form always has a value of true, even when I have made no changes. My form is in FormMode.Edit.

 

As a test I created a button with this code in the OnSelect property.  The Edit Form still shows Unsaved as true after I click the button

 

ResetForm(Form1);

 

 

---
Please click "Accept as Solution" if my post answered your question so that others may find it more quickly. If you found this post helpful consider giving it a "Thumbs Up." 

30 REPLIES 30
ahoepfner
Regular Visitor

@mdevaney@WarrenBelz@v-bofeng-msft@Avinoam@james_hathaway@subsguts@mmook@appyourdata@biterbit@sguthrie1@Matren 

(This is my first post and I don't know etiquette. I tagged everyone on this post to make sure you would see this potential solution.) 

 

I made a major breakthrough on this issue yesterday. I haven't completely solved it - there's still one form giving me issues. But I think I'm headed down the right path. I wanted to see if posting my solution would help anyone else and if maybe someone could help me with this one last form I'm having trouble with.

 

I created what is basically an HR app for our managers to track monthly check ins with each of their employees. This is a canvas app using Dataverse for the data. Each table allows entries to be tracked by date, and there is a table for pretty much every question: how can our company better support you; do you need additional tools and resources for your job; what is your definition of success; etc. I have a pop-up that comes up when someone tries to navigate to a new page without saving their edits or their new entry first. I have this tied to the "Unsaved" property of each form. 

 

All of my forms have a hidden lookup field to link the entries to one employee from the Dataverse User table. This was the first field that was affecting the "Unsaved" property. My lookup formula is in the Default property of the user lookup data card. I added an If statement so that it only does the lookup if the FormMode is New. If the FormMode is Edit or View, it shows the existing entry. This solved the issue for all of those tables with just the one hidden field.

 

I was still having issues with one large table that has two additional hidden fields. On this screen, I have ten different forms that all link to one master table. One of the hidden fields selects one of five dropdown items ("Pillars") depending on what is visible on the screen at the time, and the other hidden field selects whether or not the entry is in a supervisor or employee form, based on which form it is entered in. I tried adding my If statement on these but couldn't get it to work. I was pretty sure it was the syntax I was using and finally figured it out yesterday. I'm still fairly new to Power Apps, and I realize that there are likely better ways of solving this, which is another reason I wanted to post it here.

 

My Pillar field is a lookup to a Dataverse Choice table. In the PillarDataCard default, I just have ThisItem.Pillar. In the DataCardValue, in Items, I have Choices(chPillarChoices) and in DefaultSelectedItems, I have 

If('frmIntegrity-Emp'.Mode=FormMode.New, Filter(Choices(chPillarChoices), Value=chPillarChoices.Integrity), [Parent.Default]). I originally was trying "ThisItem.Pillar" instead of [Parent.Default], and that still wasn't working. I tried "Parent.Default" without the brackets, but that wasn't working either. I happened to notice that another combobox had brackets around "Parent.Default" that identified it as a table instead of a record. As soon as I added the brackets around it to make it [Parent.Default], my unsaved property worked!

 

My Yes/No Supervisor field was similar, but the syntax was slightly different. In the DefaultSelectedItems for the DataCardValue, I ended up with this: 

If('frmIntegrity-Emp'.Mode=FormMode.New, Filter(Choices('Supervisor Comment (chPillars)'),Value='Supervisor Comment (chPillars)'.No), [Parent.Default])

 

What I think was happening, when my forms would open to an EditForm with an existing entry, those default values were overwriting what was already in the table, even though they were the same value. So it was triggering the Unsaved even though there were no visible changes. 

 

As I said, I still have just one table that is giving me issues. It's built almost identically to another table that is working just fine, and I can't seem to find where it's getting tangled up at. But after getting the Unsaved property to work everywhere else in my app, I'm feeling confident that I'll find it eventually. It does have one other Yes/No combobox - I don't have default set in the app, but I'm wondering if the default "no" that pushes from Dataverse is affecting this and I'm going to try to add an If statement similar to what I have in my SupervisorDataCard to see if that fixes it (weird that my other form with a similar combobox is NOT giving me issues though).

 

I hope this helps someone! I am still learning Power Apps and feel like I kind of flail around searching Google for solutions to cobble together for my unique situation. I was pretty excited to have found a fix for the Unsaved property and wanted to share it to see if this community could use it and build on it.

 

Thank you!

 

Amy

Be wary of this because Unsaved doesn't not work all the time.  The reason not to use it is that it can't be TRUSTED and probably never will based on the time it's been and nothing has been done to resolve it.  

As someone else mentioned, I have a big manual comparison between every field on the screen and the original datasource.  However, even that can sometimes fail if you are using combo boxes and other things that get loaded from a source that isn't quick.  The reason being is because during the load, that second or less, the values between the datasource and the screen will be different, so you can get a flash of the "Save" button being available.  Very annoying...  So you have to sometimes rework, as I did, your combos to work off of collections to avoid going to the server.  Again, shouldn't be this hard.

Only other way is just to ask the user the annoying, "Are you sure you want to leave, you may have made changes?".  I noticed that even PowerApps does this when you haven't made any changes, so that's the approach MS has taken.  I don't like it and prefer the system to let the user know immediately that they just changed something that needs to be saved if they don't want to lose it and then I even force them to click a Cancel Changes icon.  Of course they can leave the App, nothing I can do to prevent that.

 

Hope this is helpful.

Gurdy
Regular Visitor

My solution:
i set a global variable: isFromChanged.
In every textfield or combobox which is relevant, i do an UpdateContext in the OnChange-value:
UpdateContext({isFormChanged: true}).
For me it works to set the visibility or displaymode or color of a save-button for example.
Enjoy.

I believe this won't be triggered until you leave the "textfield" so it won't trigger until you move to the next field.  I could be wrong.  Not saying it won't work, but if you start typing a change to say a "Descripition:" field, I'm not sure it will know anything has changed if you exit the screen before leaving the field.

gregmck
Advocate II
Advocate II

Came across this thread while trying to build a Template App and experiencing the .Unsaved issue.

 

Adding a label to view the Form's Unsaved value really does lead to some pretty remarkable true / false returns, for no apparent or logical reason.

 

Not sure if this helps, but the simplest workaround I've found is to check if the User has clicked an UpdateContext link, on their way to the Form, where editMode or newMode have become "true". If so, a Save button / icon can effect the changes; a Cancel button / icon can reset the modes.

 

Navigation away from the screen is dependent on an And(!editMode, !newMode) condition. If true, navigate. If false, check the .Unsaved property (pretty much as a last resort!). The DisplayMode of the navigation icon is also 

Or(editMode, newMode)-dependent.
 
Basically, use a Form, but ensure that the User is forced to either Save or Cancel, and make sure the correct contexts are set.

This worked for me as well. I've got the OnChange property of all the fields (Text Input, date picker, and toggles) as

UpdateContext({varEditFormChanged: true})

And I have the Screen.OnHidden property as 

UpdateContext({varEditFormChanged: false})

I think once you click on another control (like a save/cancel/delete/back icon) it will update the variable. Otherwise, you can edit the set it in the OnSelect property rather than the OnChange. It would be a bit more sensitive, but certainly way simpler than doing come super complex comparison logic for each of the fields. 

Unfortunately, I wanted to have the user see a "Save" icon appear as soon as they change any field.  Not after they have left the field.  Therefore, no use of the Unsaved property works and moreover works consistently.  Therefore, I manually build this out and it's not as bad as it sounds and then you have complete control.  The only problem you can run into is that because communicated with SharePoint online is slow as...... molasses (LOL), sometimes the Save icon will appear for a second while the data loads because it thinks the data in the fields is different from the item you selected in the gallery.  Most of the time this can be eliminated by loading the data into a collection and using that as the source for you lookups/combo box items, etc.   It's when you go to the server/SharePoint, anywhere external the lag is enough to cause the unwanted effect.

 

The one place I've not been able to work around is when you call Office365 Users for your people picker fields.  Since it's not impossible, but ill advised, to create a duplicate of your company's Outlook directory in a collection, that one still causes the glitch of it thinking you have data on the screen that is different than what is in SharePoint.

 

Just sharing in case anyone has some genius around the lag and how to eliminate it in this last case.

 

Thanks

How were you able to create a duplicate of Outlook Directory functionality in PowerApps at all? I was googling so so much, trying different things, followed a couple of different tutorials, none of them worked, and one of them actually caused a bug which required me to roll back a version (something about a circular reference to a variable, if I remember correctly). 

You'd have to build a large collection in parts.  Each part being less than 2000 people.  There are other articles about how to build a collection > 2000 records.  As I said, I don't think it's impossible to do, but most would say you should use the O365 functionality provided.  It's just slow to refresh the data per the default code because it has to do a lookup using the O365 function and that leaves enough time where the field on the screen is blank, yet the selected item in the gallery has the data.  Therefore, when a comparison of what is in the gallery to what is on the screen will be different for 1-2 seconds sometimes causing it to believe the user has made a change to the name.  Using collections eliminates this lag time as this has also occurred on other fields where I have had the default doing a look-up into a list and changing it to a collection already loaded ahead of time eliminate this issue.

 

Good luck

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!   This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions in the Forums to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber of SolutionsSuper UsersNumber of Solutions @anandm08  23 @WarrenBelz  31 @DBO_DV  10 @Amik  19 AmínAA 6 @mmbr1606  12 @rzuber  4 @happyume  7 @Giraldoj  3@ANB 6 (tie)   @SpongYe  6 (tie)     Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersSolutionsSuper UsersSolutions @anandm08  10@WarrenBelz 25 @DBO_DV  6@mmbr1606 14 @AmínAA 4 @Amik  12 @royg  3 @ANB  10 @AllanDeCastro  2 @SunilPashikanti  5 @Michaelfp  2 @FLMike  5 @eduardo_izzo  2   Meekou 2   @rzuber  2   @Velegandla  2     @PowerPlatform-P  2   @Micaiah  2     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 3:Community MembersSolutionsSuper UsersSolutionsPower Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27     Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8   SunilPashikanti8

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (1,759)