cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
AvenaFernando
Level: Powered On

Offline mode + multiple screens + back () = duplicating values

I am using sharepoint list, in Screen1 in OnVisible has following code:

 

If(Connection.Connected;
	ClearCollect(LocDP;ShowColumns('01_Product_Description';"Title";"Description"));;
	ClearCollect(LocPA;DropColumns('01_Products_All';"{Identifier}";"{Link}";"{Name}";"{Path}";"Author";"Created";"Editor";"ID";"Modified";"Title"));;
	UpdateContext({statusText: "Online data"});
	LoadData(LocDP;"LDP";true);;
	LoadData(LocPA;"LPA";true);;
    UpdateContext({statusText: "Local data"}));;
SaveData(LocDP; "LDP");;
SaveData(LocPA; "LPA")

This code is based on the tutorial: https://powerapps.microsoft.com/en-us/tutorials/offline-apps/

 

But I have other screens, when I'm OFFLINE on Screen1 and I go to Screen2, and return - using the Back() function - to Screen1, and ends up running another LoadData, occurring in the duplication of values.

 

online.png

 

 

 

 

 

 

 

 

 

 

Airplane mode, but on the same screen, then onvisible did not run again.

 online-aviao.png

  

 

 

 

 

 

 

 

 

 

duplicating values  

 offline.png

 

 

 

 

 

 

 

 

 

 

Is it possible to run only once? Because I need only once the values appear, or when I return from the Back(), there is no duplication of data?

 

My solution was Clean (collection), and then doing LoadData.

If(Connection.Connected;
	ClearCollect(LocDP;ShowColumns('01_Product_Description';"Title";"Description"));;
	ClearCollect(LocPA;DropColumns('01_Products_All';"{Identifier}";"{Link}";"{Name}";"{Path}";"Author";"Created";"Editor";"ID";"Modified";"Title"));;
	UpdateContext({statusText: "Online data"});;
	UpdateContext({offRun: true});;	
	UpdateContext({btOff: false});
		Clear(LocDP);;
		Clear(LocPA);;
		LoadData(LocDP;"LDP";true);;
		LoadData(LocPA;"LPA";true);;
		UpdateContext({statusText: "Local data"}));;
SaveData(LocDP; "LDP");;
SaveData(LocPA; "LPA")


but I believe this will be a problem.

 

Example on screen 2, I have the items of each area, and within each item I will update the field of quantity and marks, of the table that was loaded (LoadData), but there would at the same time save / update inside the file recorded by SaveData ?

When I return, Clean () will erase the data.

 

Currently my application in online mode, I use the UpdateIf to see if it is the field quantity and the correct item to write.

 

2 ACCEPTED SOLUTIONS

Accepted Solutions
juresti
Level 8

Re: Offline mode + multiple screens + back () = duplicating values

Hello,

I was also running into this problem of coming back to a screen and all my data was duplicating when it was loading.

The screen will run the onVisible each time, and therefore run you "load data" functions.

I fixed this issue by first clearing the data before loading it.

Apparently the views will hold the data they are displaying after leaving the screen and coming back to it.

When you close the app and open it, the data is ok since it is starting with new cleared views.
Clear(data);
loadData(data);

 

Clearing the data will clear your views so when it loads again it appends to a cleared list or view.

Since there is no save involved here, Clear() will only clear the screen cache then it loads the actual data again from device storage.

 

Administrator
Administrator

Re: Offline mode + multiple screens + back () = duplicating values

Thank you for your research and help with this issue @juresti! I am going to mark this thread as solved. If anything changes please add a comment to the thread. 

8 REPLIES 8
AvenaFernando
Level: Powered On

Offline mode + multiple screens + back () = duplicating values

Duplication of the text above.

Community Support Team
Community Support Team

Re: Offline mode + multiple screens + back () = duplicating values

Hi @AvenaFernando,

 

Thanks for the feedback.

As this happened under offline mode, I suspect the duplicate is caused by the Savedata function, please take a try to add an if condition with the SaveData  fucntion,

 

 

