Appeler une action avec un attribut d'action depuis une méthode

Bonjour,

J’ai une action « ImmoLease_RegulCharges-A » dans mon objet « lease ». Cette action possède un attribut obligatoire non persistant « exercice ».

Quand je lance l’action via un bouton d’action, j’arrive à saisir le paramètre et l’utiliser dans la méthode de l’action.

Dans une autre méthode, je voudrais faire appelle à cette action. Je dois donc faire l’appel suivant : lease.invokeAction(‘ImmoLease_RegulCharges-A’) mais je ne sais pas comment passer le paramètre « exercice ».

Pourriez-vous me donner la syntaxe (en Rhino) à utiliser svp ?

Merci d’avance.

Abed.

Le invokeAction est différent en 4.0 et 5

En 5 il prend une Action en argument, à partir de cet action vous pouvez accéder aux attributs via getConfirmField sur l’action, cf. Erreur dans les actions possédant des attributs sur un objet développé en Rhino

Merci @david pour votre retour.

Mon besoin n’est pas de récupérer les attributs et que j’avais réglé en suivant votre conseil dans le post que vous avez joint (if v4 else v5) .

Le besoin maintenant est de savoir comment passer un paramètre à la méthode invokeAction en Rhino.

Ce que je cherche c’est qu’est-ce qu’il faut ajouter à la commande lease.invokeAction(‘ImmoLease_RegulCharges-A’) pour alimenter l’attribut d’action attendu dans l’action ImmoLease_RegulCharges-A sachant que je fais cet appel depuis une méthode.

Peut-être que la syntaxe Rhino est différente entre v4 et v5, dans ce cas, je voudrais bien avoir les deux syntaxes si possible (j’utiliserai à nouveau if v4 else v5).

Merci d’avance.
Abed.

Une fois qu’on accède aux fields de l’action on peut les valoriser avant d’appeler le invokeAction

Est-ce que vous auriez un exemple en V4 et un autre en V5 comment on accède aux fields d’une action et surtout comment on les valorise avant d’appeler invokeAction ? Est-ce que l’appel reste inchangé (lease.invokeAction(‘ImmoLease_RegulCharges-A’)) ?

Merci encore.

Bonjour,

Je ne trouve toujours pas la syntaxe pour valoriser l’attribut d’une action avant d’appeler le invokeAction.

Auriez-vous un exemple en V4 et en V5 svp ?

Merci d’avance.

C’est toujours la même chose. Le moyen simple sans tenir compte de la version c’est de passer par les variables d’objet ou de session :

getGrant().setParameter("MY_ACTION_PARAM", "my value");
String msg = invokeAction("myActionName");

et dans la méthode de l’action :

String p = getGrant().getParameter("MY_ACTION_PARAM");

sinon il faut utiliser une Map en V4 ou les accesseurs de l’action getConfimField en V5.

En V4

Map<String, String> params = new HashMap<>();
params.put("MY_ACTION_PARAM", "my value");
String msg = invokeAction("myActionName", params);

et la méthode reçoit un Map en paramètre.

En V5

Plus besoin de Map, tout passe dans l’objet Action qui doit avoir des attributs déclarés.

Action a = getAction("myActionName");
a.getConfirmField("FRA","myActionField").setValue("my value");
invokeAction(a);

et la méthode reçoit une Action en paramètre, il suffit de faire un getValue sur le même field.
Ca permet de passer des vrais Fields (comme des documents, date, entier…) et non des String uniquement.

Par ailleurs, on va essayer de remettre les méthodes suivante en V5, pour rendre compatible du vieux code qui passerai toujours pas des Map V4 en appel direct :

public String invokeAction(Action action, Map<String, String> params)
public String invokeAction(String actionName, Map<String, String> params)

Ca reste pratique dans des cas simples.

Merci beaucoup @Francois, du coup j’ai la solution pour deux posts ;-)