ステップ 2. FTP サービスの JSM コマンドを作成する
INT002 - FTP サービスの利用
このステップでは、ファンクション iiiFN02 を使用して、テンプレート BBJSMXCMD で JSM コマンドを作成し、FTP サービスで以下のタスクを実行します。
FTP サイトに接続する
ユーザー ID とパスワードでログインする
ディレクトリを設定する
指定のパスにファイルをリストする
FTP サイトを終了する
BBJSMXCMDテンプレートを使用する場合、以下のコマンド、キーワード、値を使用します。
コマンド |
キーワード |
値 |
作業リスト |
CONNECT |
HOST |
#S_HOST |
|
LOGIN |
USER |
#S_USER |
|
|
PASSWORD |
#S_PSWD |
|
CHGDIR |
PATH |
#S_DIR |
|
LIST |
DIR |
|
WL_FILES |
QUIT |
|
|
|
1. iiiFN02 ファンクションを使用して、テンプレート BBJSMXCMD を実行します。
a. 始める前に、コメントYOUR OWN LOGIC HERE (独自のロジックはここ) の後のコメント行の先頭にカーソルを置き、[デザイン] リボンで
[テンプレート ウィザード] ボタンをクリックします。
b. テンプレートのリストから BBJSMXCMD を選択して、実行ボタンをクリックします。
c. .以下の表に示すように、テンプレートの質問に回答します。
質問 |
回答 |
コメント |
||
このテンプレートを使用して、JSMXSKELで生成されたファンクションでコマンドを作成します。 |
Enterを押して続行します。 |
これは情報を示すパネルです。 |
||
作成するJSMコマンドを入力します。 |
CONNECT |
|
||
指定するキーワードの数は? |
1 |
|
||
キーワード名を入力します。 |
HOST |
|
||
HOSTキーワードの値を入力します。 |
#S_HOST |
画面に入力したホスト値 |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="7f4bb1f3-5895-445b-808e-24fb0d68ed7a"><ac:plain-text-body><![CDATA[ |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
[ENTER]を押します。 |
このコマンドでは作業リストは必要ありません。 |
]]></ac:plain-text-body></ac:structured-macro> |
別のJSMコマンドを入力しますか? |
Y |
|
||
作成するJSMコマンドを入力します。 |
LOGIN |
|
||
指定するキーワードの数は? |
2 |
|
||
キーワード名を入力します。 |
USER |
|
||
USERキーワードの値を入力します。 |
#S_USER |
画面に入力したユーザー値 |
||
キーワード名を入力します。 |
PASSWORD |
|
||
PASSWORDキーワードの値を入力します。 |
#S_PSWD |
画面に入力したパスワード値 |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="c7b05f4b-a41b-418c-b1f8-4b132349b794"><ac:plain-text-body><![CDATA[ |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
[ENTER]を押します。 |
このコマンドでは作業リストは必要ありません。 |
]]></ac:plain-text-body></ac:structured-macro> |
別のJSMコマンドを入力しますか? |
Y |
|
||
作成するJSMコマンドを入力します。 |
CHGDIR |
|
||
指定するキーワードの数は? |
1 |
|
||
キーワード名を入力します。 |
PATH |
|
||
PATHキーワードの値を入力します。 |
#S_DIR |
画面に入力したパス |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="490dfef1-5437-4933-91ff-3c69d1af3da3"><ac:plain-text-body><![CDATA[ |
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
[ENTER]を押します。 |
このコマンドでは作業リストは必要ありません。 |
]]></ac:plain-text-body></ac:structured-macro> |
別のJSMコマンドを入力しますか? |
Y |
|
||
作成するJSMコマンドを入力します。 |
LIST |
|
||
指定するキーワードの数は? |
1 |
|
||
キーワード名を入力します。 |
PATH |
|
||
PATHキーワードの値を入力します。 |
入力した以前の値が含まれているフィールドをブランクにしてEnterを押します。 |
このキーワードに値は必要ありません。 |
||
作業リストの名前を入力します(このコマンドで作業リストを使用する場合)。 |
WL_FILES |
ファイルのリストを返す作業リスト |
||
別のJSMコマンドを入力しますか? |
Y |
|
||
作成するJSMコマンドを入力します。 |
QUIT |
|
||
指定するキーワードの数は? |
0 |
このコマンドにキーワードはありません。 |
||
別のJSMコマンドを入力しますか? |
N |
|
d. BBJSMXCMD テンプレートが完了すると、FTP サービスの処理に必要なすべてのコードが用意されています。
RDMLX コードは以下のようになります。
* BUILD THE JSM COMMAND
#JSMXCMD := CONNECT
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD HOST #S_HOST)
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_USER)
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PASSWORD #S_PSWD)
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_DIR)
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_FILES)
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 コードは以下のようになります。
iiiFRM02:
Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_FORM) Clientwidth(834) Clientheight(414) Componentversion(2) Left(625) Top(175)
Define_Com Class(#PRIM_LTVW) Name(#ListView1) Columnbuttonheight(27) Componentversion(2) Displayposition(1) Fullrowselect(True) Keyboardpositioning(SortColumn) Left(24) Parent(#COM_OWNER) Showsortarrow(True) Tabposition(1) Top(168) Height(228) Width(673)
Define_Com Class(#PRIM_LVCL) Name(#LVCL1) Displayposition(1) Parent(#ListView1) Source(#STD_QSEL) Widthtype(Remainder)
Define_Com Class(#PRIM_PHBN) Name(#Button1) Displayposition(2) Left(712) Parent(#COM_OWNER) Tabposition(2) Top(168) Caption('Connect')
Define_Com Class(#S_HOST.Visual) Name(#S_HOST) Componentversion(1) Displayposition(3) Height(21) Left(27) Parent(#COM_OWNER) Tabposition(3) Top(13) Usepicklist(False) Width(782)
Define_Com Class(#S_USER.Visual) Name(#S_USER) Componentversion(1) Displayposition(4) Height(21) Left(26) Parent(#COM_OWNER) Tabposition(4) Top(43) Usepicklist(False) Width(419)
Define_Com Class(#S_PSWD.Visual) Name(#S_PSWD) Componentversion(1) Displayposition(5) Height(21) Left(30) Parent(#COM_OWNER) Tabposition(5) Top(72) Usepicklist(False) Width(419)
Define_Com Class(#S_DIR.Visual) Name(#S_DIR) Componentversion(1) Displayposition(6) Height(21) Left(32) Parent(#COM_OWNER) Tabposition(6) Top(101) Usepicklist(False) Width(782)
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_FILES) Fields(#W_TYPE #W_FILE) Type(*WORKING) Entrys(*MAX)
Evtroutine Handling(#com_owner.CreateInstance)
Set Com(#com_owner) Caption(*component_desc)
Endroutine
Evtroutine Handling(#Button1.Click)
CLR_LIST NAMED(#WL_FILES)
CLR_LIST NAMED(#ListView1)
EXCHANGE FIELDS(#S_HOST #S_DIR #S_USER #S_PSWD)
CALL PROCESS(*DIRECT) FUNCTION(IIIFN02) PASS_LST(#WL_FILES)
SELECTLIST NAMED(#WL_FILES)
#STD_QSEL := #W_FILE
ADD_ENTRY TO_LIST(#ListView1)
ENDSELECT
Endroutine
End_Com
iiiFN02:
- ====================================================
* Process ........: JMIPRO02
* Function .......: JMIFN02
* Created on .....: 08/11/13 at 15:11:06
* Description ....: Use FTP Service
* Template........: JSMXSKEL - ====================================================
FUNCTION OPTIONS(*DIRECT) RCV_LIST(#WL_FILES)
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_FILES) FIELDS(#W_TYPE #W_FILE) TYPE(*WORKING) ENTRYS(*MAX)
*
* 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_HOST)
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_USER)
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD PASSWORD #S_PSWD)
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_DIR)
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_FILES)
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