Action Créer spécifique

Bonjour,

J’essaie de configurer une action Créer spécifique qui va positionner un paramètre, mais je n’arrive pas à utiliser correctement le display form dans l’URL de l’action. Auriez vous un exemple de paramétrage ?

Merci d’avance !

Version=4.0.P25
BuiltOn=2021-06-24 17:59 (revision 420ce4275e8539c410499dceb900c2392081d036)

Bonjour,

Tout dépend si votre action doit faire que du front ou que du back ou les 2.

De quel paramètre on parle ? (dans Simplicité tout est paramétrable ;-).

  • paramètre de session ?
  • paramètre de l’action saisissable ?
  • forcer valeur pour un champ en création
  • etc.

Pour faire des choses en back, il suffit de paramétrer le nom de la méthode à coder celle-ci dans chaque objet habilité à l’action, puis de retourner du code front en javascript.

https://docs.simplicite.io/documentation/01-core/custom-actions-examples.md

La jsdoc du controller indique les paramètres du displayForm assez nombreux car tout est paramétrable y compris les données de l’objet.

https://docs.simplicite.io/4.0/jsdoc/Simplicite.UI.Engine.html

displayForm

Build a form with the object item

Parameters:

ctn string jquery Target container
obj string Simplicite.Ajax.BusinessObject Object
rowId string row ID to get
options Simplicite.UI.Globals.form options to override globals
cbk function Optional callback(obj, params)

Dans un usage basique :

$ui.displayForm(
  container ou null pour remplacer le contenu principal, 
  nom de l'objet ou instance particulière, 
  row_id ou "0" en création, 
  { nav:"new" pour démarrer une nouvelle navigation ou "add" pour l'ajouter }
);

Et on peut forcer dans les options : le tuple à afficher values (objet avec tous les fields) qui remplace le get Ajax, les actions à afficher ou pas, les hooks a appeler onload…

En fait j’ai une vue composée de deux onglets.

Je veux qu’un champ soit initialisé à une valeur donnée à la création, selon l’onglet d’où on a cliqué sur Create. Au départ j’ai positionné un paramètre session dans le preSearch que je récupère dans le initCreate mais quand je me positionne sur ma vue sans cliquer sur les onglets, c’est le 2ème qui est chargé en dernier et qui positionne le paramètre système, même si je n’ai pas cliqué dessus.

J’essaie donc de faire un bouton Create spécifique qui positionne ce paramètre système pour chaque onglet, avec dans le champ URL le lien vers le formulaire de création et mon paramètre. Ca doit être simple mais je n’y arrive pas !

Merci !

Pourquoi ne pas directement tester le nom de l’objet (getName) ou celui l’instance (getInstanceName) dans l’initCreate ? car 2 onglets liste = 2 instances différentes (home ou panel).

Ensuite pour une solution par code et paramètre de session, il faut créer une Action et l’habiliter aux 2 objets listes (un seul si ce sont les mêmes avec un test à ajouter sur l’instance qui appelle) :

public String myMethod() {
  getGrant().setParameter("MYPARAM", "abc");
  return javascript("$ui.displayForm(null, 'myObject', '0', {nav:'add'})");`
}

C’est le même objet sur les deux panels avec un filtre différent.
Et dans le initCreate j’ai le même nom d’instance pour les deux.
Du coup je vais essayer l’option code, merci !

Si c’est le même objet, il faut nécessairement avoir 2 instances différentes. Comment allez vous tester dans la méthode commune quelle instance appelle ?

Si vous avez utilisé la même instance cela ne va pas puisque les filtres sont différents, il faut bien 2 instances en mémoire.

Comment avez vous fabriqué ces 2 onglets ?
vous pouvez surement y forcer des noms d’instance différentes, toutes les API peuvent spécifier une instance particulière…

Je pense que je perds les information en passant dans le formulaire de création cf ce ticket Initialiser un champ en création à partir d'un preset search

Mais j’ai changé mon métamodèle en passant par des objets hérités donc je n’ai plus de problème.

Merci !

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.