3.4.8 ILE RPGXクライアント・プログラムのサンプル
以下のRPGプログラムの例は、HTTPServiceとInboundFIleハンドラーを使用して、HTTPクライアント・プログラムにPDFドキュメントを返す状況を示しています。
このプログラムの例には、バインディング・フィールドやバインディング・リストの例も含まれています。これはHTTP応答を送信するタスクには必要ありません。また、SERVICE_UNLOADコマンドのコメントが外されているため、SENDコマンドで返されるHTTP応答はJSMX_CLOSE API呼び出しでHTTPクライアントに返されます。
ILE RPGXクライアント・アプリケーションの詳しい例については、「クライアント・アプリケーションの例」を参照してください。
例
CRTRPGMOD MODULE(JSMBLD/DEMORPGSRV) SRCFILE(*LIBL/QCSRC)
CRTPGM PGM(JSMBLD/DEMORPGSRV) MODULE(*LIBL/DEMORPGSRV) +
BNDSRVPGM(*LIBL/JSMRPGSRV) ACTGRP(*CALLER)
D FieldDef1 S 60 DIM(6) CTDATA
D FieldDef2 S 60 DIM(3) CTDATA
D ListDef1 S 60 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 FieldDefSize S 10I 0 INZ(0)
D FieldEntSize S 10I 0 INZ(0)
*
D JSMHDL S 4 INZ(*BLANKS)
D JSMSRV S 100 INZ(*BLANKS)
D JSMSTS S 40 INZ(*BLANKS)
D JSMMSG S 4096 INZ(*BLANKS)
D JSMCMD S 2048 INZ(*BLANKS)
D ZEROLENGTH S 10I 0 INZ(0)
*
D FLD1 DS
D EMPLOYEE 50A INZ('John Smith')
D SURNAME 30A INZ('Smith')
D SALARY 7P 2 INZ(30000.50)
D AGE 3S 0 INZ(25)
D DATE D DATFMT(*ISO)
D DATETIME Z
*
D LST1 DS OCCURS(10)
D EMPNME 50 INZ('Acme Corp')
D SURNME 35 INZ('Jones')
D GIVENME 20 INZ('Bill')
*
*初期化する
*
C CALLB(D) 'JSMX_BEGIN'
C PARM *OMIT
C PARM ZEROLENGTH
*
*接続を開く
*
C CLEAR JSMSRV
C EVAL JSMSRV = 'LOCALHOST:4560'
C CALLB(D) 'JSMX_OPEN'
C PARM JSMHDL
C PARM JSMSRV
C PARM JSMSTS
C PARM JSMMSG
*
*フィールドをバインドする
*
C EVAL DATE = %DATE()
C EVAL DATETIME = %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 EVAL ListDefSize = %SIZE(ListDef1:*ALL)
C EVAL ListEntSize = %SIZE(LST1)
C EVAL ListCount = 1
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 CLEAR JSMCMD
C EVAL JSMCMD = 'SERVICE_LOAD' +
C ' SERVICE(HTTPSERVICE)' +
C ' SERVICE_CONTENT(*HTTP)' +
C ' TRACE(*YES)'
C CALLB(D) 'JSMX_COMMAND'
C PARM JSMHDL
C PARM JSMCMD
C PARM JSMSTS
C PARM JSMMSG
*
*リストをバインドする - リスト・カウントの現在の値を使用する
*
C EVAL ListDefSize = %SIZE(ListDef1:*ALL)
C EVAL ListEntSize = %SIZE(LST1)
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 CLEAR JSMCMD
C EVAL JSMCMD = 'SEND' +
C ' HANDLER(InboundFile)' +
C ' FILE(test-input/ValidatingXML.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
*
*コマンドを送信する
*
* CLEAR JSMCMD
* EVAL JSMCMD = 'SERVICE_UNLOAD'
* CALLB(D) 'JSMX_COMMAND'
* PARM JSMHDL
* PARM JSMCMD
* PARM JSMSTS
* PARM JSMMSG
*
*サービスを終了する
*
C CALLB(D) 'JSMX_CLOSE'
C PARM JSMHDL
C PARM JSMSTS
C PARM JSMMSG
*
*ファイナライズする
*
C CALLB(D) 'JSMX_END'
*
C SETON LR
**CTDATA FieldDef1
EMPLOYEE A000005000
SURNAME A000003000
SALARY P000000702
AGE S000000300
DATE A000001000
DATETIME A000002600
**CTDATA FieldDef2
EMPLOYEE A000005000
SURNAME A000003500
GIVENAME A000002000
**CTDATA ListDef1
EMPLOYEE A000005000
SURNAME A000003500
GIVENAME A000002000