Filtre
-
Rendu en HTML
-
Rendu en PDF
-
Rendu en Mail
-
Rendu en CSV
Le Filter DSL est toujours associé à un tableau ou à un graphique. Un bloc ne peut pas contenir uniquement un filtre au plus.
Exemple de code
UiFilterSpecifier f = new UiFilterSpecifier() (1)
f.ui User, { (2)
section "User", { (3)
filterField u.username_ (4)
filterField u.lastName_
filterField u.firstName_
filterField u.manager_, u.manager.username_ (5)
filterField u.mainSubsidiary_
filterField u.allowedSubsidiaries_
filterField u.enabled_
filterFieldExpressionBool "My Team", (6)
new FilterExpression(u.selfObject_,
Operator.IN,
cu.allManagedUsers_),
true
}
}
1 | Créer le filtre |
2 | Transmettre la classe d’objet et la fermeture contenant les spécifications du filtre via la méthode ui |
3 | Créer une section intitulée "Utilisateur" |
4 | Ajouter un champ au filtre, noter le soulignement à la fin du nom du champ |
5 | si le champ est un objet, transmettre un tableau avec toutes les étapes nécessaires pour cibler le champ sur lequel vous souhaitez filtrer |
6 | filterFieldExpressionBool permet un filtre plus complexe |
UiFilterSpecifier f = new UiFilterSpecifier()
CmsImage i = new CmsImage(cmsPage: new CmsPage())
f.ui CmsImage, cmsPage ? [id: cmsPage.id] : null, { (1)
section "Image", {
filterField i.hide_
filterField i.filePath_
filterField i.imageType_
}
section "Origin", {
filterField i.cmsPage_, i.cmsPage.name_
filterField i.cmsPage_, i.cmsPage.subsidiary_
filterField i.cmsPage_, i.cmsPage.pageLayout_
filterField i.cmsPage_, i.cmsPage.pageType_
}
}
f
1 | Nous pouvons passer des paramètres optionnels à l’action |
Hiérarchie des symboles du DSL
Éléments DSL
Racine
-
ui
: une version permet de passer des paramètres supplémentaires à l’action de filtrage (voir Filter Exemple 2)
Entrées
-
filterField
: ajouter un champ d’objet à transmettre à l’action de filtrage -
filterFieldInverse
: filtrer les objets si un autre objet pointe dessus. -
filterFieldExpressionBool
: permet de modifier la clause where dans l’action de filtrage en utilisant FilterExpression, le dernier paramètre est la valeur par défaut.
Structure
-
section
: ajouter une section de filtre graphique
Tableau
-
Rendu en HTML
-
Rendu en PDF
-
Rendu en CSV
Exemple de code
La partie droite de l’aperçu correspond à l’exemple DSL ci-dessous. Le filtre se trouve à gauche de l’image, voir DslDescriptions/FilterDSL.html pour le code correspondant.
Le tableau comporte une pagination, il est trié par défaut par rapport à la colonne Date de création, toutes les colonnes sont triables sauf Image et Rôles. Une colonne peut contenir plusieurs cellules. La date de création est vide pour les anciens utilisateurs, et les cellules du gestionnaire sont également vides pour certains utilisateurs.
new UiTableSpecifier().ui {
User u = new User(manager: new User(), enabled: true)
header { (1)
if (!hasSelect) {
fieldHeader tr('picture.header.label') (2)
}
column {
sortableFieldHeader u.username_ (3)
sortableFieldHeader u.dateCreated_
}
column {
sortableFieldHeader u.subsidiary_
sortableFieldHeader u.manager_, u.manager.username_
}
column {
sortableFieldHeader u.lastName_
sortableFieldHeader u.firstName_
}
column {
fieldHeader tr('default.roles.label')
}
}
boolean canSwitchUser = crewSecurityService.canSwitchUser()
TaackFilter tf = taackFilterService.getBuilder(User)
.setSortOrder(TaackFilter.Order.DESC, u.dateCreated_)
.setMaxNumberOfLine(20).addFilter(f).build()
iterate(tf) { User ru -> (4)
row { (5)
boolean hasActions = crewSecurityService.canEdit(ru)
if (!hasSelect) {
rowColumn {
rowField attachmentUiService.preview(ru.mainPicture?.id)
}
}
rowColumn {
rowAction ActionIcon.SHOW * IconStyle.SCALE_DOWN,
CrewController.&showUser as MC, ru.id
if (hasSelect)
rowAction "Select User",
ActionIcon.SELECT * IconStyle.SCALE_DOWN,
ru.id, ru.toString()
else if (hasActions) {
rowAction ActionIcon.EDIT * IconStyle.SCALE_DOWN,
CrewController.&editUser as MC, ru.id
if (canSwitchUser && ru.enabled)
rowAction ActionIcon.SHOW * IconStyle.SCALE_DOWN,
CrewController.&switchUser as MC, ru.id
else if (canSwitchUser && !ru.enabled) {
rowAction ActionIcon.MERGE * IconStyle.SCALE_DOWN,
CrewController.&replaceUser as MC, ru.id
rowAction ActionIcon.DELETE * IconStyle.SCALE_DOWN,
CrewController.&deleteUser as MC, ru.id
}
}
rowField ru.username_
rowField ru.dateCreated_
}
rowColumn {
rowField ru.subsidiary_
rowField ru.manager?.username
}
rowColumn {
rowField ru.lastName_
rowField ru.firstName_
}
rowColumn {
if (hasActions && !hasSelect)
rowAction ActionIcon.EDIT * IconStyle.SCALE_DOWN,
CrewController.&editUserRoles as MC, ru.id
rowField ru.authorities*.authority.join(', ')
}
}
}
}
1 | Partie en-tête des spécifications de la table |
2 | En-tête de champ non triable |
3 | En-tête de champ triable |
4 | iterate , spécifiant le tri, la pagination et le filtrage |
5 | row DSL |
ActionIcon
peut être modifié par ActionIconModifier
Le style de tableau est spécifié par Style
, un paramètre facultatif sur l’élément row
ou rowField
.