|
HOWTO Accueil
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 :
Par défaut, lorsqu'il existe un formulaire de type cardForm dans un écran,
tous les autres formulaires se désactivent lors de l'ouverture en mode
ajout. Ici nous souhaitons annuler ce comportement : disabledWhenInsert='no'.
La requête n'est pas sensible au filtre de l'écran (filterSensitive='no')
ce qui évite les effets de bords lors de l'ouverture en mode
modification-consultation.
Dans la clause Where, on ajoute un élément researchCriteria qui
génèrera un critère SQL faisant correspondre la colonne Personne.Nom
avec le champ fieldNom. Ce critère bloque la requête ('stuck')
lorsque le champ est vide : le listForm sera vide tant que le champ n'est
pas rempli.
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é.
Top
|