creapage.net

HOWTO développement Sashipa

 ListForm avancé : généralités.

Vous avez un listForm et vous souhaitez modifier son comportement, ajouter une colonne d'une table liée, afficher un agrégat...

Modifier l'apparence et le comportement de la liste

Pour ne pas afficher la barre des titres de colonnes, ne pas afficher le nombre de lignes, autoriser ou non les suppressions de lignes, autoriser ou non les ajouts :

  <listForm db='dbContact' delete='no' displayColumnTitles='no' displayRowCount='no'>
    <!-- ... -->
    <doubleClicScreen screen='SCContactAdresse' />
    <insertScreen screen='SCContactAdresse' schemaFk='fk_adr_Contact' />
    <!-- ... -->

Remarques :

Ajouter une colonne d'une table liée, afficher un agrégat : version simple

Voici un exemple :

  <listForm db='dbContact' delete='yes'>
    <bounds x='10' y='90' w='600' h='350' />
    <schemaTableRef schemaTable='tableContact' />
    <instanceColumnList>
      <instanceColumn schemaColumn='cta_ContactNom' />
      <instanceColumn schemaColumn='cta_ContactPrenom' />
      <instanceFkColumns join='inner'>
        <instanceFk schemaFk='fk_cta_Profession' />
      </instanceFkColumns>
      <agregatInstanceColumn schemaFk='fk_adr_Contact' letterCount='4' 
                             sort='desc' type='count'>
        <title>Nb Adr</title>
      </agregatInstanceColumn>
    </instanceColumnList>
    <doubleClicScreen screen='SCContact' />
    <insertScreen screen='SCContact' schemaFk='fk_cta_Profession' />
  </listForm>
  <!-- ... -->

L'élément instanceFkColumns affiche les colonnes de la clef utilisateur (élément userKey dans l'environnement) de la table référencée.

Note : l'attribut join='inner' signifie que la jointure sera interne. Ceci permet d'optimiser la requête sous-jacente. Mais si la clef étrangère n'est pas obligatoire, il faut utiliser join='left'. Autrement les lignes qui ne référencent pas de valeur dans la table liée (ici Profession) seront ignorées.

L'élément agregatInstanceColumn affiche ici le nombre de lignes de la table ContactAdresse qui référencent le contact. Notez que la jointure dans la requête sous-jacente sera une jointure externe gauche (left join).

Attributs des instanceColumns

Les attributs d'une instanceColumn sont facultatifs. Ils prennent comme valeur par défaut, celle définie au niveau de la schemaColumn. Voici une instanceColumn avec tous les attributs de définis :

  <instanceColumn schemaColumn='cta_ContactNom' letterCount='20' sort='asc' order='0' />

Signification des attributs :

Définir le screen pour afficher le contenu d'une ligne

Il s'agit de l'élément doubleClicScreen. Le plus souvent on définit une fiche qui sera filtrée sur la clef primaire de la ligne sélectionnée, comme ceci :

  <listForm db='dbContact' delete='yes'>
    ...
    <schemaTableRef schemaTable='tblContact' />
    ...
    <doubleClicScreen screen='SCtblContact' />
    <insertScreen screen='SCtblContact' schemaFk='fk_tblContact_tblProfession' />
  </listForm>
  <!-- ... -->

Ici on utilise la même fiche 'SCtblContact' pour l'ajout où la visualisation. Mais on peut vouloir ouvrir une fiche filtrée avec la valeur d'une clef étrangère de la ligne (et non celle de la clef primaire). Par exemple si la listForm affiche le contenu d'une table ne contenant que deux clefs étrangères : il est inutile de proposer la modification de son contenu. Un exemple :

  <listForm db='dbContact' delete='yes'>
    ...
    <schemaTableRef schemaTable='tblInscritAuGroupe' />
    ...
    <doubleClicScreen screen='SCtblIndividu'>
      <filterWithInstanceFk schemaFk='fk_tblInscritAuGroupe_tblIndividu' />
    </doubleClicScreen>
    <insertScreen screen='SCtblInscritAuGroupe' schemaFk='fk_tblInscritAuGroupe_tblGroupe' />
  </listForm>
  <!-- ... -->

Ici on a des "Groupes" composés d'"Individus", les individus pouvant s'inscrire à plusieurs groupes. Cette listForm est dans l'écran de la fiche de "Groupe", elle affiche les individus inscrits au groupe. Lors d'un ajout on affiche bien la fiche de l'inscription (SCtblInscritAuGroupe). Lors du double-clic en revanche, on affiche directement la fiche de l'individu référencé par l'inscription.

On pourra aussi voir le cas d'une schemaTable qui est en fait une vue SQL.

© Copyright 2003 Sashipa-Melba Team. Ce document de la technologie Sashipa-Melba est sous licence GNU FDL Vous pouvez le copier et modifier librement les copies tant que cette mention apparaît clairement.