Page 1 sur 1

CL - Terminer volontairement son travail en erreur

Posté : mar. 05 sept. 2017, 16:13:48
par Etienne PETIT
Bonjour à tous.

Je crée un petit programme qui lance une commande à distance par RUNRMTCMD et reste actif pour surveiller le résultat du job soumis à distance.

Tout fonctionne bien, et le travail "local" m'envoie bien OK si tout va bien, et NOK en cas d'erreur.
C'est parfait pour mes tests, mais pour qu'Automator affiche une erreur, il faut que le travail se termine de façon anormale (code 20, 50...).

Il ne faut pas arrêter le sous-système car on en aura encore besoin à la fin du job, donc on oublie le code 50.
J'ai essayé de lancer une erreur non monitorée, mais j’atterris en MSGW. En utilisant une réponse automatique, le programme l'ignore et mon job se termine en code 0.

Quelqu'un aurait-il une astuce de programmeur pour générer une erreur dans son propre programme de façon à ce que le travail issu finisse en code 20 ?

Merci d'avance!

Étienne.

arret du job

Posté : mar. 05 sept. 2017, 16:36:16
par cmasse
SI le pgm est le premier de la pile (dans le job soumis), ce code envoi un message d'erreur à l’interpréteur de commande qui arrête le job avec une gravité 20

Code : Tout sélectionner

PGM                                                            
     SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('arret +   
                du pgm') TOPGMQ(*PRV (*)) MSGTYPE(*ESCAPE)                      
ENDPGM                                                        

Posté : mer. 06 sept. 2017, 16:28:43
par Etienne PETIT
Bonjour Christian,

Merci pour ta réponse.

Avant de clôturer cette discussion, connaîtrais-tu un moyen de monitorer la fin anormale du travail distant ?

Un message "OK" est envoyé en fin de programme si tout se passe bien, un message "NOK" est envoyé par monitoring global du programme, mais comment gérer le fait que le travail soumis sur le système distant s'arrête en cours de route?

Merci d'avance.

Étienne.

fin de travail

Posté : mer. 06 sept. 2017, 16:48:54
par cmasse
Ce Select SQL donne la liste des codes fin (lecture du DSPLOG) pour un travail donné (ici MYSQLD)

Code : Tout sélectionner

select substr(message_text, position('code fin' IN message_text) + 9 , 2) 
 from table (HISTORY_LOG_INFO() ) as x  
where message_id = 'CPF1164' and FROM_JOB like '%MYSQLD%'
si c'est sur un autre système, il faut se connecter avant (JDBC, DRDA, etc...)

Posté : jeu. 07 sept. 2017, 13:45:07
par Etienne PETIT
Merci beaucoup Christian, c'est ce type d'information que je recherchais!

Une petite correction cependant :
J'obtiens en retour de la requête un conflit de CCSID : "Conversion de caractères entre CCSID 1200 et CCSID 65535 incorrecte." (SQL0332).

En effet, j'obtiens quelque-chose d'illisible en affichant la colonne message_texte seule.

J'ai trouvé la fonction CAST pour modifier le CCSID, et la fonction position ne fonctionnait pas, j'ai utilisé la fonction INSTR.

Ma requête finale :
select substr(CAST(message_text AS char(500) CCSID 297),
instr(CAST(message_text AS char(500) CCSID 297), 'code fin') + 9, 2)
from table (HISTORY_LOG_INFO() ) as x where message_id = 'CPF1164'

Merci en tous cas pour toute l'aide apportée!

CCSID

Posté : jeu. 07 sept. 2017, 14:27:13
par cmasse
Sinon,

Code : Tout sélectionner

CHGJOB CCSID(297)