Bonjour,
Dans le formulaire de l’objet principal, j’affiche les données d’un objet lié.
J’aimerai mettre des contraintes sur cette vue de données, mais je ne trouve pas comment.
Template :
Bonjour,
Dans le formulaire de l’objet principal, j’affiche les données d’un objet lié.
J’aimerai mettre des contraintes sur cette vue de données, mais je ne trouve pas comment.
Template :
Bonjour,
Une liste fille (filtrée par rapport à un objet père) est une instance particulière, donc vous pouvez y faire tout ce que vous voulez via Hook, Constraint… en testant le nom de cette instance.
panel_ajax_<objectName>_<foreignkeyName>
Exprimez clairement votre besoin sur ce que vous voulez faire dans la liste pour qu’on vous oriente plus précisément.
Merci pour ces premières infos.
J’aimerai que la liste soit visible si :
et qu’elle reste visible dès le moment où il y a une personne, quelle que soit le but
Pour masquer dynamiquement les panels enfant, il faut ajouter le hook canReference
à l’objet parent.
exemple :
@Override
public boolean canReference(String objectName, String fieldName) {
if ("MyPanelObject".equals(objectName))
return "information".equals(getFieldValue("myField"));
// default visibility
return super.canReference(objectName, fieldName);
}
vous pouvez mettre des choses plus complexes dans le if, comme un count des objets liés.
https://docs.simplicite.io/documentation/01-core/businessobject-code-hooks.md
Je ne suis pas sûr de bien comprendre :
MyPanelObject = le nom de l’objet enfant?
return "information" => information = code de la liste de valeur ?
@Override
public boolean canReference(String objectName, String fieldName) {
if (“CourrierDEJQBoCopie”.equals(objectName))
return “INF”.equals(getFieldValue(“CourrierDEJQBoCourrierButLibelle”));
// default visibility
return super.canReference(objectName, fieldName);
}
canReference
il y a 2 arguments : le nom de l’objet lié/fils/panel, et le nom du champ qui fait la jointure (foreignkey) car on peut avoir 2 liens différents vers un même objet fils à différenciergetFieldValue
renvoit la valeur stockée en base et non la valeur affichée (traduite dans le cas d’un enum, formattée dans le cas d’une date…)Votre besoin est donc quelque chose comme ça mais je ne peux pas deviner votre paramétrage :
if ("CourrierDEJQBoCopie".equals(objectName)) {
String but = getFieldValue("CourrierDEJQBoCourrierButLibelle");
return "INF".equals(but) || "SIG".equals(but);
}
ça marche… j’ai pas tout de suite compris qu’il fallait enregistrer pour que je vois (ou pas :-) ) le résultat mais ça fonctionne.
Est-ce que je peux améliorer pour que la visibilité soit immédiate lorsque je change le but et pas seulement au moment de l’enregistrement?
Pour les interactions UI, il y a 2 façons de faire :
[VALUE:CourrierDEJQBoCourrierButLibelle]=="INF" || [VALUE:CourrierDEJQBoCourrierButLibelle]=="SIG"
obj.getFieldValue("CourrierDEJQBoCourrierButLibelle")=="INF" || obj.getFieldValue("CourrierDEJQBoCourrierButLibelle")=="SIG"
ou bien pour les cas tordus : on peut coder/binder un “change” sur le champ dans le hook form.onload
qui fait un show/hide du panel en question en fonction d’un truc compliqué qu’une contrainte ne sait pas faire.
https://docs.simplicite.io/documentation/04-ui/responsive.md
J’étais bien parti sur le cas simple, mais je m’étais arrêté parce que je n’avais pas de vue CourrierDEJQBoCopie et que je n’ai pas réussi à en créer une pour cet objet.
J’ai contourné en mettant la vue liste fille qui a été créé par Simplicité dans une zone d’attributs de mon formulaire (objet père) et j’ai mis la contrainte sur la zone.
Par contre, je ne sais toujours pas créer une vue sur un objet
Une vue est un template de zones pouvant contenir des objets (date, recherche, liste fille, external object…)
Au runtime, une liste fille simple (Link) génère une vue (View) par défaut avec une seule zone = Liste fille, il n’est pas nécessaire de la paramétrer.
En fait, dans votre cas au niveau de l’impact, il faut sélectionner comme cible/target le Link entre votre objet père et fils, et non une Vue puisqu’elle n’est pas paramétrée.
Mais bon on peut aussi créer une zone qui contient le Link, ça ajoute un niveau de container en plus afin de mettre plusieurs choses ensemble à rendre visible ou pas .
Et sinon pour créer une Vue à l’avenir :
C’est tout bon, merci pour votre aide.