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.