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