HOWTO développement Sashipa

 

 Champs affichant une valeur calculée.

Vous souhaitez ajouter un champ dans votre fiche (cardForm), mais ce champ aurait une valeur calculée à la volée, à titre indicatif. Il ne correspond pas à une colonne de la base de données.

 

Prenons une base exemple nous avons des Lots de Produits. Voici le script SQL des tables (ici avec la syntaxe pour HSQL) :

  CREATE TABLE Lot (
    Id_Lot integer not null primary key,
    Nom_Lot varchar(100) not null
  );
  CREATE TABLE Produit (
    Id_Personne integer not null primary key,
    Ref_Lot integer not null,
    Libelle_Produit varchar(100) not null,
    Prix integer,
    FOREIGN KEY (Ref_Lot) REFERENCES Lot (Id_Lot)
  );

 

Dans la fiche du lot, nous souhaitons avoir un champ qui indique la somme des prix des produits du lot. On remplace l'élément schemaColumnRef par une selectedValue qui contient en fait une selectQueryBuilder. Voici un exemple :

  <cardForm db='dbExemple'>
    <title>Fiche d'un Lot</title>
    <location x='10' y='10' />
    <cardSchemaTableRef schemaTable='tblLot' updateAfterInsert='no' 
                        multipleInsert='yes' queries='sudi' />
    <fieldContainer>
      <textField>
        <schemaColumnRef schemaColumn='tblLot_NomLot' />
      </textField>

      <!-- Champ calculé -->
      <textField readOnly='yes' save='no'>
        <label>Prix cumulés</label>
        <selectedValue>
          <selectQueryBuilder>
            <castFilterSet stuckWhenNoFilter='yes' />
            <selectStatementBuilder>
              <instanceColumnList>
                <agregatInstanceColumn type='sum' schemaColumn='tblProduit_Prix' />
              </instanceColumnList>
            </selectStatementBuilder>
            <fromStatementBuilder>
              <mainInstanceTable schemaTable='tblProduit' />
            </fromStatementBuilder>
          </selectQueryBuilder>
        </selectedValue>
      </textField>
      
    </fieldContainer>
  </cardForm>

Remarques :

  • Le label du champ est obligatoire.

  • L'attribut stuckWhenNoFilter='yes' signifie que la requête ne renverra pas de valeur en mode ajout. Si on le définissait à 'no', le champ afficherait la somme des prix de tous les produits (de tous les lots) en mode ajout.

  • L'élément agregatInstanceColumn est de type 'sum' et porte sur la colonne du prix.

  • La clause from de la requête est basée sur la table tblProduit. La requête est prête par défaut à recevoir le filtre des clefs primaires, plus ceux des clefs étrangères de ses tables. Elle sera donc filtrée sur la clef primaire du lot courant de la fiche.

© 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.