ocupar la instrucción MQPMO_NEW_CORREL_ID

Todo lo relacionado con MQ en ambiente OS/390 o z/OS
Responder
pirulete
Usuario
Usuario
Mensajes: 12
Registrado: 11 Abr 2008, 13:49
País: Chile
Ciudad: Santiago
Ocupación: Analista de produción
Ubicación: Sentado en el sofá

ocupar la instrucción MQPMO_NEW_CORREL_ID

Mensaje por pirulete » 12 Jun 2008, 23:40

Hola,

Quería ver si me podían ayudar con un problema con colas MQ desde Z/OS.

Tengo un programa que está enviando un mensaje enviando el msgid como identificador. Una aplicación remota devuelve un mensaje de respuesta, donde me envían en el correlid el mismo msgid que yo envíe, el cual es un PIC x de 16. El problema es que si leemos directamente sobre el correlid, nos devuelve un error 2207. Para remediar eso, se implemento un "bypass" para para colocar lo que estaba en el correlid en el msgid. Esto funciona bien, pero queremos sacar este bypass por lo que sin él, el programa nos va a dar error.

Estuve leyendo y una forma de arreglar el programa es usando la instrucción MQPMO_NEW_CORREL_ID, pero no tengo ni la menor idea como se usa.

Ahí es donde solicito la ayuda de alguien que me pueda explicar como usar esta instrucción u otra, que pueda hacerme enviar un msgid que pueda ser leído en el correlid, u otra solución que pueda aplicar para este tema.

Saludos y gracias
Milo Fallau
La vida es corta, disfrútala

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 367
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: IT Specialist

Re: ocupar la instrucción MQPMO_NEW_CORREL_ID

Mensaje por LuisFer » 13 Jun 2008, 12:14

El CorrelId y el MsgId son MQBYTE 24 posiciones.
Prueba en el mensaje inicial a poner el valor PIC de la variable a otra variable copiando 24 Bytes en lugar de 16.
Es decir :"1234567890123456" por "1234567890123456 "

Espero te ayude, saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 367
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: IT Specialist

Re: ocupar la instrucción MQPMO_NEW_CORREL_ID

Mensaje por LuisFer » 13 Jun 2008, 12:18

LuisFer escribió:Es decir :"1234567890123456" por "1234567890123456 "

Espero te ayude, saludos
No se que pasa hay 8 blancos
Es decir :"1234567890123456" por "1234567890123456--------"
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

pirulete
Usuario
Usuario
Mensajes: 12
Registrado: 11 Abr 2008, 13:49
País: Chile
Ciudad: Santiago
Ocupación: Analista de produción
Ubicación: Sentado en el sofá

Mensaje por pirulete » 13 Jun 2008, 16:18

Hola

Muchas gracias por la pronta respuesta.
Cree un pic X de 24 y la inicialize y metí dentro el valor que teníamos.

Ahora estamos probando, mas tarde les cuento que tal me fue con el tema.

Otra pregunta. Si me devuelven un mensaje que tiene MSGID y CORRELID, si le envío ambos para buscar no tendría problemas para hacer el mqget?

O tiene que ser necesariamente solo un identificador y el otro debe ir en none?

saludos
Milo Fallau
La vida es corta, disfrútala

pirulete
Usuario
Usuario
Mensajes: 12
Registrado: 11 Abr 2008, 13:49
País: Chile
Ciudad: Santiago
Ocupación: Analista de produción
Ubicación: Sentado en el sofá

Mensaje por pirulete » 13 Jun 2008, 20:57

Hola denuevo, les cuento que me fue mal con el tema, me sigue dando el código 2207 correlid no válido.

Para que lea por el correlID se necesita alguna condición o paramétro especial para que no de 2207?

Para ejecutar el get le muevo los siguientes valores a las variables:
MOVE 32768 TO MAXLEN
MOVE WS-ID-MSJ-MQ TO MQMD-CORRELID OF MD
MOVE MQCI-NONE TO MQMD-MSGID
* Asigna tiempo de espera (milisegundos).
MOVE WAITINT TO MQGMO-WAITINTERVAL
ADD MQGMO-WAIT MQGMO-NO-SYNCPOINT MQGMO-CONVERT
GIVING MQGMO-OPTIONS
CALL 'MQGET' USING HCONN, HREP, MD, GMO, MAXLEN,
MSI-MQ-REGISTRO, LARGO, CC, RC

