Page 1 sur 1

API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 12:42:49
par Karine
Bonjour à tous,

auriez-vous un exemple de pgm Cl ou Rpg appelé par une API Java et qui reçoit des objets en paramètres ?

merci, bonne journée

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 13:40:07
par SebastienB
Bonjour,

voici un exemple :

Code : Tout sélectionner

import com.ibm.as400.access.AS400;

// Connection IBMi
AS400 IBMi = new AS400("IBMI", env.getProperty("jdbc.user"), env.getProperty("jdbc.password"));

// Déclaration d'un tableau de paramètres
        ProgramParameter[] listeParametres;
        ProgramCall program;
try {

            listeParametres = new ProgramParameter[1]; // paramètres (1 input)
            // Affectation des paramètres
            listeParametres[0] = new ProgramParameter(new AS400ZonedDecimal(9, 0).toBytes(parametre));

            program = new ProgramCall(IBMi);

            // Set the program name and parameter list.
            program.setProgram("/QSYS.LIB/BIBLIOTHEQUE.LIB/PROGRAMME.PGM", listeParametres);
            program.run();

            IBMi.disconnectAllServices();

        } catch (Exception e) {
            IBMi.disconnectAllServices();
        }

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 13:45:20
par Karine
merci pour cet exemple

Auriez-vous la partie programmes As400 en exemple ?

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 13:58:17
par SebastienB
Il s'agit d'un programme qui accepte en paramètre un champ de type zoned(9).

Si votre programme comporte plus de paramètres, il faut modifier la ligne :

Code : Tout sélectionner

listeParametres = new ProgramParameter
puis les renseigner dans le tableau de paramètre :

Code : Tout sélectionner

listeParametres[0] = new ProgramParameter(new AS400ZonedDecimal(9, 0).toBytes(parametre));

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 14:03:31
par Karine
J'ai une Api Java sur un serveur Tomcat qui appelle un pgm As400.
La partie Api Java est ok.
Je cherche un exemple de pgm As400 appelé par une telle API.
Le pgm As400 reçoit des paramètres de l'Api.
Il existe plusieurs façons de construire le pgm As400, je recherche un retour d'expérience côté As400.

merci

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 14:07:20
par SebastienB
Le programme doit avoir une interface / prototype pour capter les paramètres reçus

Code : Tout sélectionner

dcl-pr PROGRAMME extpgm('PROGRAMME');
  PROGRAMME zoned(9)  const ;
end-pr;

dcl-pi *n;
  PROGRAMME zoned(9)  const ;
end-pi;

Re: API Java qui appelle pgm Cl/Rpg

Posté : mer. 08 mars 2023, 14:25:29
par Karine
merci mais vous faites comment ? Via procédure stockée ? Pcml ? Autres ?

Re: API Java qui appelle pgm Cl/Rpg

Posté : ven. 10 mars 2023, 10:15:43
par vazymimil
Bonjour,

Dans l'exemple de SebastienB, il n'y a besoin de rien de plus, ni PCML, ni procédure stockée. Quand program.run() est exécuté, BIBLIOTHEQUE/PROGRAMME est appelé via le servie de commande à distance (STRHSTSVR *RMTCMD) et reçoit un paramètre qu'il peut utiliser parce que le programme java l'encode comme un zoned(9). C'est ce que pourrait faire une commande CALL en CL

Dans votre cas l'API vous donne le choix entre différentes manières d'appeler un programme ?

Re: API Java qui appelle pgm Cl/Rpg

Posté : ven. 10 mars 2023, 14:15:26
par Karine
Je vous remercie de vos explications-)
Aujourd'hui l' API n'appelle pas encore de pgm As400 et je recherche la meilleure façon de faire

Re: API Java qui appelle pgm Cl/Rpg

Posté : ven. 10 mars 2023, 17:59:38
par Karine
@SebastienB, @vazymimil , je vous remercie de votre aide, c'est tout bon, ça fonctionne -)
Bon week-end