Filter
Un filtre est utilisé à chaque requete. Par défaut, le filtre retourne tous les enregistrements. On spécifie un filtre pour obtenir une requete précise.
'''Les filtres ne sont pas utilisables dans les scripts d'action. Utiliser un script d'opération et appeler l'opération dans l'action.'''
Fonctions de base
Constructeur Filter(nomapp)
Initialise l'objet filtre sur l'objet décrit par nomapp, exemple sur l'objet ''rqDepartment'' :
var flt = new Filter("rqDepartment");
search()
Lance la recherche et retourne un objet de type Entity List
getFirst()
Lance la recherche et retourne le premier objet trouvé
setPageSize(Number nb)
Positionne la valeur de pagination d'une requête. Si le résultat de la requête est utilisé dans l'interface (entitylist), il ne faut pas spécifier cette valeur. Si on veut exploiter tous les enregistrements dans un traitement script, il faut passer la valeur '''''-1'''''. Effectivement dans le cas d'une requête ramenant beaucoup de résultats, on obtient les 10 ou 15 premiers seulement (traitement par blocs).
Exemple:
var flt = new Filter("rqDepartment");
flt.setPageSize(-1);
Filtre générique
set(String champs, string operateur, Object valeur)
Initilialize le jeux de condition du filtre
flt.set("rqActive","=",true) ;
and(String champs, String operateur, Object valeur)
Ajoute une condition avec un opérateur AND
flt.and("rqCompany","=",'CA2I') ;
flt.and("rqApe","!=",'721Z') ;
or(String champs, String operateur, Object valeur)
Ajoute une condition avec un opérateur OR
newCondition(String name, String operator, Object value)
Crée un objet JavaScript Objet JavaScript Condition|Condition qui peut être combiné pour créer un arbre de conditions complexes.
setCondition(Object cond)
Fixe la condition racine d'un arbre de condition
orderBy(String nom, String sens)
Ajoute un élément de clause ORDER BY
Filtre HQL
Contrairement au filtre simple ci-dessus le filtre avec requête ne permet pas d'obtenir la '''recherche plein texte'''.
Dans la requête le nombre de références pour une propriété avec références multiples est accessible par '''size'''(propriété). La valeur zéro signifie que la propriété n'est pas renseignée.
setQuery(String requete, Object param1, Object param2, ....)
Fixe la requete et ses paramètres. La requete est une chaîne de caractère contenant le description HQL de la requete. Si la requete contient des ?, les paramètres correspondants doivent être passés.
Pour en savoir plus sur le HQL, voir [http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html la documentation HQL]
setQueryWithList(String requete, Array params)
idem setQuery mais les paramètres sont passés sous forme de tableau.
Exemples
Exemple 1: liste des employés actifs
var flt = new Filter("rqEmployee");
flt.set("sysActive", "=", true);
data = flt.search();
Exemple 2: Récupération de l'utilisateur connecté
var flt = new Filter("sysPerson");
flt.set("sysId", "=", System.UserId);
data = flt.getFirst();
Exemple 3: Liste des demandes actives faites par l'utilisateur pour une autre personne ou sans bénéficiaire, triés par date de création la plus récente
var flt = new Filter("rqRequest");
var c = flt.newCondition("rqRequester", "=", System.UserId);
var c2 = flt.newCondition("rqBeneficiary", "!=", System.UserId);
c2 = c2.or(flt.newCondition("rqBeneficiary", "=", null));
c = c.and(c2);
c = c.and(flt.newCondition("rqActive", "=", true));
flt.setCondition(c);
flt.orderBy("syscretime", "DESC");
var res = flt.search();
Exemple 4: Liste des compteurs de congés de l'employee passé en paramètre de l'opération
var flt = new Filter("rqEmployeeTimeOffAccount");
flt.setQuery("select e from rqEmployeeTimeOffAccount as e left join e.rqAccount as account where e.rqEmployee=? order by account.rqType ASC, account.rqStartDate ASC", param);
data = flt.search();
Exemple 5: requete de l'écran de recherche multi-critère d'une réservation de salle de réunion
var flt = new Filter("rqRoomResaRequest");
var wherelst = new Array();
var joinlst = new Array();
var params = new Array();
if (data.rqNumber != null) {
wherelst.push("e.rqNumber = ?");
params.push(data.rqNumber);
}
if (data.rqStatus != null) {
wherelst.push("e.rqStatus = ?");
params.push(data.rqStatus);
}
if (data.rqRequester != null) {
wherelst.push("e.rqRequester = ?");
params.push(data.rqRequester);
}
if (data.rqBeneficiary != null) {
wherelst.push("e.rqBeneficiary = ?");
params.push(data.rqBeneficiary);
}
if (data.rqCreationDate != null) {
if (data.rqCreationDate.rqStartDate != null) {
wherelst.push("e.sysCreateTime >= ?");
params.push(data.rqCreationDate.rqStartDate);
}
if (data.rqCreationDate.rqEndDate != null) {
wherelst.push("e.sysCreateTime <= ?");
params.push(data.rqCreationDate.rqEndDate);
}
}
if (data.rqLocation != null) {
joinlst.push("join e.rqResource as res");
wherelst.push("res.rqLocation.sysFullPath LIKE ?");
params.push("%"+data.rqLocation.sysFullPath+"%");
}
if (data.rqRoom != null) {
wherelst.push("e.rqResource.sysId = ?");
params.push(data.rqRoom);
}
if (data.rqAttendeeNumber != null) {
wherelst.push("e.rqAttendeeNumber = ?");
params.push(data.rqAttendeeNumber);
}
if (data.rqDuration != null) {
wherelst.push("e.rqDuration = ?");
params.push(data.rqDuration);
}
var qry = "select e from rqRoomResaRequest as e";
for (var i=0; i<joinlst.length; i++) {
if (i != 0)
qry += ",";
qry += " "+joinlst[i];
}
if (wherelst.length != 0)
qry += " where ";
for (var i=0; i<wherelst.length; i++) {
if (i != 0)
qry += " and ";
qry += wherelst[i];
}
qry += " order by e.sysCreateTime DESC";
flt.setQueryWithList(qry, params);
data = flt.search();
Exemple 6 : recherche d'événement jours fériés sur un calendrier
var flt = new Filter("sysCalendarEvent");
flt.set("sysType","=",'Holiday') ;
flt.and("sysCalendar","=",calend) ;
flt.and("sysStartTime",">=",datIntDeb) ;
flt.and("sysEndTime","<=",datIntFin) ;
var res = flt.search();
var tabFeries=new Array() ;
tabFeries = res.getResults();