Contexte UPDATE en création

Request description

Bonjour,
J’ai une contrainte basée sur la condition CONTEXTE:CREATE et elle ne s’applique pas.
En debuggant je vois que le contexte est toujours égal à UPDATE.

p.constraints ? ui.applyConstraints(ctn, obj, null, null, $app.CONTEXT_UPDATE, display) : display();

Est-ce voulu ? Si oui y a-t-il un autre moyen d’appliquer la contrainte en create, ou je dois plutôt passer par le postLoad ?

Merci !
Emmanuelle

[Platform]
Status=OK
Version=6.3.4
BuiltOn=2026-02-16 12:31

Bonjour,

Il y avait une raison historique pour simplifier le nombre de contextes du formulaire à créer/tester pour signifier une mise à jour au sens large. Le contexte ne gère pas la combinatoire creation en formulaire ou en liste par exemple. Le contexte aurait dû être pensé séparément de l’affichage mais la UI a évolué pour permettre des creations/mises à jour dans des contextes de liste, popup, pillbox…

En général il suffit juste de tester obj.isNew() ou obj.isCopy() pour savoir s’il s’agit d’une création.

Ou d’utiliser les hooks initCreate/Copy/Update avant affichage, ou preValidate/Create/Update au save.

1 Like

Bonjour et merci de ton retour, d’accord je comprends, obj.isNew() fait l’affaire c’est parfait !

Désolée François j’ai quand même un comportement bizarre :

  • j’ai mis mon champ en Invisible

  • j’ai une contrainte avec expression !obj.isNew() qui le rend Visible
    → mon champ est visible en update (ok) mais aussi en création (pas ok)
    → dans le get metadata je vois que le back renvoie visible = 3

  • je désactive ma contrainte

  • le champ est invisible partout (normal)
    → dans le get metadata je vois que le back renvoie visible = 0

Le code de ma contrainte (champs concernés : status, validated by, validated date)

               (function _cst_CdpProduct() {
                    function _expr1() {
                        return ((context == Simplicite.CONTEXT_UPDATE) && obj.getFieldValue("cdpPdtTypeId") != "");
                    }
                    function _expr2() {
                        return (!obj.isNew());
                    }
                    _expr = _expr1();
                    _field = _getField("cdpPdtSubtypeId");
                    if (_field && _expr !== undefined) {
                        _field.ui?.updatable(!!_expr);
                    }
                    _expr = _expr1();
                    _field = _getField("cdpPdtSubtypeId");
                    if (_field && _expr !== undefined) {
                        _field.ui?.required(!!_expr);
                    }
                    if (_expr2()) {
                        _expr = true;
                        _field = _getField("cdpPdtStatus");
                        if (_field && _expr !== undefined) {
                            _field.ui?.visible(_expr, true, context);
                        }
                        _expr = true;
                        _field = _getField("cdpPdtValidationDate");
                        if (_field && _expr !== undefined) {
                            _field.ui?.visible(_expr, true, context);
                        }
                        _expr = true;
                        _field = _getField("cdpPdtValidatedBy");
                        if (_field && _expr !== undefined) {
                            _field.ui?.visible(_expr, true, context);
                        }
                    }
                }

Où est la contrainte inverse qui remet en invisible si isNew() ?
Une contrainte n’a pas de “else”, il faut nécessairement remettre l’objet dans son état d’origine ou implémenter une contrainte “else”.

1 Like

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