URL d'accès direct à un objet externe dans l'UI Simplicité

Bonjour,

Est-il possible d’avoir une url permettant d’accèder directement au rendu d’un objet externe dans l’UI Simplicité (en passant avant par l’authent login/mot de passe Simplicité ou SSO si besoin) ? et de pouvoir récupérer les éventuels paramètres passé dans l’url dans les paramètres de la méthode display() de l’objet externe ?

Le besoin serait d’avoir le même comportement que pour les urls suivantes :

Avec ces urls si l’utilisateur est déjà authentifié il arrive directement sur la bonne page et s’il n’est pas authentifié il passe par la page de connexion avant d’arriver directement sur la bonne page.

J’ai essayé avec cette url http://localhost:8060/ui/ext/DemoCatalog mais j’ai un json qui s’affiche :

Au lieu d’avoir cette page :

Bonjour,

  1. En V6, vous avez les PermaLink

https://docs.simplicite.io/lesson/versions/release-notes/v6-0

  • Permalink to expose user-friendly URL:
    • designer can set a permalink to override technical deeplink or tiny URL (without internal row_id)
    • a permalink uses a kebab-case syntax and is wrapped thru the new servlet /ui/l/<permalink URI>
    • the authent mechanism is respected before accessing the permalink if the user is not yet connected
    • currently supported on:
      • View: direct access to a view or dashboard, ex: /orders/sales-overview
      • Preset search: direct access to a filtered/sorted object, ex: /orders/list-of-last-pending-status
      • External object: direct access to an external object page, ex with parameters: /ext-page-name?status=pending&client=CLI0001
    • business object form: the permalink is based on record data
      • with dynamic tokens in URI: [USERKEY], [VALUE:field], [DATE], [ROWID]
      • a new column row_permalink is created in the DB table to store the calculated permalink per row on save
      • example: /orders/order-[VALUE:demoOrdNumber]-created-[DATE]
  1. Sinon en 5.3, il existe un accès rapide aux vues comme pour les listes ou formulaires d’objet :

https.../view?v=DemoHome

Il faudra mettre votre objet externe dans un Vue, mais pas sûr que les paramètres soient passés au contenu de la Vue.

  1. ou encore il faut utiliser un deeplink (ce qui fait le permalink V6).

https://.../ui?deeplink=<uri encoded>

exemple pour /ui/ext/DemoCatalog?param=1

https://.../ui?deeplink=%2Fui%2Fext%2FDemoCatalog%3Fparam%3D1

(d’où la création d’un permalink en V6 plus lisible/pratique)

Merci j’arrive bien a accéder directement à la page de l’objet externe en utilisant le deeplink ou le permalink. Par contre quand j’utilise le permalink les paramètres passés dans l’url sont perdus.

Le code Java de DemoCatalog :

package com.simplicite.extobjects.Demo;

import java.util.*;

import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;

/**
 * UI component external object DemoCatalog
 */
public class DemoCatalog extends com.simplicite.webapp.web.ResponsiveExternalObject {
	private static final long serialVersionUID = 1L;

	// Note: in most cases no server-side Java code is needed
	// Just implement the 3 client-side resources: HTML, SCRIPT (Javascript with the render function), STYLES

	/*@Override
	public void init(Parameters params) {
		AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
	}*/
	
	@Override
	public String content(Parameters params) {
		AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
		return super.content(params);
	}
}

Le parmétrage de DemoCatalog :

Quand j’utilise l’url deeplink suivante : http://localhost:8060/ui?deeplink=%2Fui%2Fext%2FDemoCatalog%3Fparam%3D1

Je retrouve bien param = 1 dans les logs :

Quand j’utilise l’url permalink suivante : http://localhost:8060/ui/l/demo-catalog?param=2

Je ne retrouve pas le param = 1 dans les logs :

Merci pour ton analyse.
On va corriger ça, les paramètres sont perdus dans la conversion Permalink => Deeplink.
Le code utilise un request.getPathInfo() qui ne récupère que /demo-catalog.

Ce sera livré en 6.1.11 en lui ajoutant le request.getQueryString().

top, merci
Est-ce qu’on pourrait également l’avoir en 6.0 ?

Je laisse @Francois répondre si c’est backportable en 6.0 mais j’attire l’attention sur le fait que la 6.0 est désormais en toute fin de maintenance (31/10/24) la 6.0 est une version mineure, il s’agit donc d’une maintenance court terme uniquement destinée à laisser un peu de temps pour upgrader en 6.1 (ce n’est pas une maintenance long terme comme pour la v5 avec la 5.3).

Il est donc largement temps de passer en 6.1, c’est en général indolore sauf si vous utilisez les choses indiquées ici: release note 6.1 / compatibility-breaking-changes pour lesquelles le refactoring est simple

Oui on va backporter.

1 Like

Ca ne remet pas en cause la nécessité de passer en 6.1 d’ici la fin de la maintenance de la 6.0 le 31 octobre…

En effet, je n’avais plus la date du 31 octobre en tête. On va se mettre à jour.

Bonjour, merci pour la correction, en faisant des tests en 6.1.15 je n’ai plus le problème avec les paramètres manquants quand j’utilise le permalink et quand je suis déjà connecté à Simplicité.

Par contre si l’utilisateur n’est pas encore connecté à Simplicité et qu’il y accéde depuis un permalink, il arrive bien sur la page de connexion mais une fois authentifié les paramétres sont perdus.

