Utilisation de getSearchSpec dans un hook initRefSelect

Bonjour,

Je voudrais mettre un filtre sur la liste affichée pour un objet lié, en me basant sur la valeur d’un autre attribut de l’objet principal. Cet attribut est une Fk d’un autre objet lié.

Un exemple : A la création d’une demande de travaux, je voudrais afficher uniquement les sociétés propriétaires du bien sélectionné (Fk : workImmoPropertyId), sinon (si aucun bien n’est sélectionné), afficher toutes les sociétés.

L’appartenance (ou non) d’un bien à une société est définie dans l’objet N,N ImmoPropertyCompany

Pour cela, j’utilise le hook initRefSelect comme suit :

ImmoCompany.initRefSelect = function(parent) {
// Permet d'affichier uniquement les sociétés propriétaires du bien sélectionné :
	if (this.isRefInstance()) {
	    var parent = this.getParentObject();
		if (parent) {
			if (parent.getName() == 'ImmoWork') {
				var filtre = '';
				if (parent.getFieldValue("workImmoPropertyId") != '') { // Bien renseignée, on affiche seulement ses propriétaires PM :
					filtre = filtre + " AND exists (	"+
					"	SELECT 1 "+ 
					"	FROM	immo_property_company ipc"+ 
					"	WHERE 	t.row_id = ipc.propertycomp_immocompany_id "+
					"	AND 	ipc.propertycomp_immoproperty_id = "+ parent.getFieldValue("workImmoPropertyId") + ")";
				}
				// On applique le filtre sur la liste des lignes à afficher 
				this.setSearchSpec(this.getSearchSpec()+filtre);				
			}
		}
	}
};

Ls pb est que quand je sélectionne un bien, j’ai effectivement uniquement ses propriétaires PM qui s’affichent, mais si avant d’enregistrer je sélectionne un autre bien, la liste des sociétés devient vide.

En affichant dans la console this.getSearchSpec(), je vois que son contenue ne cesse de s’enrichir au fur et à mesure que je sélectionne un bien, ce qui fait que le filtre dépend de tous les biens au lieu de dépendre du seul dernier bien sélectionné.

Je sélectionne un bien :

Je vois bien ses sociétés propriétaires :


Je sélectionne un autre bien :

La liste des sociétés est vide puisqu’on cherche un propriétaire du bien 1 ET bien 2 en même temps !

Même si je quitte le formulaire de création, ce filtre est enregistré pour les prochaines créations de demande de travaux, jusqu’à ce que je me déconnecte !

J’aimerais savoir s’il y a moyen de mettre en place ce filtre, mais de le remettre comme avant si le champ workImmoPropertyId a été vidé ou si il a été modifié (sélection d’un autre bien). Et surtout, le remettre à son état initial si j’ouvre un nouveau formulaire ?

Faut-il que j’utilise un autre hook pour faire ce filtre ?

Merci d’avance pour votre aide.

Abed.

Votre code ajoute une search spec à la search spec courante à chaque fois que le popup sera ouvert :

Il suffit donc de ne pas le faire et de concaténéer avec la search spec initiale (de la définition de l’objet) :

this.setSearchSpec(this.getDefaultSearchSpec() + filtre);