Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 (独自のロジックはここ) の後のコメント行の先頭にカーソルを置き、[デザイン] リボンで Image Added [テンプレート ウィザード] ボタンをクリックします。
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