Ü  Data Queue

·         It is used for making asynchronous communication between the two jobs. If we are sending data from one job to another using data queue using QSNDDTAQ API, but at that time the receiver job is not active, then the data will be there in the queue and whenever the receiver job becomes active, it retrieves the data using the QRCVDTAQ API.

·         It facilitates fastest communication compared to when we use other things to communicate like dataarea, message queue or database files.

·         It can yet be used for synchronous communication also or within the same job.

·         We use APIs to make communication e.g. QSNDDTAQ, QRCVDTAQ.

·         The content of the data queue is messages in free format.

·         The messages on the data queue is stored in *FIFO, *LIFO or *KEYED. *KEYED means the messages can be retrieved using key value associated with the messages. In case of *KEYED we need to mention key length also.

·         First create the data queue by using CRTDAQ command

·         Data query is nothing but a queue in which are program can send a data and other program or the same program can receive the program. QSNDDTAQ is stored in QSYS.

·         We can create data queue on local system or on remote system by making the data queue type as *DDM. By default it will be *STD. In case of DDM data queue, we need to mention Remote data queue name(RMTDTAQ) and remote system name(RMTLOCNAME) also as parameter.

·         QSNDDTAQ

By using this command sent data same / another program.

QSNDDTAQ   PARM (QUEUE-NAME LIB  &LEN  &DAT)

·         QRCVDTAQ

By using this command receive data same /another program

QRCVDTAQ   PARM (QUEUE-NAME LIB &LEN &DAT &WAIT)

 

 

Example

 

Step (1): First of all create a data queue as below:

 

CRTDTAQ DTAQ(DTAQ000) TYPE(*STD) MAXLEN(300) TEXT('DATA QUEUE DTAQ000')

 

 

Step (2): Now we write one RPG program to write data to this data queue.

 

Columns . . . :    1 100                    Browse                          IROBO1/QRPGLESRC
 SEU==>                                                                           DTAQ00_RPG
 FMT D  .....DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++Comments++++++++++++
        *************** Beginning of data **************************************************
0001.00      DQueue            S             10A   INZ('DTAQ000')
0002.00      DLib              S             10A   INZ('IROBO1')
0003.00      DLen              S              5  0 INZ(100)
0004.00      DData             DS
0005.00      DSYSNAME                         8    INZ('SYS00001')
0006.00      DFILLER1                         2    INZ('  ')
0007.00      DDOMAIN                          5    INZ('AS400')
0008.00      DFILLER2                         2    INZ('  ')
0009.00      DADDRESS                        30    INZ('SYS00001.AS400.NET')
0010.00      DCMDDSC           S            256A
0011.00      DCMDLEN           S             15P 5
0012.00
0013.00       *-------------------------------------------------------------
0014.00       * Main section of the program
0015.00       *-------------------------------------------------------------
0016.00      C                   EXSR      CLRDTAQ
0017.00      C                   EXSR      SNDDATA
0018.00      C                   SETON                                        LR
0019.00       *
0020.00       *
0021.00       *-------------------------------------------------------------
0022.00       *  Call the API to Send the DATA to the DATAQ
0023.00       *-------------------------------------------------------------
0024.00      C     SNDDATA       Begsr
0025.00       *
0026.00       *
0027.00      C                   call      'QSNDDTAQ'
0028.00      C                   Parm                    Queue
0029.00      C                   Parm                    Lib
0030.00      C                   Parm                    Len
0031.00      C                   Parm                    Data
0032.00       *
0033.00      C                   EndSr
0034.00
0035.00       *---------------------------------------------------------------------
0036.00       *  Clear DATAQ
0037.00       *---------------------------------------------------------------------
0038.00      C     CLRDTAQ       BegSr
0039.00       *
0040.00      C                   Eval      CMDDSC='DLTDTAQ DTAQ(IROBO1/DTAQ000)'
0041.00
0042.00      C                   Eval      CMDLEN=%len(%trim(CMDDSC))
0043.00      C                   CALL      'QCMDEXC'
0044.00      C                   PARM                    CMDDSC
0045.00      C                   PARM                    CMDLEN
0046.00       *
0047.00      C                   Eval      CMDDSC='CRTDTAQ DTAQ(IROBO1/DTAQ000) +
0048.00      C                                       MAXLEN(300)'
0049.00      C
0050.00      C                   Eval      CMDLEN=%len(%trim(CMDDSC))
0051.00      C                   CALL      'QCMDEXC'
0052.00      C                   PARM                    CMDDSC
0053.00      C                   PARM                    CMDLEN
0054.00       *
0055.00      C                   EndSr
        ****************** End of data **************************************************

                                                                                                                                   

 

 

Step (3): Now we write one RPG program to retrieve data from the data queue.

 

Columns . . . :    1 100                       Browse                      IROBO1/QRPGLESRC
 SEU==>                                                                          DTAQ01_RPG
 FMT D  .....DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++Comments++++++++++++
        *************** Beginning of data ************************************************
0001.00      DQueue            S             10A   INZ('DTAQ000')
0002.00      DLib              S             10A   INZ('IROBO1')
0003.00      DLen              S              5  0 INZ(100)
0004.00      DData             DS
0005.00      DSYSNAME                         8
0006.00      DDOMAIN                          5
0007.00      DADDRESS                        30
0008.00      DWait             S              5  0 INZ(0)
0009.00
0010.00       *-------------------------------------------------------------
0011.00       * Main section of the program
0012.00       *-------------------------------------------------------------
0013.00      C                   EXSR      RCVDATA
0014.00      C     DATA          DSPLY
0015.00      C                   SETON                                        LR
0016.00       *
0017.00       *
0018.00       *---------------------------------------------------------------------
0019.00       *  Call the API to recive the DATA form the DATAQ
0020.00       *---------------------------------------------------------------------
0021.00      C     RCVDATA       Begsr
0022.00       *
0023.00      C                   Call      'QRCVDTAQ'
0024.00      C                   Parm                    Queue
0025.00      C                   Parm                    Lib
0026.00      C                   Parm                    Len
0027.00      C                   Parm                    Data
0028.00      C                   Parm                    Wait
0029.00       *
0030.00      C                   EndSr
0031.00
        ****************** End of data ****************************************************

                                                                                                                                   

 

 

OUTPUT

DSPLY  SYS00001  AS400  SYS00001.AS400.NET   

 





User Comments:





Copyright © Go4as400.com, 2013-2016. Copyright notice