Filter

Last modified by Maurice Gasco on 2015/04/22 09:19

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();

Tags:
Created by Maurice Gasco on 2011/09/28 09:28
     
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 9.11.5 - Documentation