Pb de valarisation d'un attribut par contrainte dans le cas d'un update

Bonjour,

j’ai créé une contrainte pour valoriser un attribut : je veux récupérer les numéros de tél de l’élève choisi pour les affecter au contact.

quand je crée une nouvelle question, ça fonctionne très bien.
je sélectionne un élève, le numéro est copié :


tant que je suis en création (pas encore de save), je change d’élève, le numéro est récupéré :

quand je modifie une question existante, ça ne fonctionne pas. Il y a un décalage : je recupère le numéro de téléphone de l’élève choisi précédement …
j’affiche ma question existante: le numéro est le bon


je change d’élève, le numéro ne change pas :

je change à nouveau d’élève, le numéro affiché est celui de l’élève sélectionné le coup d’avant …

Merci de nous donner la définition complète de la contrainte

l’expression : obj.getField(“qrDemandeAleContact_fk.aleContactTelFixe”).getValue() != obj.getField(“qrDemandeAleContact_fk.aleContactTelFixe”).getOldValue()

Merci, donc le fonctionnement est bien normal :

  • La oldvalue = est celle de la base de données, la UI ne la modifie pas.
  • La value = celle saisie, qui déclenche un “change” => contrainte front

Donc forcement si vous revenez à la valeur en base, la contrainte ne se déclenche pas via votre expression qui compare la valeur à l’écran avec celle en base. Seul un “save” va actualiser la oldvalue cachée en Front.

Votre besoin est de créer un event “change” sur l’input, pas de comparer avec la valeur en base, donc il faut faire un javascript client (i.e. ressource SCRIPT sur l’objet).

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

Exemple pour copier, rendre un champ visible ou ou modifiable en fonction d’un autre dans un formulaire une fois chargé :

(function(ui) {
    if (!ui) return;
    var app = ui.getAjax();
    Simplicite.UI.hooks.myObject = function(o, cbk) {
        try {
             var p = o.locals.ui;
             p.form.onload = function(ctn, obj) {
                 // Bind change on a field to change one other field
                 var field = ui.getUIField(ctn, obj, "myField");
                 field.ui.on("change", function() {
                     var f = ui.getUIField(ctn, obj, "myOtherField");
                     f.ui.val(field.ui.val()); // copy value
                     // f.ui.visible(v ? Simplicite.VIS_HIDDEN: Simplicite.VIS_BOTH);
                     // f.ui.updatable(f.required && v=="123");
                 });
             };
        }
        catch(e) {
            app.error("Error in Simplicite.UI.hooks.myObject: "+e.message);
        }
        finally {
            // Required callback when hooks are loaded
            cbk && cbk();
        }
    };
})(window.$ui);

Ce besoin est par ailleurs à étudier pour faire évoluer les contraintes front pour permettre des événements clients facilement paramétrables en low-code.

  • du genre expression = [EVENTCHANGE:field]
  • et garder les impacts compatibles;

je requalifie en Feature Request