[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: XML Writer Service program



   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 &#38; 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
-----------------------------------------------------------------------