**************************************************************** * Data Queue tester program * * Used to receive requests from client data queue, * send response back to client **************************************************************** Fqcustcdtl uf e k disk Fqsysprt o f 132 printer **************************************************************** * Stand alone fields used in program * F_ fields are field fields **************************************************************** D rcvData s 200 D sndData s 200 D CLIENT s 10 D RECTYPE s 10 D F_CUSNUM s like(CUSNUM) D F_LSTNAM s like(LSTNAM) D F_INIT s like(INIT) D F_STREET s like(STREET) D F_CITY s like(CITY) D F_STATE s like(STATE) D F_ZIPCOD s like(ZIPCOD) D F_CDTLMT s like(CDTLMT) D F_CHGCOD s like(CHGCOD) D F_BALDUE s like(BALDUE) D F_CDTDUE s like(CDTDUE) **************************************************************** * Constants used with QRCVDTAQ **************************************************************** D DTAQ_LIBRARY... D c 'ASPNET ' D DTAQ_LENGTH... D c 200 D DTAQ_NAME... D c 'DQTESTRCV ' D DTAQ_WAIT... D c -1 **************************************************************** * Request constants received from client **************************************************************** D REQUEST_GETCUST... D c '*GETCUST ' D REQUEST_GETLIST... D c '*GETLIST ' D REQUEST_END... D c '*END ' D REQUEST_UPDCUST... D c '*UPDCUST ' **************************************************************** * Response constants returned to client **************************************************************** D RESPONSE_GETCUST... D c '*CUSTOMER ' D RESPONSE_GETLIST... D c '*CUSTLIST ' D RESPONSE_GETLIST_END... D c '*CUSTEND ' D RESPONSE_UPDATE... D c '*CUSTUPD ' **************************************************************** * Prototype to call QRCVDTAQ API **************************************************************** D QRCVDTAQ pr extpgm('QRCVDTAQ') D dqname 10 const D dqlib 10 const D dqlength 5 0 const D data 200 const D dqwait 5 0 const **************************************************************** * Prototype to call QSNDDTAQ API **************************************************************** D QSNDDTAQ pr extpgm('QSNDDTAQ') D dqname 10 const D dqlib 10 const D dqlength 5 0 const D data 200 const **************************************************************** * Prototype for EndProgram **************************************************************** D EndProgram... D pr **************************************************************** * Prototype for GetCustomer **************************************************************** D GetCustomer... D pr **************************************************************** * Prototype for SetDtaqFields **************************************************************** D SetDtaqFields... D pr **************************************************************** * Prototype for GetList **************************************************************** D GetList... D pr **************************************************************** * Prototype for UpdateCustomer **************************************************************** D UpdateCustomer... D pr **************************************************************** * Receiver structure for QRCVDTAQ * Sender structure for QSNDDTAQ **************************************************************** D Data... D ds qualified D RecType 10 D Client 10 D CUSNUM 6s 0 D LSTNAM 8 D INIT 3 D STREET 13 D CITY 6 D STATE 2 D ZIPCOD 5s 0 D CDTLMT 4s 0 D CHGCOD 1s 0 D BALDUE 6s 2 D CDTDUE 6s 2 /free *inlr = *on; except exDtlh; //******************************************************* // "receive loop" for data queue //******************************************************* dow 1 = 1; qrcvdtaq(DTAQ_NAME : DTAQ_LIBRARY : DTAQ_LENGTH : rcvData : DTAQ_WAIT); Data = rcvData; //*************************************************** // process based on request type in data queue entry //*************************************************** select; when Data.RecType = REQUEST_END; EndProgram(); return; when Data.RecType = REQUEST_GETCUST; GetCustomer(); when Data.RecType = REQUEST_GETLIST; GetList(); when Data.RecType = REQUEST_UPDCUST; UpdateCustomer(); endsl; enddo; /end-free Oqsysprt e exDtlh 1 O '--------------------' O '--------------------' O '--------------------' O '--------------------' O '--------------------' O '--------------------' Oqsysprt e exDtlh 1 O 'RecType...' O +2 'Client....' O +2 'CUSNUM' O +2 'LSTNAM..' O +2 'INIT' O +2 'STREET.......' O +2 'CITY..' O +2 'STATE' O +2 'ZIPCOD' O +2 'CDTLMT' O +2 'CHGCOD' O +2 'BALDUE.' O +2 'CDTDUE.' Oqsysprt e exDtlh 1 O '--------------------' O '--------------------' O '--------------------' O '--------------------' O '--------------------' O '--------------------' Oqsysprt e exEnd 1 O RECTYPE 10 O CLIENT +2 Oqsysprt e exCustomer 1 O RECTYPE 10 O CLIENT +2 O CUSNUM +2 O LSTNAM +2 O INIT +2 O STREET +3 O CITY +2 O STATE +2 O ZIPCOD +5 O CDTLMT +5 O CHGCOD +4 O BALDUE +5 O CDTDUE +3 **************************************************************** * Procedure EndProgram **************************************************************** P EndProgram... P b D EndProgram... D pi /free RECTYPE = Data.RecType; CLIENT = Data.Client; except exEnd; /end-free P EndProgram... P e **************************************************************** * Procedure GetCustomer **************************************************************** P GetCustomer... P b D GetCustomer... D pi /free //******************************************************* // get/send requested customer record //******************************************************* RECTYPE = RESPONSE_GETCUST; CLIENT = Data.Client; CUSNUM = Data.CUSNUM; chain(n) CUSNUM qcustcdtl; if %found; except exCustomer; SetDtaqFields(); sndData = Data; qsnddtaq(CLIENT : DTAQ_LIBRARY : DTAQ_LENGTH : sndData); endif; /end-free P GetCustomer... P e **************************************************************** * Procedure GetList **************************************************************** P GetList... P b D GetList... D pi /free //******************************************************* // get/send customer list //******************************************************* RECTYPE = RESPONSE_GETLIST; CLIENT = Data.Client; setll *loval qcustcdtl; dou %eof; read(n) qcustcdtl; if not %eof; except exCustomer; SetDtaqFields(); sndData = Data; qsnddtaq(CLIENT : DTAQ_LIBRARY : DTAQ_LENGTH : sndData); endif; enddo; //******************************************************* // send "end of list" entry //******************************************************* clear Data; Data.RecType = RESPONSE_GETLIST_END; sndData = Data; qsnddtaq(CLIENT : DTAQ_LIBRARY : DTAQ_LENGTH : sndData); /end-free P GetList... P e **************************************************************** * Procedure SetDtaqFields **************************************************************** P SetDtaqFields... P b D SetDtaqFields... D pi /free clear Data; Data.RecType = RECTYPE; Data.CUSNUM = CUSNUM; Data.LSTNAM = LSTNAM; Data.INIT = INIT; Data.STREET = STREET; Data.CITY = CITY; Data.STATE = STATE; Data.ZIPCOD = ZIPCOD; Data.CDTLMT = CDTLMT; Data.CHGCOD = CHGCOD; Data.BALDUE = BALDUE; Data.CDTDUE = CDTDUE; /end-free P SetDtaqFields... P e **************************************************************** * Procedure UpdateCustomer **************************************************************** P UpdateCustomer... P b D UpdateCustomer... D pi /free //******************************************************* // update the specified customer //******************************************************* RECTYPE = RESPONSE_UPDATE; CLIENT = Data.Client; chain CUSNUM qcustcdtl; if %found; LSTNAM = Data.LSTNAM; INIT = Data.INIT; STREET = Data.STREET; CITY = Data.CITY; STATE = Data.STATE; ZIPCOD = Data.ZIPCOD; CDTLMT = Data.CDTLMT; CHGCOD = Data.CHGCOD; BALDUE = Data.BALDUE; CDTDUE = Data.CDTDUE; update CUSREC; except exCustomer; endif; /end-free P UpdateCustomer... P e