IBM Support

Example of a Message Subfile in RPG

Troubleshooting


Problem

The following demonstrates the use of a message subfile in an RPG program.

Resolving The Problem

The following demonstrates the use of a message subfile in an RPG program:

DDS Source:

  A                                      CF03(03)        
A                                      HELP            
A          R FMT1                                      
A                                      OVERLAY        
A                                  2  3'FULL SCREEN'  
A            FLD1          10   B  3  3                
 *                                                    
A          R MSGSFL                    SFL            
A                                      SFLMSGRCD(24)  
A            MSGKEY                    SFLMSGKEY      
A            PGMQ                      SFLPGMQ        
A          R MSGSFLC                   SFLCTL(MSGSFL)  
A                                      SFLSIZ(0002)    
A                                      SFLPAG(0001)    
A                                      OVERLAY        
A                                      SFLDSP          
A                                      SFLDSPCTL      
A                                      SFLINZ          
A  98                                  SFLEND          
A            PGMQ                      SFLPGMQ        


Here is the RPGLE program called TESTRPGLE:

Ftestdspf  CF   E             WORKSTN                                    
D DTA             S             62                                        
 *                                                                        
C                   EVAL      DTA = 'THIS IS A TEST MSG  '                
 * SEND MSG0001 FROM MESSAGE FILE CPF9898 TO PROGRAM MESSAGE QUEUE        
C                   MOVEL     'CPF9898'     MSGID                        
C                   MOVEL     'QCPFMSG'     MSGF                          
C                   MOVE      DTA           MSGDTA                        
C                   MOVE      'I'           MSGOPT                        
C                   EXSR      SEND                                        
 * SETON SFLEND INDICATOR FOR MESSAGE SUBFILE                            
C                   SETON                                        98      
 * WRITE MESSAGE SUBFILE                                                  
C                   WRITE     MSGSFLC                                    
 * WRITE/READ REGULAR SCREEN FORMAT                                      
C                   EXFMT     FMT1                                        
 * CLEAR THE PROGRAM MESSAGE QUEUE                                        
C                   MOVE      'C'           MSGOPT                        
C                   EXSR      SEND                                        
 *                                                                  
 * WRITE MESSAGE SUBFILE                                            
C                   WRITE     MSGSFLC                              
 * WRITE/READ REGULAR SCREEN FORMAT                                
C                   EXFMT     FMT1                                  
C                   MOVE      '1'           *INLR                  
 ****************************************************************  
C     *INZSR        BEGSR                                          
 * MOVE THE PROGRAM NAME TO THE PROGRAM MESSAGE QUEUE FIELD        
C                   MOVEL     'TESTRPGLE'   PGMQ                    
C                   ENDSR                                            
 ****************************************************************    
 * THIS SUBROUTINE CALLS A CL PROGRAM THAT SENDS THE MESSAGE          
 * TO THE PROGRAM MESSAGE QUEUE.                                      
 ****************************************************************    
C     SEND          BEGSR                                            
C                   CALL      'TESTCL'                                
C                   PARM                    MSGID             7      
C                   PARM                    MSGF             10      
C                   PARM                    MSGDTA           62      
C                   PARM                    MSGOPT            1                
C                   ENDSR                                                      


Here is the CL program called TESTCL:

PGM        PARM(&MSGID &MSGF &MSGDTA &MSGOPT)                              
   DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                              
   DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                              
   DCL        VAR(&MSGOPT) TYPE(*CHAR) LEN(1)                              
   DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(62)                            
                                                                           
                                                                           
   IF         COND(&MSGOPT *EQ 'I') THEN(SNDPGMMSG +                      
              MSGID(&MSGID) MSGF(&MSGF) MSGDTA(&MSGDTA))                  
                                                                           
   IF         COND(&MSGOPT *EQ 'C') THEN(RMVMSG PGMQ(*PRV +                
                (*)) CLEAR(*ALL))                                          
ENDPGM                                                                    

[{"Type":"MASTER","Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Platform":[{"code":"PF012","label":"IBM i"}],"Version":"7.1.0"}]

Historical Number

7695510

Document Information

Modified date:
18 December 2019

UID

nas8N1010286