cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Anonymous
Not applicable

Why we can not use Navigate() in OnVisible

In my app I have a screen which acts as a loading screen and verifies that information is retrieved correctly from the server. 

 

For example here is a very simplified version of the OnVisible:

 

UpdateContext({LoadingText:"Searching for your name..."});
Set(
    _UserProfile,
    Office365Users.MyProfile()
);
If(
    !IsBlank(_UserProfile),
    Navigate(MainMenu_Screen,None),
    UpdateContext({LoadingText:"Failed to load your profile. Please restart the App"})
)

Having this function I get red line under Navigate which reads like this:

 

 

Navigate cannot be used here since it would always navigate away from this screen.

1.png

 

This error makes no sence since it would always navigate only if the IF condition is true. Can this limitation be removed please?

 

Work around

There is a simple workaround with using a button or any other control with OnSelect property and calling the Select(YourButton) to execute the Navigate() function.

 

For example, add a button and change its OnSelect to:

Navigate(MainMenu_Screen,None)

Now in the OnVisible property change your code to this:

UpdateContext({LoadingText:"Searching for your name..."});
Set(
    _UserProfile,
    Office365Users.MyProfile()
);
If(
    !IsBlank(_UserProfile),
    Select(Button1),
    UpdateContext({LoadingText:"Failed to load your profile. Please restart the App"})
)

Now it works as intended but you had to create some extra controls.

 

11 REPLIES 11
Community Champion
Community Champion

Why not use the OnStart property to navigate?

Anonymous
Not applicable

The problem with OnStart is that it will load everything in the background making the user wait quite a while staring at a blank screen. With this I can show users changing text messages so that he knows that something is happening in the background and will not be as annoyed with wait times as he would otherwise. 

Ok, understood.  Then I guess the only way is to use a timer to check every 3 seconds or so and navigate if found and after 10 tries navigate to restart message.

Microsoft
Microsoft

I agree that this seems to be a valid use of OnVisible, and shouldn't be blocked. I'll bring this up with the team to revisit and possibly remove this error message.

Looking more into this, it looks like the original intention was to prevent making an app that gets into an irreparable state. If you had Screen1.OnVisible = Navigate(Screen2), then it would be impossible to edit the rule. As soon as the author clicks on Screen1, they would immediately be redirected to Screen2, and so be unable to repair the bad OnVisible rule.

 

I still agree that the error is overzealous, but I hope this gives you an idea why it exists. In the future, we should have a better division between authoring and published app functionalities, and at that point it would be possible to relax this. Until then, the WYSIWYG architechture makes Navigates on OnVisible a dangerous functionality for authors.

 

I'm still bringing the issue up with the team to continue tracking this use case. Thanks for bringing it to my attention!

I just ran into this error today. Has there been any movement on this request?

 

Here's another use case:

A "clearing house" screen that can bridge customized page navigation and the lack of "stored procedures".

 

Every page that required certain validation (or, say, if you wanted to change/randomize the next screen based on some user input -- directing 'YES' answers to one screen, 'NO' to another, though with much more complexity), would have their navigation button pointing to the ClearingHouse screen.

 

The ClearingHouse screen would then be a central repository of validation, forwarding the navigation on based on the current validation conditions/rules.

 

Without that, if new validation rules begin to layer on the others, many screen's navigate() functions would have to be updated.

 

I don't want the ClearingHouse to be seen... I just want the user to pass through to the next screen they need.

Helper I
Helper I

Hi everyone,
Wanna tell something I encountered to everyone.
I set the onvisible property to select a control which loads data then navigates. Now I am unable to edit the screen in powerapps web. Because as soon as i select the screen to edit, it navigates. This is a serious bug, the screen shouldn't autonavigate while editing.
Now i have to restore the last version to work at all.
Super User
Super User

I do all of mine with a basic Home Screen that has a simple text field that pulls in the current user so it loads fast. If that text field is blank they can't move forward. 

 

I know this is not what you are asking but this works good for me and loads fast. My Home Screen is real basic that loads at first to get them started.

 

Capture.JPG

Responsive Resident
Responsive Resident

Hi @Asimansari

I have run into this before and the simple solution is to delete the control with the navigate function.  This will take you to the screen, then you can ctrl+z (Undo) to put it back.  Now you are on the screen in edit mode and can make changes.

To work around this in apps that have a loading screen I usually put a checkbox on a 'settings' screen, that if checked won't do the navigation.

Hope that helps

Hadyn

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

News & Announcements

Community Blog

Stay up tp date on the latest blogs and activities in the community News & Announcements.

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021

Community Highlights

Community Highlights

Check out the Power Platform Community Highlights

Top Solution Authors
Top Kudoed Authors
Users online (4,536)