Combiner deux searchSpec

Bonjour,
Je cherche à combiner deux conditions pour donner accès à des fiches d’enregistrements.
Seule la dernière combinaison est appliquée. Comment puis-je faire en sorte que les deux soient exécutées ?

		if (getGrant().hasResponsibility("HR_EMPLOYEE") 
		) {
			//voir sa propre fiche
			setDefaultSearchSpec("hremployee_user_id=(select row_id from m_user where usr_login='"+getGrant().getLogin()+"')");
			//voir la fiche des collègues dont il est responsable 
			setDefaultSearchSpec("hr_employee_manageruser_id=(select row_id from m_user where usr_login='"+getGrant().getLogin()+"')");
		}

Merci,
Ophélie

Il suffit de mettre un or entre les deux

Pour mémoire, les requêtes SQL générées par Simplicité sont de la forme select ... from ... where <les filtres de recherche> and ( <la search spec> )

j’ai déjà essayé de mettre un or

  • entre les deux searchspec
  • au sein de la condition comme ici :
Class compilation error (status 1)
/home/formationsiparex1/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/objects/HumanRessource/HrNewEmployee.java:27: error: bad operand types for binary operator '||'
			setDefaultSearchSpec("hremployee_user_id=(select row_id from m_user where usr_login='"+getGrant().getLogin()+"')" || "hr_employee_manageruser_id=(select row_id from m_user where usr_login='"+getGrant().getLogin()+"')");
			                                                                                                                  ^
  first type:  String
  second type: String
1 error
#ERROR

je ne peux pas mettre de “and” sur le critère de filtrage de la requête “select …from” car je suis sur deux champs différents.

Bonjour,

  • Il faut un “OR” au niveau SQL pour lister 2 résultats au niveau du WHERE
  • de plus vous n’avez pas besoin de jointure avec la table m_user car l’objet Grant contient déjà le row_id du user via getUserId (retourne un integrer) ou getUserUniqueId (id sous forme de String java)
  • les FK sont des INTEGER dans Simplicité, pas besoin de mettre des simple-quotes dans la clause (génère une erreur sur postgreSQL de types non comparables)
  • Il faut donner l’alias de la table qui contient la colonne pour éviter les ambiguïtés (surtout pour les row_id ou en cas d’auto-jointure). La table principale a un alias “t”, les autres “t_<foreign keys>”.
String userId = getGrant().getUserUniqueId();
setDefaultSearchSpec(
"t.hremployee_user_id="+userId+" or t.hr_employee_manageruser_id="+userId);

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