Création d'un bouton d'action qui ouvre un formulaire de création d'un autre objet

4.0
Création d'un bouton d'action qui ouvre un formulaire de création d'un autre objet
0.0 0
Tags: #<Tag:0x00007f682cb8ff60>

#1

Bonjour,
Je voudrais créer dans un formulaire d’objet « A » un bouton d’action qui déclenchera l’ouverture d’un formulaire de création d’un autre objet « B » lié tout en alimentant certains champs de ce nouveau formulaire.

Ce nouveau bouton d’action fera comme si on cliquait sur le bouton créer d’un objet lié (qui ouvre donc un formulaire de création de cet objet lié avec alimentation par défaut de la FK), mais en plus je voudrais alimenter par défaut certains champs.

Pourriez-vous me dire si cela est possible ? Si oui, où est-ce que je peux coder cette action (ouverture d’un formulaire avec alimentation de certains champs) ? dans l’action même (champs Exécution/Url) ou dans une fonction de l’objet ? qu’elle est la commande qui me permettrait de faire cela ?

Merci d’avance pour votre aide.
Abed.


#2

Je ne comprend pas le besoin d’avoir un bouton d’action specifique.

Si l’objet B est une liste liée à l’object A, le bouton standard “créer” de la liste de B ouvre un formulaire B avec les champs ramenés de A déjà renseignés et si besoin vous pouvez valoriser d’autres champs de B dans le initCreate


#3

C’est pour ajouter le bouton au niveau du formulaire tout en le renommant :


#4

Je continue à être dubitatif sur l’intéret de ce bouton, mais il est toujours possible d’ajouter une action front (i.e. JavaScript client) specifique qui force un clic sur le bouton “Créér” de l’objet lié considéré…


#5

Merci pour la confirmation que cela est faisable.
Qu’elle est la commande qui me permettrait de faire cela ?


#6

Rien de specifique à Simplicité ici: $("<selecteur du bouton>").click()


#7

Comment peut-on avoir la valeur de “Selecteur de bouton” pour le bouton créer d’un objet lié ?
Si éventuellement je peux avoir un exemple cela serait parfait.


#8

Nous allons éviter les “id” car ils sont trop nombreux à générer et difficilement uniques dans une page qui contiendrait 2 fois le même objet par exemple, il faut préférer les selectors par cascading css.

  • L’action n’est pas un bouton mais un <li> dans le menu “plus” du champ référencé. du coup le selector est un peu plus complexe pour aller chercher le bouton plus/créer :

$(".objform.object-DemoOrder [data-field='demoOrdCliId__demoCliCode'] .dropdown .glyphicon-plus").click()

J’ai ajouté le nom de l’action qui manquait au li pour le rendre plus accessible avec un nom logique du bouton, ce sera disponible demain

$(".objform.object-DemoOrder li[data-name='refnew_field_demoOrdCliId__demoCliCode']").click()

  • votre bouton ne va implémenter les regles de visibilité ou de droits de création de la référence
    pour le faire vous allez devoir aller chercher dans le métadata de l’objet et refaire ce que fait le moteur :
if (fk.createLink && fk.createLink.enabled && grant.accessCreate(fk.refObject))
	// ici le click du bouton "Créer la référence" ou plus directement :
	$ui.createReference(ctn, o, f);

  • o est l’objet affiché
  • fk est le champ foreign key caché
  • f est le champ ramené à populer

#9

Merci @francois pour votre retour.
Etant donné que je n’ai pas tout compris vu mon niveau en javascript (mais je vais faire des recherches pour y arriver), je voudrais juste être sûr que mon besoin est très clair :

Je cherche juste que lorsque l’utilisateur clique sur le nouveau bouton (action) « Se positionner sur un bien » de l’objet A, c’est comme s’il clique sur le bouton « Créer » qui se trouve plus bas dans l’onglet de l’objet lié B. (et uniquement le “Créer” de B même si A est lié à B, C, D…) :


#10

Avec le débugger de votre navigateur (F12 sur chrome) vous pouvez facilement retrouver le chemin de ce bouton et en déduire un selector pour jQuery (https://api.jquery.com/category/selectors/).

Ici on est dans la démo au niveau des commandes d’un client :

  • Formulaire client : classes objform object-DemoClient
    • Liste filles des commandes : classes objlist object-DemoOrder
      • button create : data-action=create
$('.objform.object-DemoClient .objlist.object-DemoOrder [data-action="create"]').click();

Il vous suffit de changer “DemoClient” par l’objet Bien et “DemoOrder” par l’objet Offre/estimation