Comment avoir les paramètre dans la classe 'Action'

Tags: #<Tag:0x00007fdd492b22e8>

Bonjour,

Je suis entrain de migrer une Action écrites en v4 avec une map en paramètre dans un simplicité v5 mais je n’arrives pas à retrouver les valeurs qui se trouvaient dans le map en v4.

Voici le code simplifié :

La partie Js appelant l’action :

                let params = {
                    monParam1: (...),
                    monParam2: (...),
                    monParam3: (...),
                    monParam4: (...),
                    monParam5: (...),
                };

                abs.action(function(){}, "nom-action",{values:params});

Coté java :

public class MonAction extends ObjectDB {
...
public String resizePeriod(Action action){

    String lang = getGrant().getLang();
        try{
            AppLog.info("all fields ? " + action.getConfirmFields(lang), getGrant());
    	    String param = action.getConfirmField(lang, "monParam1").getValue();
            AppLog.info("one param ? " + param , getGrant());
         }catch(Exception e){
            AppLog.error("Error while resize an abscence",e, getGrant());
            logger.error(e.getMessage());
        }
...
}

J’obtiens un message :

all fields ? null

puis un NullPointerException pour

String param = action.getConfirmField(lang, "monParam1").getValue();

Cette méthode fonctionne en v4 ( donc l’action est bien mappée je pense ) et l’appel Js contient bien les paramètres.

Pouvez-vous me dire ce que je ne fais pas correctement ici ?

Merci par avance :)

Est ce que votre Action possède bien ces paramètres comme des Attributs paramétrés et associés à l’action ? monParam1…

Sinon action.getConfirmField(lang, "monParam1") sera null.

Simplicité doit savoir mapper les champs reçus et leurs sémantiques en back.
En V5 ce sont des vrais attributs (comme dans un objet) et non plus du texte uniquement.
On peut véhiculer des dates, des documents, etc.

Il reste plus qu’à pouvoir gérer les références d’objet, c’est en cours.

Merci Francois pour cette réponse.

En fait ce n’est pas une confirmation d’action avec des champs mais plutôt un appel js à une action depuis le JS avec cette cinématique :

1 - on affiche un full calendar charger depuis un objet externe
2 - l’utilisateur fait une action sur le calendrier
3 - un modal de confirmation s’ouvre
4 - si l’utilisateur valide, on recupère des information sur la page en js et on appel l’action pour mettre a jour la base de donnée
5 - dans le call back sur le front, on met a jours des informations sur la page en cas de succés

Ce qui en code donne :

$ui.confirm({ // 3 - modal de confirmation 
	content: "Etes vous certains de vouloir modifier la durée de cette absence ?",
	onOk: function() { // 4 
		abs.action(function(){ 
				// 5 maj de la page en cas de succès 
			});
		}, "nom-action",{values:params}); // les params sont pris en js sur la page 
	}
});

Voilà j’éspère que c’est plus clair comme cela :)

Vous avez créé votre propre fenêtre de confirmation côté UI (qui fait en gros la même chose niveau appel ajax qu’un bouton d’action), mais il n’en reste pas moins que c’est une Action habilitée sur l’objet.
Il faut donc la configurer avec des attributs pour pouvoir mapper les champs correctement :

vos params doivent avoir les noms logiques des attributs de l’action et des valeurs compatibles avec leurs formats.

Je n’arrive pas a ajouter de champs a mon action :
1 - J’affiche mon action
2 - je passe le ‘With Confirmation’ a Yes
3 - j’utilise la recherche pour aller chercher mon champs que j’ai créer avant

J’obtiens ceci :

4 - je sauvegarde et je me déconnect
5 - Le champs disparait de l’action

Est-ce qu’il ma manque une étape ?

Vous avez appuyé sur la loupe pour rechercher dans la liste vide.
Vous devez ajouter des lignes (menu plus en haut à droite + créer en liste), vous aurez alors une ligne en création pour associer votre champ en spécifiant bien les 3 zones (field+ordre+module) + Enregistrer qui apparaitra dans l’entête de la liste.

(on va remettre les boutons d’édition visible en liste dans cet ecran, car c’est vrai qu’on ne les voit pas par défaut)

Après réflexion, pour assurer la compatibilité ascendante avec la V4, on va regarder pour ajouter dynamiquement des attributs à l’action, sans avoir besoin de les pré-déclarer (pour les typer plus fortement).

Ce seront des ObjectField de type Texte simple uniquement avec le nom donné dans l’appel ajax de l’Action.