pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #41
V5R40,
suite
Nouveautés RPG
|
parmis les nouveautés bien agréables de la V5R40, il y a l'intégration d'ordres SQL en format libre, dans le RPG en format libre |
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemple : <AF400 COPYRIGHT="VOLUBIS"> <COURS NOM="£EAU" MODULE="INIT"> <TEXTE>Espace adressable Unique</TEXTE> <MOT_DIRECTEUR> <MOTCLE1>EAU</MOTCLE1> <MOTCLE2>MEMOIRE</MOTCLE2> <MOTCLE3>VIRTUELLE</MOTCLE3> </MOT_DIRECTEUR> <DATREF>1999-08-10</DATREF> </COURS> <COURS NOM="£OBJET" MODULE="INIT"> <TEXTE>Notion d'objet de l'OS/400</TEXTE> <MOT_DIRECTEUR> <MOTCLE1>OS/400</MOTCLE1> <MOTCLE2>OBJET</MOTCLE2> <MOTCLE3>ECAPSULATION</MOTCLE3> </MOT_DIRECTEUR> <DATREF>2002-05-11</DATREF> </COURS> ... </AF400> |
|
|
|
|
|
+-------------+-----------------+-----------------------------------------+ ! allowextra ! allowextra=no ! peut-il y avoir des éléments XML ! ! ! allowextra=yes ! n'ayant pas d'équivalent dans la DS ? ! ! ! ! (le complément de allowmissing) ! +-------------+-----------------+-----------------------------------------+ ! path ! path=noeud/elem ! chemin de l'élément à extraire ! ! ! ! ! ! ! ! dans ce flux ! ! ! ! ! ! ! ! <cours> ! ! ! ! <nom>EAU</nom> ! ! ! ! <module>INIT</module> ! ! ! ! </cours> ! ! ! ! ! ! ! ! si votre DS se nomme COURS et contient ! ! ! ! 2 zones NOM et MODULE, tout est ! ! ! ! automatique, sinon mettez 'path=cours' ! ! ! ! ! ! ! ! pour lire directement le nom dans une ! ! ! ! variable simple (pas une DS), indiquez ! ! ! ! 'path = cours/nom' ! +-------------+-----------------+-----------------------------------------+ |
|
quelques exemples de code : |
|
|
|
* * test avec des attributs et plusieurs éléments * * Ddata S 1024 inz('+ D <cours nom="XML" module="PGM"> + D <sujet>RPG</sujet> + D <texte>manipuler du XML en RPG + D </texte> + D </cours> + D ') DCOURS DS D NOM 10 D MODULE 10 D SUJET 10 D TEXTE 50 |
|
* * test avec une structure imbriquée * * Ddata S 1024 inz('+ D <cours nom="XML" module="PGM"> + D <sujet>RPG</sujet> + D <texte>manipuler du XML en RPG + D </texte> + D <motcle> + D <motcl1>RPG</motcl1> + D <motcl2>XML</motcl2> + D <motcl3>SAX</motcl3> + D </motcle> + D </cours> + D ') |
|
DCOURS DS Qualified D NOM 10 D MODULE 10 D SUJET 10 D TEXTE 50 D MOTCLE likeds(motclDS) |
|
|
|
D <motcle> + D <motcl1>RECURSIF</motcl1> + D <motcl2>RANK</motcl2> + D <motcl3>OVER</motcl3> + D </motcle> + D </cours> + D <cours nom="I5OS" module="SYS"> + D <sujet>V5R4</sujet> + D <texte>nouveautés 5.40 de I5/SO + D </texte> + D <motcle> + D <motcl1>OS</motcl1> + D <motcl2>I5</motcl2> + D <motcl3>OS4OO</motcl3> + D </motcle> + D </cours> + D </af400> + D ') |
|
DmotclDS DS D MOTCL1 10 D MOTCL2 10 D MOTCL3 10 |
|
|
|
D SUJET 10 D MOT_DIRECTEUR likeds(motclDS) D DATREF D |
|
H dftactgrp(*no) actgrp(*caller) * * test avec un fichier XML externe et un %Handler * (voir http://www.volubis.fr/af4dir/courshtm/xml/cours.xml ) * DmotclDS DS D MOTCLE1 10 D MOTCLE2 10 D MOTCLE3 10 D MOTCLE4 10 D MOTCLE5 10 |
|
D MOT_DIRECTEUR LikeDS(motclDS) D DATREF D |
|
|
|
on-error *all; flag = *ON; endmon; endfor; |
|
|
|
|
|
D handler PR 10I 0 D evenement 10I 0 value D chaine * value D chaine_lg 20I 0 value D exception 10I 0 value |
|
|
|
|
Le transporteur TNT, fourni une liste de ces "points relais" sous forme de réponse XML, simple, aujourd'hui à utiliser en RPG.
par exemple : la liste des communes dans le département 44 et celles de Carquefou ayant un point relais (affichez le source,s'il le faut, pour voir le XML)
Dans le même temps, Scott KLEMENT (rédacteur à systemI /news)
propose un projet : HTTPAPI,
contenant
- des API d'utilisation du protocole HTTP
- un parser XML (projet expat) pour les versions précédentes.
- des API pour consommer un service WEB
- ainsi que des exemples d'utilisation en RPG
Ces programmes peuvent être très utiles pour interroger le serveur
TNT vu plus haut
Mais aussi pour consommer directement un service Web.
Le site suivant fournit des services WEB à utiliser librement www.webservicex.net entre autre un service
de conversion d'une devise vers une autre
( USD vers EUR ou vers JPY par exemple)
Un des programmes RPG, utilise ce service de la manière suivante :
Ou nous apprenons que 450 euros font 571 US $ et 66987 Yens (en septembre 2006, lors de la préparation de ce support)
Pour infos, voici un extrait du code, utilisant une des fonctions proposées
:
http_url_post_xml( ) qui envoie une requête
http, attend du XML en réponse et le traite.
/free SOAP = '<?xml version="1.0" encoding="US-ASCII" standalone="no"?>' +'<SOAP-ENV:Envelope' +' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"' +' xmlns:tns="http://www.webserviceX.NET/">' +'<SOAP-ENV:Body>' +' <tns:ConversionRate>' +' <tns:FromCurrency>'+ %trim(Country1) +'</tns:FromCurrency>' +' <tns:ToCurrency>'+ %trim(Country2) + '</tns:ToCurrency>' +' </tns:ConversionRate>' +'</SOAP-ENV:Body>' +'</SOAP-ENV:Envelope>'; rc = http_url_post_xml( 'http://www.webservicex.net/CurrencyConvertor.asmx' : %addr(SOAP) + 2 : %len(SOAP) : *NULL : %paddr(Incoming) : %addr(rate) : HTTP_TIMEOUT : HTTP_USERAGENT : 'text/xml' : 'http://www.webserviceX.NET/ConversionRate'); // ici on utilise rate pour calculer le montant, puis on envoie un message |
Vous remarquerez qu'il est important de bien connaitre ILE
PHP sur I5/OS (V5R40 uniquement) : Zend
core for I5/OS
Produit non facturable avec un support assuré par Zend (voyez l'annonce IBM )
Ce produit installe en fait un serveur Apache
sous Pase qui tourne sur un autre port (8000, modifiable) , il faut alors utiliser
une directive PROXY pour rerouter les requêtes vers cet autre serveur
(depuis le serveur Apache "natif" de I5/OS).
L'interet du serveur Apache2 sous Pase (c'est véritablement celui
d'UNIX) pour Zend, c'est de réutilsier les routines existantes, particulièrement
celles permettant de lancer PHP en mode module, ce qui offre les meilleures
performances et le debug avec ZendStudio.
1/ Téléchargez le fichier zippé sur le site de ZEND, dézippez et transférez (en binaire) via FTP le SAVF ZCOREPROD dans QGPL
2/ Passez ensuite la commande RSTLICPGM
LICPGM(1ZCORE5) DEV(*SAVF) SAVF(QGPL/ZCOREPROD)
cela doit vous afficher l'écran de licence suivant :
La version définitve (GA) porte le N°
V1R4M1
Ensuite vient la phase de connexion au serveur Zend (pour les mises à
jour), vous devez avoir créé un compte sur le site de Zend.
cela va ajouter un poste au scheduler I5/OS (WRKJOBSCDE)
L'installation a modifié QSYSWRK pour ajouter un poste de routage, et vous pouvez lancer le menu GO ZENDCORE/ZCMENU
Cette installation contient une version d'Apache pour Unix tournant sur le port 8000(Zend indique que cela permet d'utiliser php en mode module, ce qui est plus rapide). cela a probablement permis aussi la réutilisation du debuger de ZendCore. Pour modifier cette instance, particulièrement le port 8000, voyez /usr/local/Zend/apache2/conf/httpd.conf
pour lancer ce serveur, utilisez le menu (ZCMENU) ou bien (depuis QP2TERM) /usr/local/zend/apache2/bin/apachectl -k start | stop
ou bien, encore, placez dans un CL :
SBMJOB
CMD(CALL PGM(QP2SHELL) PARM('/usr/local/Zend/apache2/bin/apachectl' '-k'
'start'))
JOB(APACHE2) JOBQ(QUSRNOMAX [par exemple)] )
La version 1.4.1 propose de nouveaux services accessibles depuis le menu
ZCAMENU (option 5 du précédent)
Ces services sont lancés dans un sous système
ZEND ,particulièrement un travail I5_COMD faisant tourner un programme
EASYCOMD (hum, hum..Easycom propose aussi un produit.)
correspondant au "I5 PHP
API Toolkit" qui contient des API spécifiques à l'AS/400,
comme :
- Accès aux programmes I5/OS (avec passage et récupération de paramètres)
- Accès aux commandes I5/OS (y compris commandes comme RTVJOBA avec récupération des valeurs retour)
- Accès à la base de données en mode ligne à ligne
(dit aussi accès "natif"),
l'accès en mode SQL se faisant par le module ODBC ou DB2 - Accès aux DTAARA
- Gestion des erreurs et récupération des messages d'erreur.
Pour
plus de détai, voyez la documentation à :
http://www.zend.com/content/download/1842/11547/file/Zend_Core_User_Guide_i5OS.pdf
Cette installation a aussi créé une
instance APACHE NATIVE (nommée ZENDCORE et qui est lancée normalement
dans QHTTPSVR)
contenant les lignes
suivantes , dont vous devez vous inspirer pour completer votre instance
de production :
LoadModule proxy_http_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_connect_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_ftp_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
Qui demande à ce que chaque requête dont l'URL commence par exemplesphp soit redirigée vers le port 8000, donc vers le serveur apache2 installé par Zend.
ainsi que
permettant d'accèder à la racine du nouveau site
et donc un accès au coeur du produit
Indiquez ici, le mot de passe saisi lors de l'installation
et voilà !
Avec cette version, MYSQL, n'est pas activé par défaut, il faut modifier php.ini (dans /usr/local/Zend/core/etc) et enlever le caractère ; (qui comment une ligne) devant mysql.so et mysqli.so
Enfin vous pouvez utiliser Zend Studio for I5/OS (en attendant l'intégration de ce produit dans Eclipse, dixit IBM)
Contenant un éditeur PHP tout à fait sympathique
Mais surtout un outil de debug, en direct avec le serveur ZendCore
Pour cela
- Autorisez une adresse ou une plage d'adresses IP à faire du debug
Lancer ZendCore, puis optez pour Configuration/Zend studio server
Ici toutes les adresses IP 10.* sont autorisées ( zend_debugger.allow_hosts dans /usr/local/zend/Core/etc/php.ini)
- Sur le client choisissez Outils/Personnalisation puis l'onglet "débogage"
et indiquez
- Mode de débogage : serveur
- URL du serveur : http://votre-as-400:8000/
Vous pourrez alors demander l'exécution d'une page sur le serveur et lancer le debug
ce qui vous affiche :
- le code dans la fenêtre éditeur
- les boutons habituels d'un débuger (avancer, pas à pas, etc...) dans la barre d'outils
- la page résultat dans la fenêtre de droite (en texte ou en html)
- la possibilité de voir le contenu des variables (fenêtre du bas ou en mettant la souris sur un nom de variable)
WDSc, nouveautés de la version 6
- Cette version est basée sur Eclipse 3, ce qui change les éléments
suivants
- vous pouvez installer plus de PlugIn (phpeclipse,
par exemple)
- globalement le "look & feel"
des fenêtres change.
- le passage d'une perspective à l'autre, qui se fait maintenant
en haut à droite
- en même temps IBM rachetait la société Rational et donc le produit s'appelle maintenant "IBM
Rational Web developer"
- L'éditeur LPEX
- Enfin une sauvegarde automatique de proposée
ce qui vous affiche le message suivant en cas d'arrêt anormal du produit :
- La vue structure est maintenant opérationnelle pour les sources
SDD
- il est possible d'ouvrir plusieurs fois (plusieurs vues) un même
source
ensuite, en cliquant droit sur cette nouvelle fenêtre, vous pourrez afficher horizontalement ou fermer cette vue.
- La gestion des messages d'erreur suite à compilation est plus simple
:
- on peut filter le niveau de gravité (chaque niveau est représenté
par une icone différente)
- l'option "insérer uniquement
les messages sélectionnés" permet de ne voir que
le message d'erreur en cours dans le source, quand on double-clique sur
ce dernier.
- LPEX tenant compte des nouveautés syntaxique de la version 5.4, si vous convertissez un RPG-IV contenant du SQL, en format libre, les ordres SQL eux même (/EXEC SQL /END-EXEC) passent en format libre (Exec SQL, terminé par ;)
- Il existe désormais des modèles pour COBOL (voyez préférences/systèmes distants/iSeries/modèles)
- Dans la vue table, vous pouvez masquer la ligne de commande
- Le fait de pouvoir lancer un shell, se fait maintenant de manière
identique pour un shell local (accès à une "boite DOS")
ou pour un shell distant (sur iSeries, l'équivalent de QSHELL),
avec l'option "Commandes Shell"
dans l'arboresence de RSE). Remarquez le résultat de la commande
"ls", les
répertoires sont cliquables et cela passe la commande "cd")
- générer un proxy java
- tester le service Web (cela lancera automatiquement un test)
- Contrôler le service Web qui va générer un affichage du dialogue soap
WDSc et services Web
Une des nouveautés de cette version est la création directe de services WEB
IBM proposait déja des méchanismes d'appel de programmes (RPG
ou COBOL) depuis une application Java : PCML : langage de description du programme
<pcml version="1.0"> <!-- Create a Data Structure --> <struct name ="custinfo" > < data name ="Number" type="char" length= " 7" usage="inputoutput" init="0014400"> </data> < data name ="Name" type="char" length= " 40" usage="inputoutput" init=" "> </data> </struct> <!-- Program getcust --> <program name="getcust" path="/ QSYS.lib/MABIB.lib /GETCUST.pgm" > < data name ="gotback" type=" struct" usage="inputoutput" struct="custinfo"> </data> </program > </pcml> |
public static void main(String[] argv) { AS400 as400System = new AS400(); ProgramCallDocument pcml = null; String msgId, msgText; Object value = null; try { System.out. println ("Creating ProgramCallDocument for GetCust pgm."); pcml = new ProgramCallDocument(as400System, "GETCUST"); boolean ok = pcml.callProgram("getcust"); System.out.println(" rc is---> " + rc); if (!ok) { /* gerer l'erreur et afficher qqchose */ } else { value = pcml.getValue("getcust.gotback.Name"); System.out.println("Customer name: " + value); } } catch (PcmlException exc) { System.out.println("*** impossible de lancer le pgm. ***"); Sy ste m. exit (0); } System.exit(0 ); } // end main method |
WDS Client V6.01 propose maintenant des
outils de gestion de services WEB.
Cliquez droit à partir d'un source RPG4 (programme avec des paramètres,
bien sûr)
Cela va lancer un assistant
cochez :
cliquez sur suivant, vous arrivez sur la fenêtre de sélection d'objet
Indiquez bien s'il s'agit d'un programme ou d'un programme de service ,puis sur modifier pour modifier les paramètres de connexion
Indiquez :
Profil et mot de passe
liste de bibliothèques et/ou programme "d'ouverture de session"
Nous revenons à la fenêtre principale de l'assistant, pour préciser le sens d'utilisation des paramètres
cliquez sur suivant et indiquez les caractèristiques du projet WEB (au sens WDSc)
Cliquez sur Fin, c'est fini, la classe java est générée, le test est lancé
le bouton invoke, lance le test
En bas le dialogue soap est affiché
Si vous ouvrez une perspective WEB,
vous retrouverez tous vos éléments
L'option Classe de service permet d'accèder au source généré
L'option WSDL, vous affiche le diagramme ou le source wsdl correspondant.
WDSc lite
Dernier point, peut-être le plus important, pour de nombreux clients : WDSc lite, version allégée de WDSc, directement basée sur Eclipse (et non plus sur WSSD ou Rational Web Developer) et donc moins gourmande : uniquement de 256 Mo de mémoire principale.
Bizarrement, c'est une pré-version, et il faut d'abord installer la version complète, qui doit rester présente sur votre disque dur, pour pouvoir installer la version lite.
Il faut utiliser le produit de mise à jour de WDSc
Cette étape commencant, par mettre à jour le produit de mise à jour lui même !
redémarrez
Ensuite les correctifs, vous faisant passer à la version 6.0.1.1 et les correctifs WDSc.
Acceptez les contrats de licence (et soyez patient ...)
Ensuite (enfin) vous pouvez sur le même produit, utiliser le deuxième
onglet "Fonctions facultatives", où
vous trouverez WDSc lite
Une fois cette "option" installée, vous aurez les deux versions sur votre poste
et vous constaterez le peu de perspectives disponibles par rapport à la version complète
Copyright © 1995,2006 VOLUBIS