, Mettre des contrôles dans un DSPF

Sur un formulaire de saisie, on va différencier 3 type de contrôles

1) de valeur

exemple doit contenir 1, 2, 3

2) de cohérence

exemple date de fin > date de debut

3) applicatifs

qui nécessite un accès à une ressource externe

exemple

controler que le client existe

Sur une application de type web, on a un formulaire de saisie et les contrôles 1 et 2 sont faits par javascript
et la partie 3 est faite applicativement

Si on considère maintenant un applicatif 5250, on peut faire une grande partie des contrôles 1 directement dans l’écran ,
la partie 2 et 3 seront faites applicativement

Nous allons prendre un DSPF et faire des controles directement dedans

l’écran DSPF


     A*%%TS  SD  20241104  105842  PLB         REL-V7R4M0  5770-WDS
     A*%%EC
     A                                      DSPSIZ(24 80 *DS3)
     A                                      CA03(03)
     A          R FMT01
     A*%%TS  SD  20241104  105842  PLB         REL-V7R4M0  5770-WDS
     A                                  4 29'Ecran de saisie'
     A                                  8 15'Code   :'
     A            CODE           4A  B  8 24DSPATR(MDT)
     A N45                                  DFTVAL('001')
     A                                      CHECK(MF)
     A                                      RANGE('0001' '9999')
     A                                  8 30'Zone remplie obligatoire'
     A                                 11 15'Nom    :'
     A            NOM           30A  B 11 24CHECK(LC)
     A                                      DSPATR(MDT)
     A                                      COMP(NE ' ')
     A                                 12 30'Zone obligatoire '
     A                                 13 30'Minuscules autorisées'
     A                                 15 15'Option :'
     A            OPTION         1N  B 15 24VALUES('1' '2' '4')
     A N45                                  DFTVAL('2')
     A                                 15 30'1 Créer'
     A                                 16 30'2 Modifier'
     A                                 17 30'4 Supprimer'
     A                                 22  5'F3=Exit'
     A                                  9 30'Chiffre uniquement'

Nous allons contrôler que
la zone CODE est remplie
la zone NOM n’est pas vide
la zone OPTION doit prendre comme valeur 1, 2 et 4

On dispose des contrôles
de saisie souvent des CHECK
de validité, COMP, RANGE, VALUE

Pour que le contrôle soit déclenché, la zone devra être modifiée ou on forcera le DSPATR(MDT), pour faire comme si c’était le cas.

Remarque
Les contrôles de saisie sont effectués dans tous les cas (CFXX, ENTER, CAXX)
Les contrôles de validité sont effectués uniquement dans cas (CFXX, ENTER)

Le programme RPGLE pour tester

**free
ctl-opt DFTACTGRP(*NO) ;
dcl-f Controle WORKSTN ;
  dou *in03 ;
    exfmt fmt01 ;
    if not *in03;
    endif ;
  // Contrôle des zones
   *in45 = *on ;
  enddo ;
  *inlr = *on ;

Remarque :
Dans cet exemple, on utilisera l’indicateur 45 pour ne plus affecter de valeur par défaut

Vous pouvez ainsi simplifier votre application d’une grande partie des contrôles basics

Vous pouvez indiquer , un message différent par le mot clé CHCKMSGID()

, , Utilisez de l’Unicode en 5250

Unicode permet d’encoder des caractères complexes sous deux octets

Un site pour avoir des informations supplémentaires

https://fr.wikipedia.org/wiki/Unicode

Vous voulez afficher des caractères Unicode dans votre session 5250,

parce que vous travaillez avec la chine par exemple.

Voici un petit exemple pour vous indiquer les grandes étapes

Rappel:

Pour avoir des caractères Unicode, vos zones doivent être déclarées comme ceci

NOM VARGRAPHIC(30) CCSID 1200 NOT NULL

Vous pouvez insérer des caractères dans votre table par SQL par exemple

Exemple chinois et russe

INSERT INTO NOMTBL (NOM) VALUES(
(‘张’), (‘Иванов’) )

Dans votre DSPF, vous pouvez déclarer zones par référence

niveau fichier
A REF(*LIBL/NOMTBL)

niveau zone
A NOM R O 6 4REFFLD(PERSONNES/NOM *LIBL/NOMTBL)

Vous obtiendrez le résultat suivant ;

Vous devrez également indiquer sur la commande de compile de l’écran (CRTDSPF),

le paramètre IGCDTA(*YES)

Votre session ACS devra supporté l’Unicode comme ceci

Votre programme en RPGLE par exemple n’aura aucune différence par rapport à des caractères latins

Voici le résultat d’un affichage

Remarque :


Vous pouvez faire beaucoup de choses
Tout n’est pas parfait , pas de solution simple pour utiliser les MSGID et MSGCON …

Vous devrez avoir un clavier qui vous permet de saisir les caractères souhaités

, , Afficher plusieurs colonnes d’enregistrements dans un sous-fichier

Contexte

Un sous-fichier nous permet d’afficher un nombre de lignes qui est limité par la taille de l’écran.
Cette taille est définie dans le script source de l’écran par le paramètre SFLPAG.

On possède un fichier que l’on souhaite afficher et qui contient plus de 19 enregistrement. Il serait donc intéressant de l’afficher sur plusieurs colonnes.

Solution

Une petite modification du script source permet de créer un sous fichier qui contient plusieurs colonnes. Il faut donc indiquer le nombre total de données que l’on souhaite voir à l’écran dans SFLPAG ainsi que le nombre de caractère qui séparent deux colonnes

La maquette se présente ainsi, le paramètre de SFLLIN correspond à l’espace (en caractères) entre deux colonnes.

En exécutant le programme, on obtient :