Vous avez un nouveau paramètre sur les commandes CRTBNDRPG ou CRTRPGMOD DATEYY( )
DATE WITH 2-DIGIT YEARS . . . . DATEYY( *ALLOW)
Ce paramètre n’est pas encore documenté dans l’aide mais vous comprenez , que c’est pour les dates sur 6 caractères
Rappel sur les dates à 6 , vous avez un point de bascule: 40 – 99 : Le siècle est supposé être « 19 » 00 – 39 : Le siècle est supposé être « 20 »
C’est dans 14 ans
Pour ce paramètre, DATEYY vous avez 3 valeurs possibles
DATEYY(*ALLOW) : autorise tous les formats de date, autrement dit, n’effectue aucune validation. DATEYY(WARN) : si une date est détectée, elle est considérée comme une année sur deux caractères, une erreur de compilation de niveau 10 est générée. DATEYY(*NOALLOW) : si une date pourrait être détectée, la compilation est renvoyée avec une erreur de niveau 30. La valeur par défaut est « *ALLOW ».
il est conseillé de compiler avec *WARM, vous aurez une liste des problèmes potentiels
Ce message apparaitra
Msg id Sv Number Seq Message text *RNF0201 10 5 002300 WARNING: A DATE WITH 2 DIGITS FOR THE YEAR ONLY SUPPORTS THE YEARS 1940 TO 2039. REASON CODE: xxxxxx.
Rappel: Pensez dans SQL à bien utiliser des formats sur 8 *ISO par exemple pour tous vos calculs
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2025-08-18 16:42:512025-08-20 11:32:37V7R6 , date sur 6 positions en RPG
Retour sur une problématique récurrente et souvent mal comprise, donc mal gérée … Et qui pourrait bien s’amplifier avec l’usage plus intensif de l’Open Source.
Vous utilisez historiquement des fichiers sources (objet *FILE attribut PF-SRC) pour stocker vos sources : ces fichiers sont créés avec un CCSID, par défaut le CCSID du job dans lequel vous exécutez la commande CRTSRCPF
Usuellement vous obtiendrez des fichiers sources avec un CCSID 297 ou 1147 pour la France. Si vos machines sont « incorrectement » réglées, un CCSID 65535 (hexadécimal).
Mais également, par restauration d’autres produits, certainement des fichiers avec un CCSID 37 (US).
Pour les langages de programmation (dont le SQL), le CCSID du fichier source est important pour les constantes, qui peuvent par définition êtres des caractères nationaux quelconques. Quant aux instructions, la grammaire des langages les définis sans ambiguïtés.
Caractères spéciaux / nationaux
Pour toutes les commandes, instructions, éléments du langage, pas de soucis d’interprétation
A la compilation, les constantes sont interprétées suivant le CCSID du job, pas celui du source !
En général, les deux CCSID sont identiques.
Par contre, pour les caractères spéciaux utilisés, si l’on regarde de plus près le cas du CL, la documentation indique :
Voilà qui explique les fameuses transformations de @ en à !
En synthèse : le compilateur considère tous les éléments du langage comme étant en CCSID 37, hors les constantes alphanumériques et les quelques caractères listés ici.
Pour le CL : impossible d’utiliser les opérateurs symboliques |> (*BCAT), |< (*TCAT) et || (*CAT)
Le caractère | est mal interprété. Vous devez le remplacer par un !, ou utiliser les opérateurs non symboliques (*BCAT, *TCAT et *CAT).
Pour le SQL : impossible d’utiliser l’opérateur || (même raison).
Vous devez le remplacer par un !!, ou utiliser l’opérateur concat.
Evolution du RPG
Le principe est le même.
Toutefois le langage vous permet également de contrôler le CCSID des variables déclarées. Et depuis la 7.2, de nouvelles directives de pré-compilation permettent d’indiquer des valeurs de CCSID par défaut par bloc de source :
Et pour l’IFS ?
Sur l’IFS, chaque fichier (source ou non) dispose également d’un CCSID. Sa valeur dépend principalement de la façon de créer le fichier (par un éditeur type RDi/VSCode, partage netserver, transfert FTP …).
Premier point d’attention : l’encodage du contenu du fichier doit correspondre à son attribut *CCSID !
VSCode vous indique le CCSID de la donnée, par exemple :
Mais :
1252 = Windows occidental (proche de l’UTF-8 mais pas identique). La raison est que VSCode travaille naturellement en UTF-8.
RDi gère correctement l’encodage/décodage par rapport à la description du fichier.
Pour les autres outils, à voir au cas par cas !
Evolution des compilateurs
Les compilateurs C, CPP, CL, RPG, COBOL supportent désormais (PTF en fonction des compilateurs) un paramètre TGTCCSID :
En réalité ce paramètre a été ajouté pour permettre la compilation plus facilement depuis l’IFS, principalement depuis des fichiers IFS en UTF-8.
Cela ne règle pas nos problèmes précédents, les éléments du langage n’étant pas concernés : nous auront toujours le problème d’interprétation du |
Par contre, c’est utile pour la bonne interprétation des constantes lorsque le job de compilation a un CCSID du source. Et cela permet une meilleure intégration dans les outils d’automatisation.
Le script propose d’indiquer un CCSID pour les fichiers sources. Mais la seule solution viable est de compiler avec un job en CCSID 37 :
soit CHGJOB CCSID(37) avant de lancer le script
soit vous pouvez vous créer un profil dédié en CCSID 37 si ces opérations sont récurrentes
Tant que vous n’avez pas de caractères nationaux dans le codes !
Retrouver le CCSID de ses fichiers sources
SELECT f.SYSTEM_TABLE_NAME, f.SYSTEM_TABLE_SCHEMA, c."CCSID" FROM qsys2.systables f JOIN qsys2.syscolumns c ON (c.SYSTEM_TABLE_NAME, c.SYSTEM_TABLE_SCHEMA) = (f.SYSTEM_TABLE_NAME, f.SYSTEM_TABLE_SCHEMA) WHERE f.file_type = 'S' AND LEFT(f.system_table_name, 8) <> 'EVFTEMPF' AND c.SYSTEM_COLUMN_NAME = 'SRCDTA' ORDER BY c."CCSID", f.SYSTEM_TABLE_SCHEMA, f.SYSTEM_TABLE_NAME;
Vous avez des sources SQLRPGLE qui sont différents des tailles par défaut de 100
Vous pouvez avoir ce message à la compile RNF0733 C’est le fichier, QTEMP/QSQLPRE de pré-compilation qui est trop court QTEMP/QSQLPRE Ce fichier est utilisé dans les commandes CRTBNDRPG , CRTRPGMOD, ou CRTSQLRPGI
Vous avez une variable d’environnement QIBM_RPG_PPSRCFILE_LENGTH qui permet de changer la valeur par défaut qui est de 112. Elle doit avoir la longueur de votre donnée + 12 Exemple SRCDTA = 140 Vous devrez indiquer 152
Analyse par les fichiers supports ( c’est des fichiers modèles qui sont dans QSYS ) CRTDUPOBJ OBJ(QAWCTPJE) FROMLIB(QSYS) OBJTYPE(*FILE) TOLIB(Votrebib) NEWOBJ(QPFRADJTP)
pour analyser le suivi ici du pour des travaux interactifs
SELECT TPPNAM, TPFLG1, TPCSIZ, TPCRES, TPCACT, TPDFLT, TPNFLT, TPWI, TPAW, TPCJOB, TPAJOB, TPNSIZ, TPNACT FROM Votrebib/QPFRADJTP WHERE TPPNAM = ‘*INTERACT’ order by TPDATE, TPTIME
Deuxième exemple, voir les ports filtrés sur votre partition
Analyse par services SQL
create table votrebib.analyse as( WITH Log_Port AS ( SELECT CAST(ENTRY_DATA AS VARCHAR(1000)) AS entry FROM TABLE ( QSYS2.DISPLAY_JOURNAL(‘QUSRSYS’, ‘QIPFILTER’, JOURNAL_ENTRY_TYPES => ‘TF’) ) ) SELECT SUBSTR(entry, 1, 10) AS line, SUBSTR(entry, 29, 15) AS AdrSrcIp, SUBSTR(entry, 44, 5) AS SrcPort, SUBSTR(entry, 49, 15) AS AdrDestIp, SUBSTR(entry, 64, 5) AS DestPort FROM Log_Port ) WITH DATA;
Remarques
Certains journaux sont en standard , d’autres devront être démarrés Si vous n’analysez pas ne les démarrer pas Pensez à faire le ménage dans les récepteurs si vous les démarrez
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2024-08-02 09:13:592024-08-14 15:49:25Utilisez les journaux Système
Pour l’installer, il faut tout d’abord télécharger et extraire l’archive en local puis lancer RDI. Cliquez ensuite sur l’onglet Aide > Installer un nouveau logiciel.
Cliquez sur local, sélectionnez le dossier que vous avez précédemment extrait puis faites OK.
Vous pouvez tout sélectionner et faire suivant jusqu’au bout.
Afficher les intitulés
Plus besoin de cliquer sur un objet / membre et de regarder la vue propriété pour avoir le texte.
Pour activer l’affichage des intitulés, cliquez sur Affichage > Préférences puis activez les deux rubriques isphere dans Général > Apparence > Décorations d’intitulés.
Résultat :
Recherche de chaine de caractères
Vous pouvez déjà le faire dans RDI en faisant un clic droit sur un fichier source / bibliothèque « Rechercher la chaine ». Mais cette option peut prendre du temps. Utilisez plutôt « Isphere source file search ».
Saisir la chaine à recherche et faites OK.
Si vous faites un double-clic sur la ligne ça ouvrira le source en édition.
Gestion des MSGF
Comme pour la recherche de chaine, on peut déjà modifier un fichier de message mais ce n’est pas très pratique. Il faut déplier le fichier de message, faire un clic droit modifier sur le message et modifier le texte.
Avec Isphere vous pouvez faire un clic droit « Isphere Message File Editor ».
Il va ouvrir le fichier de message et vous pourrez effectuer des recherches de texte, double cliquer sur un message pour l’éditer etc…
Gestion des postes d’un répertoire de liage
Clic droit sur le répertoire de liage puis « Isphere Binding Directory Editor ».
Dans l’onglet qui vient de s’ouvrir, vous pouvez ajouter un programme de service au répertoire de liage avec un simple clic droit / New (équivalent de la commande ADDBNDDIRE).
Vous avez également la possibilité d’en supprimer.
Copier un membre source
Très pratique si vous voulez copier un source d’un système à un autre (ou sur le même).
Clic droit sur un membre (ou plusieurs), puis « Copy Member’s to ».
Choisissez le système / fichier source / bibliothèque de destination et cliquez sur « Copy ».
Comparer des sources
Déjà disponible dans RDI mais Isphere permet de le faire plus facilement. Très pratique si l’on veut comparer deux sources sur deux systèmes (ou le même).
Faites un clic droit sur le source puis « Isphere compare Editor ».
On utilise de moins en moins PDM et SEU, pour le remplacer par du RDI ou Visual studio code, ce qui est le sens de l’histoire, mais cette commande peut vous aider, surtout si vous ne disposez pas d’outils d’analyse (Arcad, X-Analysis, Grefer, etc…)
Cette commande permet de faire un FNDSTRPDM (option 25 dans la gestion des membres) sur une liste de fichiers sources, FNDSTRPDM étant limité à un seul fichier source par recherche
Vous devez définir la liste des fichiers à analyser Pour ceci, vous avez un fichier modèle QAUOSR2 dans la bibliothèque QPDA Il est conseillé de le dupliquer sous un nouveau nom dans votre bibliothèque
C’est un fichier source que vous pouvez éditer facilement par SEU, RDI, VSCODE, ou SQL
Il est composé de 3 zones de 10 caractères
Exemple :
Notre fichier s’appellera souvent FNDSTRPDM2 membre FNDSTRPDM2 et on choisira une bibliothèque.
Ici on a demandé une liste que vous retrouvez dans votre spool, c’est un fichier QPUOPRTF, il y en a un par fichier source
Exemple :
Nb d'occurrences . . : 102
Création Dernière modif
Membre Type Date Date Heure Enreg
---------- ---------- -------- -------- -------- -------
AAAA CLLE 01/07/21 15/01/24 15:28:17 0000006
AAAA2 CLLE 10/01/24 16/09/23 10:25:24 0000009
AAA1 CLLE 16/05/23 06/06/23 10:24:58 0000017
AADB CLLE 02/01/24 02/01/24 10:59:24 0000005
AAPF2CL CLLE 03/07/23 03/07/23 13:53:03 0000008
Vous pouvez également demandé la liste des enregistrements comportant votre chaine, PRTRCDS(*ALL) vous obtenez également à une autre liste dans vos spools
Exemple :
Membre . . . . . . . : AAAA2
Type . . . . . . . . : CLLE
Texte . . . . . . . . : Liste des touches de fonction d'un RPG
Longueur d'enreg . . : 92
SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+...
DCL
4 DCL VAR(&TXT) TYPE(*CHAR) LEN(80)
DCL
5 DCL VAR(&id ) TYPE(*CHAR) LEN(7)
Nombre d'enregistrements explorés . . . . . . . . : 9
Nombre d'enregistrements à trouver . . . . . . . : *ALL
Nombre d'enregistrements trouvés . . . . . . . . : 2
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ F I N D U M E M B R E
On rencontre 2 usages principalement
Pour rechercher dans tous les sources d’une bibliothèque
Il existe d’autres solutions pour scanner vos fichier sources, mais celle ci est simple à mettre à œuvre, et vous avez de grande chance d’avoir QPDA sur vos machines.
Premier point Les formats ne doivent pas se chevaucher
Deuxième point les formats qui devront s’afficher en plus d’un format affiché devront avoir le mot clé OVERLAY
Troisième points Pour que le contenu d’un format soit lu il faut
Exfmt + ou touche CF ou Write + Read
Notre écran a 3 formats (Haut , Milieu, Bas) c’est le milieu qui doit être en exfmt (reçoit le focus)
Le DSPF
A DSPSIZ(24 80 *DS3)
A R HAUT
A ZONE1 10A B 6 3
A 4 3'Format haut'
A R MILIEU
A OVERLAY
A CA03(03)
A ZONE2 10A B 12 3
A 10 3'Format milieu'
A R BAS
A OVERLAY
A 22 10'F3 = Exit'
A 21 3'Format bas'
**free
Ctl-Opt DFTACTGRP(*NO);
Dcl-f overlay WORKSTN;
dou *in03 ;
write haut ;
write bas ;
exfmt milieu ;
if not *in03 ;
read haut ;
dsply zone1 ;
dsply zone2 ;
endif ;
enddo ;
*inlr = *on;
Remarque :
cette règle s’applique dans les formats Fenêtres (WINDOW) par contre les règles de chevauchement pour les fenêtres sont différentes
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2024-02-26 07:25:242024-02-26 15:34:02Superposition dans les DSPF OVERLAY
Suivez la procédure pour paramétrer le plugin dans RDI et l’installation de la bibliothèque JCRCMDS s’il elle n’existe pas sur votre partition, c’est la commande JCRHDF qui sera utilisée, vous pouvez également l’utiliser en 5250, si vous le désirez
L’utilisation est très simple dans un source de type RPGLE ou SQLRPGLE , vous avez une nouvelle option sur le clic droit, JCRCMDS.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-10-14 15:37:492023-10-17 14:43:59Convertir les carte H, D et F sous RDI