Versions Compared

Key

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

...

  1. ファンクション iiiFN14 をコピーし、プロセス iiiPRO11 に RDMLX 対応のファンクション iiiFN15 を作成します。

  2. ファンクションの上にある次の 2 行を削除します。

    #empno := A1009
    #rep1page := 1

  3. コメント行 * Add Footers (フッターの追加) を探します。サブ・ルーチン FOOTER を作成し、その中に以下のコードを移動させます。
    コードは以下のようになっているはずです。

    Subroutine Name(FOOTER)
    Clr_list #FOOTER1
    Add_entry #FOOTER1
    #jsmxcmd := 'ADD CONTENT(FOOTER1)'
    Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD #FOOTER1) To_Get(#JSMSTS #JSMMSG)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
    Endroutine

  4. EXECUTE subroutine を追加して、この移動させたコードをサブルーチン内に置き換えます。コードは以下のようになります。

    *フッターの追加
    EXECUTE Subroutine(FOOTER)

  5. コメント行* Close document (ドキュメントを閉じる) を探します。サブ・ルーチン CLOSE を作成し、以下のコードをその中に移動させます。

    Subroutine Name(CLOSE)
    #jsmxcmd := CLOSE
    Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
    #rep1page -= 1
    Message Msgtxt('社員 PDF レポートが作成されました' + #rep1page.asstring + ' ページ')PDF サービスのアンロード
    #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)
    Endroutine

  6. EXECUTE subroutine を追加して、この移動させたコードをサブルーチン内に置き換えます。コードは以下のようになります。

    *ドキュメントを閉じる
    EXECUTE Subroutine(CLOSE)

  7. ファンクション iiiFN15 は、EMPNO、DEPTMENT、SURNAME、STD_FLAG のフィールドを受け取ります。STD_FLAG には、検索要求タイプが含まれます。E=社員番号、D=部門コード、S=苗字、の検索となります。

  8. 既存の社員 1 名のロジックの近くに、STD_FLAG の case ループを追加します。赤で示されている箇所が新しく追加するコードです。

    例:
    Case Of_Field(#STD_FLAG)Search for single employee number
    When (= E)Add Logo
    Change Field(#JSMXCMD) To('ADD CONTENT(LOGO) ')
    Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
    ..........
    ..........
    *フッターの追加
    Execute Subroutine(FOOTER1)PDF 
    *ドキュメントと PDF サービスを閉じる
    Execute Subroutine(CLOSE)
    Endcase

  9. ファンクションの一番上で、フィールドIO$STSをもとにした作業フィールドOUTSTSを定義します。このフィールドを使って、出力が作成され PDF ドキュメントを閉じる必要があるかのコントロールを行います。

  10. 既存のCASE ループは社員 1 名を処理するのみです。この CASE ループで、社員 1 名に対する EXECUTE FOOTER のすぐ下に次の WHEN 条件を追加します。苗字による検索と部門による検索を処理するコード (「INT013 INT013 - 付録 C」より提供C」より提供) をコピーします。

  11. 変更内容を保存します。

  12. 先ほど追加した STD_FLAG = S と STD_FLAG = D の場合のロジックを以下のように確認します。
    • ページ番号 REP1PAGE は、各社員の出力後に増えます。
    • OUTSTS を使って、PDF ドキュメントの CLOSE をコントロールし、空の PDF ドキュメントが書き込まれることを避けます。OUTSTS は、1 名以上の社員の出力が生成された時に OK が設定されます。この代わりに、社員が出力されなかった場合に「社員詳細が見つかりませんでした」というテキストを含むページを書きこむことも可能です。
    • PDF XML テンプレートの FOOTER1 コンテントには <page orientation="landscape"/> が含まれます。これにより、次の社員の出力用の新しいページが開始されます。
    • ロケールの日付形式が MMDDYY ではない場合、 'MMDDYY' のソースコードを探して、この値を 'DDMMYY' に変更します。

  13. ファンクション iiiFN15 をコンパイルし、エラーがあれば修正します。

  14. IBM i サーバーでファンクションを実行する場合は、サーバーにチェックインして、コンパイルします。