|
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:
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 !
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.
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.
|