このステップでは、部門記述を取得するデータベース・ファイルDEPTABにアクセスするRDMLXを作成し、サーバー側SETのRDMLXを作成します。
作業リスト定義 DEPTMEN_W に習い、フィールド DEPTDESC を含む 2 つ目の作業リスト DEPTDES_W を定義します。これが戻されるリストです。両方のリストをクリアするコードを追加します。コードは以下のようになります。* 以下のリストは xmlバインド・マップで使用DEF_LIST NAME(#DEPTMEN_W) FIELDS(#DEPTMENT) TYPE(*WORKING)DEF_LIST NAME(#DEPTDES_W) FIELDS(#DEPTDESC) TYPE(*WORKING)CLR_LIST NAMED(#DEPTMEN_W)CLR_LIST NAMED(#DEPTDES_W)
注: デフォルトでは、作業リストは50エントリーで定義されます。この値はこのアプリケーションに対して適切です。 |
SELECTLIST NAMED(#DEPTMEN_W)********** FETCH FIELDS(#DEPTDESC) FROM_FILE(DEPTAB) WITH_KEY(#DEPTMENT)IF_STATUS IS_NOT(*OKAY)#DEPTDESC := '部門が見つかりません'ENDIF ADD_ENTRY TO_LIST(#DEPTDES_W)ENDSELECT **********
**********テキストを逆にする#STD_TEXTS := #STD_TEXTS.Reverse.Trim**********

* サービスをバインドして HTTP 応答コンテンツを作成CHANGE FIELD(#JSMXCMD) TO('BIND SERVICE( <<<outbound.class>>> ) TYPE(*OUTBOUND)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)
FUNCTION OPTIONS(*DIRECT)*以下のフィールドは xml バインド・マップで使用*#DEPTMENT*#STD_TEXTS*以下のフラグメントは xml バインド・マップで使用GROUP_BY NAME(#LISTREQ) FIELDS(#STD_TEXTS)*以下のリストは xmlバインド・マップで使用DEF_LIST NAME(#DEPTMEN_W) FIELDS(#DEPTMENT) TYPE(*WORKING)DEF_LIST NAME(#DEPTDES_W) FIELDS(#DEPTMENT #DEPTDESC) TYPE(*WORKING)CLR_LIST NAMED(#DEPTMEN_W)CLR_LIST NAMED(#DEPTDES_W)*サービスを開くUSE BUILTIN(JSMX_OPEN) TO_GET(#JSMXSTS #JSMXMSG #JSMXHDLE1)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*サービスのロードCHANGE FIELD(#JSMXCMD) TO('SERVICE_LOAD SERVICE(HTTPInboundXMLBindService) SERVICE_CONTENT(*HTTP) TRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*サービスをバインドして、HTTP 要求コンテンツを読み込むCHANGE FIELD(#JSMXCMD) TO('BIND SERVICE(IIIPRO05_REQUEST) TYPE(*INBOUND) BINDTRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*フラグメントを取得する - DEPARTMENTLISTREQUESTCHANGE FIELD(#JSMXCMD) TO('GET FRAGMENT(DEPARTMENTLISTREQUEST) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*リストを取得する - DEPARTMENTCHANGE FIELD(#JSMXCMD) TO('GET LIST(DEPARTMENT)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG #DEPTMEN_W)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)SELECTLIST NAMED(#DEPTMEN_W)*FETCH FIELDS(#DEPTDESC) FROM_FILE(DEPTAB) WITH_KEY(#DEPTMENT)IF_STATUS IS_NOT(*OKAY)CHANGE FIELD(#DEPTDESC) TO('部j門が見つかりません')ENDIFADD_ENTRY TO_LIST(#DEPTDES_W)ENDSELECT**文字列を逆にする#STD_TEXTS := #STD_TEXTS.Reverse.Trim**<<< Outbound binding logic goes here >>>**サービスをバインドして、HTTP 要求コンテンツを作成CHANGE FIELD(#JSMXCMD) TO('BIND SERVICE(IIIPRO05_RESPONSE) TYPE(*OUTBOUND)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*フラグメントを設定する - DEPARTMENTLISTRESPONSECHANGE FIELD(#JSMXCMD) TO('SET FRAGMENT(DEPARTMENTLISTRESPONSE) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*リストを設定する - DEPARTMENTCHANGE FIELD(#JSMXCMD) TO('SET LIST(DEPARTMENT)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG #DEPTDES_W)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*コンテンツの書き込みCHANGE FIELD(#JSMXCMD) TO('WRITE INDENT(*YES) BINDTRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*HTTP 応答コンテンツの送信CHANGE FIELD(#JSMXCMD) TO('SEND')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*サービスを閉じるUSE BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*Check ルーチンSUBROUTINE NAME(CHECK) PARMS((#JSMXSTS *RECEIVED) (#JSMXMSG *RECEIVED))IF COND('#JSMXSTS *NE OK')USE BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMXSTS #JSMXMSG)ABORTENDIFENDROUTINE