You are not logged in Log in Join
You are here: Home » Members » jacques.adamski » Vitefait - Formulator and application » How to use vitefait - Comment utiliser vitefait » howto_view

Log in
Name

Password

 

How to use vitefait - Comment utiliser vitefait

 

Created by jacques.adamski . Last modified 2003-09-17 09:33:11.

How to use vitefait - Comment utiliser vitefait

VITEFAIT - beta 0.9.4


Description

L'objet de "Vitefait" est de fournir un générateur ultra rapide pour petites applications de saisie et modif de formulaires. Ces petites applications, très simples peuvent ensuite être modifiées si nécessaire. Vitefait a aussi un but didactique, par l'examen du code généré, il sera facile de comprendre DTML.

Installation

Vitefait est une simple application exportée, il suffit de la placer dans le dossier "import" de zope, d'aller sur l'interface web de zope et demander un import de "vitefait.zexp". Pas besoin de redémarrer Zope.

Premier pas

Pour notre première application vitefait, on va créer un simple formulaire de type annuaire, qui contiendra nom, prénom et téléphone.

tapez : http://localhost:8080/vitefait/ et voilà le résultat:

image 1

Pour notre exemple nous allons remplir :
nom de sauvegarde de l'image : annuaire (ce nom servira de préfixe à tout le code généré)
mode html : o (pour générer du code html plutôt que du code à interpréter par vitefait). Ce mode sera pris par défaut.
générer gestion fiches : o (pour avoir la totalité de la gestion VAMSL (voir, ajouter, modifier, supprimer,lister). Par défaut cette gestion ne sera pas générée.
touches à ajouter : voir,ajouter,modifier,supprimer,lister(afin que la gestion soit accessible par touches)
champs de l'image : nom,prenom,telephone,msg_erreur (le nom des champs qui serviront de champs SQL - attention pas d'accentués ni de caractères spéciaux - msg_erreur est un nom de champs spécial qui ne génèrera pas de champs SQL et sera remplit par les fonctions VAMSL - le premier champs servira comme index sauf si un ou plusieurs champs commencent par les 2 caractères k_ k étant en minuscule dans cette hyppothèse ce sont ces champs qui serviront de clé pour les fonctions voir modifier et supprimer)
puis dessinez l'image :
les carctères $ servent à délimiter les zones variables, les £ les zones mot de passe,
les § les zones non modifiables.
# sert pour les cases à cocher et ^ pour les boutons radio
[ et ] servent à délimiter un champ de texte large, ce point sera abordé plus loin
~ sert à insérer un champ de type menu déroulant, ce point sera abordé plus loin

Dessin non formate : par défaut votre généré reprendra tel que le dessin fait à l'écran mais il vous est possible de choisir de disposer vous même les balises HTML dans ce cas mettez un o dans cette option.

C'est tout il suffit maintenant de cliquer sur le bouton générer le code et votre appli est faite !
image2

l'image suivante vous donne le nom de tous les objets générés:
dans notre cas:
annuaire, annuaire_prog, annuaire_html, annuaire_sql_cretab, annuaire_sql _ajouter, annuaire_sql _modifier, annuaire_sql _supprimer, annuaire_sql _voir, annuaire_sql_lister annuaire_prog_ajouter, annuaire_prog_modifier, annuaire_prog_supprimer, annuaire_prog_voir, annuaire_prog_lister, annuaire_prog_rab.
Ces objets se trouvent dans le sous dossier "vitefait_prog".
Allons créer la table SQL nécessaire en cliquant sur le bouton "générer la table SQL"
Vous pouvez d'ores et déjà tester l'application réalisée, soit en cliquant sur le bouton "tester", soit en tapant l'adresse:
http://localhost:9673/vitefait/vitefait_prog/annuaire_prog
Le premier champ sert de champs de référence pour les fonctions voir, modifier et supprimer.

image4

Modification

