Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 13h17   #1
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
Par défaut API RUNREXEC ISERIES

Bonjour,
J'essaye d'utiliser une API pour executer des commande à distance et pouvoir récuperer les éventuels message d'erreur.
http://philippe.soriano.pagesperso-o...dele/Rexec.htm

Héla, je ne connais pas le C inclus dans le RPG.
j'essaye de créer un fichier qui existe déjà pour récupérer le msg d'erreur.
Je récupére bien le texte du message mais je ne sais pas quoi rajouter dans le
le pavé:
// Were any errors received?

if (%len(ErrData) > 0);
// Erreur. La description de l'erreur se trouve
// dans la variable "ErrData".
???????
endif;

Merci de votre aide
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 13h50   #2
Membre éclairé
 
Homme
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 312
Points : 312
Citation:
Envoyé par cmichault
je ne sais pas quoi rajouter dans le
le pavé:
// Were any errors received?
Si tu ne sais pas quoi faire alors moi non plus !
En fait, le pavé sert à effectuer quelque chose lorsque une erreur s'est produite.
Le texte de l'erreur se trouve dans la variable ErrData.
A partir de là, c'est à toi de voir quoi faire. Tu peux analyser le message, te rendre compte que l'erreur est normale et continuer, ou arrêter tout car l'erreur n'est pas normale, en faisant par exemple un eval zonemessage=ErrData puis un exfmt d'un format écran affichant zonemessage dans une fenêtre, etc... (en supposant que le programme tourne en interactif)
PS : Il n'y a pas de C dans ce programme. Ce n'est que du commentaire !
FORMULARY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 14h21   #3
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par cmichault Voir le message
Héla, je ne connais pas le C inclus dans le RPG.
Ce n'est que du RPG !
On ne peut pas mixer dans un même source différents langages, excepté du SQL.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h04   #4
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
Mon RPG se limite au III.
J'ai rajouté l'appel du pavé ReportError() dans
if (%len(ErrData) > 0);
// Erreur. La description de l'erreur se trouve
// dans la variable "ErrData".
ReportError()
endif;
mais celui-ci me retourne un CPE0000 systématiquement.
Je pensais qu'il récupérait l'ID du message contenu dans le ErrData.

Merci de vos réponses rapides en tout cas même si je suis toujours coincé.
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 09h58   #5
Membre habitué
 
Homme
Analyste-Programmeur as/400
Inscription : août 2002
Messages : 96
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Analyste-Programmeur as/400
Secteur : Finance

Informations forums :
Inscription : août 2002
Messages : 96
Points : 116
Points : 116
Bonjour,

Pour moi, tu peux faire ceci
Code :
1
2
3
4
Monitor
ton code
on-error *all
endmon
De ce fait, si il y a une erreur, normalement, tu vas dans la section concernée.

Larry57
larry57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 11h21   #6
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
Le RPGLE n'est, hélas, pas ma tasse de thé (j'aime pas le thé).
Quelqu'un peut il me donner un exemple concret.

Si quelqu'un a déjà utilisé cette API, je suis preneur car je bloque depuis un bon bout de temps

Merci
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 18h30   #7
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
CPE0000 indique une erreur générique. Le serveur REXEC est-il démarré sur la machine distante ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 20h28   #8
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
Bonsoir,
Oui je le démarre par un STRTCPSVR REXEC que j'automatiserai quand j'arriverai à utiliser ce prog RUNREXEC
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 17h44   #9
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
La machine distante est-elle aussi un AS400 ?

Citation:
Je récupére bien le texte du message ...
Quel est ce message ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h41   #10
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
La machine distante est bien un AS400.
Citation:
Le texte dans ErrData est dans mon essai Le fichier XXXX existe déjà dans la BBL XXXXX. Le fichier XXXX n'a pas été créé.
C'est l'ID que je voudrai récupérer.

Merci pour ta patience.
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 20h15   #11
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Malheureusement, bien que l'API rexec() tourne dans ton cas sur deux systèmes i5/OS, c'est une API qui a été faite pour les systèmes Unix qui n'ont pas la possibilité de gérer les messages et les ID de messages d'erreur comme les systèmes i5/OS. Les systèmes Unix renvoient un code statut au programme appelant et peuvent aussi renvoyer un texte dans le flot de données sur "standard output" ou "standard error". Ce texte est celui du message d'erreur que tu récupères dans la variable "ErrData" mais malheureusement je ne pense pas que tu pourras récupérer également l'ID du message en question puisque l'API rexec() n'a pas été faite pour cela.

