Redirection après suppression

Redirection après suppression
0
Tags: #<Tag:0x00007fed4e69c088>

Bonjour,

Je souhaiterai savoir s’il existe un moyen pour modifier la redirection à la suite d’une suppression d’objet (dans le même fonctionnement que le hook getTargetObjet) ?

Cordialement
Jean-Baptiste

Pas de hook à ce niveau, “supprimer” revient d’un cran dans la navigation empilée.

  • Le plus simple serait que le postDelete (appelé que si le delete est OK) retourne un redirect classique, du style :

    return HTMLTool.redirectStatement(url);
    où l’URL est une URL d’objet, de liste, externe…
    cf HTMLTool.getFormURL(obj…), getListURL…

  • Et que la UI s’en serve au retour OK du delete (sans oublier de retirer l’objet supprimé de la nav).

Fonctionnement à murir sur la suppression en masse, si N lignes retournent N redirect… il en faudra un seul via le hook postDeleteAll()

Je passe ça en feature request.

C’est cablé, il faudra tester sur votre objet au prochain rebuild sur votre serveur.

	@Override
	public String postDeleteAll() {
		String url = HTMLTool.getFormURL("User", null, "1", "nav=add");
		return HTMLTool.redirectStatement(url);
	}

	@Override
	public String postDelete() {
		String url = HTMLTool.getFormURL("User", null, "1", "nav=add");
		return HTMLTool.redirectStatement(url);
	}

Merci François pour la métodologie.
Peux-tu me dire comment je peux écouter via la UI le retour du delete ?

Jean-Baptiste

Si le back postDelete indique un redirect, pourquoi faudrait il encore le changer en front ? Vous pouvez appeler un objet externe s’il faut faire des choses préparatoires. Les traitements fronts sont à éviter.

En front, il y a un trigger de notification en cas de mise à jour d’un objet, il suffit d’ajouter une classe js-notify et un trigger ui.notify dans un div/container, pour être appelé en cas de création/update/delete avec en paramètres le type de mise à jour, l’objet et le rowid.

Il faut préciser le besoin pour savoir qu’elle est la meilleure approche.

Merci François pour ces précisions.

C’était la partie notify qu’il me manquait, maintenant j’arrive bien à récupérer la réponse du back.

Il me reste cependant un souci, lorsque je modifie l’url dans le postDelete, j’ai en retour une pop-up avec l’url que je viens de construire et le trigger notify ne se déclenche pas. Par conséquent aucune redirection n’est pas appliquée et je reste bloqué sur mon formulaire.
J’ai testé sur une version normalement à jour (créée aujourd’hui).

Peux-tu me confirmer si vous reproduisez ce comportement ?

Il y a eu pas mal de modifications à reporter pour cette évolution dont une qui date d’hier midi pour ne pas considérer un redirect comme une erreur dans le retour Ajax.
Je vais refaire un refresh de vos templates car sur une 4.0r à jour le redirect fonctionne bien.

Pour la partie notif, une suppression génère un trigger via :

$ui.view.notify({
	type: "delete",
	object: obj,
	rowId: "123"
});

Qui peut être capté par un event :

$("#myDiv").addClass("js-notify").on("ui.notify", function(e,data) {
	var obj = data.object.getName();
	if (data.type=="delete")
		console.log("deleted "+obj+" id="+data.rowId);
	if (data.type=="update")
		console.log("updated "+obj+" id="+data.rowId);
	...
});

Vous pouvez envoyer vos propres notifs par ce canal avec les données que vous souhaitez, la logique est de générer un trigger vers tous les éléments DOM qui l’implémentent.

Cette forme de notif reste locale au navigateur. Pour prévenir les autres navigateurs, il faudra passer par des events d’objet via websockets.