h dftactgrp(*no) bnddir('QC2LE')
h option (*nodebugio)
*
fOhead uf e k disk
fOdetl if e k disk
d/copy *libl/qrpglesrc,IFSIO_H
d $cmp s 3s 0 inz(1)
d $file_name s 50
d $file_path s 100
d $ord_date s 8s 0
d $ord_date_a s 8a
d $ddmmyyyy s 10a
d $date s 10a
d $time s 10a
d fd s 10I 0
d crlf c x'0D25'
d $xml s 512a
d ProgStatus sds
d Parms *PARMS
d ProgName *PROC
d ErrMsgID 40 46
d ErrMsg 91 169
d JobName 244 253
d Userid 254 263
d JobNumber 264 269
*Date/Time Stamps
d ds
d @DateTime z
d @DteStmp d overlay(@DateTime : 1)
d @TimStmp t overlay(@DateTime : 12)
*
*----- Main Routine
*
c exsr @open_file
c $cmp setll ohead
c dou %eof(ohead)
c $cmp reade ohead
c if %eof(ohead)
c leave
c endif
c if x1del <> 'A'
c iter
c endif
c exsr @header_info
c eval x1del = 'B'
c update oheadr
c enddo
c exsr @close_file
c eval *inlr = *on
c return
*
*----- Create XML file
*
c @open_file begsr
c eval $file_name = 'Order.xml'
c eval $file_path = '/Myxml/data/' +
c %trim($file_name)
/free
fd = open(%trim($file_path)
: O_WRONLY+O_CREAT+O_TRUNC+O_CCSID
: S_IRGRP + S_IWGRP + S_IXGRP +
S_IRUSR + S_IWUSR + S_IXUSR
: 819);
callp close(fd);
fd = open(%trim($file_path):O_WRONLY+O_TEXTDATA);
$xml = '<?xml version="1.0" encoding="UTF-8"?>' + crlf +
'<Orders>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
/end-free
c endsr
*
*----- Close XML file
*
c @close_file begsr
/free
$xml = '</Orders>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
callp close(fd);
/end-free
c endsr
*
*----- Write Header info
*
c @header_info begsr
c eval $ord_date = x1ordt
c exsr @get_date
c select
c when x1type = 'O'
c eval $xml = '<Order Type="Sales">'
c when x1type = 'B'
c eval $xml = '<Order Type="Credit">'
c endsl
c eval $xml = %trim($xml) + crlf
c callp write(fd: %addr($xml): %len(%trim($xml)))
/free
$xml = '<OrderID>' +
%trim(%editc(x1ord:'Z')) +
'</OrderID>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<CustNumber>' +
%trim(x1cust) +
'</CustNumber>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<OrderDate>' +
%trim($ddmmyyyy) +
'</OrderDate>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<CustPONumber>' +
%trim(x1po) +
'</CustPONumber>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<OrderTotal>' +
%trim(%editc(x1otot:'P')) +
'</OrderTotal>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
/end-free
c exsr @detail_info
c eval $xml = '</Order>' + crlf
c callp write(fd: %addr($xml): %len(%trim($xml)))
c endsr
*
*----- Write Detail info
*
c @detail_info begsr
c keyord setll odetl
c dou %eof(odetl)
c keyord reade odetl
c if %eof(odetl)
c leave
c endif
c if x2del = 'D'
c iter
c endif
c eval $xml = '<OrderLine>' + crlf
c callp write(fd: %addr($xml): %len(%trim($xml)))
/free
$xml = '<OrderlineID>' +
%trim(%editc(x2seq:'Z')) +
'</OrderlineID>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<ItemID>' +
%trim(x2item) +
'</ItemID>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<ItemDescription>' +
%trim(x2item) +
'</ItemDescription>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<Quantity>' +
%trim(%editc(x2qty:'3')) +
'</Quantity>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
$xml = '<Price>' +
%trim(%editc(x2pric:'3')) +
'</Price>' + crlf;
callp write(fd: %addr($xml): %len(%trim($xml)));
/end-free
c eval $xml = '</OrderLine>' + crlf
c callp write(fd: %addr($xml): %len(%trim($xml)))
c enddo
c endsr
*
*----- Initial Routine
*
c *inzsr begsr
c keyord klist
c kfld x1cmp
c kfld x1ord
c endsr
*
*----- Get date in DDMMYYYY format
*
c @get_date begsr
c eval $ord_date_a = %editc($ord_date:'Z')
c eval $ddmmyyyy = %subst($ord_date_a:7:2) + '-' +
c %subst($ord_date_a:5:2) + '-' +
c %subst($ord_date_a:1:4)
c endsr
All one can think and do in a short time is to think what one already knows and to do as one has always done!
Generate XML using RPGLE with help of C language API’ s Part 4
Click here to read the Tutorial from the beginning.
Source code for the Sample RPGLE program to generate XML data
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.