
V7R20
Nouveautés RPG
- Le plus gros des nouveautés était déjà disponible en V7 via la PTF SI51094
- des efforts ont été fait sur la gestion du CCSID
- Bien sur, toute cette gestion des CCSID ne pourra avoir lieu, que si votre CCSID est connu, donc pas de CCSID à 65535 !
- CCSID au niveau spécif H ou ctl-opt précise le code page des constantes
- AVEC CCSID(*EXACT) c'est le CCSID de compilation qui est utilisé, sinon celui du job à l'exécution
- Une conversion implicite est réalisée dans de nombreux cas :
• par exemple, si une donnée déclarée UTF-8 était comparée à *BLANKS, c'était le blanc EBCDIC -> X'40, ce n'est plus forcément le cas.
• par exemple, lors des concaténations, une convertion implicite sera réalisée si le CCSID des variables est connu.
- Avant le CCSID par défaut était celui du JOB, quand une donnée avait un CCSID différent, elle était convertie dans celui du JOB
(Uniquement pour un même système de codification, par exemple EBCDIC Français -> EBCDIC Espagnol = jeux de caractère identique : Latin-1)
Démonstration avec un fichier un code page Espagnol (284)
- Sous ce CCSID é = x'51' et ñ = x'6A'
<- DSPPFM
- En Français (297) é = x'C0' et ñ = x'49'
lecture du fichier par pgm
En debug

Résultat
'
- maintenant avec le mot-clé CCSID (niveau déclaration)
une variable peut avoir une codification spécifique :
- CCSID(*UTF8) , donnée unicode
- CCSID(819) , données ASCII standard
- CCSID(37), EBCDIC Américain (rappel : 297 pour la France)
- CCSID(*HEX), pas de gestion du CCSID pour cette zone
- L'adaptation des constantes au CCSID de la variable est automatique, plus besoin des fonctions %UCS2()
X'62' en ASCII
= 'b' , en Unicode X'0062', ...
- Si vous recevez les données lues par le biais de DS, vous utiliserez probablement des data-structures externes (EXTNAME ou LIKEREC)
- CCSID(*EXACT) demande à ce que les zones de la DS aient le même CCSID que le fichier d'origine
- Comme une donnée peut avoir un CCSID particulier, vous pouvez enlever la conversion lors des lectures
- OPENOPT(*NOCVTDATA), niveau spécif H ou ctl-opt, pour tous les fichiers
- DATA(*NOCVT), niveau spécif F ou déclaration de fichier (dcl-f), fichier par fichier
Exemple avec le pgm suivant
En débug RDI
En débug 5250
- Enfin, CCSIDVT est nouveau en spécif H (ou mieux ctl-opt)
- *LIST : indique les pertes potentielles de données lors de la compilation
- *EXCP : indique les pertes potentielles de données lors de l’exécution
- Quelques améliorations sur les dates et les timestamps :
- Les timestamp admettent une précision (avant elle était de 6 décimales après la seconde, non paramétrable)

Ces nouveaux paramètres sont reconnus en RPG et RDI 9.1
Ici l'assistant de création d'une déclaration

Résultat
Les champs des deux tables créées plus haut, sont considérés par RPG comme différents, n'ayant pas la même précision
Ce code passe à la compilation, si on préfix les champs.

Résultat (test2)

Les enregistrements 4 et 5 ont été insérés pas SQL
L'enregistrement 6 correspond à READ/WRITE, le timestamp copié était sans décimale dans test1
L'enregistrement
7 correspond au WRITE RPG suite à alimentation des zones par programme,
comme en version précédente la fonction %TimeStamp() RPG ne fournit toujours qu'une précision de 3 (.710)
- %SUBDT, choix du nombre de chiffres extraits.
par ex : %SUBDT(WDate:*YEARS:4).
- la fonction %SECONDS, utilisée dans un calcul admet un argument avec des décimales : %SECONDS(1.5)
- la fonction %DIFF admet un 4ème argument indiquant les millisecondes
%DIFF(ts1:ts2:*SECONDS:5) , permet de recevoir la différence avec 5 chiffres après la seconde
- la fonction %SUBDT admet aussi la précision à extraire
%SUBDT(Z'2014-07-21-15.20.26.123456789012':*SECONDS:11:8) -> extrait 26,12345678
- Directives de compilation
- /SET permet de définir le CCSID ou le format date/heure à partir de cette ligne
- /SET CCSID(*CHAR : n°-de-ccsid)
- /SET CCSID(*GRAPH : n°-de-ccsid)
- /SET DATFMT(un-format-de-date)
- /SET TIMFMT(un-format-d'heure)
- /RESTORE, pour annuler le précédent /SET
- SI55531 (7.2) et SI55340 (7.1) apportent l'option *DCLCASE à PGMINFO
permettant de demander le respect de la casse quant aux noms dans le PCML (jt400 et web services)
©AF400