Table of Contents
Ces cas d’utilisation montrent ce qui est de la responsabilité du développeur de l’application (sur les diagrammes, c’est l’acteur contrôleur), ce qui est fait automatiquement par le framework (rectangle bleu clair).
Affichage d’un formulaire et sauvegarde d’un objet
Deux actions sont impliquées, utilisant 2 services :
Figure 1. Rendu du diagramme de séquence Formulaire et Objet de processus
Exemple de code : flux de travail Formulaire + enregistrement
def userForm(User user) { (1)
user ?= new User() (2)
UiFormSpecifier f = new UiFormSpecifier() (3)
f.ui user, {
hiddenField user.subsidiary_
hiddenField user.origin_
section "User", {
field user.username_
field user.firstName_
field user.lastName_
ajaxField user.manager_, this.&selectUserM2O as MC
field user.trigram_
field user.password_
}
section "Coords", {
field user.businessUnit_
field user.job_
field user.directPhone_
field user.additionalPhone_
field user.mail_
field user.mainSubsidiary_
field user.allowedSubsidiaries_
}
// [. . .]
formAction this.&saveUser as MC, user.id (4)
}
taackUiService.show new UiBlockSpecifier().ui { (5)
modal {
form "User Form", f, BlockSpec.Width.MAX
}
}
}
@Transactional
@Secured("ROLE_ADMIN") (6)
def saveUser() { (7)
taackSaveService.saveThenRedirectOrRenderErrors(User, this.&listUser) (8)
}
1 | Action affichant le formulaire |
2 | Créer l’objet si l’objet est nul |
3 | Créer le formulaire |
4 | Bouton de formulaire qui envoie les données du formulaire à l’action saveUser |
5 | afficher le formulaire |
6 | Sécuriser l’action save |
7 | Action qui va sauvegarder l’objet |
8 | Appel à taackSaveService, ici si l’objet est valide, l’utilisateur est redirigé vers l’action listUsers . |
Afficher un tableau avec des colonnes triables, des actions en ligne et un filtre
Une seule action est nécessaire pour gérer la pagination, le filtrage et le tri :
Figure 2. Diagramme de séquence Gestion d’une action sur un tableau pour traiter une liste d’objets
Exemple de code Filtre et tableau
def index() { (1)
User cu = authenticatedUser as User
UiFilterSpecifier f = buildUserTableFilter cu (2)
UiTableSpecifier t = buildUserTable f (3)
UiBlockSpecifier b = new UiBlockSpecifier() (4)
b.ui {
tableFilter "Filter", f, "Users", t, BlockSpec.Width.MAX, {
action ActionIcon.CREATE, this.&userForm as MC (5)
}
}
taackUiService.show(b, buildMenu()) (6)
}
1 | Action qui affiche une liste d’objets |
2 | Construire le filtre, ici le filtre prend l’utilisateur actuellement connecté comme paramètre, car nous voulons pouvoir lister les équipes d’utilisateurs. |
3 | Construire le tableau |
4 | Construire le bloc contenant le tableau et le filtre |
5 | Ajouter une action pour créer un nouvel utilisateur |
6 | Afficher le bloc |
Nous passons exceptionnellement le filtre à la buildTable pour construire la requête et éviter le piratage de filtre |
Afficher une fenêtre modale puis la fermer et actualiser une partie du contenu actuel
Figure 3. Diagramme de séquence Gestion d’une action sur une table pour traiter une liste d’objets
Exemple de code pour fermer la fenêtre modale et actualiser la page actuelle
taackSaveService.saveThenDisplayBlockOrRenderErrors(EngineeringChangeRequest, (1)
new UiBlockSpecifier().ui { (2)
closeModalAndUpdateBlock { (3)
show "Projects", buildShowProjects(ecr), BlockSpec.Width.MAX, {
action
ActionIcon.ADD,
Ecr2Controller.&projectsForm as MC,
[id: ecr.id, ajaxBlockId: ajaxBlockId]
}
}
})
1 | Après qu’une action impliquant la sauvegarde d’un objet est appelée dans une modale, vous pouvez fermer la modale et actualiser les éléments de la page en une seule action |
2 | saveThenDisplayBlockOrRenderErrors prend un UiBlockSpecifier comme paramètre |
3 | closeModalAndUpdateBlock fermera d’abord la dernière modale ouverte puis appliquera la modification |
4 | Ici, le bloc avec le nom contenu dans ajaxBlockId sera mis à jour |
TODO
-
Mise à jour d’une partie d’une page
-
Afficher un objet avec un champ modifiable
-
Afficher un graphique
-
Exporter un tableau en CSV
-
Rendu d’un bloc dans un PDF
-
Rendu d’un bloc dans un Mail
-
…