HTTPService Inbound Example

Refer to shipped RPG source file QRPGLRSRC and CRTDEMO program source in QCLSRC source file.

This HTTP example requires JSMDIRECT configuration and a HTTP server to host the sample HTML file.

     H OPTION(*SRCSTMT : *NODEBUGIO) DFTACTGRP(*NO) ACTGRP(*CALLER)

     H BNDDIR('JSMBNDDIR')

      *

      * V6R1 - Limits

      * Maximum data structure size is 16,773,104 bytes

      * Data structure size = element size * occurrence

      *

     D ListDef1        S             60A   DIM(2) CTDATA

     D ListDefSize     S             10I 0 INZ(0)

     D ListEntSize     S             10I 0 INZ(0)

     D ListCount       S             10I 0 INZ(0)

     D ListMaxCount    S             10I 0 INZ(0)

      *

     D JSMHDL          S              4A   INZ(*BLANKS)

     D JSMSRV          S             50A   INZ(*BLANKS)

     D JSMSTS          S             20A   INZ(*BLANKS)

     D JSMMSG          S            512A   INZ(*BLANKS)

     D JSMCMD          S            512A   INZ(*BLANKS)

     D ZEROLENGTH      S             10I 0 INZ(0)

      *

     D LST1            DS                  OCCURS(10)

     D  NAME                         50A

     D  VALUE                       100A

      *

      * JSMX_BEGIN

      *

     C                   CALLB(D)  'JSMX_BEGIN'

     C                   PARM                    *OMIT

     C                   PARM                    ZEROLENGTH

      *

      * JSMX_OPEN - USE JSMCLTDTA FOR SERVER

      *

     C                   CLEAR                   JSMSRV

     C                   EVAL      JSMSRV = ''

     C                   CALLB(D)  'JSMX_OPEN'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMSRV

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * SERVICE_LOAD - BIND LIST

      *

      * Reset list to beginning

     C     1             OCCUR     LST1

     C                   EVAL      ListDefSize  = %SIZE(ListDef1:*ALL)

     C                   EVAL      ListEntSize  = %SIZE(LST1)

     C                   EVAL      ListCount    = 0

     C                   EVAL      ListMaxCount = %ELEM(LST1)

     C                   CALLB(D)  'JSMX_BINDLST'

     C                   PARM                    JSMHDL

     C                   PARM                    ListDef1

     C                   PARM                    ListDefSize

     C                   PARM                    LST1

     C                   PARM                    ListEntSize

     C                   PARM                    ListCount

     C                   PARM                    ListMaxCount

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * SERVICE_LOAD

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'SERVICE_LOAD' +

     C                                      ' SERVICE(HTTPService)' +

     C                                      ' SERVICE_CONTENT(*HTTP)' +

     C                                      ' BIND(*LIST)' +

     C                                      ' TRACE(*YES)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * RECEIVE HANDLER

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'RECEIVE' +

     C                                      ' HANDLER(InboundMultiPart)' +

     C                                      ' FIELD(SONUMBER)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * RECEIVE HANDLER

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'RECEIVE' +

     C                                      ' HANDLER(InboundMultiPart)' +

     C                                      ' FILE(FILE1)' +

     C                                      ' TO(demo.txt)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * SEND HANDLER

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'SEND' +

     C                                      ' HANDLER(InboundFile)' +

     C                                      ' FILE(receipt.pdf)' +

     C                                      ' CONTENT(*PDF)' +

     C                                      ' UACACHE(5)'

     C

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * JSMX_CLOSE

      *

     C                   CALLB(D)  'JSMX_CLOSE'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * JSMX_END

      *

     C                   CALLB(D)  'JSMX_END'

      *

     C                   SETON                                        LR

 

      ********************************

      * Procedure to check JSM status

      ********************************

     P checkSTS        B

     D checkSTS        PI              N

     D  csJSMSTS                           CONST LIKE(JSMSTS)

     D  csJSMMSG                           CONST LIKE(JSMMSG)

     D  csMSGTXT       S            512A

     C                   IF        csJSMSTS <> 'OK'

     C                   EVAL      csMSGTXT = %TRIM(csJSMSTS) + ' ' +

     C                                        %TRIM(csJSMMSG)

     C                   CALLP     sendMSG(csMSGTXT)

     C                   RETURN    *OFF

     C                   ENDIF

     C                   RETURN    *ON

     P                 E

 

      **************************************

      * Procedure to send a program message

      **************************************

     P sendMSG         B

     D sendMSG         PI

     D smMSGTXT                     512A   VALUE

     D smMSGT          S             10A   INZ('*DIAG')

     D smMSGI          S              7A   INZ('CPF9897')

     D smMSGF          S             20A   INZ('QCPFMSG   *LIBL     ')

     D smMSGL          S             10I 0 INZ(%SIZE(smMSGTXT))

     D smSTKE          S             10A   INZ('*')

     D smSTKC          S             10I 0 INZ(1)

     D smMSGK          S              4A   INZ(*BLANK)

     D smERRC          S             10I 0 INZ(0)

     C                   CALL      'QMHSNDPM'

     C                   PARM                    smMSGI

     C                   PARM                    smMSGF

     C                   PARM                    smMSGTXT

     C                   PARM                    smMSGL

     C                   PARM                    smMSGT

     C                   PARM                    smSTKE

     C                   PARM                    smSTKC

     C                   PARM                    smMSGK

     C                   PARM                    smERRC

     P                 E

 

**CTDATA ListDef1

NAME                                              A000005000

VALUE                                             A000010000

 

HTML Browser Client

The following HTML code is the client side to the above HTTP service example.

 

<!DOCTYPE html>

<html>

 

  <form method="POST" action="http://lansa01:1099/cgi-bin/jsmdirect?service=demohttp&mode=order" enctype="multipart/form-data">

 

   <table>

      <tr><td>Order#</td><td><input name="SONUMBER"     type="text" value="12345"/></td></tr>

      <tr><td>Customer</td><td><input name="CUSTNAME"  type="text" value="ABC Industries"/></td></tr>

      <tr><td>Street</td><td><input name="STREET"      type="text" value="123 Main St"/></td></tr>

      <tr><td>City</td><td><input name="CITY"          type="text" value="Chicago"/></td></tr>

      <tr><td>PostCode</td><td><input name="POSTCODE"  type="text" value="60609"/></td></tr>

   </table>

 

   <br/>

   <input name="FILE1" type="file"/>

   <br/>

   <br/>

   <input type="SUBMIT" value="Send order"/>

 

  </form>

 

</html>