ステップ1. テンプレートJSMXSKELを使用してファンクションを作成する
このステップでは、JSMを開いて終了し、FTPServiceサービスをロードするテスト・ファンクションをテンプレートJSMXSKELを使用して作成します。JSMXSKELのコピーがない場合、最初に「RDMLXテンプレートの作成」の手順を使用してJSMXSKELを作成する必要があります。
1. LANSA開発環境を使用する場合、チュートリアルに指定された区画(通常はDEM)にサイン・オンします。
2. JSMXSKELテンプレートではJSMXCMD、JSMXHDLE1、JSMSTS、JSMMSGの各フィールドが必要なため、これらのフィールドがリポジトリで定義されているかどうかをチェックします。これらのフィールドが存在しない場合、以下のように作成できます。
· JSMXCMD STRING(65535,0) (RDMLXフィールドでなければならない)
· JSMXHDLE1 ALPHA(4,0)
· JSMSTS ALPHA(20,0)
· JSMMSG ALPHA(200,0)
3. iiiPRO01 JSM Test Processという新しいLANSAプロセスを作成します。iiiは一意の3文字です(プロセスがすでにある場合は、iiiに対して別の文字セットを選択します)。
4. プロセスiiiPRO01に属するiiiFN01 JSM Open/Closeという新しいファンクションを作成します。[RDMLXフィールドの保管の確認]チェックボックスが選択されていることを確認します。ファンクションがアプリケーション・テンプレートから生成されるように指定します([テンプレート]ドロップダウンでJSMXSKELを選択します)。
5. 以下の表に示すようにテンプレートの質問に回答します。
質問 |
回答 |
説明 |
---|---|---|
JSMサービスをロードしますか? |
FTPSERVICE |
|
6. iiiFN01ファンクションを編集して、生成されたRDMLXコードを調べます。
ファンクションは以下のように表示されます。
* ====================================================
* Process ........:JMIPRO01
* Function .......:JMIFN01
* Created on .....:08/11/13 at 14:27:55
* Description ....:JSM Open/Close
* Template........:JSMXSKEL
* ====================================================
FUNCTION OPTIONS(*DIRECT)
*JSMを開いて状況を検証する
USE BUILTIN(JSMX_OPEN) TO_GET(#JSMSTS #JSMMSG #JSMXHDLE1)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
*サービス・ロード・コマンドを作成する
#JSMXCMD := 'SERVICE_LOAD'
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD 'SERVICE' 'FTPSERVICE')
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
* 各自のロジックをここに記載
*
*サービスをアンロードする
#JSMXCMD := 'SERVICE_UNLOAD'
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
* JSMを終了して状況を検証する
USE BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
*
RETURN
* JSMコマンド、既存のJSMコマンドを生成するサブルーチン
SUBROUTINE NAME(KEYWRD) PARMS((#W_CMDX *BOTH) (#W_KEYWRD *RECEIVED) (#W_KEYVAL *RECEIVED))
DEFINE FIELD(#W_CMDX) REFFLD(#JSMXCMD)
DEFINE FIELD(#W_KEYWRD) REFFLD(#STD_TEXT)
DEFINE FIELD(#W_KEYVAL) REFFLD(#STD_TEXTL)
#W_CMDX += ' ' + #W_KEYWRD + '(' + #W_KEYVAL + ')'
ENDROUTINE
*発行されたJSMコマンドの状況をチェックする
*
SUBROUTINE NAME(CHECK_STS) PARMS(#W_HDLE)
DEFINE FIELD(#MSGDTA) TYPE(*CHAR) LENGTH(132)
DEFINE FIELD(#W_HDLE) TYPE(*CHAR) LENGTH(4)
IF COND('#JSMSTS *NE OK')
#MSGDTA := 'Error Status Code:' + #JSMSTS
MESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)
#MSGDTA := 'Error Message:' + #JSMMSG
MESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)
ENDIF
ENDROUTINE
JSMXを開くコマンド、FTPServiceサービスをロードするコマンド、サービスをアンロードするコマンド、JSMXを終了するコマンドに注目してください。
· JSMコマンドのキーワードとその値の生成が簡単になるようにKEYWRDサブルーチンを使用している点に注意してください。KEYWRDサブルーチンの詳細については、「INT003 - FTPサービスの使用」で説明します。
· エラー処理用の各JSMコマンドの後にCHECK_STSサブルーチンが使用されている点に注意してください。このルーチンはエラー・メッセージの書式を整えるだけです。エラーの発生時にファンクションを中断するわけではありません。
· CHECK_STSサブルーチンには、状況をチェックするハンドルを指定するパラメータが必要です。これは、JSMサーバーへの複数の接続が同時に開くことがあるためです。