Cependant, puisque tu as 2 systèmes i5/OS en présence ici, au lieu d'appeler directement la commande CPYF avec l'API, tu pourrais appeler un CL sur la machine distante qui contiendrait la commande CPYF. Dans ce CL, tu pourrais monitorer l'erreur et renvoyer le message ID sur standard output à la place ou en supplément au message d'erreur que tu récupères dans l'appelant mais ce n'est jamais qu'un artifice faute de mieux.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 21h28   #12
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Tu es sur un IBM i et tu veux lancer quelque chose sur un autre IBM i.
Si il s'agit de commandes CL, tu peux le faire via un RUNRMTCMD, un SBMRMTCMD, par REXEC, par SSH et par FTP.
Si maintenant tu veux appeler un programme avec retour de paramètres, tu peux le faire par SQL (procédures stockées) ou à travers des Web Services.

Que veux-tu faire exactement ?
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 15h11   #13
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
j'ai une compta qui reste sur un iseries et le reste des appli qui migrent sur un autre. Je dois adapter les interfaces d'intégration et faire des CHKOBJ et pas mal d'autres commandes en remote et agir en fonction des MONMSG. Je me vois mal faire X CLP avec une seule commande pour les récupérer. Mon idée était un seul programme RUNRMT avec en paramètre la commande à exécuter et récupérer le MONMSG automatiquement.

Voilà le topo
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 17h43   #14
Membre éclairé
 
Homme
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 312
Points : 312
Les erreurs récupérées par rexec seront surtout les erreurs de communication entre les 2 AS.

Le mieux serait peut-être d'envoyer tous les fichiers nécessaires dans une bibliothèque de transfert distante, puis d'appeler un programme d'intégration sur la machine distante, qui pourra monitorer les chkobj etc... Une fois terminé, ce programme pourra envoyer un message ou exécuter un programme sur la machine d'origine pour indiquer la bonne (ou mauvaise) fin de l'intégration.

On peut même créer la biblio de transfert et envoyer un savefile pour restaurer le programme d'intégration mis à jour si celui-ci peut être modifié souvent ...

Exemple de prog en CLP :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PGM

CRTSAVF QTEMP/SAVF1
SAVOBJ (Objet1 Objet2 Objet3) BIBFIC1 *SAVF SAVF(QTEMP/SAVF1)
CRTSAVF QTEMP/SAVF2
SAVOBJ (Objet1 Objet2 Objet3) BIBFIC2 *SAVF SAVF(QTEMP/SAVF2)
CRTSAVF QTEMP/SAVF3
SAVOBJ (Objet1 Objet2 Objet3) BIBFIC3 *SAVF SAVF(QTEMP/SAVF3)
CRTSAVF QTEMP/SAVFPGM
SAVOBJ PGMINTEG BIBINTEG *SAVF SAVF(QTEMP/SAVFPGM)

OVRDBF INPUT  MABIB/FTPCMD  INTEG
OVRDBF OUTPUT MABIB/FTPCMD LOG
FTP AS400B
MONMSG CPF0000 *N DO
    /* Traitement d'une erreur de com */
ENDDO
DLTOVR INPUT
DLTOVR OUTPUT
ENDPGM
Le membre INTEG du fichier source FTPCMD contient les commandes à exécuter
Le membre LOG du fichier source FTPCMD contiendra le log des commandes FTP
Exemple de fichier FTPCMD, membre INTEG :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Utilisateur password
BIN
QUOTE RCMD CLRLIB INTEG
QUOTE RCMD CRTSAVF INTEG/SAVF1
PUT QTEMP/SAVF1 INTEG/SAVF1
QUOTE RCMD CRTSAVF INTEG/SAVF2
PUT QTEMP/SAVF2 INTEG/SAVF2
QUOTE RCMD CRTSAVF INTEG/SAVF3
PUT QTEMP/SAVF3 INTEG/SAVF3
QUOTE RCMD CRTSAVF INTEG/SAVFPGM
PUT QTEMP/SAVFPGM INTEG/SAVFPGM
QUOTE RCMD RSTOBJ *ALL INTEG *SAVF SAVF(INTEG/SAVFPGM)
QUOTE RCMD CALL INTEG/PGMINTEG
Le CLP effectue n sauvegardes dans 1 ou n savefiles (savf1 à savf3)
Le CLP effectue aussi la sauvegarde du programme d'intégration
Le FTP effectue le clear de la biblio d'integration, puis crée et envoie les savefiles, puis restaure le programme d'intégration, puis l'exécute.
FORMULARY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h29   #15
Invité de passage
 
Homme christophe michault
Inscription : octobre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme christophe michault
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2011
Messages : 9
Points : 0
Points : 0
merci pour ta réponse.
C'était ma première intention avant de découvrir le RUNREXEC.
cmichault est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web