ステップ2. ファンクションiiiFN12を完了する
1. ファンクションのコメント「ここに処理ロジックを記述してください」で、社員リストを消去するコードを追加し、論理ファイルPSLMST1、DEPTMENTキーとSECTIONキー、キーの数*COMPUTEを指定してフィールドを選択します。社員リストにエントリーを追加します。
2. ファンクションiiiFN12は、要求した部門と課が有効かどうか、また社員が該当の課に存在するかどうかを確認するRDMLファンクションによって呼び出されます。このエラー・チェックはiiiFN12では必要ありません。
3. Excelファイルを作成するには、OPENコマンドを*WRITEモードで使用する必要があります。OPENコマンドの文字列(JSMXCMD)を作成し、JSMX_COMMAND組み込み関数を使用してこのコマンドを実行します。
コマンドのファイル・パラメータは、(JSMインスタンス内の)ファイル・パス(ファイル名)を定義し、(1つのファイルが繰り返し上書きされるのではなく)新しいファイルが毎回作成されるようにする必要があります。「training/」サブディレクトリに「iiiemp」という名前でファイルを作成します。現在の日時をファイル名に追加します。フィールドDATETIMECには、この値が文字値として含まれます。ディレクトリは存在していなければなりません。
実際のアプリケーションの場合、異なるユーザーが作成した同じ出力ファイルを別々にする方法を検討する必要があります。
4. WRITEコマンドの文字列を作成して、Sheet1の行1、セル1の位置に書き込みます。これはJSMX_COMMAND組み込み関数で実行します。シートと行/セルのパラメータはどちらも省略値のため、指定する必要はありません。この場合、TO_GETパラメータには社員作業リストの名前を入れる必要があります。
5. JSMX_COMMAND組み込み関数を介してCLOSEコマンドでExcelファイルを閉じます。これはExcelReadServiceのCLOSEコマンドです。JSMX_CLOSEコマンドではありません。
6. JSMX_COMMAND組み込み関数を実行するたびにCHECK_STSサブルーチンを実行するコードを忘れずに入れてください。
7. ロジックの最後でJSMステータス(フィールドJSMSTS)がOKの場合、Excelファイルが作成されたことを示すメッセージを送ります。RDMLXコーディング技術を使用すると、生成されたExcelファイルの名前をこのメッセージに簡単に追加できます。
8. ロジックは以下のようになります。
FUNCTION OPTIONS(*DIRECT)
DEF_LIST NAME(#employs) FIELDS(#empno #givename #surname
#STARTDTER #PHONEHME #salary) TYPE(*working) ENTRYS(100)
* OPEN JSM AND
VERIFY STATUS
USE BUILTIN(jsmx_open) TO_GET(#jsmsts #jsmmsg
#jsmxhdle1)
EXECUTE SUBROUTINE(CHECK_STS)
* BUILD THE SERVICE LOAD
COMMAND
#jsmxcmd := 'SERVICE_LOAD SERVICE(ExcelReadService)'
USE
BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd) TO_GET(#jsmsts
#jsmmsg)
EXECUTE SUBROUTINE(CHECK_STS)
* YOUR OWN LOGIC HERE
CLR_LIST
NAMED(#employs)
SELECT FIELDS(#employs) FROM_FILE(pslmst1) WITH_KEY(#deptment
#section) NBR_KEYS(*compute)
ADD_ENTRY TO_LIST(#employs)
ENDSELECT
*
Create Excel File
#jsmxcmd := 'OPEN FILE(training/iiiemp' + #datetimec +
'.XLS) MODE(*WRITE)'
USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd)
TO_GET(#jsmsts #jsmmsg)
EXECUTE SUBROUTINE(CHECK_STS)
* Write to Excel
file
#jsmxcmd := 'WRITE'
USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1
#jsmxcmd) TO_GET(#jsmsts #jsmmsg #employs)
EXECUTE SUBROUTINE(CHECK_STS)
*
Close Excel
USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 CLOSE)
TO_GET(#jsmsts #jsmmsg)
EXECUTE SUBROUTINE(CHECK_STS)
IF (#jsmsts =
OK)
MESSAGE MSGTXT('Excel file ' + 'emp' + #datetimec + '.xls
produced')
ENDIF
* UNLOAD SERVICE
USE BUILTIN(jsmx_command)
WITH_ARGS(#jsmxhdle1 SERVICE_UNLOAD) TO_GET(#jsmsts #jsmmsg)
EXECUTE
SUBROUTINE(CHECK_STS)
* CLOSE JSM AND VERIFY STATUS
USE
BUILTIN(jsmx_close) WITH_ARGS(#jsmxhdle1) TO_GET(#jsmsts #jsmmsg)
EXECUTE
SUBROUTINE(CHECK_STS)
RETURN
*
SUBROUTINE NAME(CHECK_STS)
DEFINE
FIELD(#MSGDTA) TYPE(*CHAR) LENGTH(132)
IF COND('#JSMSTS *NE OK')
USE
BUILTIN(BCONCAT) WITH_ARGS('Error Status Code:' #JSMSTS)
TO_GET(#MSGDTA)
MESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)
USE
BUILTIN(BCONCAT) WITH_ARGS('Error Message:' #JSMMSG) TO_GET(#MSGDTA)
MESSAGE
MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA)
ENDIF
ENDROUTINE
9. ファンクションiiiFN12をコンパイルします。