Impact dynamique sur la UI

,

Bonjour à tous,
Je souhaite appliquer un contrainte front + back sur le status de mon objet.
Ex : quand le statut est à “AFAC” (à facturer) je désire mettre le champe “Commentaire” à obligatoire, j’ai réussi à le faire avec un contrainte toujours exécuté (condition à true) et un impact sur la propriété mandatory du champ “Commentaire”.

Par contre ça ne répond pas à mon besoin, je veux que ça soit dynamique :
dés changement du statut à “AFAC” dans la UI =>le champs devient obligatoire sans devoir enregistrer pour savoir qu’il est obligatoire.

Mon besoin s’etend aussi sur d’autre propriété tel que la visibilité, l’update … y’a t’il un moyen simple de le faire ou dois je passé par un script js et de l’ajax ?

Merci d’avance

Si votre contrainte est cochée “front” cela le fera dynamiquement coté client .

Si d’est le cas peut être que la manière dont vous avez écrit les expressions n’est pas compatible avec le Javascript client => tout ce qu’on peut s’exécuter cote serveur (via le moteur “Javascript-like” Rhino coté serveur) n’existe pas forcément dans le Javascript client

effectivement j’ai utilisé du Rhino :

[STATUS].equals("AFAC") || [STATUS].equals("FAC")

Je vais traduire ça au JS et je réessaye

Merci beaucoup

En Rhino vous pouvez écrire == au lieu du .equals Java (ce dernier ne fonctionne à ma connaissance pas coté client, @Francois tu confirmes ?)

Quand la contrainte est front et back il faut écrire avec une syntaxe JS qui marche coté serveur (exécutée par Rhino dans la JVM) et coté client (exécutée par le Javascript engine du navigateur).

Dans certains cas complexes il est possible de dupliquer votre contrainte => une front et une back

Etc.

Merci pour les détails, les impacts sont dynamique maitenant, mais j’ai une anomalie voici le scénario :

  1. là je suis sur un update d’un objet “Facture” avec status “à facturer”

  2. Je bascule sur le statut “Report” => le champ “Report facturation” passe en obligatoire mais je le laisse vide exprès (ce que fera un utilisateur pas à l’aise sur l’outil ou de mauvaise manip)

  3. Quand j’enregistre cela me signale effectivement l’erreur de la date

4)Je corrige la date et je réenrigistre, il met la facture sur l’ancien statut, y’a un mauvaise synchronisation entre la UI et le Back dans ce cas

Je vais éssayer d’implémenter une contrainte qui synchronisera le front et le back entre temps

Je vous tiens au courant

On a ajouté en front au prototype string certaines méthodes usuelles comme equals, equalsIgnoreCase, trim, startsWith, endsWith…

String.prototype.equals = function(v) {
	return this == v;
}

Ca permet d’écrire des expressions qui fonctionnent en back (rhino) et front (javascript).
Pour une égalité autant utiliser “==”.

Sur le sujet d’une contrainte “champ obligatoire” : en front ça ne fait qu’ajouter un classe “required” sur le container du field. Il faut bien que la contrainte soit appliquée en “back” également. Sinon il faudra coder la règle au postValidate.

Je rajoute aussi pour info, pendant l’affichage de l’erreur même en rechoisissant le bon status et corriger l’erreur sur le champs, l’enrigistrement remets toujours le status à l’ancien => on dirait que pendant l’erreur il est figé sur le status du Back.

Sachant que mes contraintes sont Front + Back