Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #33

Janvier 2004



Quelques annonces logicielle :

Host Publisher est retiré du catalogue IBM à Février 2004, ce qui devrait simplifier la liste des produits de Webisation IBM :

  • HATS (une version Limited Edition est livrée avec Client Access)
    La version complète permet de personnaliser chaque écran avec un plug-in pour WDS client.
  • Iseries Access for the WEB, option de la famille Client Access (maintenant Iseries Access), contient un sous ensembles des options proposées par Operation Navigator, plus un émulateur.
  • Webfacing (partie du produit Websphere dev. Studio Client), permet de transformer les DSPF (à partir des sources) en pages JSP.

    Une version 5.1 (patchée 5.1.0.1, depuis début Janvier) vient de sortir, elle apporte quelques amméliorations,
    pour webfacing :

    • Gestion des styles
    • reconnaissance dynamique des touches de fonction
    • quelques modifications de paramétrage
    (on utilise plus le fichier d'invocation, tous les paramètres sont dans web.xml)
    • des correctifs sur les principaux dysfonctionnements


HATS LE (livré avec Iseries Access)

Il s'agit d'une version limitée de HATS V4, permettant un accès à un AS/400 depuis un navigateur WEB.

  • Vous devez demander un refresh de CLIENT ACCESS pour obtenir cette nouvelle version (en V5r10 ou V5r20 de l'OS/400)
  • ATTENTION, il faut Websphere Application Serveur version 5 : l'installation se fait sous forme d'une application EAR

Configuration

Quand l'installation est terminée, saisissez l'URL suivante : "http://<votre as400>/HATSLE"

le produit passe automatiquement en mode configuration à la première utilisation, signez vous



Cette affichage correspond à l'URL "http://<votre as400>/HATSLE/config"

poursuivons l'assistant :

Indiquez ici les paramètres de configuration, malheuresement, il n'y a qu'une seule config par instance de WAS

  • l'hôte auquel se connecter ( ce peut être un autre AS/400)
  • le port telnet (23 par défaut)
  • la page de code (297 en France, 1147 si vous utilisez le caractère €)
  • Comment nommer l'unité écran. (*) représente un caractère générique.
  • Si vous souhaitez utiliser des sessions cryptées

Puis choisissez un style

IseriesAccess
Sports
ClassicTerminal
Blank

Choisissez aussi :

  • l'apparition ou non d'un bloc de touches propre à HATS (déconnexion, etc...)
  • l'apparition ou non d'un bloc de touches (F01 à F04, sous forme de boutons)
  • L'utilisation possible du clavier pour les principales touches de fontion (F3 par exemple)

Puis définissez l'apparence de la fenêtre

et Enfin le comportement de HATS

  • Détection des touches de fonction (f3=Exit sous forme de lien)

  • Détection des liste de sélection (options de menu sous forme de lien)

  • Détection de tableau


    Exemple avec la commande WRKSYSSTS :
    • Détection de tableau non activée
    • Activée

  • Détections de sous-fichiers

    Exemple avec la commande WRKSPLF :
    • Détection de sous fichiers activée
    • Non activée

  • Utilisation du rendu caractère par caractère, insère des espaces s'il le faut afin de garder rigoureusement l'alignement
    (ce que nous subissons sur l'écran ci-dessus dans la zone OPT, par exemple)

Enfin, sur cette dernière fenêtre, clquez sur Fin pour confirmer votre paramétrage

Puis essayez, toujours avec l'URL "http://<votre as400>/HATSLE"

Exemples en utilisation de notre application SPOOL2, qui reproduit la commande WRKSPLF avec des options supplémentaires.

  • HATS LE

  • Iseries Access for the WEB (ou WEBACCESS)

  • Ecrans transformés par WEBFACING


    Introduction à VisualAge RPG

Ce produit est livré aujourd'hui avec WDS Client V5, qui propose une vue spécifique à ce produit

Choisissez EDIT ou EDIT with Prompt - vous verrez apparaître l'espace de travail, composé comme suit :

 

la logique est celle de toutes les applications de programmation PC d'aujourd'hui.

  1. Un projet contenant la liste des fenêtres de l'application
  2. chaque fenêtre contient des objets graphiques
  3. la palette d'outils propose la liste des objets graphiques pouvant être insérés dans la fenêtre.
  4. Après avoir composé visuellement votre fenêtre, vous devez définir le code associé à un événement.

Soit l'application suivante (liste des cours) :

 

le plus simple est de faire référence à la base de données (comme avec SDA), par "Serveur/Définition des zones de référence"

 

 

pour chaque objet :

on peut définir les propriétés :

 

 

parmi les propriétés remarquables, citons:

Genéral

le nom de l'objet

style

cadrage , et principales options.
Données

type et longueur

edition l'équivalent des EDIT-CODE
Police/Couleur aspect graphique
description Commentaire technique de l'objet

 

 

ensuite il faudra associer du code à un événement :

  • getfocus : devient l'objet en cours (ayant le focus)
  • lost focus : perd le focus (voir ci-dessus)
  • mouseenter: la souris passe par dessus
  • mousexit : la souris quitte l'objet
  • press (pour un bouton): on appuie sur le bouton
  • select pour un bouton radio ou une case à cocher, etc...

 

vous passerez alors sous l'éditeur de source "CODE/400" .

tous les sous programmes liès à un événement sont structurés de la manière suivante:

  • BEGACT : équivalent BEGSR, mais pour un événement
  • facteur1 : le nom de l'objet
  • facteur2 : l'événement
  • Zone résultat : le nom de la fenêtre "mère".

regardons ensemble le code:

  • Spécif F "normale", si ce n'est le mot-clé remote qui indique un fichier AS/400
    (en l'absence de ce mot-clé les fichiers sont considérés comme locaux [c'est à dire PC] et doivent être en interne.)

    Vous devez cependant, configurer vos serveur de données (on utilise en fait DDM/IP)
    par l'option "Serveur/Définition des options AS/400"

Puis vos ressource (particulièrement vos fichiers) en les attachant à un serveur :

  • Définition des variables:

msg est une constante, retour une variable numérique.

par contre msgerr de type M est une particularité de Vrpg permettant une définition de message :
–le type est M (à la place de S pour single, C pour constant, etc....)
–style définit le type de message : *INFO , *WARN , *HALT
–button , les boutons affichés (et donc utilisables)

*OK *CANCEL *NOBUTTON
*ABORT *IGNORE *YESBUTTON

on peut utiliser trois boutons

tout cela permet d'envoyer un message à l'utilisateur par DSPLY

 

regardons ce sous programme :

• les fonctions %getatr , %setatr permettent de retrouver / ou de modifier une propriété d'un objet.
(les codes opération SETATR et GETATR sont admis)

Par exemple un objet image possède un attribut FILENAME indiquant le chemin et le nom du fichier image à charger.

vous pouvez utiliser :

C 	'IMAGE1'	SETATR		path		'FILENAME'


ou bien 


C 	 			eval		%setatr('FENETRE':'IMAGE1':'FILENAME') = path 
                    

La version livrée avec WDS client 5.1 supporte le formet libre et nous pourrions écrire :

 /free
%setatr('FENETRE':'IMAGE1':'FILENAME') = path ;
/end-free


Dans l'extrait de code ci-dessus %GETATR retourne la propriété 'TEXT' de l'objet AF4MDL , c'est à dire son contenu

Pour les variables d'une fenêtre, vous pouvez aussi utiliser WRITE et READ, pour renseigner ou retrouver
tous les champs à la fois.

En fait vous devez considérer que VARPG possède plusieurs exemplaires d'une même zone :

  • un exemplaire par fenêtre possédant une zone de ce nom
  • plus un exemplaire en mémoire:

Pour affecter à la zone mémoire, le contenu d'une variable d'une fenêtre, utilisez %GETATR
ou READ qui renseigne toutes les variables de même nom sur la fenêtre et dans le pgm..

Pour affecter la zone dans la fenêtre, utilisez %SETATR ou WRITE .

Vous pouvez aussi utiliser les ordres suivants :

  • SHOWWIN (affiche une fenêtre)
  • CLEAR (met à blanc tous les champs de la fenêtre et les champs mémoire de même nom)
  • RESET (réattribut les valeurs initiales attribuée à la conception)
  • CLSWIN (ferme une fenêtre)


• Effectuons un CHAIN sur le fichier Base de Données (nous venons de faire une lecture sur le fichier REMOTE)

• si aucun enregistrement n'est trouvé, affichage d'un message d'erreur sous forme d'une boite de dialogue.

• Sinon chargement de l'objet sous fichier. Quelques différences avec les sous-fichiers 400 :

la mise à blanc se fait par CLEAR

l'ajout (l'écriture) se fait par WRITE sans gestion du numéro de rang.
READS est un nouvel ordre qui permet de lire les enregistrements SÉLECTÉS.
(READC reste valide, pour lire enregistrements modifiés)

l'affichage se fait (par défaut) en temps réel (ligne à ligne, type minitel ....)
pour éviter cela, il faut fixer l'attribut REPAINT à 0 pendant la phase de chargement puis à 1.

eval %setatr('FENETRE' : 'SOUSFICHIER' : 'REPAINT') = 0/1

et enfin la fin du programme (bouton "sortie") :

 

et enfin, l'autre RPG : e-RPG

Il s'agit de routines livrées sur le site   www-922.ibm.com  .

 

le fonctionnement est basé sur CGI et donc des programmes RPG ou COBOL.

On vous fournit un programme de service, permettant de d'affranchir du la complexité de CGI

ZhbGetInput(query : structure-qusec) pour recevoir la saisie utilisateur
ZhbGetVar('nom-variable' ) pour extraire une variable du flot recu
   Gestion du résultat
GetHtml(fichier:bib:membre) charge en mémoire une page html (venant d'un membre source)
GetHtmifs(/chemin/fichierhtml) charge en mémoire une page html (venant d'un fichier stream)
UpdHtmlVar('nom-variable' : variable) remplace /%nom-variable%/ par variable dans la page résultat
Wrtsection('section') écrit la partie section, dans le flot de données en sortie
(il faut terminer par la pseudo-section '*fini')
WrtnoSection(data : datalg) écrit un flot de données (sans utiliser de page HTML modèle)

Exemple:

la page HTMl résultat (générée avec WDS client)

$titre
Content-type: text/html
<HTML>
<BODY>
<P><h1>Affichage d'un producteur</FONT></h1></P>

$erreur
<BR><font color="red">Code producteur erron&eacute; recommencez </font>
<FORM action="/cgi-bin/affprod.pgm">
Entrez un code producteur <INPUT type="text" name="pr_code" size="6"  maxlength="6"><BR>
<BR>puis <INPUT type="submit" name="validez" value="validez">
</FORM>

$detail
<h3>/%pr_nom%/</h3><br>
<TABLE border="1">
<TBODY>
 <TR>
 <TD>Adresse </TD>
 <TD>/%pr_adr%/</TD>
 </TR>
 <TR>
 <TD>commune</TD>
 <TD>/%pr_commune%/</TD>
 </TR>
 <TD>tel</TD>
 <TD>/%pr_tel%/</TD>
 </TR>
 <TR>
 <TD>fax</TD>
 <TD>/%pr_fax%/</TD>
 </TR>
</TBODY>
</TABLE>
<P> <BR><BR>
</P>

$pied
</BODY>
</HTML>

et le pgm RPG lancé

 H bnddir('CGIDEV2/TEMPLATE2':'QC2LE':'QUSAPIBD')
H dftactgrp(*NO) actgrp('cgidev') alwnull(*usrctl)
Fprodu00001if e k disk extfile('BDVIN1/PRODU00001')
F rename(produ00001 : prodf1)
* Prototype definitions and standard system API error structure
/copy cgidev2/qrpglesrc,prototypeb
/copy cgidev2/qrpglesrc,usec
DnbrVars s 10i 0
  * Saved query string
 Dsavedquerystring...
 D s 32767 varying
  * code producteur (en aplha)
 D pr_codeA s 6
  * flag pour prb sur code producteur
 D probleme s n
  /free
   SetNoDebug(*off);
   gethtmlifs('/html/cgi/cgidev2_01r.html': '$');
   nbrvars = zhbgetinput(savedquerystring:qusec);
   pr_codeA = zhbgetvar('pr_code') ;
   probleme = *off;
   monitor ;
   pr_code = %dec(pr_codeA:6:0) ;
   on-error *all ;
   probleme = *on ;
   endmon ;
   if not probleme ;
     chain pr_code prodf1;
   endif;
   ClrHtmlBuffer() ;
   wrtsection('titre') ;
   if not probleme and
    %found(produ00001) ;
    updHTMLvar('pr_nom' : pr_nom) ;
    updHTMLvar('pr_adr' : pr_adresse) ;
    updHTMLvar('pr_commune' : pr_commune) ;
    updHTMLvar('pr_tel' : pr_tel) ;
    updHTMLvar('pr_fax' : pr_fax) ;
    wrtsection('detail') ;
   else ;
    wrtsection('erreur') ;
   endif ;
   wrtsection('pied') ;
   wrtsection('*fini') ;
   return;
 /end-free 

 

 



©AF400

 

Copyright © 1995,2004 VOLUBIS