CL - Terminer volontairement son travail en erreur

RPG (3 et 4, free), CL, SQL, etc...
Répondre
Etienne PETIT
Messages : 5
Enregistré le : mer. 08 févr. 2017, 17:37:06

CL - Terminer volontairement son travail en erreur

Message 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.

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

arret du job

Message 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                                                        
Christian Massé (Volubis.fr)

Etienne PETIT
Messages : 5
Enregistré le : mer. 08 févr. 2017, 17:37:06

Message 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.

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

fin de travail

Message 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...)
Christian Massé (Volubis.fr)

Etienne PETIT
Messages : 5
Enregistré le : mer. 08 févr. 2017, 17:37:06

Message 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!

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

CCSID

Message par cmasse »

Sinon,

Code : Tout sélectionner

CHGJOB CCSID(297)
Christian Massé (Volubis.fr)

Répondre