If(
   StatusText="Online data",
    SaveData()
  )

The whole formula in your scenario should be:

If(Connection.Connected;
	ClearCollect(LocDP;ShowColumns('01_Product_Description';"Title";"Description"));;
	ClearCollect(LocPA;DropColumns('01_Products_All';"{Identifier}";"{Link}";"{Name}";"{Path}";"Author";"Created";"Editor";"ID";"Modified";"Title"));;
	UpdateContext({statusText: "Online data"});
	LoadData(LocDP;"LDP";true);;
	LoadData(LocPA;"LPA";true);;
    UpdateContext({statusText: "Local data"}));;
if( 
statusText="Online data";
SaveData(LocDP; "LDP");;
SaveData(LocPA; "LPA")

Writing in this way would keep the SaveData run only in Online mode.

For Data added under Offline, Modify the collection and use SaveData function with the button onselect property.

Regards,

Michael

Community Support Team _ Michael Shao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
AvenaFernando
Level: Powered On

Re: Offline mode + multiple screens + back () = duplicating values

It works offline, but only if it has a screen.

AvenaFernando
Level: Powered On

Re: Offline mode + multiple screens + back () = duplicating values

The problem is not in the SaveData.

 

The SaveData runs when you are online to just create the LDP or LPA file with contents of the tables / database that was created by ClearCollect.

 

What I did was put SaveDate inside the If of online. This code works perfectly. Has the use of Clear to avoid duplication.

(Only images are not saved offline, but because in the table they are as urls for the image). Is it possible to store images locally?

 

If(Connection.Connected;
	ClearCollect(LocalDP;ShowColumns(Descricao_Produtos;"UNIQUE_ID_AAFFHIR";"Description"));;
	ClearCollect(LocalPT;DropColumns(Produtos_Todos;"{Identifier}";"{Link}";"{Name}";"{Path}";"Author";"Created";"Editor";"ID";"Modified";"Title"));;
	SaveData(LocalDP; "LDP");;
	SaveData(LocalPT; "LPT");;
	UpdateContext({statusText: "Online data"});
	Clear(LocalDP);;
	Clear(LocalPT);;
	LoadData(LocalDP;"LDP";true);;
	LoadData(LocalPT;"LPT";true);;
        UpdateContext({statusText: "Local data"}))

Online does not duplicate, because the ClearCollect function - it does Clear before.

 

So offline, I have to put

Clear (LocalDP) ;;
Clear (LocalPT) ;;
LoadData (LocalDP; "LDP"; true) ;;
LoadData (LocalPT; "LPT"; true) ;;

This clears the local table that BrowseGallery is showing / listing, and reloads with local data.

 

If it does not clear, every time Screen1 appears, the code in OnVisible will duplicate the data, because it will run the LoadData without the Clear.

 

Suggestion to create the ClearLoad function. There is ClearCollect.

 

I share the example application -> https://powerapps.microsoft.com/en-us/tutorials/offline-apps/

Twitter Offline.msapp - https://1drv.ms/u/s!AijLzG3PzbarhO1oJPAobBWvJ7URpw

 

This does not have a Clear function before LoadData on the offline, then duplicate data occurs when I go to screen2 when I select the + button. (Top and right corner)

tela1.png

tela2.jpg

 

 

 

 

 

 

 

 

 

 


The code in OnVisible is this: (I reduced it to maxResults for 2, to show less results)

 

If(Connection.Connected;
    ClearCollect(LocalTweets;Twitter.SearchTweet("Power Apps"; {maxResults: 2}));;
    SaveData(LocalTweets; "Tweets");;
    UpdateContext({statusText: "Online data"});
    LoadData(LocalTweets; "Tweets";true);;
    UpdateContext({statusText: "Local data"})
);;
LoadData(LocalTweetsToPost;"LocalTweets";true)

And then try with: Clear(LocalTweets);

 

If(Connection.Connected;
    ClearCollect(LocalTweets;Twitter.SearchTweet("Power Apps"; {maxResults: 2}));;
    SaveData(LocalTweets; "Tweets");;
    UpdateContext({statusText: "Online data"});
    Clear(LocalTweets);;
    LoadData(LocalTweets; "Tweets";true);;
    UpdateContext({statusText: "Local data"})
);;
LoadData(LocalTweetsToPost;"LocalTweets";true)

 

Highlighted
AvenaFernando
Level: Powered On

Re: Offline mode + multiple screens + back () = duplicating values

I believe that this update 650, with the new OnStart function

 

https://powerapps.microsoft.com/en-us/blog/powerapps-update-650/

App initialization with OnStart

 

 

Do you find that sometimes your app requires some initialization before it gets rolling?  An API to call, a data source to load, a collection to fill?  Have you tried using OnVisible on the first screen but find that less than ideal, as it will fire after the screen is visible, will fire again each time the screen becomes visible, and you can't Navigate from it?

 

There is a better way with this release.  On the first screen of your app, and only the first screen, you will find a new OnStart action formula .  It appears in the studio in all the places you find other action formulas such as OnVisible.  This formula will execute before anything else when your app is being loaded, before the first screen is shown, and it will execute only once.  You can initialize your app by calling APIs and using Collect as much as you like.  You can also use Navigate to start the app on a different screen and even pass context variables to it. 

 

Sounds great, but why is OnStart associated with the first screen when this seems to be an app level thing?  We don't yet have a place in the studio for working with app level formulas and the first screen seemed like the best place for now.  If you remove your first screen or reorder screens and you aren't sure where it went, simply save, close, and re-load your app and it will again appear on the first screen.

Community Support Team
Community Support Team

Re: Offline mode + multiple screens + back () = duplicating values

Hi @AvenaFernando,

 

Thanks for the update.

That is a good point. Please consider to submit that as an idea in the PowerApps idea forum, to add the App Level properties.

https://powerusers.microsoft.com/t5/PowerApps-Ideas/idb-p/PowerAppsIdeas

 

For the Image saved, I think that depends on the source specified with the Image control (or saying the data source), if the data source stores the image data, then PowerApps should be able to store image locally.

Image captured by Camera control is saved locally.

 

Regards,

Michael

Community Support Team _ Michael Shao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
juresti
Level 8

Re: Offline mode + multiple screens + back () = duplicating values

Hello,

I was also running into this problem of coming back to a screen and all my data was duplicating when it was loading.

The screen will run the onVisible each time, and therefore run you "load data" functions.

I fixed this issue by first clearing the data before loading it.

Apparently the views will hold the data they are displaying after leaving the screen and coming back to it.

When you close the app and open it, the data is ok since it is starting with new cleared views.
Clear(data);
loadData(data);

 

Clearing the data will clear your views so when it loads again it appends to a cleared list or view.

Since there is no save involved here, Clear() will only clear the screen cache then it loads the actual data again from device storage.

 

Administrator
Administrator

Re: Offline mode + multiple screens + back () = duplicating values

Thank you for your research and help with this issue @juresti! I am going to mark this thread as solved. If anything changes please add a comment to the thread. 

Helpful resources

Announcements
firstImage

PowerApps Monthly Community Call!

Join us next Wednesday for our Demo Extravaganza, October 16, 2019 8am PDT.

firstImage

Microsoft Business Applications Virtual Launch Event

Join us for an in-depth look at the new innovations across Dynamics 365 and the Microsoft Power Platform.

firstImage

Watch Sessions On Demand!

Continue your learning in our online communities.

Power Platform 2019 release wave 2 plan

Power Platform 2019 release wave 2 plan

Features releasing from October 2019 through March 2020

FirstImage

Power Platform World Tour

Coming to a city near you

thirdimage

PowerApps Community User Group Member Badge

Fill out a quick form to claim your user group badge now!

FourthImage

Join PowerApps User Group!!

Connect, share, and learn with your peers year-round

SecondImage

Power Platform Summit North America

Register by September 5 to save $200

Top Kudoed Authors
Users Online
Currently online: 180 members 4,229 guests
Please welcome our newest community members: