Wiki source code of Filter
Show last authors
1 | 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. |
2 | |
3 | '''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.''' |
4 | |
5 | |
6 | == Fonctions de base == |
7 | |
8 | === Constructeur Filter(nomapp) === |
9 | |
10 | Initialise l'objet filtre sur l'objet décrit par nomapp, exemple sur l'objet ''rqDepartment'' : |
11 | |
12 | var flt = new Filter("rqDepartment"); |
13 | |
14 | === search() === |
15 | |
16 | Lance la recherche et retourne un objet de type [[Entity List>>JSEntityList]] |
17 | |
18 | === getFirst() === |
19 | |
20 | Lance la recherche et retourne le premier objet trouvé |
21 | |
22 | === setPageSize(Number nb) === |
23 | |
24 | 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). |
25 | Exemple: |
26 | var flt = new Filter("rqDepartment"); |
27 | flt.setPageSize(-1); |
28 | |
29 | == Filtre générique == |
30 | |
31 | === set(String champs, string operateur, Object valeur) === |
32 | |
33 | Initilialize le jeux de condition du filtre |
34 | |
35 | flt.set("rqActive","=",true) ; |
36 | |
37 | === and(String champs, String operateur, Object valeur) === |
38 | |
39 | Ajoute une condition avec un opérateur AND |
40 | |
41 | flt.and("rqCompany","=",'CA2I') ; |
42 | flt.and("rqApe","!=",'721Z') ; |
43 | |
44 | === or(String champs, String operateur, Object valeur) === |
45 | |
46 | Ajoute une condition avec un opérateur OR |
47 | |
48 | === newCondition(String name, String operator, Object value) === |
49 | |
50 | Crée un objet JavaScript [[Objet JavaScript Condition|Condition]] qui peut être combiné pour créer un arbre de conditions complexes. |
51 | |
52 | === setCondition(Object cond) === |
53 | |
54 | Fixe la condition racine d'un arbre de condition |
55 | |
56 | === orderBy(String nom, String sens) === |
57 | |
58 | Ajoute un élément de clause ORDER BY |
59 | |
60 | |
61 | == Filtre HQL == |
62 | |
63 | Contrairement au filtre simple ci-dessus le filtre avec requête ne permet pas d'obtenir la '''recherche plein texte'''. |
64 | |
65 | 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. |
66 | |
67 | === setQuery(String requete, Object param1, Object param2, ....) === |
68 | |
69 | 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. |
70 | Pour en savoir plus sur le HQL, voir [http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html la documentation HQL] |
71 | |
72 | === setQueryWithList(String requete, Array params) === |
73 | |
74 | idem setQuery mais les paramètres sont passés sous forme de tableau. |
75 | |
76 | == Exemples == |
77 | |
78 | Exemple 1: liste des employés actifs |
79 | |
80 | var flt = new Filter("rqEmployee"); |
81 | flt.set("sysActive", "=", true); |
82 | data = flt.search(); |
83 | |
84 | Exemple 2: Récupération de l'utilisateur connecté |
85 | |
86 | var flt = new Filter("sysPerson"); |
87 | flt.set("sysId", "=", System.UserId); |
88 | data = flt.getFirst(); |
89 | |
90 | 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 |
91 | |
92 | var flt = new Filter("rqRequest"); |
93 | var c = flt.newCondition("rqRequester", "=", System.UserId); |
94 | var c2 = flt.newCondition("rqBeneficiary", "!=", System.UserId); |
95 | c2 = c2.or(flt.newCondition("rqBeneficiary", "=", null)); |
96 | c = c.and(c2); |
97 | c = c.and(flt.newCondition("rqActive", "=", true)); |
98 | flt.setCondition(c); |
99 | flt.orderBy("syscretime", "DESC"); |
100 | var res = flt.search(); |
101 | |
102 | Exemple 4: Liste des compteurs de congés de l'employee passé en paramètre de l'opération |
103 | |
104 | var flt = new Filter("rqEmployeeTimeOffAccount"); |
105 | 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); |
106 | data = flt.search(); |
107 | |
108 | Exemple 5: requete de l'écran de recherche multi-critère d'une réservation de salle de réunion |
109 | |
110 | var flt = new Filter("rqRoomResaRequest"); |
111 | var wherelst = new Array(); |
112 | var joinlst = new Array(); |
113 | var params = new Array(); |
114 | if (data.rqNumber != null) { |
115 | wherelst.push("e.rqNumber = ?"); |
116 | params.push(data.rqNumber); |
117 | } |
118 | if (data.rqStatus != null) { |
119 | wherelst.push("e.rqStatus = ?"); |
120 | params.push(data.rqStatus); |
121 | } |
122 | if (data.rqRequester != null) { |
123 | wherelst.push("e.rqRequester = ?"); |
124 | params.push(data.rqRequester); |
125 | } |
126 | if (data.rqBeneficiary != null) { |
127 | wherelst.push("e.rqBeneficiary = ?"); |
128 | params.push(data.rqBeneficiary); |
129 | } |
130 | if (data.rqCreationDate != null) { |
131 | if (data.rqCreationDate.rqStartDate != null) { |
132 | wherelst.push("e.sysCreateTime >= ?"); |
133 | params.push(data.rqCreationDate.rqStartDate); |
134 | } |
135 | if (data.rqCreationDate.rqEndDate != null) { |
136 | wherelst.push("e.sysCreateTime <= ?"); |
137 | params.push(data.rqCreationDate.rqEndDate); |
138 | } |
139 | } |
140 | if (data.rqLocation != null) { |
141 | joinlst.push("join e.rqResource as res"); |
142 | wherelst.push("res.rqLocation.sysFullPath LIKE ?"); |
143 | params.push("%"+data.rqLocation.sysFullPath+"%"); |
144 | } |
145 | if (data.rqRoom != null) { |
146 | wherelst.push("e.rqResource.sysId = ?"); |
147 | params.push(data.rqRoom); |
148 | } |
149 | if (data.rqAttendeeNumber != null) { |
150 | wherelst.push("e.rqAttendeeNumber = ?"); |
151 | params.push(data.rqAttendeeNumber); |
152 | } |
153 | if (data.rqDuration != null) { |
154 | wherelst.push("e.rqDuration = ?"); |
155 | params.push(data.rqDuration); |
156 | } |
157 | var qry = "select e from rqRoomResaRequest as e"; |
158 | for (var i=0; i<joinlst.length; i++) { |
159 | if (i != 0) |
160 | qry += ","; |
161 | qry += " "+joinlst[i]; |
162 | } |
163 | if (wherelst.length != 0) |
164 | qry += " where "; |
165 | for (var i=0; i<wherelst.length; i++) { |
166 | if (i != 0) |
167 | qry += " and "; |
168 | qry += wherelst[i]; |
169 | } |
170 | qry += " order by e.sysCreateTime DESC"; |
171 | flt.setQueryWithList(qry, params); |
172 | data = flt.search(); |
173 | |
174 | Exemple 6 : recherche d'événement jours fériés sur un calendrier |
175 | |
176 | var flt = new Filter("sysCalendarEvent"); |
177 | flt.set("sysType","=",'Holiday') ; |
178 | flt.and("sysCalendar","=",calend) ; |
179 | flt.and("sysStartTime",">=",datIntDeb) ; |
180 | flt.and("sysEndTime","<=",datIntFin) ; |
181 | var res = flt.search(); |
182 | var tabFeries=new Array() ; |
183 | tabFeries = res.getResults(); |