Bonjour
nous avons constaté une régression sur le hook isCreateEnable.
Non seulement il ne s’exécute plus 2 fois (une fois pour les métadatas et 1 fois le ‘vrai’ appel) mais en plus il s’exécute sur chaque record.
/**
* Business object TestInitCreate
*/
public class TestInitCreate extends ObjectDB {
private static final long serialVersionUID = 1L;
@Override
public boolean isCreateEnable() {
AppLog.info("isCreateEnable" + this.getRowId(), getGrant());
return true;
}
}
2020-12-10 20:45:51,852 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable1
2020-12-10 20:45:51,852 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable1
2020-12-10 20:45:51,852 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable1
2020-12-10 20:45:51,852 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable1
2020-12-10 20:45:51,846 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable
2020-12-10 20:45:51,846 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable
2020-12-10 20:45:51,783 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable
2020-12-10 20:45:51,783 INFO [com.simplicite.objects.Application.TestInitCreate] SIMPLICITE|http://38bf0484fe96:8080||INFO|p104635|com.simplicite.objects.Application.TestInitCreate|isCreateEnable||Evénement: isCreateEnable
Il y a eu une évolution sur le hooks isActionEnable (pour éviter de l’appeler depuis le template editor), mais rien de spécial sur le hook isCreateEnable.
Suite à analyse en V4, l’appel de ce hook n’a pas bougé, ça a toujours été fait comme ça.
Il est appelé le “double” de fois pour compatibilité ascendante avec la UI legacy qui a besoin d’un contexte web différent des metadata de UI responsive. Par contre pour les lignes, il ne devrait pas être appelé du tout puisqu’il ne sert pas, il faudra optimiser ça.
Bref on peut essayer de faire évoluer ce traitement avec un risque de régression sur la legacy, donc c’est plus quelque chose à faire évoluer en V5 qui n’a plus de legacy du tout (en plus ça doit se produire pour les autres hooks isCopy/Update/DeleteEnable).
En soit le isCreateEnable n’a pas à aller lire le rowId courant comme vous semblez le faire, en tout ca il n’est pas significatif dans ce hook qui doit être “simple” pour interdire la création en fonction des droits ou de l’objet parent si on est dans une liste fille.
Par contre pour les lignes, il ne devrait pas être appelé du tout puisqu’il ne sert pas, il faudra optimiser ça.
Ce n’était pas déjà le cas ? Il me semble que c’était le cas auparavant. De plus, c’est ce qui est écrit dans votre documentation, c’est pourquoi j’ai cru que c’était une régression.
Dans notre hook, on récupère le parent et s’il s’agit d’un type particulier, on regarde s’il fait partie d’une certaine catégorie.
Nous n’utilisons pas le rowId. Je ne l’ai mis dans notre exemple pour comprendre le contexte d’appel.
La V4 fait cohabiter 2 moteurs front (UI legacy fabriquée en back, et UI responsive en front avec des méta-data), car certains composants ou implémentations clientes sont encore anciennes pour compatibilité ascendante.
On va pouvoir élaguer drastiquement ces appels en V5 puisque la legacy n’y ait plus du tout
mais on va faire ce qu’on peut en V4 pour éliminer ces doubles appels quand c’est possible afin de limiter ce nombre de requêtes dans votre cas