Le principe de base de vitefait est de générer un modèle type et de vous permettre de le modifier facilement. Néanmoins, vous avez la possibilité de refaire une génération à partir de l'image. Pour cela, il suffit de supprimer tous les objets avec le bouton "supprimer le généré". Vous pouvez aller modifier si vous voulez l'image avec le bouton "mise à jour" qui vous donne l'interface Zope (vous pouvez changer les noms de touches et les noms de champs dans l'onglet "properties" et ensuite repasser par la génération normale, sans avoir à redessiner l'image. Pour regénérer une nouvelle version, il suffit de donner le nom de l'image de base et de cliquer sur le bouton générer le code.

Touche

Vous pouvez mettre autant de touches que vous voulez, les touches nommées voir, ajouter, modifier, supprimer,lister verront leur code généré par l'option "générer gestion fiches", mais rien ne vous oblige à les insérer. Si vous ajoutez une touche nommée "aide" par exemple pour l'application annuaire, il faudra prévoir un objet annuaire_prog_aide

Code html

Après avoir dessiné votre image, vous pouvez ajouter du code HTML pour la rendre plus agréable. La feuille css se trouve dans le dossier vitefait et s'appelle vitefait_css. Elle comporte des modèles pour les champs fixes et variables, la forme et les boutons.

Code SQL

Par défaut tous les champs SQL sont définis en type Varchar. Vous pouvez modifier les objets SQL pour les adapter à vos besoins. La base SQL est par défaut GADFLY, vous pouvez choisir POSTGRES, MySQL ou autre il suffit de créer une connexion nommée vitefait_base.

Détail du code généré

annuaire

<b>ANNUAIRE</b>

Nom $$$$$$$$$$$$$$$$$$$$

Prénom $$$$$$$$$$$$$$$$$$$$

téléphone $$$$$$$$$$


§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

Cet objet n'est qu'un dessin d'écran, vous pouvez le modifier, supprimer les autres objets et refaire une génération. Si vous n'avez pas pris l'option HTML, vous pouvez le modifier sans avoir à refaire une génération car cet objet sera interprété.

annuaire_html

<!... image gérée par vitefait J.adamski ...><dtml-var vitefait_debut missing=""><FORM action="annuaire_prog" method="POST"><BODY class="form"><PRE> <b>ANNUAIRE</b>

Nom <INPUT type="STRING" size="20" maxlength="20" value="<dtml-var nom missing="">" name="nom" class="champs" />

Prénom <INPUT type="STRING" size="20" maxlength="20" value="<dtml-var prenom missing="">" name="prenom" class="champs" />

téléphone <INPUT type="STRING" size="10" maxlength="10" value="<dtml-var telephone missing="">" name="telephone" class="champs" />


<INPUT type="STRING" size="37" maxlength="37" value="<dtml-var msg_erreur missing="">" name="msg_erreur" class="prot" readonly />
<BR><INPUT type="SUBMIT" name="annuaire_prog_touche" value="voir"><INPUT type="SUBMIT" name="annuaire_prog_touche" value="ajouter"><INPUT type="SUBMIT" name="annuaire_prog_touche" value="modifier"><INPUT type="SUBMIT" name="annuaire_prog_touche" value="supprimer"><INPUT type="SUBMIT" name="annuaire_prog_touche" value="lister"></PRE></BODY></FORM><dtml-var vitefait_fin missing="">

cet objet est le code html généré, avec pour chacun des champs renseigné une DTML-VAR

annuaire_prog

<dtml-comment> programme de gestion d'une image créée par zope3270 </dtml-comment>
<dtml-comment> mettre ici les instructions de traitement
ou allez éditer le programme annuaire_prog_trait
</dtml-comment>


<dtml-var annuaire_prog_trait missing="">


<dtml-if annuaire_prog_touche>
<dtml-comment>
annuaire_prog_touche existe quand l'image a été traitée
liste des touches à traiter
</dtml-comment>
<dtml-if "annuaire_prog_touche=='voir'">
<dtml-comment> mettre ici les instructions dans le cas 'voir'
ou allez éditer le programme annuaire_prog_voir
</dtml-comment>


<dtml-var annuaire_prog_voir missing="">
</dtml-if>
<dtml-if "annuaire_prog_touche=='ajouter'">
<dtml-comment> mettre ici les instructions dans le cas 'ajouter'
ou allez éditer le programme annuaire_prog_ajouter
</dtml-comment>


