|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
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 |
|
|
00
|
|
|
#2 | |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 253 ![]() |
Citation:
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 ! |
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
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é. |
|
|
00
|
|
|
#5 | ||
|
Membre habitué
![]() Analyste-Programmeur as/400 Inscription : août 2002 Messages : 96 ![]() |
Bonjour,
Pour moi, tu peux faire ceci Code :
Larry57 |
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
CPE0000 indique une erreur générique. Le serveur REXEC est-il démarré sur la machine distante ?
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
Bonsoir,
Oui je le démarre par un STRTCPSVR REXEC que j'automatiserai quand j'arriverai à utiliser ce prog RUNREXEC |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
La machine distante est-elle aussi un AS400 ?
Citation:
|
|
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
La machine distante est bien un AS400.
Citation:
Merci pour ta patience. |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
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. |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
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 ? |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
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 |
|
|
00
|
|
|
#14 | ||||
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 253 ![]() |
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 :
Le membre LOG du fichier source FTPCMD contiendra le log des commandes FTP Exemple de fichier FTPCMD, membre INTEG : Code :
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. |
||||
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() christophe michaultInscription : octobre 2011 Messages : 9 ![]() |
merci pour ta réponse.
C'était ma première intention avant de découvrir le RUNREXEC. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com