RPG & PRTF / DSPF
Le langage DDS a été utilisé pour concevoir la base de données (aujourd'hui IBM préconise plutôt SQL)
Il reste indispensable pour concevoir des états (PRTF) et des écrans (DSPF)
Rappel, chaque ligne est découpée comme suit :
1 1 223 33333 4 6 7 9 890 45678 5 A..........T.NOM+++++++RLG+++TD+U......FONCTION+++++++++++++++++++++++ |
PRTF
Un PRTF est composé de formats
- représente une série de lignes à imprimer en même temps
- C'est l'unité de sortie pour le pgm
- Il est composé
- de mots-clés niveau format (Saut, par ex.)
- de constantes
- de variables (les seules infos connues du PGM) fournies lors du WRITE
DEFINITION D'UN FORMAT A NxxNxxNxxR Format----R lg S dB DébMot-clé A R TITRE TEXT('Titre de l'état') A SKIPB(2)
|
Saut et espacement
- SKIPB saut (déplacement absolu) à un N° de ligne avant d'écrire le format
(provoque un saut de page si besoin)
- SKIPA saut après avoir écrit le format à un N° de ligne
- SPACEA, déplacement (relatif) de n lignes avant d'écrire le format
- SPACEB, déplacement de n lignes après avoir écrit le format
Dans un PRTF, peuvent être conditionnés :
- les constantes
- les variables
- les mots-clés (soulignement, pr ex.)
Les 99 conditions possibles sont les mêmes que celles utilisées par le langage RPG (indicateurs)
et sont transmises du pgm vers le PRTF à chaque WRITE
DEFINITION D'UNE CONSTANTE A NxxNxxNxxR Format----R lg S dB DébMot-clé A xx'constante à imprimer' |
DEFINITION D'UNE VARIABLE A NxxNxxNxxR Format----R lg S dB DébMot-clé A MAZONE R xx *ou A MAZONE 4 0 xx A
|
xx est la position (n° colonne) dans la ligne en cours et peut être noté +xx (décalage par rapport à l'info précédente)
- MOTS-CLÉS NIVEAU ZONE :
- Variable numérique : EDTCDE(x)
EDTCDE
------ -------------------------------------------------------------------- ! Impression ! Impression !! Pas ! Symbole! Symbole ! X Ajout du ! ! des ! montants !! de ! CR ! - ! signe + ! ! points ! nuls !! signe ! ! à D ! à G ! Y Impression !
!--------------------------------------------------!-------! d'une date ! ! OUI ! OUI !! 1 ! A ! J ! N ! Z Suppression! ! OUI ! NON !! 2 ! B ! K ! O ! des zeros ! ! NON ! OUI !! 3 ! C ! L ! P ! et enleve ! ! NON ! NON !! 4 ! D ! M ! Q ! le signe ! --------------------------------------------------------------------------- |
- Soulignement : UNDERLINE
- Caractères gras : HIGHLIGHT
- Espacement : SPACEA,SPACEB
- Saut : SKIPA,SKIPB
Les ordres d'espace et de saut, associés à une zone permettent de changer de ligne en cours de format (format multi-ligne) |
- MOTS-CLÉS NIVEAU ZONE : (imprimantes compatibles IPDS)
- Choix de la densité :
- CPI(xx) [ 10 ou 15 ]
- LPI(x) [ 6 ou 8 ]
- Choix de la police de car. : FONT( )
- Choix d'un tiroir : DRAWER( )
- Edition code barre : BARCODE( )
- MOTS-CLÉS PARTICULIERS :
- Impression de la date/heure : DATE/TIME
- Impression du n° de page : PAGNBR
- MOTS-CLÉS AFPDS
- Positionnement dans la page : POSITION(x1 y1)
- définition d'une ligne : LINE(x1 y1 orientation)
- définition d'une boite : BOX(x1 y1 x2 y2)
- définition d'une image : PAGSEG(x1 y1 nom-segment-de-page)
- définition d'un fond de page: OVERLAY(nom-fond-de-page)
Exemple de PRTF (Liste du personnel) :
A REF(REPERTP1) * A R TITRE TEXT('FORMAT TITRE') A SKIPB(02) A 5'NOM du PGM' HIGHLIGHT A 15'Le :' A + 2DATE EDTCDE(Y) A 50'LISTE DU PERSONNEL' A 80'Page :' A + 2PAGNBR EDTCDE(Z) A SPACEA(2) A 10'Matricule' A 20'Nom' A 45'Prénom' A 70'Situation' A 100'Salaire' A SPACEA(2)
* A R LIGNE TEXT('1 EMPLOYE') A SPACEA(1) A MATRIC R 9 A NOM R 19 A PRENOM R 44 * information conditionnée * (si 50 est faux) A N50 LIBSIT 20 69 * (si 50 est vrai) A 50 69' SITUATION EN ERREUR' A SALBRT R 99EDTCDE(3) A R TOTAL TEXT('TOTAL ETAT') A SPACEB(3) A 50'Nb d''employés' A NBEMP 60 + 3EDTCDE(Z) |
Report Designer.
RDI contient un outil permettant de concevoir des états (PRTF) en mode visuel : Report Designer.
Il fonctionne sur les principes suivant :
- Travail sur des enregistrements (format) ou des groupes (rapports)
- palette d'outils à droite afin de glisser/déposer les éléments sur la feuille de travail
- fenêtre propriété (par défaut en bas, à gauche) pour définir le détail d'un élément
, ici sur un format.
Vous devez travailler à partir de la palette en glisser/déposer.
Par exemple pour définir une nouvelle constante
Quand vous lâchez la souris, la constante est créée
Saisissez alors votre texte
Le processus est le même pour une variable
Si vous faites référence à la base de données (sur le fichier, Afficher dans une table/Zones), un drag & drop est possible
Indiquez ensuite les propriétés de cette nouvelle zone :
- son nom
- son type
- les mots-clés associés
|
|
ici, pour une zone référencée, la longueur de substitution |
|
la référence elle même |
|
Les attributs Gras et soulignement |
|
Les couleurs |
|
Dans tous les cas :
Les indicateurs |
|
Liste des mots-clés |
|
Le bouton "Accéder à la page" permet d'aller à l'onglet ou se trouve ce mot-clé.
Un onglet Source (en bas de la feuille de travail) permet de voir et d'éditer directement au niveau du source SDD.
La compilation devient alors possible et se déroule comme avec RDi en règle générale.
Utilisation en RPG
En GAP III
En RPG-IV
En format libre
NB : le RPG "allume" l'indicateur associé à OFLIND pour vous signaler la fin de page.
C'est à vous de "l'éteindre" après avoir changé de page -> format avec SKIP(n° de ligne < à la ligne actuelle)
DSPF
Un DSPF est composé de formats
- représente une série de lignes entières à afficher en même temps
- un écran (24x80 ou 27x132) est composé de un ou plusieurs formats
- chaque format est composé de lignes entières (80 ou 132 colonnes)
- C'est l'unité d'entrée/sortie pour le pgm
- Sans mot-clé, l'écran est remis à blanc à l'affichage
- Il est composé
- de mots-clés niveau format (non effacement[recouvrement], par ex.)
- de constantes
- de messages (constantes spéciales, conditionnées, affichées dernière ligne de l'écran)
- de variables (les seules infos connues du PGM)
- fournies lors du WRITE
- reçues lors du READ.
- les variables peuvent être
- en Entrée (I) : affichées vierges, elles transitent de l'écran vers le pgm
- en Sortie (O) : non modifiables, elles transitent du pgm vers l'écran
- les deux (B) : elles sont affichées avec un contenu (modifiable) puis retournent vers le pgm.
- cachées (H) : elles ne sont pas affichées
Là aussi, les 99 indicateurs sont transmis à chaque entrée/sortie. Ils sont le moyen :
- d'apporter une condition
- la quantité s'affiche si...
- la prix s'affiche en rouge, si ...
- le message d'erreur s'affiche si ...
- de recevoir une information sur une action utilisateur
- a-t-il utilisé F3 ?
- a-t-il modifié la famille ?
Les terminaux historiques (5250) possédaient une petite unité arithmétique et logique permettant qq traitements, mais pas de mémoire vidéo.
Un octet était alors occupé physiquement devant chaque information, nommé l'attribut d'affichage :
- il occupe une place (deux zones ne peuvent pas se toucher)
- il contient les attributs de représentation (souligné, clignotant, etc...)
- plus un BIT, le MDT indiquant si la zone a été saisie (au clavier, même avec des espaces)
- Les zones en entrée ne sont transmises et vérifiées QUE SI ELLES SONT "MDT ON".
Format de DSPF
A NxxNxxNxxR Format----R lg S dB LiCoMot-clé * A R TITRE TEXT('FORMAT TITRE') A OVERLAY A ERASE(autre-format) A CA03(03) A CF11(11) |
Soit un format "Jaune" affiché à l'écran
si vous cherchez à afficher "Orange"
Sans Recouvrement |
Avec Recouvrement |
|
|
par contre si les formats se chevauchent, le plus ancien est effacé systèmatiquement
|
--> |
|
- OVERLAY
- Recouvrement (pas d'effacement systématique)
- Ceci dit, les formats recouverts partiellement, seront effacés (entièrement)
- ERASE
- couplé avec OVERLAY, effacement d'un format qui, sinon, serait resté à l'écran
- Touches de fonction
- Sans indication particulière seule la touche "Enter" est admise et provoque un dialogue avec le serveur
- CAxx(xx)
- Définition d'une touche de fonction (01 à 24) transmise seule au pgm (l'info se suffit à elle même)
- CFyy(yy)
- Définition d'une touche de fonction transmises au pgm en plus du reste de la saisie utilisateur
- ROLLUP
- ROLLDOWN
- WINDOW
- Format de type fenêtre (s'incruste dans l'écran actuel, comme les écrans d'aide)
nous avons aussi des mots-clés pour faire des boutons radio et des cases à cocher, non traités dans ce cours
- paramètres :
- Li Co H L (position de la fenêtre à créer)
- ligne /colonne de l'angle supérieur gauche (ou *DFT = à coté du curseur)
- Hauteur (nb de lignes dans la fenêtre)
- sans *NOMSGLIN , la dernière ligne est réservée aux messages d'erreur
- Largeur (nb de colonnes utiles dans la fenêtre)
- Un-NOM
- Permet d'afficher les données dans un fenêtre déjà présente à l'écran
- WDWBORDER
- WDWTITLE
- RMVWDW
- Enlève les fenêtres déjà affichées (sinon, elles se superposent)
Définition d'une zone
A NxxNxxNxxR Format----R lg T dB LiCoMot-clé * A R TITRE TEXT('FORMAT TITRE') A 1 2'Nom-Du-Pgm' A NUMERO 6 Y 0I 512EDTCDE(3) A 50 ERRMSG('Numéro non trouvé' 50) |
Types de zones
- X ALPHABETIQUE SEUL
- A CLAVIER EN POSITION BASSE (VALEUR PAR DEFAUT POUR L'ALPHA)
- N CLAVIER EN POSITION HAUTE
- S NUMERIQUE SIGNE, 1 CARACTERE DE PLUS POUR LE SIGNE
(VALEUR PAR DEFAUT POUR LE NUMERIQUE NON EDITE)
- Y NUMERIQUE SEUL, SIGNE PRIS EN CHARGE PAR LE CODE D'EDITION.
(VALEUR PAR DEFAUT POUR LE NUMERIQUE EDITE)
- W KATAKANA (japon)
- I FRAPPE INTERDITE (entrée par lecteur code barre, par ex)
Mots-clé niveau zone :
- COMP(NE val)
- RANGE(val1 val2)
- VALUES(val1 val2 val3 val4 ...
- EDTCDE
- EDTWRD
- DATFMT
- *JOB, affichage dans le format du JOB, transmis *ISO au pgm.
- TIMFMT
- ERRMSG('texte du message' xx)
- Conditionné (impératif !)
- si vous remettez l'indicateur à droite, sera retourné OFF
- DSPATR attribut d'affichage
- BL - clignotement.
- CS - séparateur de colonne.
- HI - double brillance.
- ND - non affichable (mot de passe, par ex.).
- PC - position du curseur. (sinon, la première zone prend le curseur)
- RI - inversion d'image.
- UL - soulignement (automatique sur une zone de saisie)
- MDT- force la zone à être considérée modifiée (force les contrôles)
- CHECK : contrôle de la saisie
- AB - Autorise les blancs si CHECK(VN)
- ME - Un caractère est obligatoire.
- MF - zone devant être entièrement remplie
- VN - Nom valide.
- M10/M11 - contrôle Modulo 10, modulo 11
- ER - Entrée automatique.
- FE - La touche "Fin de zone" est obligatoire.
- LC - Autorise la saisie des minuscules. Equivalent à LOWER.
- RB - Cadrage à droite remplissage par des blancs.
- RZ - Cadrage à droite remplissage par des zéros
- COLOR
MOTS-CLÉS PARTICULIERS :
- Affichage de la date/heure : DATE/TIME
- Affichage de l'utilisateur : USER
- Affichage du nom de système : SYSNAME
Remarques importantes sur le fonctionnement du gestionnaire d'écran.
• ON DEFINIT L'EMPLACEMENT D'UNE ZONE OU D'UNE CONSTANTE SUR L'ECRAN
EN PRECISANT LA LIGNE ET LA POSITION OU S'AFFICHERA LE 1er CARACTERE
(pas l'attribut)
• 2 ZONES CONSECUTIVES A L'ECRAN DOIVENT ETRE SEPAREES PAR AU MOINS un ESPACE
• ON DOIT SPECIFIER TYPE Y POUR LES ZONES NUMERIQUES SI L'ON
NE VEUT PAS QUE LE SIGNE OCCUPE UNE POSITION.
• LE FORMAT OCCUPE LA TOTALITE DE L'ESPACE ECRAN SITUE ENTRE LA LIGNE
LA PLUS HAUTE ET LA LIGNE LA PLUS BASSE (important pour les recouvrements)
•LE CHEVAUCHEMENT DE DEUX INFOS (constante ou variable aux mêmes positions)
EST ACCEPTE PAR LE COMPILATEUR EN CAS DE CONDITIONNEMENT UNIQUEMENT.
|
Screen Designer.
RDI contient un outil permettant de concevoir des écrans (DSPF) en mode visuel : Screen Designer.
Il a un mode de fonctionnement proche de Report Designer :
A l'ouverture, un nouvel espace de travail est proposé, propre à Screen Designer.
Pour créer un format, dans la zone de conception, ouvrir la palette :
Contenu de la palette :
|
Contrôles de type format écran |
|
format d'écran standard |
|
Format d'écran de type sous-fichier (vus plus loin dans ce cours) |
Cliquer sur et cliquer
ensuite sur la zone de conception :
Un format nommé RECORD1 est
créé.
Le nom du format peut être modifié en accédant à la vue propriétés.
Pensez à préciser les touches de fonction autorisées (CA ou CF)
ici CA03(03), Attention le bouton Indicateurs... sert à conditionner
Dans Mots-clés, ajoutez :
- OVERLAY, s'il le faut
- ERASE, quand nécessaire
Ensuite, en utilisant la palette, nous allons ajouter des éléments à notre format.
Voici le contenu de la palette pour un écran :
|
|
|
Zone multi ligne, multi colonne (CNTFLD) |
|
Zone de type date |
|
Zone (caractère ou numérique) |
|
Zone de type heure |
|
Zone de type horodatage |
|
|
|
Date du jour : DATE |
|
Message (MSGCON, rare) |
|
Nom du système : SYSNAME |
|
Constante texte, simple constante |
|
Heure en cours : TIME |
|
Nom de l'utilisateur en cours : USER |
- Par exemple, pour ajouter une constante système, sélectionnez dans la palette, par exemple la date, , et positionner-là dans
l'écran.
Ce qui donne :
Aller dans les propriétés pour affiner la constante. Ne pas oublier de garder
la constante sélectionnée sinon les propriétés ne seront pas les bonnes.
- Pour ajouter du texte, agir comme précédemment mais avec le contrôle.
Une petite variante toutefois. Après avoir cliqué sur la zone de conception,
la constante est en mode modification, c'est-à-dire que du texte peut être
saisie.
- Enfin, pour une variable, sélectionner une zone dans la palette, par exemple ,et positionner-là dans
l'écran.
Ce qui donne :
ou
Aller dans les propriétés pour donner un nom à la zone. Ne pas oublier de
garder la zone sélectionnée sinon les propriétés ne seront pas les bonnes.
Pour faire référence à une zone de la base de données, utilisez l'onglet approprié :
Ou bien faites du "Drag & Drop" depuis la vue table affichant une liste de zones
Onglet suivant, gestion des attributs (DSPATR)
Enfin l'onglet Mot-clé, permet de gérer directement par mot-clé.
Certains mots-clés font référence à l'un des onglets précédents.
Ils activent, alors le bouton "Accéder à la page"
La vue structure permet de choisir l'élément actif, particulièrement pour activer les mots-clés niveau fichier (DSPSIZ, taille de l'écran) par exemple
En cliquant sur l'onglet Source, l'option de compilation devient accessible comme avec Report Designer.
Utilisation en RPG
En GAP III
En RPG-IV
En format libre
NB :Nous réalisons souvent des opérations WRITE puis READ, l'ordre EXFMT enchaine les 2 opérations.
Sous fichiers
Il s'agit de pouvoir charger en mémoire un nombre élevé de lignes (SFL1=sous fichier en mémoire),
qui s'affiche ensuite à l'écran par page, via le format de contrôle (CTL1)
Exemple
Source
Le format d'enregistrement (SFL1) représente une ligne en mémoire et à l'écran
A R SFL1 SFL
A RAISOC 45 O 6 9
A DEPCLI 2 O 6 56
A FIELD L O 6 62 |
les positions (ligne/colonne) sont les position d'affichage de la première ligne
à l'écran.
Le format de contrôle (CTL1), contrôle l'affichage du sous fichier, il peut lui même contenir :
- des mots-clés (CA/CF, OVERLAY, ERASE)
- des constantes
qui s'affichent en même temps, au dessus (entête) ou au dessous (pied de page), mais pas les deux.
Il fait le lien avec le sous fichier (SFLCTL) et définit les caractéristiques d'affichage
A R CTL1 SFLCTL(SFL1) A SFLSIZ(0011) A SFLPAG(0010) A 30 SFLDSPCTL A 30 SFLDSP A 30 SFLEND(*SCRBAR) A N30 SLFCLR
|
- SFLPAG
- nombre de lignes à afficher en même temps (une page)
- SFLSIZ
- taille initiale du sous fichier, doit être > à SFLPAG pour pouvoir être incrémenté automatiquement
- SFLCLR
- Mise à blanc du sous fichier s'il est vrai lors d'un WRITE
(quand on change de critère, qu'on doit charger une nouvelle liste en mémoire)
- SFLDSP
- Affichage du sous fichier (SFL1) : Attention : impossible d'afficher un sous fichier vide
- SFLDSPCTL
- Affichage du format de contrôle (CTL1)
- SFLEND
- Signaler la fin de sous fichier à l'écran
- sans paramètre : + sur toutes les pages sauf la dernière
- *MORE : A suivre sur toutes les pages, Fin. sur la dernière
- *SRCBAR : affichage d'un ascenseur
- Les quatre derniers mots-clés doivent être conditionnés, remarquez sur l'exemple
A R CTL1 SFLCTL(SFL1) A 30 SFLDSPCTL A 30 SFLDSP A 30 SFLEND(*SCRBAR) A N30 SLFCLR |
- 30 Affichage du sous fichier, de l'entête, de A suivre... ou de l'ascenseur
- N30 SFLCLR (mise à blanc, rien ne se passe à l'écran)
Sous RDI, glissez un enregistrement de type sous fichier
Affichez les propriétés du format de contrôle (CTL1)
L'onglet "Contrôle de sous-fichier" contient
- SFLSIZ
- SFLPAG
- SFLDSP (pensez à conditionner)
- SFLDSPCTL (cochez et conditionnez)
L'onglet "mot-clé de commande" contient
- SFLEND (cochez, indiquez votre style d'affichage et conditionnez)
- SFLCLR (cochez et conditionnez)
Utilisation en RPG
Il existe une autre manière de gérer les sous-fichier, afin de répartir la charge de constitution de la liste en mémoire
Chargement Page à Page
A R SFL1 SFL A RAISOC 45 O 6 9
A DEPCLI 2 O 6 56
A FIELD L O 6 62 * * A R CTL1 SFLCTL(SFL1) A SFLSIZ(0011) A SFLPAG(0010) A 30 SFLDSP A 30 SFLDSPCTL A N30 SFLCLR * * 32 = fin de sous fichier (je n'ai plus rien à montrer) A 32 SFLEND(*SCRBAR) A N32 ROLLUP(80) A CA12(12) A 4 5'ENTETE DU SOUS-FICHIER' * LIGNE = afficher la page qui contient cette ligne A LIGNE 4S 0H SFLRCDNBR |
- chargement d'une page (valeur de SFLPAG)
- affichage
- si ROLLUP (il faut intercepter la touche de fonction, ici indicateur 80)
- chargement d'une page
- affichage de cette page
(il faut donc avoir le choix de la page à afficher=SFLRCDNBR)
- dernier point, la gestion du SFLEND (à Suivre ... ou Fin.)
doit être gérée en partie par le programme (indicateur différent)
Gestion du Rollup (page suivante)
Chargement d'une page
Vous remarquerez
- For i=1 to 10, directement lié à la valeur de SFLPAG
- l'indicateur 32 lié à %EOF.
- ainsi que le fait que l'on réalise une lecture de plus que d'écriture
(READE en fin de boucle après le WRITE SFL1)
, afin d'anticiper sur la
prochaine page.
==> l'indication "à Suivre..." est alors significative.
© Volubis