Je voudrais savoir s’il y a moyen d’ajouter sur le fil d’ariane un formulaire de création ?
Nous proposons aux utilisateurs de créer un objet en cliquant sur un lien dans le but de revenir sur cet écran pour continuer la saisie.
Or le formulaire de création s’affiche en annule et remplace le formulaire précédent, même si je mets nav=add dans le lien de lancement de ce formulaire de création.
Nous aimerions que l’utilisateur puisse aller créer l’objet en question, et à la fermeture de ce dernier, il revient automatiquement sur l’écran contenant le lien.
Une autre question plus esthétique, j’ai remarqué que dans l’éditeur de code, il n’y a plus les boutons (Résumer <) et ( Etendre >). Est-ce volontaire, un pb du socle ou une mauvaise manip de ma part ?
Pour créer en boucle un objet il faut utiliser l’action Save + new ou copy :
Sinon on peut créer une référence depuis le bouton Créer sur la foreign key.
Ca ouvre un popup temporaire de création, puis valorise la FK du formulaire d’origine / ou popup d’en dessous si on empile des créations de création d’objets liés.
Modifier la comportement de la navigation n’est pas chose facile, la navbar est juste une liste de “pointeur” accessible en mémoire (objet, row_id…), mais la UI ne va pas mémoriser les champs (non créé en base) et quand on va revenir sur l’écran précédent elle aura perdu les saisies / retour aux valeurs pas défaut…
Bref on ne pas empiler des créations dans l’écran principal. Il faut faire des popups qui gardent le formulaire du dessous intact.
Votre “ICI” doit donc faire un click sur le “+”, mais je doute qu’on puisse insérer du javascript dans un message d’erreur.
J’avais oublié de préciser que l’objet B qu’on cherche à créer via le lien ‘ICI’ n’est ni lié ni référencé avec l’écran principale A. Donc pas de + ni de FK.
Je suis d’accord avec vous qu’il faut ouvrir un popup temporaire de création pour B par dessus le formulaire principale A qui doit rester intact à la fermeture de création de l’objet B.
Or la seule chose que j’arrive à faire c’est d’ouvrir un nouvel onglet dans le navigateur pour le formulaire de création de B.
Il faut alors coder une action front qui ouvre le formulaire de création dans un popup.
Le verbe appelé par le (+) est : $ui.createReference(ctn, o, f, index);
Mais si dans votre cas il n’y a pas de référence, il faudra utiliser des verbes de plus bas niveau.
$ui.view.tools.dialog pour afficher un dialogue.
$ui.displayForm pour afficher un formulaire de création
gérer le save & close , afficher les erreurs…
function myButtonCreateHandler {
var d = $('<div/>'), dlg;
function saveclose(_, o) {
o.ui.saveForm(d, o, function(o, errs, msgs) {
// avoid the dialog "save before quit ?"
d.removeAttr("data-event-close");
if (errs)
// redraw with error
form(o, errs);
else {
close();
// warning or info
$ui.backendMessage(msgs);
// do something else when created...
}
});
}
function close() {
$ui.view.tools.dialogClose(dlg);
}
function form(o, msg) {
// create form in a popup
$ui.displayForm(d, o, app.DEFAULT_ROW_ID, {
onsave: null,
onsavenew: null,
onsavecopy: null,
onsaveclose: saveclose,
onclose: close,
msg: msg, // errors
values: msg ? o.item : null
});
}
function display(o) {
var id = "create_myObject";
dlg = $ui.view.tools.dialog({
name: id,
content: d.attr("id", id),
width: "80%"
});
form(o);
}
$ui.getNavObject(null, "MyObject", display);
}
Mais je ne comprends pas trop votre processus de devoir créer quelque chose qui n’a rien à voir avec le formulaire en cours de création. Autant accepter la création et afficher un warning ou un bouton de création de l’autre objet dans votre formulaire s’il n’y a aucun lien entre les 2.