Méthode getConstraints

Version

6.3 serait le must :slight_smile:

Description

Bonjour,
Afin d’implémenter ce nouveau hook de façon générique, je serais très preneuse d’une méthode getContraints sur ObjectDB. Ca me permettrait de récupérer les contraintes de mon objet et d’utiliser contains pour identifier les champs à afficher.
Ou encore mieux, si je pouvais avoir N méthodes pour le prix d’une, une méthode getImpact sur Constraint et une méthode getImpactedFields sur Impact :sweat_smile:

Bien sûr c’est du Nice to have, le hook fonctionne parfaitement et je vous en remercie.
Bonne journée !
Emmanuelle

Bonjour,

Pas sur de comprendre le besoin.
On peut récupérer la définition des contraintes d’un objet depuis le core-cache :

Constraint c = CoreCache.getInstance().getConstraint(obj.getName());

L’objet Constraint sert avant tout à compiler/générer les scripts Rhino (back) et Javascript (front) lors de la construction des objets.

Peux tu préciser de quels accesseurs tu aurais besoins ?
On pourra surement ajouter des getter/accès en lecture manquant.

Par contre l’accès via setter/en écriture à la volée ne sera pas forcement possible = car cela implique de recompiler les scripts à chaud, de les renvoyer au front, etc.

J’ai beaucoup d’objets, champs, contraintes … gérés par une classe partagée donc je voudrais ne pas mettre en dur chaque nom de champ concerné par une contrainte.

Je pensais à un code de ce type,

List<Constraint> listConstraints = getConstaints();
for (Constraint cst : listConstraints)
{
	List<ConstraintItem> listItems = cst.getConstaintItems();
	
	for (ConstraintItem item : listItems)
	{
		List<ObjectField> listObf = item.getImpactedFields();
		
		for (ObjectField f : listObf)
		{
			f.setVisibility(ObjectField.VISIBILITY_BOTH);
		}
	}
}

C’est une mauvaise idée ?

Ok je vois l’idée, de faire un traitement générique sur les champs contraints pour faire un sorte de “reset” à la fin quelles que soient les règles.

Il manque effectivement des accesseurs pour lire la définition des impacts d’une contrainte.
A date l’objet Constraint d’un objet est une liste de Rule : condition => impacts target / expression.

Constraint c = CoreCache.getInstance().getConstraint("MyObject");
if (c!=null) {
	List<Rule> rules = c.getRules(Constraint.EFFECT_FRONT);
	if (rules!=null) {
		for (Rule rule : rules) {
			List<Impact> impacts = rule.getFieldImpacts();
			if (impacts==null)
				continue;
			for (Impact impact : impacts) {
				ObjectField f = impact.getField(obj);
				if (impact.getFieldProp() == Constraint.FIELD_VISIBLE)
					f.setVisibility(ObjectField.VIS_BOTH);
			}
		}
	}
}

On va voir ce qui est faisable rapidement.

Les méthodes données en exemple plus haut ont été ajoutées en V6.3.8.

Merci beaucoup d’avoir pris en compte si rapidement !