Hi Jon,
let me show you a 10 second's build program that deliveres some
output in different flavours based on a file, the service-
program, and the output parameter passed:
http://yourserver/pxsvxr.pgm?func=getRows&output=html&search=text&sort
=xrfldd
regards
henrik
Jon Paris <jon.paris@xxxxxxxxxxxxxx>
Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
07-07-2009 16:48
Please respond to
HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
To
HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
cc
Subject
Re: XML Writer Service program
That looks _really_ interesting Nicolas. I look forward to seeing
what comes out of this.
Jon Paris
www.Partner400.com
www.SystemiDeveloper.com
On 7-Jul-09, at 10:24 AM, hr@xxxxxxxxxxxx wrote:
>
> Hi,
> enclosed is a service program that does the trick;
> Sample code
> --------------------------------------------------------
> clrSrvPgm();
> // setGlobalTab(*off); // compress the file
> // setGlonalNL(*off); // by omitting Tab's and CRLF
> // if you wish to send it out over HTTP
> setContent('text/xml');
> echo('# This is a generated xml-file');
> echo('');
> xmlNode('xml');
> xmlNode('header':'custNumber='+%char(cust));
> xmlNode('name':'':cuname); // "Jon & Susan"
> xmlNode('adress':'':cuadrs);
> select;
> when country = 'dk';
> xmlNode('zip':'list=dk':%char(cuzip));
> when country = 'usa';
> xmlNode('zip':'list=us':%char(cuzip));
> endsl;
> xmlEndNode();
> xmlEndNode();
> select;
> when output = 'file'; // Output to File
> echoToStmf('/testxml.xml':1208); // most XML converters
likes
> UTF-8
> when output = 'http'; // Output to HTTP buffer
> echoFini();
> endsl;
> Result:
> ---------------------------------------------------------
> Content-type: text/xml
> # This is a generated xml-file
> <xml>
> <header custNumber=123456>
> <name>Jon & Susan</name>
> <adress>Stampedammen</adress>
> <zip list=dk>1234</zip>
> </header>
> </xml>
> This code is done by a CGIDEV2 service extension program that
> handles not only the single node's but also the tree, so there
> is no need to insert tabs or to remember parent nodes when
> ending them with xmlEndNode() and it eliminates spelling
> errors between start and end nodes.
> It also automatically handles the special character incoding
> of strings in the XML.
> And there is no need for CGIDEV2 templates wich does it far
> easier to include/exclude elements by just using inline tests.
> Note:
> The enclosed basic service program is part of a larger WEB 2.0
> (ext JS) project that will be released later this year and it
> is build on top of a modified CGIDEV2 (Scott's CCSID support
> modification for Unicode CCSID).
> Regards
> Henrik
>
> Nicolas Machado <nicolas.machado@xxxxxxxxxxxxx>
> Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
>
> 06-07-2009 16:34
>
> Please respond to
> HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
>
>
To
>
> HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
>
>
cc
>
>
> Subject
>
> XML Writer Service program
>
> Hi,
> I'm starting a project that need to write xml files.
> I know that there is no mora "rocket science" that wrinting to a
> stream
> file in teh IFS.
> But I'm wondering is someone has developed something like:
> xml = pCreateXmlObject();
> pWriteStartElement(xml : 'Invoice') ;
> pWriteTag(xml : 'InvNro' : $InvoiceNumber ) ;
> pWriteEndElement(xml)
> To for example create this xml
> <Invoice>
> <InvNr>some value</InvNr>
> </Invoice>
> If anyone has something , please let me know.
> --
> .::.
> Nicolas Machado
> Metodo Argentina S.A.
> _____________________
> Tel: 02262 527431
> Necochea, Buenos Aires.
>
>
----------------------------------------------------------------------
> -
> This is the FTPAPI mailing list. To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
>
>
----------------------------------------------------------------------
> -
> <
> pxsrvcgi
> .txt
> >
>
----------------------------------------------------------------------
-
> This is the FTPAPI mailing list. To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
>
----------------------------------------------------------------------
-
----------------------------------------------------------------------
-
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
----------------------------------------------------------------------
-
Attachment:
pxsvxr_result.json
Description: Binary data
ZDEXTP SY 50 A 0 Ext Panel Text (DDpanelText) Ext Panel Text alfa 1 Ext Panel Text (DDpanelText) 300 left Ext Panel Text (DDpanelText) 400 A D 5 ZDHLPA SY 3 A 0 Help Text Area Help Text Area alfa 1 Help Text Area 84 center Help Text Area 24 A D 2 ZDHLPI SY 10 A 0 Help Text Id. Help Text Id. alfa 1 Help Text Id. 78 left Help Text Id. 80 A D 1 ZDHLPL SY 3 A 0 Help Text Language Help Text Lang alfa 1 Help Text Language 108 center Help Text Language 24 A D 1 ZDHLPX SY 70 A 0 Help Text Line Help Text Line alfa 1 Help Text Line 420 left Help Text Line 560 A D 1 ZDHLPN SY 6 S 0 Help Text Line No. Help Text Line No. numeric 1 Help Text Line No. 108 right Help Text Line No. 48 A D 1 ZDHLPT SY 3 A 0 Help Text Type Help Text Type alfa 1 Help Text Type 84 center Help Text Type 24 A D 1 ZDTEXT SY 76 A 0 Linie Tekst Tekst alfa 1 Linie Tekst 456 left Linie Tekst 608 A D 3 ZDXMTX SY 70 A 0 Menu Text Menu Text alfa 1 Menu Text 420 left Menu Text 560 A D 2 ZDCMSG SY 132 A 0 Message Text Message Text alfa 1 Message Text 792 left Message Text 1056 A D 9 ZDMSGT SY 78 A 0 Message Text Message Text alfa 1 Message Text 468 left Message Text 624 A D 2 XBXBID SY 10 A 0 Text Definitions Id. Text definition id alfa 1 Text Definitions Id. 120 left Text Definitions Id. 80 A D 1 TMTMID SY 10 A 0 Text Definitions Id. Text definition id alfa 1 Text Definitions Id. 120 left Text Definitions Id. 80 A D 2 ZDWCGT SY 10 A 0 Web Cgi-Text Web Cgi Text alfa 1 Web Cgi-Text 72 left Web Cgi-Text 80 A D 3
Attachment:
pxsvxr_result.xml
Description: Binary data
*=====================================================================
* Project : powerEXT®
* Title : DB2 Remote Procedure for Table XRREGTST
* Field Reference
* Build : 2009-07-07-20.02.03.982496
*
* Copyright © HR Software Development, Denmark
* Author : Henrik Rützou
* License : GNU GPL license v3
* Website : powerext.com
*=====================================================================
* powerEXT General H-spec's
/copy qsrc,pxsrvhdrcc
* powerEXT Service Program Connector
/copy qsrc,pxsrvcgicc
* General Definitions
d func s 10
d output s 10
* General Sql Definitions
d sqlDs ds
d sqlCmd 8192 varying
d sqlCmdCount 8192 varying
d sqlSelect 4096 varying
d sqlFrom 256 varying
d sqlWhere 4096 varying
d sqlSearch 256 varying
d sqlOrder 256 varying
d sqlSortField 20 varying
d sqlSortDir 4 varying
d sqlFor 4096 varying
d sqlCount 15 0
d sqlRow 10i 0
d sqlRows 10i 0
d sqlStart 10i 0
d sqlError 5
* Sql Variables and Definitions
d rrn s 10i 0
d rec e ds extName(XRREGTST)
/free
clearSrvPgm();
// setGlobalTab(*off);
// setGlobalNL(*off);
clear sqlDs;
// process function
func = getExtVar('func');
output = getExtVar('output');
select;
when func = 'inzRec';
exsr inzRec;
when func = 'getRec';
exsr getRec;
when func = 'addRec';
when func = 'updRec';
exsr updRec;
when func = 'delRec';
exsr delRec;
when func = 'getRows';
exsr getRows;
other;
exsr getRows;
endsl;
echoFini();
return;
/end-free
*=====================================================================
* initialize Record
*=====================================================================
/free
begsr inzRec;
rrn = 0;
clear rec;
select;
when output = 'xml';
exsr xmlStart;
exsr xmlRow;
exsr xmlEnd;
when output = 'html';
exsr htmlStart;
exsr htmlRow;
exsr htmlEnd;
other;
exsr jsonStart;
exsr jsonRow;
exsr jsonEnd;
endsl;
endsr;
/end-free
*=====================================================================
* get Record
*=====================================================================
/free
begsr getRec;
// initiate SQL fields
rrn = getExtVarNum('rrn');
sqlStart = 1;
sqlRows = 1;
sqlSelect =
'select RRN(XRREGTST) as RRN'
// powerEXT generated source
+',XRXRID'
+',XRXAID'
+',XRFLDR'
+',XRFLDL'
+',XRFLDT'
+',XRFLDP'
+',XRFLDE'
+',XRFLDW'
+',XRFLDF'
+',XRFLDD'
+',XRFLD1'
+',XRFLD2'
+',XRFLD3'
+',XRPNLD'
+',XREXTT'
+',XREXTD'
+',XREXTH'
+',XREXTW'
+',XREXTE'
+',XREXTA'
+',XREXTP'
+',XREXTQ'
+',XREXTX'
+',XREXTV'
+',XRRCST'
+',XRRCDC'
+',XRRCUD'
;
sqlFrom =
'from XRREGTST'
;
sqlWhere =
'where '
+'rrn(XRREGTST) = ' + %char(rrn)
;
sqlFor =
'for read only'
;
select;
when output = 'xml';
exsr xmlStart;
when output = 'html';
exsr htmlStart;
other;
exsr sqlCountRow;
exsr jsonStart;
endsl;
exsr sqlProcessRows;
select;
when output = 'xml';
exsr xmlEnd;
when output = 'html';
exsr htmlEnd;
other;
exsr jsonEnd;
endsl;
if sqlerror <> '00000';
setcontent();
echo('{success:false, errors:[{msg:"Record not found,'
+ 'sqlstt: ' + sqlerror + '"}]}');
endif;
endsr;
/end-free
*=====================================================================
* update Record
*=====================================================================
/free
begsr updRec;
// initiate SQL fields
rrn = getExtVarNum('rrn');
clear rec;
sqlSelect =
'select RRN(XRREGTST) as RRN'
// powerEXT generated source
+',XRXRID'
+',XRXAID'
+',XRFLDR'
+',XRFLDL'
+',XRFLDT'
+',XRFLDP'
+',XRFLDE'
+',XRFLDW'
+',XRFLDF'
+',XRFLDD'
+',XRFLD1'
+',XRFLD2'
+',XRFLD3'
+',XRPNLD'
+',XREXTT'
+',XREXTD'
+',XREXTH'
+',XREXTW'
+',XREXTE'
+',XREXTA'
+',XREXTP'
+',XREXTQ'
+',XREXTX'
+',XREXTV'
+',XRRCST'
+',XRRCDC'
+',XRRCUD'
;
sqlFrom =
'from XRREGTST'
;
sqlWhere =
'where '
+'rrn(XRREGTST) = ' + %char(rrn)
;
sqlFor =
'for read only'
;
exsr sqlProcessRows;
if sqlerror <> '00000';
setcontent();
echo('{success:false, errors:[{msg:"Record not found,'
+ 'sqlstt: ' + sqlerror + '"}]}');
leavesr;
endif;
// powerEXT generated source
XRXRID = getExtVar('XRXRID':XRXRID);
XRXAID = getExtVar('XRXAID':XRXAID);
XRFLDR = getExtVar('XRFLDR':XRFLDR);
XRFLDL = getExtVarNum('XRFLDL');
XRFLDT = getExtVar('XRFLDT':XRFLDT);
XRFLDP = getExtVarNum('XRFLDP');
XRFLDE = getExtVar('XRFLDE':XRFLDE);
XRFLDW = getExtVar('XRFLDW':XRFLDW);
XRFLDF = getExtVar('XRFLDF':XRFLDF);
XRFLDD = getExtVar('XRFLDD':XRFLDD);
XRFLD1 = getExtVar('XRFLD1':XRFLD1);
XRFLD2 = getExtVar('XRFLD2':XRFLD2);
XRFLD3 = getExtVar('XRFLD3':XRFLD3);
XRPNLD = getExtVar('XRPNLD':XRPNLD);
XREXTT = getExtVar('XREXTT':XREXTT);
XREXTD = getExtVar('XREXTD':XREXTD);
XREXTH = getExtVar('XREXTH':XREXTH);
XREXTW = getExtVarNum('XREXTW');
XREXTE = getExtVar('XREXTE':XREXTE);
XREXTA = getExtVar('XREXTA':XREXTA);
XREXTP = getExtVar('XREXTP':XREXTP);
XREXTQ = getExtVarNum('XREXTQ');
XREXTX = getExtVar('XREXTX':XREXTX);
XREXTV = getExtVar('XREXTV':XREXTV);
XRRCST = getExtVar('XRRCST':XRRCST);
XRRCDC = getExtVar('XRRCDC':XRRCDC);
XRRCUD = getExtVarNum('XRRCUD');
exec sql update XRREGTST
set
// powerEXT generated source
XRXRID = :XRXRID
,XRXAID = :XRXAID
,XRFLDR = :XRFLDR
,XRFLDL = :XRFLDL
,XRFLDT = :XRFLDT
,XRFLDP = :XRFLDP
,XRFLDE = :XRFLDE
,XRFLDW = :XRFLDW
,XRFLDF = :XRFLDF
,XRFLDD = :XRFLDD
,XRFLD1 = :XRFLD1
,XRFLD2 = :XRFLD2
,XRFLD3 = :XRFLD3
,XRPNLD = :XRPNLD
,XREXTT = :XREXTT
,XREXTD = :XREXTD
,XREXTH = :XREXTH
,XREXTW = :XREXTW
,XREXTE = :XREXTE
,XREXTA = :XREXTA
,XREXTP = :XREXTP
,XREXTQ = :XREXTQ
,XREXTX = :XREXTX
,XREXTV = :XREXTV
,XRRCST = :XRRCST
,XRRCDC = :XRRCDC
,XRRCUD = :XRRCUD
where rrn(XRREGTST) = :rrn
;
if sqlstt <> '00000';
setcontent();
echo('{success:false, errors:[{msg:"Record not found,'
+ 'sqlstt: ' + sqlstt + '"}]}');
leavesr;
endif;
setcontent();
echo('{success:true}');
endsr;
/end-free
*=====================================================================
* delete Record
*=====================================================================
/free
begsr delRec;
// initiate SQL fields
rrn = getExtVarNum('rrn');
exec sql delete from XRREGTST
where rrn(XRREGTST) = :rrn
;
if sqlstt <> '00000';
setcontent();
echo('{success:false, errors:[{msg:"Record not found,'
+ 'sqlstt: ' + sqlstt + '"}]}');
leavesr;
endif;
setcontent();
echo('{success:true}');
endsr;
/end-free
*=====================================================================
* Process Rows
*
* Define SQL from standard ExtJS grid parameters:
* 'sort' : sqlSortField : Selected Sortfield
* 'dir' : sqlSortDir : ASC/DESC
* 'start' : sqlStart : Row Number To Start With (java 0=rpgle 1)
* 'limit' : sqlRows : Number Of Rows On Page, 0 = NOMAX
* 'search': sqlSearch : Generic Search Criteria
*=====================================================================
/free
begsr getRows;
// initiate SQL fields
sqlSortField = getExtVar('sort');
sqlSortDir = getExtVar('dir');
sqlStart = getExtVarNum('start') + 1;
sqlRows = getExtVarNum('limit');
sqlSearch = getExtVar('search');
// *************************************
sqlRows = 25;
// *************************************
sqlSelect =
'select RRN(XRREGTST) as RRN'
// powerEXT generated source
+',XRXRID'
+',XRXAID'
+',XRFLDR'
+',XRFLDL'
+',XRFLDT'
+',XRFLDP'
+',XRFLDE'
+',XRFLDW'
+',XRFLDF'
+',XRFLDD'
+',XRFLD1'
+',XRFLD2'
+',XRFLD3'
+',XRPNLD'
+',XREXTT'
+',XREXTD'
+',XREXTH'
+',XREXTW'
+',XREXTE'
+',XREXTA'
+',XREXTP'
+',XREXTQ'
+',XREXTX'
+',XREXTV'
+',XRRCST'
+',XRRCDC'
+',XRRCUD'
;
sqlFrom =
'from XRREGTST'
;
sqlWhere = ''
+ 'where'
+ ' xrxaid = ''SY'''
// + ' and'
// + ' elacno = 1001'
;
if sqlSearch > '';
if sqlWhere > '';
sqlWhere += ' and ';
else;
sqlWhere += 'where ';
endif;
sqlWhere += ''
+'lower('
// powerEXT generated source
+'XRXRID'
+'||XRXAID'
+'||XRFLDR'
+'||char(XRFLDL)'
+'||XRFLDT'
+'||char(XRFLDP)'
+'||XRFLDE'
+'||XRFLDW'
+'||XRFLDF'
+'||XRFLDD'
+'||XRFLD1'
+'||XRFLD2'
+'||XRFLD3'
+'||XRPNLD'
+'||XREXTT'
+'||XREXTD'
+'||XREXTH'
+'||char(XREXTW)'
+'||XREXTE'
+'||XREXTA'
+'||XREXTP'
+'||char(XREXTQ)'
+'||XREXTX'
+'||XREXTV'
+'||XRRCST'
+'||XRRCDC'
+'||char(XRRCUD)'
+') like lower(''%' + %trim(sqlSearch) +'%'')'
;
endif;
sqlOrder =
'order by xrxrid asc'
;
if sqlSortField > '';
sqlOrder =
'order by '
+ sqlSortField
+ ' '
+ sqlSortDir
;
endif;
sqlFor =
'for read only'
;
select;
when output = 'xml';
exsr xmlStart;
when output = 'html';
exsr htmlStart;
other;
exsr sqlCountRow;
exsr jsonStart;
endsl;
exsr sqlProcessRows;
select;
when output = 'xml';
exsr xmlEnd;
when output = 'html';
exsr htmlEnd;
other;
exsr jsonEnd;
endsl;
endsr;
/end-free
*=====================================================================
* Process Rows
*=====================================================================
/free
begsr sqlProcessRows;
sqlRow = 0;
sqlerror = '00000';
sqlCmd = ''
+ ' ' + sqlSelect
+ ' ' + sqlFrom
+ ' ' + sqlWhere
+ ' ' + sqlOrder
+ ' ' + sqlFor
;
exec sql declare CR cursor for
sqlStatementCR;
exec sql prepare sqlStatementCR
from :SqlCmd;
exec sql open CR;
if sqlstt <> '00000';
sqlerror = sqlstt;
leavesr;
endif;
dow sqlstt = '00000';
exec sql fetch next from CR into :rrn
// powerExt Generated Source
,:XRXRID
,:XRXAID
,:XRFLDR
,:XRFLDL
,:XRFLDT
,:XRFLDP
,:XRFLDE
,:XRFLDW
,:XRFLDF
,:XRFLDD
,:XRFLD1
,:XRFLD2
,:XRFLD3
,:XRPNLD
,:XREXTT
,:XREXTD
,:XREXTH
,:XREXTW
,:XREXTE
,:XREXTA
,:XREXTP
,:XREXTQ
,:XREXTX
,:XREXTV
,:XRRCST
,:XRRCDC
,:XRRCUD
;
if sqlstt = '01557';
eval sqlstt = '00000';
endif;
if sqlstt <> '00000';
sqlerror = sqlstt;
leave;
endif;
sqlRow += 1;
if sqlRows > 0;
if sqlRow >= SqlStart
and sqlRow < (sqlStart + sqlRows);
select;
when output = 'xml';
exsr xmlRow;
when output = 'html';
exsr htmlRow;
other;
exsr jsonRow;
endsl;
endif;
if sqlRow = (sqlStart + sqlRows - 1);
leave;
endif;
else;
select;
when output = 'xml';
exsr xmlRow;
when output = 'html';
exsr htmlRow;
other;
exsr jsonRow;
endsl;
endif;
enddo;
exec sql close CR;
endsr;
/end-free
*=====================================================================
* Count Total Number Of Row's in the SQL Scope
* return the result in sqlCount
*=====================================================================
/free
begsr sqlCountRow;
sqlCmdCount = ''
+ 'Select count(*)'
+ ' ' + sqlFrom
+ ' ' + sqlWhere
;
exec sql declare CC insensitive cursor for
sqlStatementCC;
exec sql prepare sqlStatementCC
from :SqlCmdCount;
exec sql open CC;
exec sql fetch next from CC into :sqlCount;
exec sql close CC;
endsr;
/end-free
*=====================================================================
* Start JSON Object
*=====================================================================
/free
begsr jsonStart;
setContent();
// Declare JSON Response Object
jsonNode('*object');
jsonNode('*object':'metaData');
jsonNode('*string':'totalProperty':'totalRows');
jsonNode('*string':'root':'rows');
jsonNode('*string':'id':'RRN');
jsonNode('*array':'fields');
jsonNode('*object');
jsonNode('*string':'name':'RRN');
jsonEndNode();
// powerEXT generated source
jsonNode('*object');
jsonNode('*string':'name':'XRXRID');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRXAID');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDR');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDL');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDT');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDP');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDE');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDW');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDF');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLDD');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLD1');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLD2');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRFLD3');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRPNLD');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTT');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTD');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTH');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTW');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTE');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTA');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTP');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTQ');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTX');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XREXTV');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRRCST');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRRCDC');
jsonEndNode();
jsonNode('*object');
jsonNode('*string':'name':'XRRCUD');
jsonEndNode();
jsonEndNode();
jsonEndNode();
jsonNode('*number':'totalRows':%char(sqlCount));
jsonNode('*array':'rows');
endsr;
/end-free
*=====================================================================
* Process Row (CallBack From sqlProcessRows)
*=====================================================================
/free
begsr jsonRow;
// Generate Row
jsonNode('*object');
jsonNode('*number':'RRN':%char(RRN));
// powerEXT generated source
jsonNode('*string':'XRXRID':XRXRID);
jsonNode('*string':'XRXAID':XRXAID);
jsonNode('*string':'XRFLDR':XRFLDR);
jsonNode('*number':'XRFLDL':%trim(%editc(XRFLDL:'P')));
jsonNode('*string':'XRFLDT':XRFLDT);
jsonNode('*number':'XRFLDP':%trim(%editc(XRFLDP:'P')));
jsonNode('*string':'XRFLDE':XRFLDE);
jsonNode('*string':'XRFLDW':XRFLDW);
jsonNode('*string':'XRFLDF':XRFLDF);
jsonNode('*string':'XRFLDD':XRFLDD);
jsonNode('*string':'XRFLD1':XRFLD1);
jsonNode('*string':'XRFLD2':XRFLD2);
jsonNode('*string':'XRFLD3':XRFLD3);
jsonNode('*string':'XRPNLD':XRPNLD);
jsonNode('*string':'XREXTT':XREXTT);
jsonNode('*string':'XREXTD':XREXTD);
jsonNode('*string':'XREXTH':XREXTH);
jsonNode('*number':'XREXTW':%trim(%editc(XREXTW:'P')));
jsonNode('*string':'XREXTE':XREXTE);
jsonNode('*string':'XREXTA':XREXTA);
jsonNode('*string':'XREXTP':XREXTP);
jsonNode('*number':'XREXTQ':%trim(%editc(XREXTQ:'P')));
jsonNode('*string':'XREXTX':XREXTX);
jsonNode('*string':'XREXTV':XREXTV);
jsonNode('*string':'XRRCST':XRRCST);
jsonNode('*string':'XRRCDC':XRRCDC);
jsonNode('*number':'XRRCUD':%trim(%editc(XRRCUD:'P')));
jsonEndNode();
endsr;
/end-free
*=====================================================================
* End JSON Object
*=====================================================================
/free
begsr jsonEnd;
// End JSON Object
jsonEndNode();
jsonEndNode();
endsr;
/end-free
*=====================================================================
* Start XML Document
*=====================================================================
/free
begsr xmlStart;
setContent('text/xml');
// Declare XML Response Document
xmlNode('xml');
xmlNode('file':'id="XRREGTST"');
endsr;
/end-free
*=====================================================================
* Process Row (CallBack From sqlProcessRows)
*=====================================================================
/free
begsr xmlRow;
// Generate Row
xmlNode('record':'rrn="'+%char(RRN)+'"');
// powerEXT generated source
xmlNode('XRXRID':'':XRXRID);
xmlNode('XRXAID':'':XRXAID);
xmlNode('XRFLDR':'':XRFLDR);
xmlNode('XRFLDL':'':%trim(%editc(XRFLDL:'P')));
xmlNode('XRFLDT':'':XRFLDT);
xmlNode('XRFLDP':'':%trim(%editc(XRFLDP:'P')));
xmlNode('XRFLDE':'':XRFLDE);
xmlNode('XRFLDW':'':XRFLDW);
xmlNode('XRFLDF':'':XRFLDF);
xmlNode('XRFLDD':'':XRFLDD);
xmlNode('XRFLD1':'':XRFLD1);
xmlNode('XRFLD2':'':XRFLD2);
xmlNode('XRFLD3':'':XRFLD3);
xmlNode('XRPNLD':'':XRPNLD);
xmlNode('XREXTT':'':XREXTT);
xmlNode('XREXTD':'':XREXTD);
xmlNode('XREXTH':'':XREXTH);
xmlNode('XREXTW':'':%trim(%editc(XREXTW:'P')));
xmlNode('XREXTE':'':XREXTE);
xmlNode('XREXTA':'':XREXTA);
xmlNode('XREXTP':'':XREXTP);
xmlNode('XREXTQ':'':%trim(%editc(XREXTQ:'P')));
xmlNode('XREXTX':'':XREXTX);
xmlNode('XREXTV':'':XREXTV);
xmlNode('XRRCST':'':XRRCST);
xmlNode('XRRCDC':'':XRRCDC);
xmlNode('XRRCUD':'':%trim(%editc(XRRCUD:'P')));
xmlEndNode();
endsr;
/end-free
*=====================================================================
* End XML Document
*=====================================================================
/free
begsr xmlEnd;
// End XML Document
xmlEndNode();
xmlEndNode();
endsr;
/end-free
*=====================================================================
* Start HTML Table
*=====================================================================
/free
begsr htmlStart;
setContent('text/html');
// Declare HTML Response Table
htmlNode('table':'id="XRREGTST"');
endsr;
/end-free
*=====================================================================
* Process Row (CallBack From sqlProcessRows)
*=====================================================================
/free
begsr htmlRow;
// Generate Row
htmlNode('tr':'rrn="'+%char(RRN)+'"');
// powerEXT generated source
htmlNode('td':'db2field="XRXRID"':XRXRID);
htmlNode('td':'db2field="XRXAID"':XRXAID);
htmlNode('td':'db2field="XRFLDR"':XRFLDR);
htmlNode('td':'db2field="XRFLDL"':%trim(%editc(XRFLDL:'P')));
htmlNode('td':'db2field="XRFLDT"':XRFLDT);
htmlNode('td':'db2field="XRFLDP"':%trim(%editc(XRFLDP:'P')));
htmlNode('td':'db2field="XRFLDE"':XRFLDE);
htmlNode('td':'db2field="XRFLDW"':XRFLDW);
htmlNode('td':'db2field="XRFLDF"':XRFLDF);
htmlNode('td':'db2field="XRFLDD"':XRFLDD);
htmlNode('td':'db2field="XRFLD1"':XRFLD1);
htmlNode('td':'db2field="XRFLD2"':XRFLD2);
htmlNode('td':'db2field="XRFLD3"':XRFLD3);
htmlNode('td':'db2field="XRPNLD"':XRPNLD);
htmlNode('td':'db2field="XREXTT"':XREXTT);
htmlNode('td':'db2field="XREXTD"':XREXTD);
htmlNode('td':'db2field="XREXTH"':XREXTH);
htmlNode('td':'db2field="XREXTW"':%trim(%editc(XREXTW:'P')));
htmlNode('td':'db2field="XREXTE"':XREXTE);
htmlNode('td':'db2field="XREXTA"':XREXTA);
htmlNode('td':'db2field="XREXTP"':XREXTP);
htmlNode('td':'db2field="XREXTQ"':%trim(%editc(XREXTQ:'P')));
htmlNode('td':'db2field="XREXTX"':XREXTX);
htmlNode('td':'db2field="XREXTV"':XREXTV);
htmlNode('td':'db2field="XRRCST"':XRRCST);
htmlNode('td':'db2field="XRRCDC"':XRRCDC);
htmlNode('td':'db2field="XRRCUD"':%trim(%editc(XRRCUD:'P')));
htmlEndNode();
endsr;
/end-free
*=====================================================================
* End HTML Table
*=====================================================================
/free
begsr htmlEnd;
// End HTML Table
htmlEndNode();
endsr;
/end-free
----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubscribe, please go to: http://www.scottklement.com/mailman/listinfo/ftpapi -----------------------------------------------------------------------