Aller au contenu
EN FR

Tutoriel : construire les vues du module Task Management

Statut documentaire : tutorial — voir Maturité et preuves.

Objectif

Ajouter une vue à Task en séparant clairement :

  1. le cache de données de page ;
  2. l'état et les actions de page ;
  3. les composants visuels et leurs bindings.

La vue est une projection du modèle métier. Elle ne doit pas devenir la source du sens métier.

Structure conceptuelle d'une vue

Task view
├── data cache
│   └── datasets / datasources
├── page model
│   ├── local state
│   ├── events
│   └── actions
└── visual projection
    ├── fields
    ├── list
    └── buttons

1. Déclarer le cache de données

Exemple XML :

<lgc:dataSets>
  <lgc:dataCursor name="TaskPageCursor">
    <lgc:dataSet
        name="TaskEntityDs"
        collectionPath="/ClassItem[@name='TaskManagement.Task']/Collection[@name='Entity']">
      <lgc:fields>
        <field name="Id" fieldType="String" />
        <field name="Name" fieldType="String" />
        <field name="Description" fieldType="String" />
        <field name="Priority" fieldType="Integer" />
        <field name="StartDate" fieldType="DateTime" />
        <field name="EndDate" fieldType="DateTime" />
      </lgc:fields>
    </lgc:dataSet>
  </lgc:dataCursor>
</lgc:dataSets>

Le chemin exact de collection dépend du package chargé. Vérifiez toujours le nom public complet exposé par votre modèle.

2. Initialiser l'état de page

Le pageModel contient uniquement l'état propre à l'interaction de la page : filtre courant, élément sélectionné, mode d'édition, etc.

Exemple de logique en functionalP :

OnlyMine := false;
SelectedTaskId := "";

Évitez d'y déplacer des règles métier qui doivent rester dans le modèle ou dans une action publiée.

3. Filtrer avant l'ouverture du dataset

Appliquez les filtres avant l'ouverture afin d'éviter de charger puis rejeter inutilement des données.

if OnlyMine then
  TaskEntityDs.Filter := "AssigneeId = :CurrentUserId";

La syntaxe exacte du filtre dépend du datasource et du Runtime utilisés ; l'exemple illustre le pattern de placement de la logique.

4. Lier les composants

Un composant visuel se lie à un datasource et à un champ public :

<lgc:edit
    name="NameEdit"
    nameField="Name"
    dataSource="TaskEntityDs"
    caption="#TaskName" />

<lgc:edit
    name="PriorityEdit"
    nameField="Priority"
    dataSource="TaskEntityDs"
    caption="#Priority" />

Le binding doit rester déclaratif. Une modification de l'implémentation visuelle ne doit pas forcer une duplication du modèle métier.

5. Ajouter Save et Cancel

Save:
  post current object
  refresh current dataset

Cancel:
  cancel current edit
  restore page state

Dans le script effectif, utilisez les opérations publiées par la version du Runtime et du composant concerné. Le site doit éviter d'inventer un symbole public : tout exemple exécutable doit être certifié contre la référence ou le manifest de la release.

6. Créer une nouvelle tâche

L'action « New Task » doit :

  1. créer une instance de Task ;
  2. initialiser les valeurs nécessaires ;
  3. positionner la page en mode édition ;
  4. laisser la validation métier au modèle ;
  5. poster uniquement lorsque l'utilisateur confirme.

7. Événements visuels

Les événements visuels déclenchent des actions de page ou des actions métier publiées. Ils ne doivent pas contenir une seconde implémentation de la règle métier.

Exemples de responsabilités adaptées :

  • OnChange : mettre à jour un filtre local ;
  • OnDoubleClick : ouvrir l'objet sélectionné ;
  • OnKeyUp : rafraîchir une recherche ;
  • bouton Save : appeler l'action de persistance/validation appropriée.

8. Validation

Avant de considérer la vue terminée, vérifiez :

  • datasource résolu ;
  • noms de champs cohérents avec le modèle ;
  • initialisation du pageModel ;
  • filtres appliqués avant ouverture lorsque possible ;
  • Save/Cancel testés ;
  • création d'un objet testée ;
  • aucune règle métier dupliquée dans le composant visuel.

Étape suivante

Une fois le modèle et la vue validés, vous pouvez publier des capacités de service ou une API. Voir Publier une API de gestion d'utilisateurs pour le pattern de publication.