(en anglais ASPgmCall)
ASAppelPgm est une alternative à ASLanceRPC.
Le but est le même : l’appel de programmes natifs, mais avec une autre approche.
Tout d’abord, il n’est pas nécessaire d’importer la description du programme dans l’analyse.
Cette description pourra être :
· soit en syntaxe PCML intégrée au programme
· soit en syntaxe PCML dans un fichier de l’IFS
· soit une description de programme effectuée avec le configurateur RPC/DATAQ.
Ensuite, les valeurs d’entrée/sortie sont passées directement à la fonction, soit un par un, soit par une variable de type structure.
Syntaxe
bResult = ASAppelPgm(DescProgramme, NomProgramme [, Connexion], Param1 [, Param2 [, Parm3, ...] ])
Paramètres
bResult
Booléen - Vrai si la commande a réussi, Faux en cas d'erreur.
DescProgramme
Chaîne – correspond à l’identité du programme. Peut être :
- *PGM/PGMNAME si PGMNAME est décrit via le configurateur RPC/DTAQ
- un chemin de l’IFS (par exemple "/pgm_defs/pgmname.pcml") vers un fichier PCML contenant la description
- une chaîne multi-ligne contenant le source PCML correspondant à la description du programme.
NomProgramme
Chaîne – correspond au nom réel du programme, ou chaîne vide si on doit utiliser le nom présent via DescProgramme. Est ignoré si DescProgramme est de la forme *PGM/XXX.
Connexion [optionnel]
Connexion - nom de la connexion
Param1, Parm2 , …
Variable ou valeurs correspondant aux paramètres.
Détail
Pour une première approche, vous pouvez consulter l’exemple ‘PgmCall’ qui montre différentes façons d’appeler le programme RPCSAMPLE via ASAppelPgm.
Pour les programmes simples, on peut par exemple donner les paramètres un par un à ASAppelPgm. Par exemple :
SI PAS ASPgmCall("*PGM/RPCSAMPLE", "", cnx, OP1, STR1, OP2, STR2, OP3) ALORS
Erreur(ErreurInfo(errComplet))
FIN
Il faut dans ce cas que les valeurs fournies soient bien sûr dans le même ordre. La description fournie (ici une description Easycom) sert à connaître les tailles AS/400 et usages de chaque élément.
Il est également possible de fournir une structure. Par exemple :
STStrpcsample est structure
rOp1 est réel
sStr1 est chaîne sur 20
sOp2 est chaîne
sStr2 est chaîne sur 30
rOp3 est réel
FIN
stRpcSample est STStrpcsample
stRpcSample:rOp1 = OP1
stRpcSample:sStr1 = STR1
stRpcSample:sOp2 = OP2
stRpcSample:sStr2 = STR2
SI PAS ASPgmCall("*PGM/RPCSAMPLE", "", cnx, stRpcSample) ALORS
Erreur(ErreurInfo(errComplet))
FIN
La structure devra bien entendu refléter les paramètres véritables.
Enfin, il est également possible d’utiliser une syntaxe PCML présente dans un fichier de l’IFS. Par exemple:
SI PAS ASPgmCall("/tmp/rpcsample.pcml", "", cnx, OP1, STR1, OP2, STR2, OP3) ALORS
Erreur(ErreurInfo(errComplet))
FIN
La syntaxe PCML pour RPCSAMPLE est la suivante :
<pcml version=
<!-- PCML source for calling "RPCSAMPLE" program -->
<!-- Program "RPCSAMPLE" and its parameter list -->
<program name="RPCSAMPLE" path=
<data name="Op1" type= length="5" precision="2" usage=
<data name="Str1" type="char" length= usage=
<data name="Op2" type="packed" length="5" precision="2" usage=
<data name="Str2" type="char" length="30" usage=
<data name="Op3" type="packed" length="10" precision="4" usage=
</program>
</pcml>
Il est également possible de passer directement le PCML à la place du nom du fichier.
C’est un langage conçu par IBM pour les appels de programmes et peut être généré en sortie de compilation COBOL ou RPG ILE. Nous y retrouvons les types natifs, et la possibilité de decrire une procédure de programme de service.