Rechargement d'un formulaire inliné en cas d'erreur

Request description

Bonjour,

J’ai un souci de rechargement de formulaire inliné : en cas d’erreur au save, le formulaire réapparaît vide.

Je détaille tout ci-dessous.
Merci d’avance pour votre aide !

Emmanuelle

Steps to reproduce

  1. Avoir un objet A avec un lien inliné vers un objet B
  2. Mettre un champ obligatoire sur B
  3. Créer une occurrence de A sans remplir le champ obligatoire de B
  4. Sauvegarder
  5. → Le form de B se recharge vide

Piste d’analyse :

Le form est vide car uiTemplate est vide dans les metadata de l’objet B.

let tmpl = v.uiTemplate instanceof $ ? v.uiTemplate.clone() : $(v.uiTemplate)

Le champ semble vidé au moment du count sur l’objet B

if (res.meta)
                            self.metadata = res.meta;

Normalement, il y a un getMetadata qui revalorise B correctement, mais en cas d’erreur, il y a une sauvegarde des valeurs de champ de l’objet inliné

catch(e => {
                            child.metadata.instance = inst;
                            if (e)
                                errs = errs.concat(e);
                            child.inlineValues = child.getValues();
                            fn();
                        }

Ca bypasse le rechargement des metadonnées car p.values n’est pas vide

if (p.values)
                        init();
                    else {
                        ui.monitor(ctn, "get");
                        if (creation)
                            obj.getForCreate(param).then(init).catch(getError);
                        else if (p.copy)
                            obj.getForCopy(rowId, param).then(init).catch(getError);
                        else
                            obj.getForUpdate(rowId, param).then(init).catch(getError);
                    }

Technical information

Instance /health
[Platform]
Status=OK
Version=6.2.21
BuiltOn=2026-01-15 22:16

Bonjour Emmanuelle,

Je ne reproduis pas le comportement que tu décris en 6.2, j’ai bien un message d’erreur qui s’affiche et la vue inlinée reste visible :

Voici la configuration de ma relation A->B

Est-ce qu’il y a d’autres différences dans ton cas ?

Bonjour Alistair,

Merci de ton retour rapide, effectivement j’ai du code front et des contraintes, je vais les désactiver pour mieux cibler mon cas et je reviens vers toi.

Emmanuelle

Alors j’ai fini par trouver la subtilité : seuls les champs de l’Area 1 sur l’objet inliné sont affichés.
Peut-être parce que c’est celle qui est mise par défaut si le template est vide

let t = md.uiTemplate instanceof $ ? md.uiTemplate.clone() : $(md.uiTemplate || '<div class="area" data-area="1"/>');

Le modop est donc :

  1. Avoir un objet A avec un lien inliné vers un objet B
  2. Mettre un champ obligatoire sur B
  3. Sur le template de B, placer deux Fields area en positions 1 et 2
  4. Créer une occurrence de A sans remplir le champ obligatoire de B
  5. Sauvegarder
  6. → Le form de B se recharge avec seulement l’Area 1

Je suis embêté je n’arrive toujours pas à reproduire ton cas d’erreur.
J’ai implémenté le cas que tu décris avec le module SimFeatures (disponible dans l’onglet “Tools” de l’App Store)

Dans ce module on a un objet FtRelationshipO2m “Relationship (one to many)”, lié à un objet FtO2mChild :

En suivant ton modop :

Les deux field area de l’objet Child sont bien visibles.

Dans ton cas, tu as bien testé sans le code spécifique ?

Si ton template de l’objet B est conforme au paramétrage lors du chargement du formulaire de création mais qu’il ne l’est plus après le click sur Save, c’est peut-être que le back renvoie un template incomplet ou vide.
Est-ce que tu peux regarder ce que contient uiTemplate dans les métadonnées au niveau de la réponse du create de l’objet B ?

Oui j’ai reproduit sur un paramétrage vierge sans particularités.
Mais je pense qu’il faut aussi avoir des onglets :sweat_smile: sinon on ne passe pas dans le count qui vide uiTemplate.

Sans onglet

On ne passe pas dans le count

uiTemplate est renseigné et t[0].innerHtml vaut
"\n <div class=\"area\" data-area=\"2\"></div>\n <div class=\"area\" data-area=\"1\"></div>\n"

Avec onglet

On passe dans le count

Ecrasement des metadonnées

                self.metadata = res.meta;

uiTemplate est undefined et t[0].innerHtml est vide

1 Like

OK j’ai bien reproduit, merci pour l’investigation poussée.

On passe par un count parce que l’onglet est un lien.
Le contexte du count étant un contexte de liste, c’est normal que uiTemplate soit vide.

Le comportement sera adapté afin de ne pas passer par un count pour les onglets d’objets inlinés.

Ça sera livré en 6.2.22

1 Like

Top, ça m’arrange car j’avais caché le badge count en css, vu qu’en effet il n’a pas trop de sens en inliné. Je vais pouvoir retirer ça.

Merci beaucoup pour ton aide,
Emmanuelle

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