No sé si necesito algo más para poder leer con el CorrelId, la verdad no soy para nada docto en el tema y necesito una explicación con peras y manzanas si se puede.

saludos y muchas gracias
Milo Fallau
La vida es corta, disfrútala

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 367
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: IT Specialist

Mensaje por LuisFer » 14 Jun 2008, 01:33

pirulete escribió:Hola

Muchas gracias por la pronta respuesta.
Cree un pic X de 24 y la inicialize y metí dentro el valor que teníamos.

Ahora estamos probando, mas tarde les cuento que tal me fue con el tema.

Otra pregunta. Si me devuelven un mensaje que tiene MSGID y CORRELID, si le envío ambos para buscar no tendría problemas para hacer el mqget?

O tiene que ser necesariamente solo un identificador y el otro debe ir en none?

saludos
No, puedes hacer la busqueda por los 2 campos, por uno o por ninguno.
Es decir si haces una MQGET buscando el MsgId 1 CorrelId 2 y existe el mensaje la API MQ lo encontrará. Tendras que añadir (si no estoy equivocado) a la GMO las opciones de MQGMO_MATCH_CORRELID y MQGMO_MATCH_MSGID .

Para el tema del 2207.
La cola de respuesta entiendo que está en e z/OS.
¿Esta cola tiene la carácteristica de ser compartida (es decir está en la CF dentro de un QSharingGroup))?.
Si es así lo mas probable es que no esté indexada y por ello te devuelva el 2207.
Revisa con el administrador de MQ la definición de la Cola. Si no lo está que la indexe por CorrelId.

Código: Seleccionar todo

2207 (X'089F')MQRC_CORREL_ID_ERROR
Explicación:
Se ha emitido una llamada MQGET para recuperar un mensaje utilizando el identificador de correlación como criterio de selección, pero la llamada no se ha ejecutado correctamente porque el identificador de correlación no está soportado en esta cola. 

En z/OS, la cola es una cola compartida, pero el atributo de cola IndexType no tiene un valor apropiado: 
Si la selección se efectúa únicamente mediante el identificador de correlación, el valor de IndexType debe ser MQIT_CORREL_ID. 
Si la selección se efectúa mediante una combinación del identificador de correlación y el identificador de mensaje, IndexType debe tener el valor MQIT_CORREL_ID o MQIT_MSG_ID.
En HP NonStop Server, es necesario un archivo por clave pero éste no se ha definido.
Código de terminación:
MQCC_FAILED

Respuesta del Programador:
Efectúe una de las siguientes operaciones: 

En z/OS, cambie el atributo de cola IndexType por MQIT_CORREL_ID. 
En HP NonStop Server, defina un archivo por clave 
Modifique la aplicación, de modo que no utilice el identificador de correlación para la selección: establezca el campo CorrelId en MQCI_NONE y no especifique MQMO_MATCH_CORREL_ID en MQGMO.
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

pirulete
Usuario
Usuario
Mensajes: 12
Registrado: 11 Abr 2008, 13:49
País: Chile
Ciudad: Santiago
Ocupación: Analista de produción
Ubicación: Sentado en el sofá

Mensaje por pirulete » 14 Jun 2008, 14:46

Muchas gracias por tu pronta respuesta Luis Fer.
El día lunes revisaré con el admin de MQ, puesto que yo soy solo un desarrollador para este sistema, y todo el control en los cics está por IBM quien da el soporte a MQ.
Milo Fallau
La vida es corta, disfrútala

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 367
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: IT Specialist

Mensaje por LuisFer » 15 Jun 2008, 04:54

pirulete escribió:Muchas gracias por tu pronta respuesta Luis Fer.
El día lunes revisaré con el admin de MQ, puesto que yo soy solo un desarrollador para este sistema, y todo el control en los cics está por IBM quien da el soporte a MQ.
Aunque la cola no sea QSG (compartida) debería indexarla igualmente.

saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

pirulete
Usuario
Usuario
Mensajes: 12
Registrado: 11 Abr 2008, 13:49
País: Chile
Ciudad: Santiago
Ocupación: Analista de produción
Ubicación: Sentado en el sofá

Mensaje por pirulete » 25 Jun 2008, 23:55

Uff por fin pudimos probar, luego de cambios e cpu y otros, logramos hacer que el admin cambiara la configuración de la cola y todo de 10 puntos.

Muchas gracias por la ayuda brindada.

Saludos
Milo Fallau
La vida es corta, disfrútala

Responder