![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2008
Messages: 14
|
Bonjour,
J'aimerais savoir si dans un CLLE, il est possible d'extraire la bibliothèque d'appel de celui ci. La commande RTVJOBA ne me permet pas, du moins pour ce que j'en sais, d'extraire cette information... Merci pour votre aide. |
|
|
|
|
|
#2 (permalink) |
|
Membre chevronné
![]() Date d'inscription: novembre 2004
Localisation: Région parisienne
Messages: 615
|
RTVJOBA c'est pour le JOB comme son nom l'indique.
En mode interactif, un JOB commence au logon et se termine au logoff. En mode batch, le job est créé lors de la soummission et se termine lorsque le traitement batch est fini (bien ou pas bien). Pour extraire les infos sur les objets, la commande à utiliser est : Code :
RTVOBJD OBJ(*LIBL/MONPGMCL) OBJTYPE(*PGM) RTNLIB(&RTNLIB)
__________________
Philippe |
|
|
|
|
|
#3 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2008
Messages: 14
|
Bonjour,
Merci pour votre réponse. Mais mon problème est plus complexe. Une application développée en DOT-NET fait appel à des procédures stockées sur l'AS400. Ces procédures stockées appelent à leur tour un CLLE. Il y a une procédure stockée pour l'environnement de prod, et une autre autre pour l'environnement de developpement (tests, etc...) Le CLLE appelé par la procédure stockée doit pouvoir installer le bon environnement ( environnement de PROD ou de DEV). L'application DOT-NET appelle ma procédure stockée en indiquant la blibliothèque : CALL BIB_PROD/PROC_STOCK. Or, au moment de l'appel, je ne sais pas dans mon CLLE depuis quel environnement (bibliothèque) je suis appelé D'où ma question : y a-t-il un moyen de connaitre la bibliothèque d'appel au moment de l'exécution. Merci pour votre aide. |
|
|
|
|
|
#4 (permalink) | |
![]() |
Citation:
Personnellement, en dehors de la solution proposée par Philippe, je ne pense pas. La façon la plus simple et la plus déterministe est de passer un paramètre au CLLE qui lui indique l'environnement, par exemple le nom de la bibliothèque. Les deux procédures cataloguées pour les deux environnements, chacune d'elle sachant dans quel environnement elle est, elle passe cet environnement en paramètre au CLLE et le tour est joué. Le CLLE installera l'environnement adéquat en fonction du paramètre qu'il reçoit.
__________________
Hédhili Jaïdane. Consultant/Formateur Indépendant : AS/400-iSeries-Cobol Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
|
|
|
|
|
|
|
#5 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 13
|
Bonjour,
Pour compléter le message précédent, s'il implique beaucoup de modification, la solution serait de faire un module RPG comme point d'entrée du programme qui irait chercher la bibliothèque en position 81 de la PSDS et la passerait comme paramètre au module CLLE. |
|
|
|
|
|
#7 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: août 2008
Localisation: Voiron
Messages: 22
|
Bonsoir,
Les solutions précédentes sont les plus pragmatiques et ce sont, de loin, celles que je privilégie également. Mais pour le cas ou cela intéresserait quelqu'un un jour, voici un rpg retournant en parm le nom et la bib de son prog appelant (ou blanc si erreur). Il est basé sur l'utilisation des instructions MI : MATINV (materialisation de la pile d'invocation du job) et MATPTR (materialisation d'un pointeur). Code :
*********************************************************
** Retourne en parm le nom et la bib du prog appelant **
*********************************************************
H DftActGrp(*NO)
h option(*srcstmt:*nodebugio:*noshowcpy)
D InvStk ds 32768
D InvBytPrv 9b 0 INZ(%Size(InvStk ))
D InvBytAvl 9b 0
D InvNbrEnt 9b 0
D InvMrkCnt 9b 0
D pInvEnt s *
D InvEnt ds 128 based(pInvEnt)
D Reserved32 32
D pInvPgm *
D MatTpl ds 100
D MatBytPrv 9b 0 INZ(%Size(MatTpl ))
D MatBytAvl 9b 0
D MatPtrTyp 1
D 2
D MatPtrCtx 30
D 2
D MatPtrObj 30
* -- Prototypes instructions MI
D MatPtr pr extproc('_MATPTR')
D Mp1 like(MatTpl)
D Mp2 *
D MatInvS pr extproc('_MATINVS2')
D Mi1 like(InvStk)
* -- Parametres
D ObjPgm s 30
D ObjLib s 30
C *Entry Plist
C Parm ObjPgm
C Parm ObjLib
C callp MatInvS (InvStk)
C eval pInvEnt = %addr(InvStk) + 16
C + ((InvNbrEnt - 3) * 128)
C callp(e) MatPtr(MatTpl:pInvPgm)
C eval ObjPgm = *blank
C eval ObjLib = *blank
c if not %Error and MatBytAvl > 0
C Eval ObjPgm = %Trimr(MatPtrObj)
C Eval ObjLib = %Trimr(MatPtrCtx)
C endif
C eval *inlr = *on
|
|
|
|
|
|
#8 (permalink) |
![]() |
Un petit complément à tester à loisirs pour les cobolistes curieux :
- à partir de la V5R4, on peut récupérer dans un programme Cobol le statut de ce programme (Cobol) en déclarant la clause PROGRAM STATUS dans les SPECIAL-NAMES. Lorsqu'il y a une erreur dans l'exécution du programme (plantage), le nom du programme, la bibliothèque, le module, le code ereur, etc... sont renvoyés par le système dans une variable associée à PROGRAM STATUS. En utilisant les DECLARATIVES et USE AFTER STANDARD ERROR on récupère ces données et on les renvoie au programme appelant à travers un paramètre. Mais il faut qu'il y ait plantage, alors on le provoque : un simple READ non précédé par un OPEN et le tour est joué. J'essaierai de faire un exemple pour ceux qui sont intéressés.
__________________
Hédhili Jaïdane. Consultant/Formateur Indépendant : AS/400-iSeries-Cobol Bienvenue sur le forum - Aide sur l'utilisation des boutons Règles du forum Pensez surtout au tag
|
|
|
|
|
![]() |
![]() |
||
Dans un CLLE : Extraction bibliothèque d'appel
|
||
| Outils de la discussion | |
|
|