<dtml-var annuaire_prog_ajouter missing="">
</dtml-if>
<dtml-if "annuaire_prog_touche=='modifier'">
<dtml-comment> mettre ici les instructions dans le cas 'modifier'
ou allez éditer le programme annuaire_prog_modifier
</dtml-comment>


<dtml-var annuaire_prog_modifier missing="">
</dtml-if>
<dtml-if "annuaire_prog_touche=='supprimer'">
<dtml-comment> mettre ici les instructions dans le cas 'supprimer'
ou allez éditer le programme annuaire_prog_supprimer
</dtml-comment>


<dtml-var annuaire_prog_supprimer missing="">
</dtml-if>
<dtml-if "annuaire_prog_touche=='lister'">
<dtml-comment> mettre ici les instructions dans le cas 'lister'
ou allez éditer le programme annuaire_prog_lister
</dtml-comment>


<dtml-var annuaire_prog_lister missing="">
</dtml-if>
<dtml-else>
<dtml-comment> mettre ici les instructions d'initialisation
ou allez éditer le programme annuaire_prog_init
</dtml-comment>


<dtml-var annuaire_prog_init missing="">
</dtml-if>
<dtml-comment> et réaffichage de l'image avec les champs remplits si pas 'affiche_pas'</dtml-comment>
<dtml-if affiche_pas>
<dtml-call "REQUEST.set('affiche_pas','')">
<dtml-else>
<dtml-comment> mettre ici les instructions de remplissage
ou allez éditer le programme annuaire_prog_remplit
</dtml-comment>


<dtml-var annuaire_prog_remplit missing="">


<dtml-var vitefait_css><dtml-var annuaire_html>
</dtml-if>

Le programme principal qui va appeler chacun des programmes "touches de fonction".
Ce programme teste si une touche a été tapée, dans ce cas il va tester quelle est la touche et appeler le programme adéquat, sinon il envoie l'image (éventuellement initialisée par "annuaire_prog_init")

Notez que le sous-programme "annuaire_prog_init" n'a pas été créé. Si vous voulez initialiser certains champs lors du premier envoi, allez créer ce programme et pour chaque champs insérer l'instruction :
<dtml-call "REQUEST.set('nom du champs','valeur')>"

annuaire_prog_ajouter, annuaire_prog_modifier, annuaire_prog_supprimer

<dtml-try>
<dtml-var annuaire_prog_ajouter_trait missing="">
<dtml-call annuaire_sql_ajouter>
<dtml-call "REQUEST.set('msg_erreur','ajout réalisé')">
<dtml-var annuaire_prog_ajouter_trait_fin missing="">
<dtml-except>
<dtml-call "REQUEST.set('msg_erreur',error_value)">
<dtml-var annuaire_prog_ajouter_trait_erreur missing="">
</dtml-try>

Ces trois programmes sont très ressemblant, ils appellent la fonction SQL correspondante et en cas d'erreur remplissent la zone message.


annuaire_prog_voir

<dtml-try>
<dtml-var annuaire_prog_voir_trait missing="">
<dtml-call "REQUEST.set('msg_erreur','')">
<dtml-in annuaire_sql_voir>
<dtml-call "REQUEST.set('nom',nom)">
<dtml-call "REQUEST.set('prenom',prenom)">
<dtml-call "REQUEST.set('tel',tel)">
<dtml-else>
<dtml-call "REQUEST.set('msg_erreur','aucune fiche')">
</dtml-in>
<dtml-var annuaire_prog_voir_trait_fin missing="">
<dtml-except>
<dtml-call "REQUEST.set('msg_erreur',error_value)">
<dtml-var annuaire_prog_voir_trait_erreur missing="">
</dtml-try>

Ce programme appelle sa fonction SQL et remplit les champs en conséquence. en cas d'erreur, il remplit la zone message.

annuaire_prog_lister

