PDFService Example

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

This service uses files that have been shipped in the JSM instance folder.

     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 FieldDef1       S             60A   DIM(11) CTDATA

     D FieldDefSize    S             10I 0 INZ(0)

     D FieldEntSize    S             10I 0 INZ(0)

     D ListDef1        S             60A   DIM(1) CTDATA

     D ListDef2        S             60A   DIM(3) 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 FLD1            DS

     D  PRDID                        10A   INZ('CORD443')

     D  PRDAVL                      200A

     D  PRDDSC                      200A

     D  PRDAMTMP                     10P 2 INZ(499.99)

     D  PRDAMTYP                     10P 2 INZ(499.99)

     D  PRDAMTB10                    10P 2 INZ(431.99)

     D  PRDAMTB20                    10P 2 INZ(413.99)

     D  PRDAMTB30                    10P 2 INZ(359.99)

     D  PRDCOUNT                      3S 0 INZ(25)

     D  PRDDATE                        D   DATFMT(*ISO)

     D  PRDDATETIME                    Z

      *

     D LST1            DS                  OCCURS(10)

     D  TEXT                         30A

      *

     D LST2            DS                  OCCURS(10)

     D  COL1                         10A

     D  COL2                         10A

     D  COL3                         10P 2

      *

      * 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

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'SERVICE_LOAD' +

     C                                      ' SERVICE(PDFDocumentService)' +

     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)

      *

      * CREATE

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'CREATE' +

     C                                      ' DOCUMENT(demo.pdf)' +

     C                                      ' CONTENT(demo-product.xml)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * ADD PRODUCT - BIND FIELDS

      *

     C                   EVAL      PRDAVL = 'Available in 24 hours'

     C                   EVAL      PRDDSC = '18V Compact Hammer.' +

     C                                      ' Power output 350W.'

     C                   EVAL      PRDDATE = %DATE()

     C                   EVAL      PRDDATETIME = %TIMESTAMP()

      *

     C                   EVAL      FieldDefSize  = %SIZE(FieldDef1:*ALL)

     C                   EVAL      FieldEntSize  = %SIZE(FLD1)

     C                   CALLB(D)  'JSMX_BINDFLD'

     C                   PARM                    JSMHDL

     C                   PARM                    FieldDef1

     C                   PARM                    FieldDefSize

     C                   PARM                    FLD1

     C                   PARM                    FieldEntSize

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * ADD PRODUCT - BIND LIST

      *

     C     1             OCCUR     LST1

     C                   EVAL      TEXT = '4-piece combo kit'

     C     2             OCCUR     LST1

     C                   EVAL      TEXT = '3-speed transmission'

      *

      * Reset list to beginning

     C     1             OCCUR     LST1

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

     C                   EVAL      ListEntSize  = %SIZE(LST1)

     C                   EVAL      ListCount    = 2

     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)

      *

      * ADD PRODUCT

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'ADD' +

     C                                      ' CONTENT(product)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * ADD TABLE - BIND LIST

      *

     C     1             OCCUR     LST2

     C                   EVAL      COL1 = 'Text 11'

     C                   EVAL      COL2 = 'Text 12'

     C                   EVAL      COL3 = 100.34

     C     2             OCCUR     LST2

     C                   EVAL      COL1 = 'Text 21'

     C                   EVAL      COL2 = 'Text 22'

     C                   EVAL      COL3 = 145.67

      *

      * Reset list to beginning

     C     1             OCCUR     LST2

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

     C                   EVAL      ListEntSize  = %SIZE(LST2)

     C                   EVAL      ListCount    = 2

     C                   EVAL      ListMaxCount = %ELEM(LST2)

     C                   CALLB(D)  'JSMX_BINDLST'

     C                   PARM                    JSMHDL

     C                   PARM                    ListDef2

     C                   PARM                    ListDefSize

     C                   PARM                    LST2

     C                   PARM                    ListEntSize

     C                   PARM                    ListCount

     C                   PARM                    ListMaxCount

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * ADD TABLE

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'ADD' +

     C                                      ' CONTENT(table)'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * CLOSE

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'CLOSE'

     C                   CALLB(D)  'JSMX_COMMAND'

     C                   PARM                    JSMHDL

     C                   PARM                    JSMCMD

     C                   PARM                    JSMSTS

     C                   PARM                    JSMMSG

     C                   CALLP     checkSTS(JSMSTS:JSMMSG)

      *

      * SERVICE_UNLOAD

      *

     C                   CLEAR                   JSMCMD

     C                   EVAL      JSMCMD = 'SERVICE_UNLOAD'

     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 FieldDef1

PRDID                                             A000001000

PRDAVL                                            A000020000

PRDDSC                                            A000020000

PRDAMTMP                                          P000001002

PRDAMTYP                                          P000001002

PRDAMTB10                                         P000001002

PRDAMTB20                                         P000001002

PRDAMTB30                                         P000001002

PRDCOUNT                                          S000000300

PRDDATE                                           A000001000

PRDDATETIME                                       A000002600

**CTDATA ListDef1

TEXT                                              A000003000

**CTDATA ListDef2

COL1                                              A000001000

COL2                                              A000001000

COL3                                              P000001002