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


Responder a