pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #62
Nous avons commencé la journée par un présentation des différents éléments de sécurité sur IBM i (par Guy Menu / Erable )
IBM i Access Client Solution
Nouvelle version de Client Access (5733-XJ1) Full Java, donc compatible Windows , Linux et Mac.
Pas d'installation, il suffit de lancer acsbundle.jar.
Première chose, définition du(des) système(s)
Le transfert de fichier est à l'identique de celui de Client Access pour Windows
Avec quelques formats de fichier spécifiques (.ods, par exemple)
Dans les propriétés, vous retrouverez la possibilité de forcer la conversion du CCSID 65535
Ainsi que le traitement de SQL dit "natif", vous permettant de copier/coller un ordre SQL existant.
Virtual Control Panel, n'est disponible qu'avec Lan Console
Hardware Management Interface, lance l'URL d'accès à la console HMC
5250 Console, lance directement la console 5250, sur la HMC si c'est votre configuration.
Navigator for I, n'a pas été réécrit et lance donc Director Navigator sur votre serveur
Enfin 5250 Session Manager permet de mémoriser plusieurs sessions 5250
New Display Session configure une nouvelle session 5250
Ce n'est pas communication personnelle, mais HOD (Host On Demand) qui est intégré au produit.
• il ne reconnaît les DDS graphiques (menus déroulant, boutons radios, etc....), que si vous activez ENPTUI.
• Avantage, il sait afficher de l'UNICODE (CCSID 13488 uniquement)
Unicode ?
A l'origine était le CCSID.
Pour un jeu de caractères donné (Latin-1, cyrillique, hébreu par ex.) définition d'une grille de codification de tous les caractères pour un pays donné :
Nous avons le même jeu de caractère que les espagnols, nous n'avons pas le même code page (codification).
Le CCSID est la codification du jeu de caractères et du code page d'origine d'une donnée.
"Cette données est Française ! " (CCSID au niveau zone, venant du CCSID du fichier, lui même venant du job de création)
si le CCSID du job (qui lit le fichier) est différent (il vient de la langue de l'utilisateur, sinon de QCCSID), il faut modifier la valeur héxa afin que le "é" Français s'affiche é pour l'utilisateur Espagnol ou Danois et non "{" (par exemple).
La codification UNICODE est une codification sur plusieurs octets permettant dans une même grille, de coder tous les caractères du monde (y compris chinois, bengali, braille, symboles mathématiques et notes de musique !)
- UCS-2 projet d'origine , CCSID 13488
- UTF-16 sur-ensemble à UCS-2, normalisé par l'ISO, CCSID 1200
- UTF-8 proche d'UTF-16, mais stocke sur 1 octet les caractères occidentaux, sur 2 ou 4 les autres
Avec UCS-2 et UTF-16, une zone base de données de 20 caractères = 40 Octets
Avec UTF-8 une zone 20 cacactères = 20 Octets, donc potentiellement trop courte, à réserver au VARCHAR, CLOB et fichiers IFS.A UCS2 10G CCSID(13488) A* Lg de stockage = 20 octets A UTF16 10G CCSID(1200) A* Lg de stockage = 20 octets A UTF8 10A CCSID(1208) A* Lg de stockage = 10 octets(voir aussi la présentation de Christian GRIERE, lors des journées "Modernisation des apllications" d'Avril 2012)
Soit un fichier Base de données avec des zones GRAPHIC CCSID(13488)
CREATE TABLE AF4TEST.UNITEST13 ( CODECLI INTEGER NOT NULL , RAISOC GRAPHIC(80) CCSID 13488 DEFAULT NULL , VILLE GRAPHIC(50) CCSID 13488 DEFAULT NULL , DEPCLI DECIMAL(2, 0) DEFAULT NULL ) RCDFMT UNITEST ;Le DSPF est construit en faisant Référence
Le programme de test fait un simple affichage
si vos fichiers sont codés avec CCSID(1200) la conversion 1200 -> 13488 se fera souvent sans problèmes, les caractères étant largement communs.
Sur une session 5250 de Client Access :
Il fallait avant utiliser l'émulateur de Web Access (Client Access for the Web) qui est un émulateur 5250 compatible Unicode.
Avec L'émulateur de IBM i Access Client Solution :
- il vous faudra les options suivantes
Lors de la définition de la session 5250 HOD
il faut activer ENPTUI et le support d'Unicode.
et utilisez la police Monospaced
pour l'impression, regardons le PRTF
La police 'Monotype Sans Duospace WT SC' est apportée par l'installation de l'option 43
Il faut ensuite le compiler avec DEVTYPE(*AFPDS)
ici visualisation du résultat avec AFP Workbench Viewer.
Pour l'impression utilisez une Imprimante Réseau AVEC MFRTYPMDL(*HPDBCS), voyez :
- un scan de l'impression
- le résultat de la commande CPYSPLF TOFILE(*STMF) TOSTMF(unitesti.pdf) WSCST(*PDF)
Diverses nouveautés au fil de l'eau :
- VALUES permet d'afficher une valeur simple ou le résultat d'une expression (V6)
- values now, affiche le timestamp en cours
- values (current date, current time) affiche deux colonnes, la date puis l'heure
- Ca peut être pratique pour vérifier qu'une expression est valide
- values (date('2012-02-30') + 4 days)
- Ca permet de retourner une valeur dans du SQL dynamique SANS passer par un curseur
/free requete = 'VALUES(select count(*) from ' + fichier + ') into ?'; EXEC SQL prepare p1 from :requete; EXEC SQL execute p1 using :compteur; /end-free- Couplé aux nouvelles fonctions :
- GET_BLOB_FROM_FILE
- GET_CLOB_FROM_FILE
- GET_DBCLOB_FROM_FILE
- GET_XML_FROM_FILE
permet d'afficher ou de recevoir le contenu d'un fichier de l'IFS dans une variable de programme
EXEC SQL values GET_CLOB_FROM_FILE('/annotate.log') into :variable;- Enfin associé à la nouvelle fonction XMLTABLE, cela permet un affichage structuré d'un fichier XML
SELECT XML_IFS.* FROM
(VALUES( XMLPARSE(DOCUMENT GET_XML_FILE('/xml/vins.xml'))
)) AS XMLFILE(VIN),
XMLTABLE(
'$doc/vins' PASSING XMLFILE.VIN AS "doc"
COLUMNS
nom VARCHAR(32) PATH 'nom',
cepage VARCHAR(64) PATH 'cepage1')
AS XML_IFSLa commande CPYTOIMPF a été modifiée afin d'autoriser un critère de tri (SF99701 level 14, SF99601 level 25)
Rappel, vous pouviez déjà créer une vue dans QTEMP et copier depuis cette vue, afin de réaliser :
- jointure
- aggrégation (Group BY)
- sélection d'enregistrement (Where)
Mais une vue n'acceptant pas de critère de tri (Order BY), nous étions bloqués jusqu'ici.
Exemples:CPYTOIMPF FROMFILE(BDVIN1/PRODUCTEUR) TOSTMF('/producteurs.txt')
RCDDLM(*CRLF) ORDERBY('*ARRIVAL')
CPYTOIMPF FROMFILE(BDVIN1/VINS) TOSTMF('/vins.txt')
RCDDLM(*CRLF) ORDERBY(' PRIX DESC FETCH FIRST 10 ROWS ONLY ')
Copyright © 1995,2012 VOLUBIS