Navigation
Le framework graphique permet aisément de naviguer d’un écran vers un autre.
Le INavigateContext
Cet élément sert de “transitions” entre deux écrans. Ainsi, quand on souhaite naviguer d’un écran A vers un écran B, il suffit de passer un INavigateContext dans lequel on trouvera :
- L’identifiant unique de l’écran cible (class et method)
- D’éventuels paramètres (String ou tout autre objet)
Ainsi quand l’écran B se chargera, au moment de son initialisation, il récupérera cet INavigateContext et pourra s’initialiser en conséquences.
Exemple :
INavigateContext nav = new NavigateContext();
nav.setClassName("server");
nav.setMethodName("browse");
Navigator.getNavigator().navigate(nav);Cet exemple permet par exemple de naviguer vers l’administration. La notion de Navigator utilisée est détaillée ci-dessous.
Le Navigator
Cet objet est l’image du navigateur client, côté serveur. Il s’agit d’une classe “à la limite” du SDK.
Il permet de récupérer des informations sur le contexte d’exécution et de gérer la navigation dans le framework graphique.
Le récupérer
Certaines classes, comme les providers d’écrans, ont une méthode getNavigator() disponible. Sinon, il est possible de le récupérer de n’importe quel endroit par Navigator.getNavigator().
On ne peut récupérer un navigateur que si quelqu’un est présent derrière un poste client ! Si ce code est exécuté dans un agent, il renverra “null”.
Les différents modes de navigation
Navigate
Sur l’objet Navigator, il est possible de déclencher un navigate vers le prochain écran (en fournissant un INavigateContext).
Dans ce cas le système va “empiler” les écrans. Ainsi, on navigue de A vers B et, quand l’écran B se termine, le système renvoie automatiquement sur un rechargement de l’écran A.
Un exemple depuis Process : naviguer vers un écran fictif class = myForm et method = edit depuis un bouton posé en script dans un formulaire (on aurait très bien pu naviguer vers des écrans custom) :
<button labelid="LG_MY_TRANSLATION"><![CDATA[
var ctx = new Packages.com.axemble.vdp.ui.framework.foundation.NavigateContext();
ctx.setClassName("myForm");
ctx.setMethodName("edit");
navigator.navigate(ctx);
]]></button>Il est possible de passer un ou des paramètres dans le contexte :
// Passage d'un paramètre
navigateContext.setParameter("toto", objet);
// Passage d'une Map
navigateContext.setParameters(Map<String,Object>);Forward
Sur l’objet Navigator, il est possible de déclencher un forward vers le prochain écran (en fournissant un INavigateContext).
Dans ce cas, le système va vider la pile des écrans. Ainsi, si on navigue de A vers B; quand l’écran B se termine, on retourne à l’endroit où la navigation dans le framework a commencé : portail, easysite, …
Définir une URL de Retour lors de la Navigation
Il est possible de spécifier une URL de retour avec la méthode suivante :
Navigator.getNavigator().getRootNavigator().setBackURL("url/de/retour");Passage de paramètre à la navigation
Il existe plusieurs façons de stocker les paramètres à transmettre lors de la navigation entre pages (selon le périmètre désiré). Pour cela, on utilise le Navigator.
Stockage des paramètres
Navigator.getNavigator().getExecutionContext().getRequest().setAttribute("toto", objet);
Navigator.getNavigator().getExecutionContext().getRequest().getSession().setAttribute("toto", objet);
Navigator.getNavigator().getRootNavigator().setParameter("toto", objet);
Navigator.getNavigator().getRootNavigator().getExecutionContext().getRequest().setAttribute("toto", objet);
Navigator.getNavigator().getExecutionContext().getRequest().setAttribute("toto", objet);Récupération des paramètres
Navigator.getNavigator().getExecutionContext().getRequest().getAttribute("toto");
Navigator.getNavigator().getExecutionContext().getRequest().getSession().getAttribute("toto");
Navigator.getNavigator().getRootNavigator().getParameter("toto");
Navigator.getNavigator().getRootNavigator().getExecutionContext().getRequest().getAttribute("toto");
Navigator.getNavigator().getExecutionContext().getRequest().setAttribute("toto", objet);Lightbox
It is possible to open screens in a lightbox.
Since Process2026.1.0, the lightbox management has changed a lot, and old methods to open a lightbox may not work properly anymore. The old way to open a lightbox is still necessary if you have a complex context associated with the lightbox screen (for example, if you need to pass some complex parameters to the lightbox screen), but it may produce unexpected behavior in some case (tab navigation, etc).
// The code below is usually placed in a button's action listenner
NavigateContext navigateContext = new NavigateContext();
navigateContext.setClassName("myScreenName");
navigateContext.setMethodName("myScreenMethod");
navigateContext.setPartName("lightbox");
Navigator.getNavigator().getCurrentNavigation().navigate(navigateContext);// The code below gives a link, that can be setted in a button's Url
SDKFactory.UTILS.getLightboxUtils().buildLightboxScreenLink("myScreenName", "myScreenMethod", null, false)Autres méthodes sur le Navigator
| Méthode | Commentaire |
|---|---|
getCurrentScreen() |
Renvoie l’écran courant : CtlForm, CtlSheet, CtlWizard, … |
popScreen() |
Dépile un écran dans la pile de navigation. |
clearAllScreens() |
Vide la pile d’écrans pour revenir à la page d’origine. |
showPopup() |
Ouvre un lien (par exemple, depuis un bouton ajouté dans un formulaire de document). |
Déclenchement d’évènements
Même si on sort un peu ici du sujet de la navigation, il est intéressant de présenter la possibilité de déclencher via l’objet Navigator un évènement WEB utilisateur, par exemple un clic sur un bouton.
Exemple
On souhaite placer dans un formulaire un bouton supplémentaire qui réalise les traitements suivants :
- Un traitement spécifique
- Ensuite, le traitement exécuté sur le bouton “Enregistrer et fermer”
Au lieu d’essayer de coder le même comportement que ce bouton, il est possible, depuis le traitement du bouton, de simuler le clic sur le bouton “Enregistrer et fermer”.
Pour cela, il faut utiliser un IResourceController. Voici donc à quoi pourrait ressembler le code d’exécution sur le clic du bouton :
//CtlButton buttonSaveAndClose = getResourceController().getTopButton("saveandclose"); //deprecated since 2025.1 removed in 2026
IButton buttonSaveAndClose = getResourceController().getTopIButton("saveandclose"); //since 2025.1
getResourceController().execute(buttonSaveAndClose);Manipulation des paramètres de requête
Il est fréquent de devoir lire la valeur d’un paramètre GET (plus souvent que POST). Il existe un plugin pour intégrer les processus dans les sites web.
Si une classe d’extension doit fonctionner dans les deux cas de figures (Site web et Processus) il faut faire comme suit :
@Override
public boolean onAfterLoad() {
Navigator.getNavigator().getRootNavigator().getExecutionContext().getContext().getParameterString( key )
}Sources :