Perte des valeurs de champ à l'appel d'une action front

Request description

Bonjour,

J’ai une action front qui ouvre un formulaire d’objet. Le nom de l’objet doit être calculé en fonction de la ligne sur laquelle l’action a été exécutée.
Mon souci est qu’à l’arrivée dans l’action, je n’ai plus que le rowId de la ligne dans les valeurs de l’item donc je ne peux pas calculer ce nom.

Cela a l’air d’être voulu car les valeurs sont explicitements vidées dans doActionCustom

            if (rowId) {
                obj.item = {};
                obj.setRowId(rowId);

Est-ce que je dois faire un get avant le displayForm ? Je trouve ça dommage dans le sens où j’avais déjà récupéré les valeurs en liste, de plus, le displayForm refait un get derrière.
Auriez-vous une autre solution à me suggérer ?

Mon action

	viewSummary() 
	{
	    var d = $('<div/>'), dlg;
	     
	    function close() {
	         $ui.view.tools.dialogClose(dlg);
	    }

        var id = "Summary view";
        dlg = $ui.view.tools.dialog({
                name: id,
                content: d.attr("id", id),
                width: "60%"
            });
		
		let obj = $app.getBusinessObject('Nom d'objet calculé', 'Instance de l'objet');
		$ui.displayForm(d, obj, this.item.row_id, {
		        onsave: null,
		        onsavenew: null,
		        onsavecopy: null,
		        onsaveclose: null,
		        onclose: close
		});
	}

Merci !
Emmanuelle

[Platform]
Status=OK
Version=6.3.7-preview
Variant=full
BuiltOn=2026-04-01 18:33

Bonjour,

Ce bout de code vide l’item lorsque une action back est appelée juste après, c’est pour forcer un refresh des données (select en base), seul le row_id est nécessaire pour appeler le verbe ajax obj.action(name...).

Dans le cas d’un javascript, l’item est bien forcé avant l’eval via setValues.
Une action javascript:xxx appelle la méthode $ui.loadURL qui va faire un $ui.eval puisque c’est du code, et l’item n’est pas vidé dans ce cas.

// Execute a script
function exec(script,div) {
	if (script) {
		div = div || ctn;
		// Load values to allow obj.getFieldValue
		if (p.object && p.item)
			p.object.setValues(p.item);
		// Isolated script with a local context
		$ui.eval(
			// local scope variables+alias
			`let p=options, obj=p.object, object=obj, rowId=p.rowId, action=p.action;\n${script};`,
			["ctn", "div", "options"],
			[ctn, div, p]);
	}
}

A mon avis il faut utiliser directement p.item, ou obj et rowId ou leurs alias dans ta fonction viewSummary.

1 Like

C’est étrange parce que mon action est à backend = true, c’est donc pour ça que mon item est vidé.

Elle est sur un objet SELECT, je ne sais pas si ça peut changer quelque chose ?

On ne voit pas la définition complète dans ta copie d’écran.
D’après ton post la définition c’est URL = javascript:obj.viewSummary().
Si backend = true c’est qu’il y a aussi un nom de méthode back à appeler avant le redirect vers l’URL ?

Oups, elle était en back auparavant, et quand j’ai changé le champ Méthode s’est caché et je ne l’ai pas vidé … j’ai bien mon item, désolée du dérangement et merci !

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.

Merci pour ton analyse,

Ok il faudrait effectivement que Simplicité vide les champs act_method et act_script au validate de l’action de type Front, sinon on obtient des comportements hybrides et étranges, et c’est impossible à voir puisque les champs sont cachés.

On va améliorer ce point.

1 Like