HOWTO développement Sashipa
Vous souhaitez que votre application travaille sur une vue SQL.
Une vue SQL est considérée en Sashipa comme une schemaTable. Par contre elle ne sera pas détectée par Database2Sashipa, donc vous devrez l'ajouter manuellement. Un exemple :
<schemaTable name='tblViewTest' readOnly='yes'>
<physicalName>VIEW_TEST</physicalName>
<singularName>VIEW TEST</singularName>
<pluralName>VIEW TEST</pluralName>
<schemaColumnSet>
<schemaColumn name='tblViewTest_PersonId' type='integer' notNull='no'>
<physicalName>PersonId</physicalName>
<singularName>Person Id</singularName>
<guiConfigSchemaColumn letterCount='20' sort='asc' />
</schemaColumn>
<schemaColumn name='tblViewTest_Column2' type='integer' notNull='no'>
<physicalName>Column2</physicalName>
<singularName>Column 2</singularName>
<guiConfigSchemaColumn letterCount='8' sort='desc' />
</schemaColumn>
</schemaColumnSet>
<schemaFkSet>
<schemaFk name='fk_tblViewTest_tblPerson' targetSchemaTable='tblPerson'>
<schemaColumnRef schemaColumn='tblViewTest_PersonId' />
</schemaFk>
</schemaFkSet>
<userKey>
<userKeyColumn schemaColumn='tblViewTest_PersonId' visible='no' />
<userKeyColumn schemaColumn='tblViewTest_Column2' />
</userKey>
<modifiedOn allSchemaTables='uid' />
</schemaTable>
|
On remarque que la schemaTable est déclarée comme readOnly. Ceci nous autorise à ne pas définir de clef primaire. Note : si vous êtes sûr qu'une colonne comportera des valeurs uniques vous pouvez la déclarer comme clef primaire.
On remarque aussi l'élément modifiedOn qui préviens l'application qu'elle doit mettre à jour cette table dans son cache à chaque requête UPDATE, INSERT et DELETE quelle que soit la schemaTable concernée.
Pour les besoins de l'IHM, nous déclarons aussi une clef étrangère basée sur une des colonnes de la vue, et qui référence une clef primaire de la vraie schemaTable sous-jacente.
On peut maintenant utiliser cette schemaTable comme n'importe quelle autre, dans la partie GUI. A l'exception près qu'elle est en lecture-seule.
On pourrait définir tous les formulaires habituels en faisant simplement attention à les mettre en lecture seule. Mais nous nous contenterons pour cet exemple, de définir une simple listForm que l'on placera dans un screen quelconque.
<listForm db='dbTest' delete='no'>
<title>Liste de la vue</title>
... bounds ...
<schemaTableRef schemaTable='tblViewTest' />
<instanceColumnList>
<instanceColumn schemaColumn='tblViewTest_Column2' />
</instanceColumnList>
<doubleClicScreen screen='SCtblPerson'>
<filterWithInstanceFk schemaFk='fk_tblViewTest_tblPerson' />
</doubleClicScreen>
</listForm>
|
Nous remarquons l'attribut delete pour désactiver la possibilité de supprimer des lignes depuis la liste. Les colonnes affichables de notre schemaTable sont utilisée comme normalement.
En double-cliquant sur une ligne, l'utilisateur ouvrira la fiche de la table SQL sous-jacente à notre vue (ici SCtblPerson). On utilise pour ceci la fonctionnalité décrite dans la HOWTO sur les listForms. C'est d'ailleur pour pouvoir ouvrir la fiche de la table sous-jacente depuis une listForm basée sur la vue, que nous avions déclaré une clef étrangère fk_tblViewTest_tblPerson.
© Copyright 2005 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.