Action en masse ne prend pas en compte le isXXXEnable

Tags: #<Tag:0x00007f4910cdbeb8>

Bonjour,
nous avons un objet associant une application à une business capability.
Notre utilisateur peut voir toutes les associations mains ne peut gérer que celles sur une liste paramétrable d’applications.
En utilisant les hook isXXXEnable, tout fonctionne. Les boutons s’affichent ou disparaissent bien.
Nous avons toutefois un soucis avec les boutons “Supprimer en masse” et “Modifier en masse”.
Exemple du “Supprimer en masse” :
Bien qu’il passe par le isDeleteEnable, il ne prend pas en compte le retour de la méthode.

Dans notre cas ci dessous, l’utilisateur ne voit pas le bouton “Supprimer” sur la ligne.


Le code du

	@Override
	public boolean isDeleteEnable(String[] row) {
		AppLog.info("isDeleteEnable sur l'item " + this.getRowId(), getGrant());
		return false;
	}

Lorsque je passe par la suppression en masse :

Je m’attends à avoir un message d’erreur me disant que je ne peux pas supprimer cette ligne. Or l’élément est bien supprimé. Pourtant j’ai une log qui me dit qu’il est passé dans le isDeleteEnable.
Comportement identique avec le “Modifier en masse”.

Cordialement
Amandine T

[Platform]
Status=OK
Version=4.0.P25
BuiltOn=2020-12-08 20:07 (revision 5d1baca2181dc39c8201725ce0a9565a3c8f6e94)
Encoding=UTF-8
EndpointIP=21.1.7.88
EndpointURL=http://1754780f52ef:8080
TimeZone=Europe/Paris
SystemDate=2020-12-14 16:16:23

Effectivement la suppression en masse est un service particulier qui boucle sur les lignes sélectionnées en regardant uniquement le droit de suppression du user + le hook canDeleteAll, le preDeleteAll puis à la fin le postDeleteAll.

On va ajouter le contrôle du isDeleteEnable sur chaque item, Le service ne remonte à la UI que le nombre de lignes supprimées / le nombre demandé. On va regarder isUpdateEnable aussi.

Attention dans votre code du isDeleteEnable : le rowId est donné par row[0] et non par getRowId() qui n’est pas forcement la bonne valeur dans une liste.

Ou getRowId(row) (NB: si row est null il prend le row ID courant)
Cf. https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/ObjectCore.html#getRowId(java.lang.String[])

Voilà c’est ajouté en V4 maintenance, et vous pourrez tester votre hook au prochain build.

(row n’est jamais null dans ces 2 hooks et l’identifiant est toujours en premier même s’il est surchargé avec un rowId custom, mais faire un getRowId est plus lisible et maintenable, mais si row est null ici c’est pas bon du tout).