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.
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.
Why not use the OnStart property to navigate?
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.
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.
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.
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
User | Count |
---|---|
135 | |
125 | |
73 | |
70 | |
69 |
User | Count |
---|---|
202 | |
202 | |
64 | |
63 | |
52 |