1. ファンクション内でコメント YOUR OWN LOGIC HERE (独自のロジックはここ) と書かれたセクションに、社員リストをクリアして、キーを DEPTMENT と SECTION で、キー数は *COMPUTE を指定して、論理ファイル PSLMST1 から社員を選択するコードを追加します。社員リストにエントリーを追加します。

  2. ファンクション iiiFN12 は、別の RDML ファンクションによって呼び出されますが、このファンクションが要求の部門と課が有効かどうか、また社員が該当セクションに存在するかどうかをチェックします。ですから、このエラー・チェックは iiiFN12 には必要ありません。

  3. Excel ファイルを作成するには、コマンド CREATE を FORMAT(*XLSX)で使用する必要があります。  CREATE コマンド用の文字列 (JSMXCMD) を作成し、組み込み関数 JSMX_COMMAND を使ってこのコマンドを実行します。 
    詳細は『LANSA Integrator ガイド』の「ExcelService」で確認してください。このガイドは Integrator スタジオの[ヘルプ] から直接開くことができます。

  4. シートを追加するには、コマンド ADD で OBJECT(*SHEET) SHEET(Sheet1) を使用します。

  5. コマンド WRITE 用の文字列を作成し、R1C1(1,1) を使って、Sheet1 の 行1、セル1の位置に書き込みます。  組み込み関数 JSMX_COMMAND でこれを実行します。  シートと行/セルのパラメータはどちらもデフォルトのため、指定する必要はありません。  

    注意:この場合、TO_GET パラメータには社員作業リストの名前を入れる必要があります。  

  6. データを保存し、実際のファイルを作成するには、SAVE コマンドで FILE(training/iiiempfn12.xlsx) を使います。
    このコマンドの FILE パラメータでは、(JSMインスタンス内の) ファイル・パスとファイル名を指定し、(1つのファイルに何度も上書きするのではなく) 新しいファイルが毎回作成されるようしなければいけません。  サブディレクトリ /training に  iiiemp で始まる名前でファイルを作成します。  現在の日時をファイル名に追加します。  フィールドDATETIMECには、この値が文字値として含まれます。このディレクトリは存在していなければなりません。 
    実際のアプリケーションの場合、異なるユーザーが作成した同じ出力ファイルを別々にする方法を検討する必要があります。 

  7. 組み込み関数 JSMX_COMMAND を使って CLOSE コマンドで Excel ファイルを閉じます。  注意:これは ExcelService CLOSE コマンドです。JSMX_CLOSE コマンドではありません。
     

  8. 組み込み関数 JSMX_COMMAND を実行するたびに CHECK_STS サブルーチンを実行するコーディングを入れること、そして、パラメータ JSMXHDLE1 コードを渡すことを忘れないようにしてください。

  9. ロジックの最後に、JSM ステータス (フィールドJSMSTS) が OK の場合は、Excel ファイルが作成されたことを示すメッセージを送信します。RDMLXコーディング技術を使用すると、生成されたExcelファイルの名前をこのメッセージに簡単に追加できます。

  10. ロジックは以下のようになります。

    Function Options(*DIRECT)
    Def_List Name(#employs) Fields(#empno #givename #surname #STARTDTER #PHONEHME #salary) Type(*working) Entrys(*max)
    *  JSM を開いて、ステータスを確認
    Use Builtin(jsmx_open) To_Get(#jsmsts #jsmmsg #jsmxhdle1)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
    SERVICE_LOAD コマンドの作成
    #jsmxcmd := 'SERVICE_LOAD SERVICE(ExcelService)'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)

    *     独自のロジックはここ
    Clr_List Named(#employs)
    Select Fields(#employs) From_File(pslmst1) With_Key(#deptment #section) Nbr_Keys(*compute)
    Add_Entry To_List(#employs)
    Endselect

    *Excel ファイルの作成
    #jsmxcmd := 'CREATE FORMAT(*XLSX)'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)

    *シートの追加
    #jsmxcmd := 'ADD OBJECT(*SHEET) SHEET(Sheet1)'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg #employs)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)

    *Excel ファイルへの書き込み
    #jsmxcmd := 'WRITE'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg #employs)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)

    *Excel ファイルに保存
    #jsmxcmd := 'SAVE FILE(training/jsmemp' + #datetimec + '.xlsx)'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg #employs)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)

    *Excel を閉じる
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 CLOSE) To_Get(#jsmsts #jsmmsg)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
    If (#jsmsts = OK)
    MESSAGE MSGTXT('Excel ファイル ' + 'jsmemp' + #datetimec + '.xlsx が作成されました')
    Endif

    *サービスのアンロード
    #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

    *
    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

  11. ファンクション iiiFN12 をコンパイルします。IBM i の JSM サーバーを利用している場合、チェックイン後にファンクション iiiFN12 をコンパイルします。