Write data to data queue using QSNDDTAQ api in RPG AS400 |
Send Data Queue (QSNDDTAQ) API
The Send Data Queue API will send the data to the specified data queue.
When an entry is sent to a standard data queue, the storage is allocated for each entry i.e. the value specified for the maximum entry length on the Create Data Queue (CRTDTAQ) command.
Please note that you can also use this API to send data to the DDM data queue (present on the remote system).
Technically speaking, when a Job uses this API a cache is created to allow faster access to the Data queue.
Required Parameters
- Data Queue Name: Input parm and Char(10)
- Library Name: Input parm and Char(10)
- Length of Data: Input parm and Packed(5,0)
- Data: Input parm and Char(*)
There are some optional parameters as well which are not discussed here in this blog.
Coding QSNDDTAQ API in RPGLE Fixed, /Free and Fully Free format
Writing RPGLE code to send/write data to the data queue passed as an Input parameter to the program
D main pr extpgm('EXTPGM5') D 10a D 10a D 20a D main pi D dtquenam 10a D dtquelib 10a D data 20a D length s 5p 0 C EVAL length = %len(%trim(data)) C CALL 'QSNDDTAQ' C PARM dtquenam C PARM dtquelib C PARM length C PARM data C SETON LR C RETURN
D QSNDDTAQ PR extpgm('QSNDDTAQ') D dtquenam 10A const D dtquelib 10A const D datalen 5P 0 const D databuf 32767A const options(*varsize) D main pr extpgm('EXTPGM5') D 10a D 10a D 20a D main pi D dtquenam 10a D dtquelib 10a D data 20a /Free QSNDDTAQ(dtquenam:dtquelib:%len(%trim(data)):data); *INLR = *ON; return; /End-Free
**FREE dcl-pr QSNDDTAQ extpgm ; *n char(10) const; *n char(10) const; *n packed(5:0) const; *n char(32767) const options(*varsize); end-pr; dcl-pi *N; dtquenam char(10); dtquelib char(10); data char(20); end-pi; QSNDDTAQ(dtquenam:dtquelib:%len(%trim(data)):data); *INLR = *ON; return;
Compile the program EXTPGM5 using option 14 against the SQLRPGLE source member or using the command CRTSQLRPGI.
Execute the QSNDDTAQ code
For testing the above code, we need a data queue to be passed to this program. So, Let's first create a data queue
Create Data Queue named DATAQUEUE1
Use the command CRTDTAQ to create the standard data queue named DATAQUEUE1 of MAXLEN 5000.
Create Data Queue (CRTDTAQ) Type choices, press Enter. Data queue . . . . . . . . . . . DTAQ > DATAQUEUE1 Library . . . . . . . . . . . > EASYCLASS1 Type . . . . . . . . . . . . . . TYPE *STD Maximum entry length . . . . . . MAXLEN > 5000 Force to auxiliary storage . . . FORCE *NO Sequence . . . . . . . . . . . . SEQ *FIFO Include sender ID . . . . . . . SENDERID *NO Queue size: SIZE Maximum number of entries . . *MAX16MB Initial number of entries . . 16 Automatic reclaim . . . . . . . AUTORCL *NO Text 'description' . . . . . . . TEXT Test Data queue
Data queue named DATAQUEUE1 was created and we can see its object using the WRKOBJ DATAQUEUE1 command on the AS400 command line.
Work with Objects Type options, press Enter. 2=Edit authority 3=Copy 4=Delete 5=Display authority 7= 8=Display description 13=Change description Opt Object Type Library Attribute Text DATAQUEUE1 *DTAQ EASYCLASS1 Test Data queue Parameters for options 5, 7 and 13 or command ===> wrkobj dataqueue1 F3=Exit F4=Prompt F5=Refresh F9=Retrieve F11=Display names and
Call RPGLE program using QSNDDTAQ from the command line
CALL PGM(EASYCLASS1/EXTPGM5) PARM('DATAQUEUE1' 'EASYCLASS1' 'HELLO WORLD')
Once you call this program the entry 'HELLO WORLD' will be placed in the standard data queue DATAQUEUE1.
Program Output:Display Data Queue entry using SQL UDTF
Run below SQL UDTF to get entries of specified data queue using QSYS2.DATA_QUEUE_ENTRIES user-defined table function.
SELECT ORDINAL_POSITION, CAST(MESSAGE_DATA AS CHAR(50)) FROM TABLE(QSYS2.DATA_QUEUE_ENTRIES( DATA_QUEUE => 'DATAQUEUE1', DATA_QUEUE_LIBRARY => 'EASYCLASS1'))
Data queue entry
ORDIN00001 CAST function 1 HELLO WORLD ******** End of data ********
Related Post
Data Queue in AS400
Read data from data queue using QRCVDTAQ api in RPG AS400