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.
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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part RTVOBJD OBJ(*LIBL/MONPGMCL) OBJTYPE(*PGM) RTNLIB(&RTNLIB)
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.
Bonjour.
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.
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.
+1 avec HJ et vazymimil. C'est en effet une solution assez simple envisageable.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 ********************************************************* ** 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
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.
Boujour,
Merci pour toutes vos réponses.
Je tacherais de mettre en oeuvre une des solutions évoqués ( par
curiosité intellectuelle)
Cdt.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager