Bonjour,
j’ai un bug apparu avec la version 5.2.25 (j’étais en 5.2.19 initialement), lorsque je clique sur une action, j’ai une popup qui s’ouvre et quand je clique sur “Confirmer”, la popup reste.
Réponse de François
Bug connu et corrigé suite à une évolution récente pour ne justement pas le fermer en cas d’erreur de l’action remontée par le back (avant il fallait du coup ressaisir les champs de confirmation).
Peux tu nous donner la définition de l’action et son code back pour analyse ?
en back : est-ce qu’elle remonte quelque chose et pas null ou dans le genre ?
en front : quelle est la réponse du call HTTP de l’action ?
Si le popup se ferme pas c’est que le front considère en retour qu’il y a encore qq chose à y faire (peut être à tord si la réponse est un faux positif non traité).
@Override
public void initAction(Action action) {
//Permet de générer la liste des utilisateurs connecté pour les afficher dans la popup de l'action
if (action.getName().equals("SIO_PROFIL_APPLIQUER_MODIF")){
ObjectField f = action.getConfirmField(getGrant().getLang(), "profilUsersList");
List<String> users = getUsersOfProfil(this.getFieldValue(FIELD_GRP_NAME));
if (!users.isEmpty()){
f.setDefaultValue(String.join(", ", users));
}else{
f.setDefaultValue("Aucun utilisateur connecté.");
}
}
}
/**
* ACTION SIO_PROFIL_APPLIQUER_MODIF.
* @author KBA
* @date 22/07/2022
* @param params Map
* @return message d'erreur
*/
public List<String> applyProfilChange (Map<String, String> params){
List<String> msgs = new ArrayList<>();
try {
List<String> users = getUsersOfProfil(getFieldValue(FIELD_GRP_NAME));
if (!users.isEmpty()){
for(String login : users){
SystemTool.resetCache(login, true, false);
}
}
} catch(Exception e) {
AppLog.error("Clear cache de l'utilisateur impossible", e, getGrant());
msgs.add("Le traitement à échoué.");
}
return msgs;
}
/**
* Permet de générer une liste des utilisateurs connecté en fonction du profil.
* @author KBA
* @date 22/07/2022
* @param profil Nom du profil
* @return List de string avec le login de l'utilisateur
*/
public List<String> getUsersOfProfil(String profil){
List<String> users = new ArrayList<>();
try {
Iterator<javax.servlet.http.HttpSession> e = Platform.getSessions();
while (e.hasNext()) {
javax.servlet.http.HttpSession s = e.next();
if (s==null) continue;
var g = Platform.getGrant(s, true);
boolean loaded = g!=null && g.isLoaded();
if (loaded && g.hasResponsibility(profil)){
users.add(g.getLogin());
}
}
return users;
}catch(Exception e) {
AppLog.error("probleme de récupération des users", e, getGrant());
}
return users;
}
Une action remonte un String (un message, une erreur, null, un redirect , un javascript) mais jamais une liste.
Le front reçoit alors le toString de la liste (un tableau vide), et ne doit pas gérer ça comme une réponse OK pour fermer le dialog.
Retourne un String = null ou Message.formatSimpleInfo(“Ok”);
Ensuite tu peux utiliser directement l’Action en parametre plutôt qu’une Map.
pour accéder aux fields : action.getConfirmField pas forcement textuels
Juste un point qui m’étonne dans cet échange : @khalil tu parles de la 5.2.26 or celle-ci n’est pas encore releasée… Est-ce qu’on parle bien de la 5.2.25 ?