|
Forums, dernières contributions
Datastage : retour erreur avec fonction deffun
Bonjour,
J'ai une petite question au niveau de la focntion deffun dans un jobcontrol dans datastage. Existe il un moyen de savoir si le deffun a réussi ou non ?
En fait, je définie une fonction appelant une routine par le biais de deffun, mais je voudrais savoir si ma fonction est valide. En effet si le nom de la routine ou la routine n'est pas présente dans le projet, je constate que mon jobcontrol plante dès qu'il utilise la fonction. mais le message n'est pas du tout explicite dans la log : donc passe du temps à rechercher la cause pour se rendre compte au final que la routine n'est pas là.
exemple: routine FWKCommunLectureParam n'existe pas dans le projet
deffun LectureParam (Arg1, Arg2) Calling 'DSU.FWKCommunLectureParam'
...
...
ArborescenceParam=LectureParam('ArborescenceParam351',ChemParam)
et là job plante avec uniquement le message suivant :
Warning Attempting to Cleanup after ABORT raised in stage Batch::BSRTP_AlimBSRTP1..JobControl
Control Job Batch::BSRTP_AlimBSRTP1 aborted.
merci pour votre aide sur ce sujet
J'ai finalement trouvé une solution qui fonctionne en exploitant une requete SQL sur le VOC de datastage
SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunLectureParam';
en passant dans le where le nom de la routine
Ainsi dans le jobcontrol avec la commande suivante, il est possible de récupérer le résultat (0 si pas présente; 1 si présente)
call DSExecute ('TCL', 'SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunRunOrJumpSavePointV2' ; ' , Output, ReturnCode)
Mais le résultat dans output a la valeur suivante :
COUNT ( * )
0
1 records listed.
c'est pourquoi il faut retravailler le resulat pour n'avoir que la valeur 0 ou 1, avec le code suivant :
OutputExploitable=Trim( (Ereplace ( Ereplace(Output, 'COUNT ( * )' ,' '), '1 records listed.' , ' ')))[3,2]
et ainsi OutputExploitable est égal à 0
Donc au final pour détecter la présence d'une routine dans mon job control, j'ai les lignes de codes suivantes
deffun RunOrJumpSavePointV2(Arg1,Arg2) calling 'DSU.FWKCommunRunOrJumpSavePointV2'
call DSExecute ('TCL', 'SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunRunOrJumpSavePointV2' ; ' , Output, ReturnCode)
OutputExploitable=Trim( (Ereplace ( Ereplace(Output, 'COUNT ( * )' ,' '), '1 records listed.' , ' ')))[3,2]
if OutputExploitable = 0
then
Call DSLogFatal('la routine FWKCommunRunOrJumpSavePointV2 n est pas presente dans le projet','')
Goto EndProcess
end
où EndProcess est une étiquette placé à la fin du code de mon jobcontrol afin de sortir du programme
|