Hola:
Te env�o un ejemplo con la API QMHRCVM que es parecida y que tiene un tratamiento de los campos con desplazamiento tipo CHAR(*).
Espero que te sirva.
--
Loinaz Balaguer
T�cnica de Sistemas
Departamento de Nuevas Tecnolog�as
Ayuntamiento de Vitoria-Gasteiz
[EMAIL PROTECTED]
Fran Mart�n escribi�:
Hola foro,
Alguien me podr�a explicar, como mediante el API QMHRTVM( de manejo de mensajes) , puedo obtener el tipo de variable y la longitud de un ID de mensajes con par�metros.
P.E:
Texto del mensaje : La llamada al programa &1 es fallida.
Necesitar�a saber el tipo de variable que es el parametro &1
Gracias.
/*****************************************************************/
PGM
/* */
/* PARAMETROS PARA EL API- QMHRCVM-RECIBIR MENSAJE */
/* */
DCL VAR(&SNDMSGLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&SNDFORMAT) TYPE(*CHAR) LEN(8)
DCL VAR(&SNDMSGTYP) TYPE(*CHAR) LEN(10)
DCL VAR(&SNDMSGKEY) TYPE(*CHAR) LEN(4)
DCL VAR(&SNDWAIT) TYPE(*CHAR) LEN(4)
DCL VAR(&SNDACTION) TYPE(*CHAR) LEN(10)
DCL VAR(&RCVMSG) TYPE(*CHAR) LEN(1000)
DCL VAR(&RCVMSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&RCVMSGTYP) TYPE(*CHAR) LEN(2)
DCL VAR(&WAIT) TYPE(*DEC) LEN(15 5) VALUE(-1)
DCL VAR(&RCVERRCD) TYPE(*CHAR) LEN(15)
DCL VAR(&RCVSEV) TYPE(*DEC) LEN(2 0)
DCL VAR(&MSGOFFSET) TYPE(*DEC) LEN(4 0)
DCL VAR(&RCVLENTXT) TYPE(*DEC) LEN(4 0)
DCL VAR(&RCVMSGTXT) TYPE(*CHAR) LEN(256)
DCL VAR(&RCVDATE) TYPE(*CHAR) LEN(7)
DCL VAR(&RCVTIME) TYPE(*CHAR) LEN(6)
/* */
/*****************************************************************/
/* SE COMPLETAN LOS PARAMETROS PARA EL API */
/*****************************************************************/
CHGVAR VAR(%BIN(&SNDMSGLEN 1 4)) VALUE(1000)
CHGVAR VAR(&SNDFORMAT) VALUE('RCVM0200')
CHGVAR VAR(&SNDMSGTYP) VALUE('*ANY')
CHGVAR VAR(&SNDMSGKEY) VALUE(' ')
CHGVAR VAR(%BIN(&SNDWAIT)) VALUE(&WAIT)
CHGVAR VAR(&SNDACTION) VALUE('*OLD')
CHGVAR VAR(%BIN(&RCVERRCD 1 4)) VALUE(15)
/* */
LEERCOLA: CALL PGM(QMHRCVM) PARM(&RCVMSG &SNDMSGLEN +
&SNDFORMAT &MSGLIB &SNDMSGTYP +
&SNDMSGKEY &SNDWAIT &SNDACTION &RCVERRCD)
/* */
/* CHEQUEA SI BYTES AVAILABLE=0 O ID.MENSAJE=' ' .*/
/* */
IF COND(%BIN(&RCVMSG 5 4) *EQ 0) THEN(GOTO +
CMDLBL(LEERCOLA)) /* bytes available = 0 */
CHGVAR VAR(&RCVMSGID) VALUE(%SST(&RCVMSG 13 7))
IF COND(&RCVMSGID *EQ ' ') THEN(GOTO +
CMDLBL(LEERCOLA)) /* if impromptu +
message, this field is blanks */
/* */
/* OBTENER DESCRIPCION DEL MENSAJE */
/* */
IF COND(%BIN(&RCVMSG 161 4) *EQ 0) THEN(DO) /* +
if length of message returned =0, +
impromptu message */
CHGVAR VAR(&MSGOFFSET) VALUE(177)
CHGVAR VAR(&RCVLENTXT) VALUE(%BIN(&RCVMSG 153 4)) +
/* impromptu message text returned */
ENDDO
ELSE CMD(DO)
CHGVAR VAR(&MSGOFFSET) VALUE(177 + %BIN(&RCVMSG +
153 4))
CHGVAR VAR(&RCVLENTXT) VALUE(%BIN(&RCVMSG 161 4))
ENDDO
CHGVAR VAR(&RCVMSGTXT) VALUE(%SST(&RCVMSG +
&MSGOFFSET &RCVLENTXT))
/* */
/* OBTENER RESTO DE PARAMETROS */
/* */
CHGVAR VAR(&RCVSEV) VALUE(%BIN(&RCVMSG 9 4))
CHGVAR VAR(&RCVMSGTYP) VALUE(%SST(&RCVMSG 20 2))
/* */
GOTO CMDLBL(LEERCOLA)
FIN: ENDPGM
