Popup de confirmation persistant

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é).

voici le code back :

    @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;

	}

la réponse back :

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

Super c’est bien ça, merci François.

Ok on va ajouter un peu de robustesse pour gérer ça.
Je pense que vous n’êtes pas les seuls à avoir rencontré ce cas ces dernières semaines.

En 5.3 on va ajouter

  • de ne retenir que le premier String si jamais une liste est retournée
  • et une erreur dans les logs/audit si une action ne retourne pas un string au runtime

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 ?

oui dsl, j’ai corrigé, on parle bien de la 5.2.25 et on attend la 5.2.26

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