Script sur modification de liste

Bonjour,

J’utilise un script et de l’autocomplétion d’un champ pour remplir les autres champs depuis ce dernier (par simple traitement de chaîne de caractères).
J’ai donc un fieldCompletion dans mon objet métier et un script front pour remplir les champs à partir du premier saisi dans le formulaire.
Cependant, le script ne semble pas être appliqué dans le cas ou on modifie la liste et ajoute une ligne.

La complétion des autres champs se fait par un
etabNom.ui.on("change", function() {/* set des valeurs */});

etabNom étant récupéré comme ceci:
var etabNom = ui.getUIField(ctn, obj, "eqlCat2DroitEtabNom");

Est-ce qu’il faut récupérer ce champ d’une autre façon dans le cas d’un ajout de ligne par modification de la liste ?

Dans le cas d’une ligne de tableau, il faut préciser à quel ID le champ correspond puisqu’il y a N inputs pour un même champ dans le tableau. Celui-ci est passé en paramètre des hooks lorsqu’il s’agit d’un record :

Exemple dans la documentation

p.list.onloadrow = function(ctn, obj, id) {
	var field = ui.getUIField(ctn, obj, "myField", id);
	field && field.ui.on("change", function() {
		var v = field.ui.val(),
			f = ui.getUIField(ctn, obj, "myOtherField", id);
		f.ui.visible(v ? Simplicite.VIS_HIDDEN: Simplicite.VIS_BOTH);
		f.ui.updatable(f.required && v=="123");
	});
};

https://docs.simplicite.io/documentation/04-ui/responsive.md

Merci de ton retour.
J’ai tenté de faire ça, mais le onloadrow n’a pas l’air d’être exécuté. Voici son code:

p.list.onloadrow = function(ctn, obj, id) {
    console.log("ZDQZDQZDZQD"); // Pas exécuté
    let etabNom = ui.getUIField(ctn, obj, "eqlCat2DroitEtabNom", id);
    let etabRne = ui.getUIField(ctn, obj, "eqlCat2DroitEtabRne", id);
    let etabBen = ui.getUIField(ctn, obj, "eqlCat2DroitEtabBen", id);
    let etabCommune = ui.getUIField(ctn, obj, "eqlCat2DroitEtabCommune", id);
					
    let present = (etabNom && etabRne && etabBen && etabCommune); // Vérification que les champs existent bien
					
    present && (function() {
        etabRne.ui.on("change", function() {
            onRneChange(etabNom, etabRne, etabBen, etabCommune);
        });
		
        etabNom.ui.on("change", function() {
            onEtabNomChange(etabNom, etabRne, etabBen, etabCommune);
        });
	                	
        etabCommune.ui.on("change", function() {
            onEtabCommuneChange(etabNom, etabRne, etabBen, etabCommune);
        });
    })();
};

Quelle version ?
Ce hook a été ajouté en V5.

En V4 (pour une fois que j’ai pensé a le mettre dans les tags :sweat_smile:

En V4 il n’y a pas de hook dédié par ligne, il n’y a que list.onload
donc vous devez faire une boucle pour le faire à la fin du chargement de la liste

$('tbody>tr',ctn).each(function() {
  //chaque tr contient le row_id de la ligne
  var id = $(this).attr("data-rowid");
   ... votre code ...
});

Je vois merci, je vous ferais un retour dès que possible.

Votre solution marche pour les éléments déjà présents, mais il reste à trouver le moyen de prendre en charge les records rajoutés lors de l’édition de liste.

C’est réglé. Merci de ton aide.

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

  • Le bouton “ajouter une ligne” unique ajoute 1 ligne avec un row_id = “0” en début de liste, le code est normalement le même car les fields sont bien associés à cet id unique de création
  • Par contre, dans le mode d’édition complète de liste (en insert+update+delete), si on ajoute N lignes en création en bas de liste :
    • le row_id est indéxé et devient successivement “00” “01” “02”… pour isoler chaque champ en création et ne pas les confondre avec les autres lignes en mise à jour (row_id>0)
    • le trigger ui.content.load une fois la liste chargée a déjà été appelé sur celle-ci
    • on va donc ajouter l’appel au hook onloadrow dans ce cas particulier à chaque fois qu’on ajoute une ligne en bas de la liste