ステップ2. FTPサービスのJSMコマンドを作成する
このステップでは、ファンクションiiiFN03を使用して、テンプレートBBJSMXCMDでJSMコマンドを作成し、FTPサービスで以下のタスクを実行します。
· FTPサイトに接続する
· ユーザーIDとパスワードでログインする
· ディレクトリを設定する
· 指定のパスでファイルをリストする
· FTPサイトを終了する
BBJSMXCMDテンプレートを使用する場合、以下のコマンド、キーワード、値を使用します。
コマンド |
キーワード |
値 |
作業リスト |
---|---|---|---|
CONNECT |
HOST |
#S_218HOST |
|
LOGIN |
USER |
#S_218USER |
|
PASSWORD |
#S_218PSWD | ||
CHGDIR |
PATH |
#S_218DIR |
|
LIST |
DIR |
WL_218 | |
QUIT |
1. iiiFN03ファンクションを使用して、テンプレートBBJSMXCMDを実行します。
a. 始める前に、コメント「ここに処理ロジックを記述してください」の後のコメント行の先頭にカーソルを置き、ツールバーの[ウィザード(テンプレート)の実行]ボタンをクリックするか、[編集]メニューで[ウィザード(テンプレート)の実行]オプションを選択します。
b. テンプレートのリストでBBJSMXCMDを選択します。
c. 以下の表に示すように、テンプレートの質問に回答します。
質問 |
回答 |
説明 |
---|---|---|
このテンプレートを使用して、JSMXSKELで生成されたファンクションでコマンドを作成します。 |
Enterを押して続行します。 |
これは情報を示すパネルです。 |
作成するJSMコマンドを入力します。 |
CONNECT |
|
指定するキーワードの数は? |
1 |
|
キーワード名を入力します。 |
HOST |
|
HOSTキーワードの値を入力します。 |
#S_218HOST |
画面に入力したホスト値 |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
Enterを押します。 |
このコマンドでは作業リストは必要ありません。 |
別のJSMコマンドを入力しますか? |
Y |
|
作成するJSMコマンドを入力します。 |
LOGIN |
|
指定するキーワードの数は? |
2 |
|
キーワード名を入力します。 |
USER |
|
USERキーワードの値を入力します。 |
#S_218USER |
画面に入力したユーザー値 |
キーワード名を入力します。 |
PASSWORD |
|
PASSWORDキーワードの値を入力します。 |
#S_218PSWD |
画面に入力したパスワード値 |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
Enterを押します。 |
このコマンドでは作業リストは必要ありません。 |
別のJSMコマンドを入力しますか? |
Y |
|
作成するJSMコマンドを入力します。 |
CHGDIR |
|
指定するキーワードの数は? |
1 |
|
キーワード名を入力します。 |
PATH |
|
PATHキーワードの値を入力します。 |
#S_218DIR |
画面に入力したパス |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
Enterを押します。 |
このコマンドでは作業リストは必要ありません。 |
別のJSMコマンドを入力しますか? |
Y |
|
作成するJSMコマンドを入力します。 |
LIST |
|
指定するキーワードの数は? |
1 |
|
キーワード名を入力します。 |
PATH |
|
PATHキーワードの値を入力します。 |
入力した以前の値が含まれているフィールドをブランクにしてEnterを押します。 |
このキーワードに値は必要ありません。 |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
WL_218 |
ファイルのリストを返す作業リスト |
別のJSMコマンドを入力しますか? |
Y |
|
作成するJSMコマンドを入力します。 |
QUIT |
|
指定するキーワードの数は? |
0 |
このコマンドにキーワードはありません。 |
別のJSMコマンドを入力しますか? |
N |
d. BBJSMCMDテンプレートが完了すると、FTPサービスの処理に必要なすべてのコードが用意されています。
RDMLXコードは以下のように表示されます。
* BUILD THE JSM COMMAND
#JSMXCMD := CONNECT
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD HOST #S_218HOST)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := LOGIN
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD USER #S_218USER)
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PASSWORD #S_218PSWD)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := CHGDIR
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PATH #S_218DIR)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := LIST
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PATH *BLANKS)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG #WL_218)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := QUIT
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
完全なRDML/RDMLXコードは以下のように表示されます。
iiiFN04:
* =======================================================
* Copyright .....: (C) LANSA, 1989
* Process .......: IIIPRO02
* Function ......: IIIFN04
* Created by ....: PCXUSER
* Created on ....: 08/06/23 at 10:58:57
* Description ...: Display FTP Service
* =======================================================
* Working fields, lists and groups
* =======================================================
DEFINE FIELD(#W_TYPE) TYPE(*CHAR) LENGTH(1) DESC('Type of file')
DEFINE FIELD(#W_FILE) TYPE(*CHAR) LENGTH(80) COLHDG('File Name')
DEF_LIST NAME(#WL_218) FIELDS(#W_TYPE #W_FILE) TYPE(*WORKING) ENTRYS(500)
DEF_LIST NAME(#BL_218) FIELDS(#W_FILE) ENTRYS(500)
* Group for all input fields
DEFINE FIELD(#S_218DIR) TYPE(*CHAR) LENGTH(200) DESC('FTP Directory')
GROUP_BY NAME(#GB_PNLDTA) FIELDS(#S_218HOST #S_218DIR #S_218USER #S_218PSWD)
*
* =======================================================
* Program Mainline : IIIFN04
* =======================================================
*
FUNCTION OPTIONS(*DIRECT)
BEGIN_LOOP
REQUEST FIELDS(#GB_PNLDTA) BROWSELIST(#BL_218)
CLR_LIST NAMED(#WL_218)
CLR_LIST NAMED(#BL_218)
EXCHANGE FIELDS(#GB_PNLDTA)
CALL PROCESS(*DIRECT) FUNCTION(#IIIFN03) PASS_LST(#WL_218)
SELECTLIST NAMED(#WL_218)
ADD_ENTRY TO_LIST(#BL_218)
ENDSELECT
END_LOOP
iiiFN03:
* ====================================================
* Process ........:JMIPRO02
* Function .......:JMIFN03
* Created on
.....:08/11/13 at 15:11:06
* Description ....:Use FTP Service
*
Template........:JSMXSKEL
*
====================================================
FUNCTION
OPTIONS(*DIRECT) RCV_LIST(#wl_218)
DEFINE FIELD(#W_TYPE) TYPE(*CHAR)
LENGTH(1) DESC('Type of file')
DEFINE FIELD(#W_FILE) TYPE(*CHAR) LENGTH(80)
COLHDG('File Name')
DEF_LIST NAME(#WL_218) FIELDS(#W_TYPE #W_FILE)
TYPE(*WORKING) ENTRYS(500)
*
* OPEN JSM AND VERIFY STATUS
USE
BUILTIN(JSMX_OPEN) TO_GET(#JSMSTS #JSMMSG #JSMXHDLE1)
EXECUTE
SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
*
* BUILD THE SERVICE LOAD
COMMAND
#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)
*
* YOUR OWN LOGIC
HERE
*
* BUILD THE JSM COMMAND
#JSMXCMD := CONNECT
EXECUTE
SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD HOST #S_218HOST)
USE
BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS
#JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD
:= LOGIN
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD USER
#S_218USER)
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PASSWORD
#S_218PSWD)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD)
TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := CHGDIR
EXECUTE SUBROUTINE(KEYWRD)
WITH_PARMS(#JSMXCMD PATH #S_218DIR)
USE BUILTIN(JSMX_COMMAND)
WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE
SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD := LIST
EXECUTE
SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PATH *BLANKS)
USE
BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG
#WL_218)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
*
#JSMXCMD
:= QUIT
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD)
TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
WITH_PARMS(#JSMXCMD)
*
* UNLOAD SERVICE
#JSMXCMD :=
'SERVICE_UNLOAD'
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD)
TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
WITH_PARMS(#JSMXHDLE1)
* CLOSE JSM AND VERIFY STATUS
USE
BUILTIN(JSMX_CLOSE) WITH_ARGS(#JSMXHDLE1) TO_GET(#JSMSTS #JSMMSG)
EXECUTE
SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXHDLE1)
*
RETURN
*
* Subroutine
to build JSM commands. existing JSM command
*
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
*
* Check the status
of the JSM command issued
*
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