HOWTO développement Sashipa

 Rendre le contenu d'un listForm dépendant d'un champ.

Dans un écran, vous souhaitez que le contenu d'un listForm soit dépendant de champs du même écran.

Nous voulons que lorsque l'utilisateur ajoute une personne ou modifie son nom, une listForm affiche immédiatement et sur le même écran, toutes les personnes du même nom. Ainsi l'utilisateur pourra éviter d'insérer des doublons.

Techniquement, il s'agit d'intégrer manuellement le comportement d'un researchForm à partir du champ d'un cardForm. Je recommande auparavant de lire la FAQ qui détaille le fonctionnement des selectQueryBuilder.

Voici le code. Pour le cardForm, rien de changé. On se contente de nommer les champs concernés par la recherche. Ici le nom :

  <cardForm db='dbDemo'>
    <title>Fiche d'une personne</title>
    <location x='10' y='10' />
    <cardSchemaTableRef schemaTable='tblPersonne' updateAfterInsert='no' 
                        multipleInsert='yes' queries='sudi' />
    <fieldContainer>
      <textField name='fieldNom'>
        <schemaColumnRef schemaColumn='tblPersonne_Nom' />
      </textField>
      ...

Dans le même écran (screen) nous ajoutons le listForm :

  <listForm db='dbDemo' doubleClicScreen='SCtblPersonne' 
            delete='no' disabledWhenInsert='no' displayRowCount='no'>
    <title>Liste des personnes du même nom</title>
    <bounds x='10' y='350' w='610' h='180' />

    <selectQueryBuilder>
      <castFilterSet filterSensitive='no' />
      <fromStatementBuilder>
        <mainInstanceTable schemaTable='tblPersonne' />
      </fromStatementBuilder>
      <whereStatementBuilder>
        <criteriaBuilder mode='or' emptyAction='stuck'
                         defaultSubEmptyAction='stuck' >
          <researchCriteria>
            <castSchemaValue>
              <instanceColumn schemaColumn='tblPersonne_Nom' />
            </castSchemaValue>
            <fieldRef field='fieldNom' />
          </researchCriteria>
        </criteriaBuilder>
      </whereStatementBuilder>
    </selectQueryBuilder>

    <instanceColumnList>
      <instanceColumn schemaColumn='tblPersonne_Nom' letterCount='20' />
      <instanceColumn schemaColumn='tblPersonne_Prenom' letterCount='20' />
    </instanceColumnList>
  </listForm>

Explications :

Remarque importante : un champ nommé doit obligatoirement être déclaré avant d'être référencé par un researchCriteria. Donc pensez à écrire votre cardForm avant d'écrire le listForm, dans le code Sashipa de votre écran.

De plus, la portée du nom d'un champ est celle de l'écran (screen) ou à défaut du formulaire (form) dans lequel il a été déclaré. Il est impossible de référencer un champ déclaré dans un formulaire lui-même référencé.