このステップでは、クライアントの RDMLX の作成を開始します。クライアントはサーバーに要求ドキュメントを送信し、INT007 で作成したサービスから社員リストを受け取ります。現時点では、要求 XML の作成と送信のみコーディングします。
完成したクライアント・ファンクション iiiFN07 の全体の構造は以下のようになります。
1. JSMX_OPEN
2. SERVICE_LOAD HTTPOutboundXMLBindService
3. BIND アウトバウンド
4. SET DepartmentRequest フラグメント
5. WRITE DepartmentRequest フラグメント
6. SEND HOST() URI()
7. BIND サービス IIIPRO07_SERVICE インバウンド
8. GET EMPLOYEELIST フラグメント
9. BEGIN_LOOP
a. GET EMPLOYEE フラグメント
b. LEAVE if NOFRAGMENT
c. GET EMPLOYEESKILLS リスト
d. SELECT LIST EMPSKILLS
e. Add エントリー WL_EMPSKL
f. End SELECT
10. END_LOOP
11. SERVICE_UNLOAD
12. JSMX_CLOSE
def_list name(#empskills) fIELDS(#skildesc) type(*working) entrys(*max)
SEND コマンドを完了します。HOSTキーワードは、JSMサーバーに関連するWebサーバーを指し示す必要があります。以下のサンプル・コードでは IBM i ホストを指しています。
注意:ローカルの Windows Web サーバーや JSM サーバーを使用している場合、URI は以下のようになります。 /cgi-bin/jsmdirect.exe?IIIFN06_SERVICE |
URIキーワードは iiiFN06_SERVICE というサービスを参照します。コードは以下のようになります。* HTTP 要求コンテンツの送信CHANGE FIELD(#JSMXCMD) TO('SEND HOST(10.44.10.236:80) 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( <<<inbound.class>>> ) TYPE(*INBOUND) BINDTRACE(*YES)')USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMXSTS #JSMXMSG)EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMXSTS #JSMXMSG)FUNCTION 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(10.44.10.236:80) 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)<<< インバウンドのロジックはここ >>>* サービスのアンロード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)* 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)MENU MSGTXT('Java サービス・エラーが発生しました')ENDIFENDROUTINEこのファンクションを保存します。
注意:まだ終了ではありません。次のステップで完了します。この段階で、サーバー・ファンクションによって、処理するXML要求ドキュメントが送信されています。 |