<dtml-try>
<dtml-var annuaire_prog_lister_trait missing="">
<dtml-call "REQUEST.set('msg_erreur','')">
<dtml-in annuaire_sql_lister size=10 start=query_start>
<dtml-if sequence-start>
<dtml-if previous-sequence>
<a href="<dtml-var URL>?query_start=<dtml-var previous-sequence-start-number>&annuaire_prog_touche=lister">
(<dtml-var previous-sequence-size> résultats précédents)</a>
</dtml-if>
<table cellpadding="2" cellspacing="2" border="1" width="100%">
<tr class="form"><td>nom</td><td>prenom</td><td>tel</td></tr>
</dtml-if>
<dtml-var annuaire_prog_lister_trait_chaque missing="">
<tr class="prot"><td><a href="?annuaire_prog_touche=voir&nom=<dtml-var nom>&prenom=<dtml-var prenom>&telephone=<dtml-var telephone>"><dtml-var nom></a></td><td><dtml-var prenom></td><td><dtml-var tel></td></tr>
<dtml-if sequence-end>
</table>
<dtml-if next-sequence>
<a href="<dtml-var URL>?query_start=<dtml-var next-sequence-start-number>&annuaire_prog_touche=lister">
(<dtml-var next-sequence-size> résultats suivants)</a>
</dtml-if>
</dtml-if>
</dtml-in>
</table>
<dtml-var annuaire_prog_lister_trait_fin missing="">
<dtml-except>
<dtml-call "REQUEST.set('msg_erreur',error_value)">
<dtml-var annuaire_prog_lister_trait_erreur missing="">
</dtml-try>

Ce programme appleele sa méthode SQL et à partir de celle-ci crée un tableau. Il met les noms des champs dans l'entête (sequence-start) et à partir du premier champs de chaque ligne il permet par la fonction href d'appeler le programme voir pour la fiche choisie. L'affichage du tableau se fait par 10 ligne mais il est très simple de changer ce nombre (en gras sur le tableau). Les instructions "if previous-sequence" et if '"next-sequence" servent à créer des liens vers les lignes précédentes ou suivantes si elles existent.

annuaire_prog_rab

Ce progrmme exécute la remise à blanc de l'image. Il est livré pour être appelé par vous mais n'est pas utilisé sinon

<dtml-comment> programme de remise à blanc d'une image créée par zope3270 </dtml-comment>
<dtml-call "REQUEST.set('nom','')">
<dtml-call "REQUEST.set('prenom','')">
<dtml-call "REQUEST.set('telephone','')">
<dtml-call "REQUEST.set('msg_erreur','')">


Différentes méthodes SQL

