Hola Juan:
    Excelente idea lo de la ventanita.
    En relaci�n al mensaje en la linea 24, te adjunto el contenido de un correo enviado al Foro por Miguel Angel Aragones para solucionar este punto. Aunque te soy franco, me parece m�s interesante tu soluci�n.
    Saludos.
 
Erwin Toledo
 
 
From: Miguel Angel Aragones [[EMAIL PROTECTED]]
Sent: Mi�rcoles, 06 de Marzo de 2002 04:35 a.m.
To: Forum Help400
Subject: Mensajes de interrupci�n
 
Por si a alguien le interesa, adjunto una soluci�n que he encontrado en
una web dedicada al AS/400.
Se trata de conseguir que los mensajes de interrupci�n aparezcan en la
�ltima l�nea de la pantalla.
 
/* program to handle break messages */                    
 PGM        PARM(&MSGQ &MSGQLIB &MSGK)                     
                                                           
 DCL        VAR(&MSGQ) TYPE(*CHAR) LEN(10)                 
 DCL        VAR(&MSGQLIB) TYPE(*CHAR) LEN(10)              
 DCL        VAR(&MSGK) TYPE(*CHAR) LEN(4)                  
 DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)              
 DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                 
 DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                 
 DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)              
 DCL        VAR(&MSGTXT) TYPE(*CHAR) LEN(132)
                                                           
 /* receive the break message */                           
 RCVMSG     MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGK) RMV(*NO) +  
              MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +  
              SNDMSGFLIB(&MSGFLIB) MSG(&MSGTXT)
 
IF         COND(&MSGID = ' ') THEN(DO)
/* if there's no msgid, use &msgtxt and CPF9897 */
/* to satisfy status message requirements */
CHGVAR     VAR(&MSGID) VALUE('CPF9897')
CHGVAR     VAR(&MSGFLIB) VALUE('QSYS') 
CHGVAR     VAR(&MSGF) VALUE('QCPFMSG') 
CHGVAR     VAR(&MSGDTA) VALUE(&MSGTXT) 
ENDDO
 
 /* resend it as a status message */                       
 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +           
              MSGDTA(&MSGDTA) TOPGMQ(*EXT) MSGTYPE(*STATUS)
MONMSG     MSGID(CPF0000)
ENDPGM                   
 
Give this program a meaningful name (perhaps something like MSGH, for
message handler) and compile it using Create CL Program (CRTCLPGM) command.
 
Next, determine the name of your user profile's message queue. Your
message queue is probably named the same as your user profile, because
the default value for the MSGQ parameter of the Create User Profile
(CRTUSRPRF) command is *USRPRF. If you're in doubt, use the Display User
Profile (DSPUSRPRF) command to see what message queue you're using.
 
Every time you sign on, you have to tell the system that this program is
going to handle break messages for your user profile's message queue. To
do that, I added the following line to my initial program. I'm referring
to the one specified in the INLPGM parameter of the Create User Profile
(CRTUSRPRF) command.
 
CHGMSGQ    MSGQ(THOLT) DLVRY(*BREAK) PGM(MSGH)
 
If you don't have your own initial program, but have to share one with
other people, maybe you could create your own initial program that
changes the message queue and then calls the shared initial program
.
-----Original Message-----
From: Juan E. Garc�a [mailto:[EMAIL PROTECTED]]
Sent: Lunes, 15 de Abril de 2002 06:24 a.m.
To: [EMAIL PROTECTED]
Subject: L�nea 24 (Os deb�a la explicaci�n)

 
Buenas,
 
Tengo un proceso sometido lanzado desde un programa interactivo. Cuando termina, el proceso sometido quer�a que mandase un mensaje al proceso interactivo. Lo he intentado usando la l�nea 24 de la pantalla pero no ha habido forma, en cambio lo he conseguido sacando una ventanita en el proceso interactivo y no queda nada mal. De hecho lo estoy usando para que se comuniquen los usuarios entre ellos interactivamente tambi�n.
 
Explicar� primero un poco como est� montando todo.
 
Todos los usuarios entran al sistema con su user-id y password y ejecutan una CL que llama a un men� con sus aplicaciones, programas etc.
 
Esa CL una de las cosas que hace es cambiarles la cola de mensajes y poner
 
0003.28              CLRMSGQ    MSGQ(*WRKSTN)                          
0003.29              CHGMSGQ    MSGQ(*USRPRF) DLVRY(*BREAK) SEV(00) +  
0003.30                           PGM(MENU/MAILCL) MSGQFULL(*WRAP)     
 
Conseguimos con esto que un mensaje enviado a su cola sea interceptado por un programa.
Para diferenciar los mensajes de sistema de los mensajitos enviados desde programa o desde otro usuario, mando una arroba(@) para indicar que ese usuario tiene un mensaje, luego el programa de la cola ya busca en la base de datos, que mensaje tiene que displayar.
 
Luego borro el mensaje de la arroba con
 
0006.19  /*** BORRAR EL MENSAJE DE LA @                                 ***/   
0006.20              RCVMSG     MSGQ(&MENLIB/&MENQ) MSGKEY(&MRK) RMV(*YES) +   
0006.21                           MSG(&MEN)                                    
 
Luego tengo un programita que visualiza mensajes, envia etc.
 
No he conseguido lo de la l�nea 24, pero creo que esto est� mas apa�ado.
 
Saludos
 
J. Enrique Garc�a
Dpto. An�lisis y Programaci�n
Mar�tima Valenciana, S.A. - Grupo Dragados
 

Responder a