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()+"')");
}
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.
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);