Quel type d’ident/authent (interne, externe OIC/SMAL) utilisez vous ?

J’ai testé avec l’authent interne, mais ça semble également présent avec oidc (j’ai pas pu mettre de log pour le moment pour confirmer que c’est le même problème)

OK, je posais juste la question car en SAML il y a des limitations de conservation de l’URL initiale selon l’IdP SAML utilisé.

On va voir ça avec l’ident/authent interne

Bonjour,

Je viens de vérifier, c’est également présent avec OIDC.
Est-ce qu’une correction sera possible pour avoir le même comportament qu’avec le deeplink ?
C’est le cas d’usage avec OIDC qui nous intéresse le plus, l’authent interne Simplicité n’étant pas utilisée en prod.

Bonjour Florent et bonne année !

Merci à @nathalie d’avoir relancé le ticket.
Effectivement les paramètres se perdent quand on passe par des redirect lors de l’authent.
Les infos du Permalink request.getQueryString() seront également préservées le temps de l’authent, le getPathInfo() n’était pas suffisant dans votre cas d’usage.

Ce sera corrigé au prochain build 6.1.19

1 Like

Bonne année :slight_smile:
Top, merci

Bonjour,

Je viens de tester en 6.1.19 avec l’authent OIDC.
Le comportement est différent par rapport à la 6.1.18 mais ce n’est pas celui souhaité, je ne sais pas si c’est quelque chose qui est mal configuré de mon côté.

Configuration

J’ai créé l’objet externe suivant avec un permalien “/obj-ext-params” :

Son code Java :

package com.simplicite.extobjects.Demo;

import java.util.*;

import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;

/**
 * Basic external object DemoObjExtParams
 */
public class DemoObjExtParams extends com.simplicite.util.ExternalObject {
	private static final long serialVersionUID = 1L;

	// Note: instead of this basic external object, a specialized subclass should be used

	/**
	 * Display method
	 * @param params Request parameters
	 */
	@Override
	public Object display(Parameters params) {
		try {
			AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
			return javascript(getName() + ".render(ctn);");
		}
		catch (Exception e) {
			AppLog.error(null, e, getGrant());
			return e.getMessage();
		}
	}
}

Son code JS :

class DemoObjExtParams extends Simplicite.UI.ExternalObject {
	async render(params, data = {}) {
		$('#demoobjextparams').append(params);
	}
}

Au niveau du paramètre système “AUTH_PROVIDERS” j’ai mis “false” au niveau du provider “internal” pour que la connexion se fasse automatiquement avec le SSO :

Tests

  1. Je me déconnecte de Simplicité.
  2. J’arrive sur la page de connexion du SSO me demandant de me connecter.
  3. Je change l’url pour mettre https://simplicite61.dev/ui/l/obj-ext-params?param1=test.
  4. J’arrive de nouveau sur la page de connexion du SSO, je me connecte.
  5. J’arrive dans Simplicité mais sur la page d’accueil :

Si on regarde dans la console DevTools les échanges réseau on constate qu’après la connexion SSO on a été redirigé sur “/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest” :

  1. Je reste connecté au niveau de Simplicité, je change l’url pour mettre “https://simplicite61.dev/ui/l/obj-ext-params?param1=test” :

J’arrive bien sur mon objet externe, par contre l’url de redirection n’est pas “/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest” mais “/ui/?deeplink=%2Fui%2Fext%2FDemoObjExtParams%3Fparam1%3Dtest”.

  1. Je reste connecté au niveau de Simplicité, je change l’url pour mettre “https://simplicite61.dev/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest”.

J’arrive sur la page d’accueil de Simplicité et non celle de l’objet externe.

Cette url ne semble pas fonctionner, est-ce que c’est un problème de configuration de mon côté ?

Bonjour,

On est en cours d’amélioration au niveau du Auth Filter (niveau tomcat) pour d’autres sujets d’optimisation pour ne pas créer des sessions transitoires pour rien (pour véhiculer la requêtes et les paramètres notamment).

Mais ici, c’est visiblement un nouveau problème de tuyauterie suite au redirect de l’IDP.
Les paramètres sont bien conservés cette fois-ci mais le permalink est sensé être converti en deeplink, il doit encore manquer un petit quelque chose dans la chaine de traitement :

/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest
/ui/l/obj-ext-params?param1=test
deeplink=%2Fui%2Fext%2FDemoObjExtParams%3Fparam1%3Dtest

On va passer ça au debug, car je ne pense pas qu’il y ait un rapport avec le SSO.

Effectivement le problème se reproduit quand on passe par une authent préalable, la conversion du permalink en deeplink (qui vérifie l’existence et les droits d’accès) ne se passe pas bien depuis qu’on ne perd plus les paramètres.

Si déjà authentifié :

  • la servlet permalink /ui/l utilise le getPathInfo (donc sans paramètre) pour retrouver le deeplink habilité, auquel Simplicité rajoute les paramètres (getQueryString)

Sinon, après redirect d’authentification

  • le paramètre deeplink de l’URL est bien complet avec les paramètres, mais il ne fallait pas en tenir compte pour retrouver le deeplink habilité

Ce sera corrigé en 6.1.20.

1 Like

Bonjour, pour pouvoir planifier les mises à jours de notre côté, savez-vous quand sera disponible la 6.1.20 ?

1 Like