annuaire_sql_ajouter
insert into annuaire(nom,prenom,telephone) values(<dtml-sqlvar nom type="string">,<dtml-sqlvar prenom type="string">,<dtml-sqlvar telephone type="string">)
annuuaire_sql_cretab
create table annuaire(nom varchar,prenom varchar,telephone varchar)
annuaire_sql_lister
select nom,prenom,telephone from annuaire
<dtml-sqlgroup where>
<dtml-sqltest like_nom column=nom op=like optional type=string>
<dtml-and>
<dtml-sqltest eq_nom column=nom op=eq optional type=string>
<dtml-and>
<dtml-sqltest ne_nom column=nom op=ne optional type=string>
<dtml-and>
<dtml-sqltest gt_nom column=nom op=gt optional type=string>
<dtml-and>
<dtml-sqltest lt_nom column=nom op=lt optional type=string>
<dtml-and>
<dtml-sqltest le_nom column=nom op=le optional type=string>
<dtml-and>
<dtml-sqltest ge_nom column=nom op=ge optional type=string>
<dtml-and>
<dtml-sqltest like_prenom column=prenom op=like optional type=string>
<dtml-and>
<dtml-sqltest eq_prenom column=prenom op=eq optional type=string>
<dtml-and>
<dtml-sqltest ne_prenom column=prenom op=ne optional type=string>
<dtml-and>
<dtml-sqltest gt_prenom column=prenom op=gt optional type=string>
<dtml-and>
<dtml-sqltest lt_prenom column=prenom op=lt optional type=string>
<dtml-and>
<dtml-sqltest le_prenom column=prenom op=le optional type=string>
<dtml-and>
<dtml-sqltest ge_prenom column=prenom op=ge optional type=string>
<dtml-and>
<dtml-sqltest like_telephone column=telephone op=like optional type=string>
<dtml-and>
<dtml-sqltest eq_telephone column=telephone op=eq optional type=string>
<dtml-and>
<dtml-sqltest ne_telephone column=telephone op=ne optional type=string>
<dtml-and>
<dtml-sqltest gt_telephone column=telephone op=gt optional type=string>
<dtml-and>
<dtml-sqltest lt_telephone column=telephone op=lt optional type=string>
<dtml-and>
<dtml-sqltest le_telephone column=telephone op=le optional type=string>
<dtml-and>
<dtml-sqltest ge_telephone column=telephone op=ge optional type=string>
</dtml-sqlgroup>
annuaire_sql_modifier
update annuaire set nom=<dtml-sqlvar nom type="string">,prenom=<dtml-sqlvar prenom type="string">,telephone=<dtml-sqlvar telephone type="string"> where(nom=<dtml-sqlvar nom type="string">')
annuaire_sql_supprimer
delete from annuaire where(nom=<dtml-sqlvar nom type="string">')
annuaire_sql_voir
select nom,prenom,telephone from annuaire where(nom='<dtml-sqlvar nom type="string">')

Vous pouvez remarquer que les méthodes utilisent "nom" comme clé.

Méthode SQL_lister

Cette méthode liste par défaut toute la table mais il est possible de lui rajouter un ou plusieurs critères de sélection. Ceci se fait en général au niveau du point d'entrée annuaire_prog_lister_trait. Exemple pour ajouter un sélection sur "nom contient 'ab'" il suffit de créer un objet dtml method nommé annuaire_prog_lister_trait et d'y mettre une instruction :

<dtml-call "REQUEST.set('like_nom','%ab%')">

Mais vous pouvez aussi créer vos propre recherches, exemple :
Vous ajouter un bouton recherche.
vous ajoutez une dtml method nommée annuaire_prog_recherche qui contient

<dtml-call "REQUEST.set('like_nom','%'+nom+'%')">
<dtml-var annuaire_prog_lister>

et vous aurez une recherche sur les noms contenant ce que vous avez tapé dans la zone nom de l'image.

Les critères sont notés sous la forme like_column (SQL like), eq_column (=) , ne_column(non =), gt_column(>), ge_column(>=), lt_column(<), le_column(<=). exemples: ge_tel ephone, gt_nom ... (NB : like n'est pas utilisable en Gadfly).

types de champs

Par défaut les champs SQL sont de type varchar(255), néanmoins il est possible de suffixer le champs par une lettre pour avoir un autre type. Le caractère $ donnera un champ de type integer (ex: numero$), un £ donnera un champ de type float (ex: montant£), un / donnera un champ de type date (ex: dnaiss/ ce type n'est pas supporté sur Gadfly), un @ donnera un champs de type blob (ce type n'est pas supporté sur Gadfly) un # permettra au champs de ne pas être repris dans les ordres SQL(ex : djour#). Le suffixe est juste une instruction et ne servira pas à former le nom du champ.

Variables spéciales

En plus de la variable msg_erreur précédemment décrite, une variable nommée nomimage_affiche_pas permet de ne pas afficher le formulaire nommé nomimage lors du prochain passage (une fois uniquement). Il suffit de mettre un ordre <dtml-var "REQUEST.set('nomimage_affiche_pas','x')> pour que le prochain affichage formulaire ne soit pas fait. Pour remplir le message d'erreur il suffit de mettre <dtml-var "REQUEST.set('msg_erreur','mon message')>. Vous avez déjà pu le voir, toutes les communication entre objets se font avec REQUEST.

Début et fin d'image

Les objets vitefait_debut et vitefait_fin seront incorporés respectivement en début ou en fin d'image si ils existent.

Feuille de style

la feuille de style vitefait_css sera utilisée. elle comprend 3 styles, un style form pour le fond d'image, un stype champs pour les champs non protégés et un style prot pour les champs protégés, un style bouton pour les boutons.

boutons radio

Cas des boutons radios: contrairement à toutes les autres zones les boutons radios représentent des choix exclusifs sur un seul champs: exemple

nom : $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

prenom : $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

sexe : ^ homme ^ femme

Cette image aura 4 champs nommés respectivement nom, prenom, sexe, sexe. Le champs bouton radio aura pour réponse le numéro du choix coché (. Dans notre exemple, homme est le 1er choix de sexe champs et femme le 2ème , donc sexe contiendra 1 pour homme et 2 pour femme.

boutons case à cocher

La gestion de ces types de champs est proche de la gestion des boutons radios, à la différence qu'ils peuvent avoir des choix multiples. Si le premier choix est coché le champs contiendra 1, si le premier et le 2ème choix sont cochés le champs contiendra la liste [1,2]

Points d'entrée


Le code généré (comme vous pouvez le voir ci-dessus) comporte un nombre important de points d'entrée. Pour utiliser un point d'entrée il suffit de générer un objet ayant son nom.

au niveau du programme général

un premier point d'entrée nomimage_prog_trait permet d'effectuer un traitement avant les tests de touches de fonction.
chaque touche de fonction a un point d'entrée nomimage_prog_nomtouche bien sur les objets correspondant aux fonctions générées par le mode SQL (nomimage_prog_voir, ...) seront automatiquement créés avec l'option "générer gestion fiches".

un point d'entrée nomimage_prog_init permet d'effectuer un traitement avant le premier envoi d'image

un point d'entrée nomimage_prog_remplit permet d'effectuer un traitement avant chaque envoi d'image

Sur les programmes voir, ajouter, modifier, supprimer, lister

un point d'entrée nomimage_prog_touche_trait et un point d'entréenomimage_prog_touche_trait_fin l'un étant exécuté avant et l'autre après l'appel de l'ordre SQL. Un point d'entrée nomimage_prog_touche_trait_erreurexécuté en cas d'erreur SQL.

Sur le programmes lister

Un point d'entrée nomimage_prog_lister_trait_chaque appelé pour chaque élément listé.

exemple

pour traiter la zone sexe précédemment décrite un simple script pourra affecter les valeurs à homme ou femmme.
ce script sera appelé dans nomimage_prog_ajouter_trait
<dtml-if sexe>
<dtml-if "sexe=='1'">
<dtml-call "REQUEST.set('sexe','homme')">
<dtml-else>
<dtml-call "REQUEST.set('sexe','femme')">
</dtml-if>
<dtml-else>
<dtml-raise 'erreur'>veuillez-choisir le sexe</dtml-raise>
</dtml-if>
Dans nomimage_prog_modifier_trait
<dtml-var nomimage_prog_ajouter_trait
pour appeler le même script.

le dtml-raise sert à passer au dessus de l'ordre sql si le sexe n'est pas choisi en renvoyant le message d'erreur 'veuillez choisir le sexe'

et inversement dans nomimage_prog_remplit
<dtml-if sexe>
<dtml-if "sexe=='homme'">
<dtml-call "REQUEST.set('sexe','1')">
</dtml-if>
<dtml-if "sexe=='femme'">
<dtml-call "REQUEST.set('sexe','2')">
</dtml-if>
</dtml-if>

Nouvelle génération

La modification n'a pas été implantée dans vitefait. Pour modifier une image, il suffit de l'éditer sous Zope. Dans les propriétés de l'image on peut retrouver toutes les infos choisies lors de la création par vitefait. mode_HTML contient la lettre "o" si la gestion html a été choisie. mode_SQL contient la lettre "o" si la gestion des fiches a été choisie. touches contient les touches choisies et champs le nom des champs. Ces propriétées peuvent être changées, comme le dessin d'image, pour refaire une génération il faut supprimer tous les objets générés automatiquement (hormis l'image bien sur - ceci se fait par le bouton supprimer le code généré) et dans vitefait demander générer le code en ayant rempli uniquement la zone image.


Exemple d'enchainement

Nous avons vu jusqu'à présent des cas simples, voyons un cas un peu plus compliqué qui nécessitera une modification de certains sources générés.
Dans notre exemple, nous allons gérer un patient (numero, nom, prenom, date de naissance, adresse) qui peut effectuer plusieurs séjours (numero, date d'entrée, motif d'entrée) dans un hôpital. Dans notre cas la clé du patient est le numéro et la clé du séjour est (numéro+date entrée)

Le programme patient :

patient

numero $$$$$$

nom $$$$$$$$$$$$$$$$$$$$$$$$$

prenom $$$$$$$$$$$$$$$$$$$$$$$$$

né le $$$$$$$$$$

adresse

rue $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

code postal $$$$$

ville $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

avec dans touches :voir,ajouter,modifier,lister,sejour
et dans champs: numero$,nom,prenom,dnais/,rue,codepos$,ville,msg_erreur

le programme séjour:

<b>SEJOUR</b>

patient : §§§§§§§ §§§§§§§§§§§§§§§§§§§§§§§§§ §§§§§§§§§§§§§§§§§§§§§§§§§

date d'entrée $$$$$$$$$$

entré pour ^ visite

^ hospitalisation

^ urgence

^ autre

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

avec dans touches : voir,ajouter,modifier,supprimer,lister,patient
et dans champs: numero$,nom#,prenom#,datent/,motif,motif,motif,motif,msg_erreur
les zones nom et prenom sont suffixées avec un dièse, elles viennent de l'image précédente et nom de la table SQL.

Notez que les dates ont été suffixées avec un '/', l'appli générée ne fonctionnera pas avec Gadfly qui ne supporte pas le format date. Il faut donc créer une connexion à MySQL (ou toute autre base) ayant pour nom vitefait_base.


modification du code SQL de sejour

le code SQL généré considère que la clé est numéro, il va falloir indiquer que la clé est formée par numéro et datent.
Les modifications de code sont en gras.

sejour_sql_lister
select numero,datent,motif from sejour where(numero=<dtml-sqlvar numero type=int>)

sejour_sql_modifier
update sejour set numero=<dtml-sqlvar numero type="int">,datent=<dtml-sqlvar datent type="string">,motif=<dtml-sqlvar motif type="string"> where(numero=<dtml-sqlvar numero type="int"> and datent=<dtml-sqlvar datent type="string">)

sejour_sql_supprimer
delete from sejour where(numero=<dtml-sqlvar numero type=int> and datent=<dtml-sqlvar datent type="string">)

sejour_sql_voir
select numero,datent,motif from sejour where(numero=<dtml-sqlvar numero type="int"> and datent=<dtml-sqlvar datent type="string">)

objet patient_prog_sejour

<dtml-var sejour_prog>
<dtml-call "REQUEST.set('patient_affiche_pas','o')">

Cet objet se contente d'appeler l'objet séjour et de positionner la variable afiiche_pas afin de ne pas afficher l'image patien

objet sejour_prog_patient

<dtml-var patient_prog>
<dtml-call "REQUEST.set('sejour_affiche_pas','o')">

Equivalent au précédent.

Voilà c'est tout notre enchainement est fonctionnel....

Champ de type texte large

Pour insérer ce type de champ il suffit de placer entre crochets le nombre de lignes (rows) et le nombre de colonnes(cols) dans le dessin d'image.
exemple:

nom du texte $$$$$$$$

texte [ rows=50 cols=80 ]

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

Si votre texte doit être stocké dans une base sql, il faut suffixer le nom que vous lui donnez par un @, dans ce cas le type de champs SQL sera blob (il faut que ce type soit supporté par votre base SQL). Dans notre exemple, le nom des champs peut être : nom, texte@, msg_erreur

champs de type menu déroulant


Ces champs sont gérés par vitefait mais c'est à vous de mettre les remplir, exemple :
nom $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

texte [rows=10 cols=50]


type de texte ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

le champs supplémentaire "type de texte" s'appelle typetext

Il faut créer un objet s'appelant typetext_options le remplira avec des instructions html "option".
<dtml-if typtext>
<dtml-else>
<dtml-call "REQUEST.set('typtext','note')">
</dtml-if>
<dtml-in "('document','note','info')" prefix="val">
<dtml-if "val_item==typtext">
<option SELECTED>
<dtml-else>
<option>
</dtml-if>
<dtml-var val_item>
</option>
</dtml-in>

Dans cet exemple le choix est initialisé à 'note' si la varible typtext n'existe pas, ensuite une simple boucle dtml-in va afficher chaque option. Si la valeur de l'option est égale à la valeur typtext, le mot selected est ajouté. Dans notre cas j'ai prix une liste de mot mais bien sur le dtml-in peut faire appel à un ordre SQL ou autre.