Hola a todos:

        Se me plantea una duda (bastante técnica) que me tiene intrigado y
quisiera saber el porqué.

        Necesito averiguar que programa está provocando información
incorrecta en un fichero. Para ello he puesto un activiador sobre este
fichero. Para averiguar el programa que ejecuta el activador utilizo una (de
tantas) utilidades publicadas. La utilidad utiliza las APIs del sistema de
envío y recepción de mensajes para averiguar el nombre del programa
llamador. Los resultados son siempre correctos pero revisando su
funcionamiento me surge una duda.

        El programa hace básicamente lo siguiente:

  * Send program message                                
 C                   Call      'QMHSNDPM'               
 C                   Parm                    Pm_MsgId   
 C                   Parm                    Pm_MsgF    
 C                   Parm                    Pm_MsgDta  
 C                   Parm                    Pm_Length  
 C                   Parm                    Pm_MType   
 C                   Parm                    Pm_CSEntry 
 C                   Parm                    Pm_Counter 
 C                   Parm                    Pm_MKey    
 C                   Parm                    Qusec      

        Donde PM_Counter = 5

  * Receive program message                             
 C                   Call      'QMHRCVPM'               
 C                   Parm                    RCVM0200   
 C                   Parm                    Pm_Length  
 C                   Parm                    Pm_Format  
 C                   Parm                    Pm_CSEntry 
 C                   Parm                    Pm_Counter 
 C                   Parm                    Pm_MType   
 C                   Parm                    Pm_MKey    
 C                   Parm                    Pm_Wait    
 C                   Parm                    Pm_Action  
 C                   Parm                    Qusec      

        La lógica de esta rutina está en un programa a parte y el activador
está compilado en ILE. Por tanto, PM_Counter es igual 5 porque hay que:
        1) saltar el PEP del programa que averigua el nombre (en mi caso
CALLERID).
        2) saltar la función principal del activador.
        3) saltar el PEP del activador (es un programa ILE)
        4) saltar el programa QDBUDR (tipo OPM) que dispara el activador
        5) saltar al programa que actualiza el registro (OPM o ILE)

La cuestión es la siguiente:

        Si el programa que inicia toda la secuencia es de tipo OPM la pila
de llamadas tiene el siguiente aspecto:

        Programa                                     
 Nvl    o proce-    Módulo      Programa    Límite de
 Pet    dimiento    ILE         ILE         control  
        RAD040                              
        QDBUDR                                
      < _TRGUBICAC  TRGUBICAC   TRGUBICAC   Sí
        TRGUBICAC   TRGUBICAC   TRGUBICAC   No
      < P_CALLERID  CALLERID    CALLERID    No
        CALLERID    CALLERID    CALLERID    No

Sin embargo, si el programa es de tipo ILE tiene esta otra forma:

        Programa                                     
 Nvl    o proce-    Módulo      Programa    Límite de
 Pet    dimiento    ILE         ILE         control  
      < PEP_RAD060  RAD060      RAD060      Sí
        RAD060      RAD060      RAD060      No
      < _DB_UPDATE  QRNXDBIO    QRNXIO      No
        QDBUDR                                
      < _TRGUBICAC  TRGUBICAC   TRGUBICAC   Sí
        TRGUBICAC   TRGUBICAC   TRGUBICAC   No
      < P_CALLERID  CALLERID    CALLERID    No
        CALLERID    CALLERID    CALLERID    No

        Como se puede observar, en el segundo caso aparece una entrada
adicional en la pila de llamadas (_DB_UPDATE). ¿Por qué en ambos casos me
devuelve siempre el programa correcto cuando en el caso ILE hay una entrada
más en la pila? Tened en cuenta que PM_Counter en ambos casos es 5 (nunca
cambia).

        Reconozco que esta es una cuestión algo técnica y que mi exposición
es demasiado larga, pero quisiera "matar mi curiosidad" y agradecería una
explicación sobre este tema (si alguien la conoce, ¡claro!).

        Un saludo a todos y gracias por vuestra paciencia,


        Javier Mora
        Dpto. Informática
        Dialsur S.A.U.


__________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://coyote.combios.es/mailman/listinfo/forum.help400

Responder a