このステップでは、Client XML Employees Responseソリューションに生成されたRDMLXのインバウンド部分を使用して、ファンクションiiiFN09を完了します。
*サービスをバインドして、HTTP 要求コンテンツを読み込むCHANGE FIELD(#JSMXCMD) TO('BIND SERVICE(IIIPRO07_RESPONSE) TYPE(*INBOUND) BINDTRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*フラグメント取得 - EMPLOYEELISTCHANGE FIELD(#JSMXCMD) TO('GET FRAGMENT(EMPLOYEELIST) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*<<< EMPLOYEE のフラグメントのループ・ロジックを入力 >>>BEGIN_LOOP /* EMPLOYEE */*フラグメント取得 - EMPLOYEECHANGE FIELD(#JSMXCMD) TO('GET FRAGMENT(EMPLOYEE) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)LEAVE IF('#JSMXSTS *EQ NOFRAGMENT')EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*リスト取得 - EMPLOYEESKILLCHANGE FIELD(#JSMXCMD) TO('GET LIST(EMPLOYEESKILL)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG #EMPLOYEESKILL)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)END_LOOP /* EMPLOYEE */*リスト取得 - EMPLOYEESKILLCHANGE FIELD(#JSMXCMD) TO('GET LIST(EMPLOYEESKILL)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG #EMPSKILLS)CONTINUE IF(#JSMXSTS *EQ NOLIST)SELECTLIST NAMED(#empskills)ADD_ENTRY TO_LIST(#wl_empskl)ENDSELECT*Check ルーチンSUBROUTINE NAME(CHECK) PARMS((#JSMXSTS *RECEIVED) (#JSMXMSG *RECEIVED))DEFINE FIELD(#MSGDTA) TYPE(*CHAR) LENGTH(132)*IF COND('#JSMXSTS *NE OK')#MSGDTA := 'Error Status Code: ' + #JSMXSTSMESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)#MSGDTA := 'Error Message: ' + #JSMXMSGMESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)USE BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMXSTS #JSMXMSG)ABORTENDIF*ENDROUTINEFUNCTION OPTIONS(*DIRECT) RCV_LIST(#wl_empskl)*以下のフィールドは xml バインド・マップで使用*#DEPTMENT*以下のフラグメントは xml バインド・マップで使用GROUP_BY NAME(#DEPTREQ) FIELDS(#DEPTMENT)DEF_LIST NAME(#wl_empskl) FIELDS(#fullname #skildesc) TYPE(*working) ENTRYS(*max)DEF_LIST NAME(#empskills) FIELDS(#skildesc) TYPE(*working) ENTRYS(*max)*サービスを開くUSE BUILTIN(JSMX_OPEN) TO_GET(#JSMXSTS #JSMXMSG #JSMXHDLE1)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*サービスのロードCHANGE FIELD(#JSMXCMD) TO('SERVICE_LOAD SERVICE(HTTPOutboundXMLBindService) 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(IIIPRO07_REQUEST) TYPE(*OUTBOUND)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*フラグメント設定 - DEPARTMENTREQUESTCHANGE FIELD(#JSMXCMD) TO('SET FRAGMENT(DEPARTMENTREQUEST) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)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)*バインドを閉じるCHANGE FIELD(#JSMXCMD) TO('CLOSE')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 HOST(earthd14.lansa.co.uk ) URI(/cgi-bin/jsmdirect?iiiFN06_SERVICE)')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(IIIPRO07_RESPONSE) TYPE(*INBOUND) BINDTRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*フラグメント取得 - EMPLOYEELISTCHANGE FIELD(#JSMXCMD) TO('GET FRAGMENT(EMPLOYEELIST) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*<<< EMPLOYEE のフラグメントのループ・ロジックを入力 >>>BEGIN_LOOP /* EMPLOYEE */*フラグメント取得 - EMPLOYEECHANGE FIELD(#JSMXCMD) TO('GET FRAGMENT(EMPLOYEE) SERVICE_EXCHANGE(*FIELD)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)LEAVE IF('#JSMXSTS *EQ NOFRAGMENT')EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*リスト取得 - EMPLOYEESKILLCHANGE FIELD(#JSMXCMD) TO('GET LIST(EMPLOYEESKILL)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG #EMPSKILLS)CONTINUE IF(#jsmxsts *EQ nolist)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)*SELECTLIST NAMED(#empskills)ADD_ENTRY TO_LIST(#wl_empskl)ENDSELECTEND_LOOP /* EMPLOYEE */*サービスのアンロードUSE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 'SERVICE_UNLOAD') 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)RETURN*Check ルーチンSUBROUTINE NAME(CHECK) PARMS((#JSMXSTS *RECEIVED) (#JSMXMSG *RECEIVED))DEFINE FIELD(#MSGDTA) TYPE(*CHAR) LENGTH(132)*IF COND('#JSMXSTS *NE OK')#MSGDTA := 'Error Status Code: ' + #JSMXSTSMESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)#MSGDTA := 'Error Message: ' + #JSMXMSGMESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)USE BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMXSTS #JSMXMSG)ABORTENDIF*ENDROUTINE