Mon champ Full Online Process est calculé en fonction de cette relation (si j’ai au moins un élément, le champ est positionné à Oui).
J’ai mis le code qui positionne ce booléen dans le PostCreate et PreDelete de ma relation N,N.
Quand j’ajoute ou retire un élément de la pillbox, le booléen est bien mis à jour mais ce n’est pas visible car il n’y a pas de rafraîchissement du formulaire.
Y a-t-il un moyen de recharger le formulaire dans mon code Java ? Ou je dois forcément passer en Front ?
Simplicité n’a pas moyen de savoir que les champs front sont liés en back.
Il faudrait un trigger en front pour signaler un “onchange” de la pillbox afin d’y coder quelque chose de spécifique (ici passer un booléen field.ui.val('1') si le contenu de la pillbox est > 0).
On va devoir ajouter un évènement change sur la UI sur la vue du composant, à date ça n’existe que sur un Field.
Sinon pour rafraichir un objet, il suffit de reloader la navigation courante. $ui.getNav().reload(); ou refaire le $ui.displayForm
mais cela peut faire perdre la saisie en cours ou demander de quitter sans sauver…
En V4, il est toujours possible d’ajouter un handler sur ajout/suppression d’un item de pillbox.
Simplicité émet des events sur les objets créés/modifiés/supprimés.
Il suffit d’ajouter un handler sur le composant qui a besoin d’être notifié d’une mise à jour (comme le modeler par exemple).
Dans le hook front form.onload quand votre formulaire est dessiné, il faut ajouter un listener au div de la vue qui contient la pillbox :
var v = $ui.getUIView(ctn, obj, "<objectNN>;<fkname>");
v && v.div.addClass("js-notify").on("ui.notify", function(e, notif) {
e && e.stopPropagation();
if (notif) {
var o = notif.object, // relation NN créée ou supprimée
id = notif.rowId, // son row_id
field = $ui.getUIField(ctn, obj, "myFieldBool"); // champ à modifier
if (notif.type=="create") {
field.ui.val("1").change();
}
else if (notif.type=="update") {
// nothing to do
}
else if (notif.type=="delete") {
// TODO count ajax ?
// local count pillbox <li>
field.ui.val($("li[data-id]",v.div).length>0 ? "1" : "0").change();
}
}
});