Modifier les droits de création/suppression/modification depuis un tableau dans un formulaire

Bonjour,

J’ai une relation 1-N entre mon objet métier DdvGeneralMeeting (Assemblée générale) et DdvOrderOfDay (Ordre du jour).

Dans mon formulaire, j’ai un tableau d’ordre du jour disponible depuis le formulaire de l’assemblée générale. J’aimerais que lorsque le statut de l’assemblée générale est en “Creation”, je peux créer/modifier/supprimer un ordre du jour. Mais si le statut n’est pas celui ci, je doit juste pouvoir éditer en liste le tableau d’ordre du jour.

Pour réaliser cette contrainte, j’ai penser à 2 choses :

  • Utiliser les méthodes telles que isCreateEnable() → Le problème, c’est que ça marche pas de mon coté (peut être une erreur de ma part).
  • Utiliser les contraintes de Simplicité. Dans ce cas là (le plus simple) si c’est possible, il faudrait que je puisse sélectionner le statut de l’AG depuis l’objet ordre du jour et je ne sais pas comment faire. PS : j’ai suivi la doc mais j’ai pas trouvé : Simplicité® documentation/01-core/expressions

Quelle est la meilleur solution selon vous et comment la mettre en place ?

Bonjour,

Vous pouvez utiliser le isCreateEnable() en testant le statut de l’objet parent.
Vous pouvez tester que le parent existe (getParentObject()!=null) , que le parent est bien l’objet Assemblée genérale (getParentObject().getName()) et que son statut est bien en création (getParentObject().getStatus().equals(...)).

1 Like

Merci beaucoup pour votre réponse

La solution marche bien pour les 3 méthodes suivantes :

  • isCreateEnable()
  • isDeleteEnable()
  • isListEditable()

Cependant, pour la méthode isUpdateEnable(), cela ne fonctionne pas car peut importe le statut de l’AG, les champs sont en ReadOnly alors qu’ils ne devraient pas l’être quand le statut est en “Création”.

Voici le code (c’est le même pour les 4 méthodes) :

@Override
public boolean isUpdateEnable(String[] row){
	
	if(getParentObject() != null){
		if(getParentObject().getName().equals("DdvGeneralMeeting")){
			if(getParentObject().getStatus().equals("GM_CREATION")){
				return true;
			}
		}
	}
	
	return false;
}

Quelle est le problème ?

Les attributs sont en readonly lorsque vous n’avez pas de parent (en formulaire) .

@Override
public boolean isUpdateEnable(String[] row){
	ObjectDB gm = getParentObject();
	if( gm!= null && gm.getName().equals("DdvGeneralMeeting"))
		 return gm.getStatus().equals("GM_CREATION"));		
	return true;
}

Effectivement, le problème de readOnly se produit quand j’ouvre un ordre du jour et que par conséquent je quitte le formulaire parent : AG.

Du coup, comment je peux mettre en readOnly les champs de l’objet métier DdvOrderOfDay lorsque le statut de l’objet métier DdvGeneralMeeting n’est pas en “Création” ?

Vous devez ramener l’attribut statut (ddvMelState) du parent et tester sa valeur lorsque le getParentObject() est null.

1 Like

Merci. Tout fonctionne.

Je mets ici le code si ça peut aider quelqu’un d’autre.

@Override
public boolean isCreateEnable() {
	
	if(getParentObject() != null){
		if(getParentObject().getName().equals("DdvGeneralMeeting")){
			if(getParentObject().getStatus().equals("GM_CREATION")){
				return true;
			}
		}
	}
	
	return false;
}
	
@Override
public boolean isUpdateEnable(String[] row){
	
	String status = "";
	
	if(!this.getFieldValue("ddvOodAgId").equals("")){
		status = getGrant().simpleQuery("SELECT m.ddv_met_state FROM ddv_general_meeting m WHERE m.row_id = " + this.getFieldValue("ddvOodAgId"));
	}
	
	if(status.equals("GM_CREATION")){
		return true;
	} else {
		return false;
	}
}
	
@Override
public boolean isDeleteEnable(String[] row){
	
	if(getParentObject() != null){
		if(getParentObject().getName().equals("DdvGeneralMeeting")){
			if(getParentObject().getStatus().equals("GM_CREATION")){
				return true;
			}
		}
	}
	
	return false;
}
	
@Override
public boolean isListEditable(){
	
	if(getParentObject() != null){
		if(getParentObject().getName().equals("DdvGeneralMeeting")){
			if(getParentObject().getStatus().equals("GM_CREATION")){
				return true;
			} else {
				return false;
			}
		}
	}
	
	return true;
}

Cf mon post précédent.
Il faut ramener l’attribut ddvMetState de DdvGeneralMeeting dans l’objet DdvOrderOfDay
https://docs2.simplicite.io/lesson/tutorial/configuration/relations
Il ne faut pas utiliser de simpleQuery pour récupérer la valeur de l’attribut !

@Override
public boolean isUpdateEnable(String[] row){
	ObjectDB gm = getParentObject();
	if( gm!= null && gm.getName().equals("DdvGeneralMeeting"))
		 return "GM_CREATION".equals(gm.getStatus());	
	return "GM_CREATION".equals(getFieldValue("ddvMetState"));
}

De plus mettre ce code dans une méthode et l’appeler dans les hooks appropriés.

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