par Michael Sansoterra - Mis en ligne le 10/03/2004
Faire communiquer les programmes d'un PC et ceux d'un iSeries
Les files d'attente sont un outil de
messagerie important pour les programmeurs
iSeries. On peut les utiliser
pour assurer la communication entre
des jobs différents sur un iSeries, ou
même entre des programmes d'un PC
et d'un iSeries...Comme les files d'attente de données
sollicitent beaucoup moins le système
que les tables de base de données,
il existe un moyen efficace
d'intégrer ou d'échanger des données
entre des programmes PC et des applications
iSeries héritées. Par ailleurs,
comme les files d'attente de données
sont propriétaires et ne sont pas accessibles
par une foule d'outils d'utilisateurs
finaux (contrairement aux tables
de base de données), elles posent généralement
moins de problèmes de sécurité.
L'exemple ci-après montre comment
utiliser des files d'attente pour communiquer entre l'iSeries et une application
PC. (Pour une rapide première
initiation avant de démarrer, voir
l'encadré « Petit rappel sur les files d'attente
de données et OLE DB ».) Le
code téléchargeable de mon exemple
est disponible à www.itpro.fr Club
Abonnés.
Files d’attente de données : Une liaison rapide entre PC et iSeries
Côté serveur de notre exemple, nous
utilisons simplement RPG et des files
d’attente de données. Côté PC, nous
utiliserons
for Applications), comme Visual
Basic ou Microsoft Access
Express (IBMDA400)
Notre application exemple utilise
des files d’attente de données pour
mettre à niveau la partie autorisation
de carte de crédit d’un système de détail
iSeries hérité. Quand un client fait
un achat, le programme POS (Point of
Sale) envoie toutes les requêtes pour
le paiement par carte de crédit, par l’intermédiaire
d’une file d’attente de
données, à un programme batch serveur
de cartes de crédit. Quand le programme
serveur reçoit la requête, il appelle
par modem (si nécessaire) la
société de traitement des cartes de crédit,
laquelle communique avec la
banque émettrice de la carte pour s’assurer
qu’il y a suffisamment d’argent
pour effectuer la transaction. Quand
une réponse est reçue, le programme
serveur renvoie la réponse de la
banque au POS via une file d’attente de
données.
Malheureusement, le système
d’appel est lent et vulnérable aux erreurs.
C’est pourquoi nous avons
choisi un package PC économique
pour traiter les cartes de crédit via
Internet. Ce package est accompagnéd’une API qui facilite à l’extrême l’intégration
du logiciel personnalisé.
Comme toujours, la direction espère
que l’ancien programme serveur d’autorisation
dial-up RPG sera facilement
remplacé par un programme PC remplissant
les quatre mêmes fonctions :
- Attendre une demande d’autorisation
- Contacter la société de traitement
des cartes de crédit - Recevoir la réponse
- Transmettre la réponse au programme
POS
Par souci de simplicité, nous n’utilisons
que deux files d’attente de données
sans clé : une pour faire une requête
d’autorisation (CARDREQ) et
une pour recevoir la réponse de la
banque (CARDRSP). Chaque file a une longueur d’enregistrement maximale
de 512 octets. Le nouveau programme
PC va :
- se mettre à l’écoute d’une file d’attente
de données pour détecter les
requêtes de carte de crédit provenant
de l’application POS héritée - transmettre les données de transaction
par carte de crédit au package
PC (c’est-à -dire, « la société de traitement
des cartes de crédit ») via des
API - recevoir la réponse de la banque via
des API - envoyer la réponse au terminal POS
iSeries via une file d’attente de données
Voyons maintenant cela plus en détail.
La figure 1 montre comment établir
une connexion du PC à l’iSeries en Une fois la connexion ouverte,
l’étape suivante consiste à ouvrir et à
« écouter » la file d’attente de données
CARDREQ pour voir si elle contient
une requête provenant du terminal
POS:
OPEN DATAQUEUE QGPM.CARDREQ
(CardNo Char(16),
ExpDate Numeric(4,0),
Amount Decimal(9,2),
MbrName Char(40),
RequestStamp Char(26),
FOR RECEIVE
On voit que la syntaxe permettant
d’ouvrir une file d’attente de données
comprend trois parties :
- la commande open data queue (y
compris le nom de la bibliothèque et
de la file d’attente) - le format d’enregistrement (définitions
de champs) - la direction du message (send/receive)
Contrairement aux tables de base
de données, les entrées des files d’attente
de données n’ont pas de descriptions
de champs externes. Le fait de
fournir l’information de champ permet
à IBMDA400 de construire l’objet ADO
RecordSet familier, complet avec les
noms et attributs de champs. Plus important,
comme les files d’attente de
données contiennent des messages
définis par l’utilisateur, IBMDA400
traite les difficultés de conversion numérique
et la traduction EBCDIC/ASCII.
Si l’on spécifie un CCSID de 65535,
les données ne seront pas traduites, ce
qui est pertinent pour des données binaires.
La figure 2 présente les types de
données utilisables avec des files d’attente
de données. Comme les types
sont indiqués en termes SQL, assurezvous
que vous savez faire correspondre
les types de données SQL avec
les types de données de votre langage
évolué. De plus, certains types de données
bien connus sont absents de la
liste : Date, TimeStamp et VarChar.
Vous pouvez quand même utiliser ces
types en recourant à des substituts appropriés
(par exemple, utiliser
Character pour Date and Time, utiliser
Small Integer with Character pour
VarChar) en même temps que les fonctions
VBA appropriées pour leur réimposer
leur type correct dans VBA. Ne
faites cela que si vous savez vraiment
comment construire le type de données
avec VBA : faute de quoi, vous risquez
d’obtenir des résultats imprévisibles.
La figure 3 montre le code permettant
d’ouvrir et de lire la file d’attente
de données CARDREQ. La commande
open data queue est transmise à la méthode
.Execute de l’objet de connexion (un objet Command fonctionnera
aussi) avec un ADO
RecordSet recevant toutes les entrées
dans la file d’attente.
Quand une file d’attente de données
est ouverte, toutes les entrées de la file d’attente disponibles sont peuplées
comme des lignes dans le
RecordSet. Le RecordSet sera un curseur
en retransmission seule, lecture
seule. N’oublions pas qu’avec des ADO
RecordSet, la première lecture est effectuée automatiquement dès que la
file d’attente est ouverte.
En outre, quand une entrée de file
d’attente de données est lue, elle est
supprimée de la file d’attente. Dans
cette illustration, l’entrée comporte
cinq champs : numéro de carte, date
d’expiration, montant, nom et timbre
de requête. (C’est une représentation
caractère du champ TimeStamp de 26
octets.) Bien entendu, les définitions de champs indiquées ici devront correspondre
à celles du programme POS
RPG.
Incidemment, si une file d’attente
de données est créée avec l’option
Sender (*Yes) (qui inclut l’information
job et utilisateur pour chaque entrée
de la file d’attente de données),
IBMDA400 ajoutera automatiquement
quatre champs de plus au RecordSet :
JobName, UserProfile, JobID (numéro de job) et UserName (utilisateur courant).
L’ouverture d’une file d’attente est
une opération relativement longue. S’il
faut absolument aller vite, laissez la file
d’attente de données ouverte. Dès que
la propriété end of file (.EOF) est vraie,
plutôt que de la fermer et de l’ouvrir,
invoquez la méthode .Requery pour
voir si la file d’attente contient de nouvelles
entrées.
Téléchargez cette ressource
Travail à distance – Guide IT et Métiers
Le travail à distance met à l'épreuve la maturité numérique des entreprises en termes de Cybersécurité, d'espace de travail, de bien-être des collaborateurs, de communication et gestion de projet à distance. Découvrez, dans ce nouveau Guide Kyocera, quels leviers activer prioritairement pour mettre en place des solutions de travail à domicile efficaces, pérennes et sécurisées.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Top 6 de la sécurité des secrets
- Déploiement Data Zone de votre IA !
- Le nouvel espace-temps de la transformation digitale : redéfinition des rôles dans les projets IT
- Facturation électronique : les craintes des entreprises liées à la réforme
- Cyber-assurances, priorité ou faux remède pour les TPE et PME ?