La fonction isUpdateEnable(action) en erreur en V5

Tags: #<Tag:0x00007f80fa2bbcb8>

Bonjour,

J’ai un pb avec un ctrl qui passe bien en V4 et tombe en anomalie en V5. Voici l’erreur :

Can't find method com.simplicite.util.ScriptedObjectDB.isUpdateEnable(com.simplicite.util.Action).

Merci d’avance pour votre aide.

Abed.

Cette méthode prend un row (String[]) en paramètre.
Vous devez confondre avec isActionEnable(action) ?

Voici le bout de code qui pose pb en V5 et fonctionne normalement en V4 :

ImmoLease.enregistrerAvis = function(pt) {  // Cette fonction sert à gérer les sélection multiple s'il y en a 
	var msgs = new ArrayList(); // Il faut garder les : dans les erreurs ci-dessous, sinon, ça ne s'affcihe pas correctement !!! 
	var msgsNbr = 0;

	var ids = this.getSelectedIds();
	if (!Tool.isEmpty(ids)) {		// Au moins UNE case est coché dans la liste, on traite donc les cases cochées
		console.log("Ids séléectionnées :"+this.getSelectedIds() + " this.getInstanceName = " + this.getInstanceName());					
		for (var j = 0 ; j < ids.size(); j++){
 			val = ids.get(j);
 			this.select(val);
 			leaseId = this.getField("leaseId").getValue();
 			console.info("Le user "+this.getGrant().getLogin() + " lance l'enregistrement d'un avis d'échéance pour le bail " + leaseId);
			try {
				// 1- Est-ce qu'on est en mode lecture seule ? Même si on n'affiche pas le bouton quand on est en lecture seul, rien n'empêche l'utilisateur d'en sélectionner un dans la liste !!!
				if (!this.isUpdateEnable(pt)) {
					console.warning("Bail " + leaseId + " : Vous n'êtes pas autorisé à lancer cette action (lecture seule)");
					if (msgsNbr > 0) msgs.add('\n');
					msgs.add(" Erreur  " + (msgsNbr+1) + " : " + "Bail " + leaseId + " : Vous n'êtes pas autorisé à lancer cette action (lecture seule)");
					msgsNbr = msgsNbr +1;

Comment faut-il changer la syntaxe du :

if (!this.isUpdateEnable(pt)) {

Pour que cela marche dans les 2 versions ?
Merci d’avance.
Abed.

Je me suis déjà exprimé sur la compatibilité d’un code V5 qui marcherait en V4.
On ne fera jamais de compatibilité descendante de code.

Ici pt est une Action puisque c’est votre message d’erreur. pt est un paramètre non typé de votre fonction. Avant c’était soit un String[] ou null si ça marchait en V4.

isUpdateEnable prend un tuple de l’objet en paramètre, et ne prend pas une Action ni en V4 ni en V5.

Donc ce n’est pas ce code qu’il faut changer mais celui appelle cette méthode avec un mauvais paramètre.

Effectivement, après vérification, je ne passe aucun paramètre (pt) quand j’appelle cette action (paramètre pt donc null).

C’est donc bien un pb dans mon code qui passe quand même bien en V4 et ne passe plus en V5.

Pourriez-vous me dire comment puis-je l’améliorer svp ?

Voici ce j’essaie de faire : Dans cette boucle, Avant de lancer l’action sur des éléments sélectionnés dans une liste, je les contrôle un par un pour vérifier que l’utilisateur connecté a un accès en MAJ. SI oui, j’exécute l’action, sinon, l’utilisateur aura un message d’erreur.

Le paramètre pt est donc sûrement pas le bon.

Quelle est donc la syntaxe pour exécuter “isUpdateEnable” sur chaque élément sélectionné ?

Merci encore.
Abed.

Si pt est null, il me semble improbable que votre règle ait fonctionné en V4. Ou alors le code du isUpdateEnable est également faux.

Vous devez faire le test sur le tuple de votre boucle.

this.isUpdateEnable(this.getValues());

Le code de isUpdateEnable doit bien prendre un row de type String[] en paramètre et s’en servir pour votre règle (ne pas faire de this.getFieldValue mais des row[this.getFieldIndex("x")]).

De plus il est préférable de faire un

if (this.select(id)) { ... }

car le select peut ne rien ramener en fonction des droits (read, search-spec…) et le getValues courant serait alors inchangé.

Merci @francois, c’est exactement ce qu’il me fallait.