Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > AS/400

AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.

Réponse
 
Outils de la discussion
Vieux 03/11/2008, 11h47   #1 (permalink)
Invité régulier
 
Date d'inscription: mai 2008
Messages: 14
Par défaut Dans un CLLE : Extraction bibliothèque d'appel

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.
LIANAZEL est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2008, 13h32   #2 (permalink)
Membre chevronné
 
Avatar de Mercure
 
Date d'inscription: novembre 2004
Localisation: Région parisienne
Messages: 615
Par défaut

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
Mercure est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/11/2008, 16h24   #3 (permalink)
Invité régulier
 
Date d'inscription: mai 2008
Messages: 14
Par défaut Dans un CLLE : Extraction bibliothèque d'appel : précisions

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.
LIANAZEL est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/11/2008, 16h59   #4 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Localisation: Tunis et Ailleurs
Messages: 739
Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

Citation:
Envoyé par LIANAZEL Voir le message
Bonjour,
...
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).
...
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.
__________________
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
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/11/2008, 17h54   #5 (permalink)
Invité régulier
 
Date d'inscription: octobre 2008
Messages: 13
Par défaut

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.
vazymimil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/11/2008, 21h39   #6 (permalink)
Membre chevronné
 
Avatar de Mercure
 
Date d'inscription: novembre 2004
Localisation: Région parisienne
Messages: 615
Par défaut

+1 avec HJ et vazymimil. C'est en effet une solution assez simple envisageable.
__________________
Philippe
Mercure est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/11/2008, 00h41   #7 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: août 2008
Localisation: Voiron
Messages: 22
Par défaut

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
jump400 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/11/2008, 13h42   #8 (permalink)
Modérateur
 
Avatar de Hédhili Jaïdane
 
Date d'inscription: juin 2007
Localisation: Tunis et Ailleurs
Messages: 739
Envoyer un message via Yahoo à Hédhili Jaïdane Envoyer un message via Skype™ à Hédhili Jaïdane
Par défaut

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
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/11/2008, 10h25   #9 (permalink)
Invité régulier
 
Date d'inscription: mai 2008
Messages: 14
Par défaut

Boujour,


Merci pour toutes vos réponses.

Je tacherais de mettre en oeuvre une des solutions évoqués ( par
curiosité intellectuelle)

Cdt.
LIANAZEL est déconnecté   Envoyer un message privé Réponse avec citation
NEWS AUTRESAdaAlgoAssembleurBasicCobolFortranLaTeXMATLABPascalPerlPrologPurebasicRéseauRubySystèmesXMLRAD

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > AS/400



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide