
ステップ 3. RDMLX ファンクション iiiFN14 を作成して、1 ページの PDF を生成する
INT013 -PDFDocumentService を使用して PDF ドキュメントを作成
このステップでは、「INT013 - 付録 B」の RDMLX ソースをベースに RDMLX ファンクションを作成します。このファンクションが 1 人の社員に関する PDF ドキュメントを作成するように完成させます。
1. 新しいプロセスiiiPRO11 – PDF 例作成します。
2. テンプレートを使用せずに、プロセス iiiPRO11 に属する新しい RDMLX 対応のファンクション 「iiiFN14 – 社員 1 名分の PDF 作成」を作成します。
3. このコードを INT013. 付録 Bの RDMLX ソースに置き換えます。
4. ファンクションを保存し、その内容を確認します。このプログラムの始めに EMPNO や STD_TEXTL など、複数のフィールド値がハードのコーディングされていることに注意してください。このファンクションは、固定の社員番号 1 名分を処理します。
5. 次のコメント行を探します。
* Create PDF Document (PDF ドキュメントの作成)
このコメントの次に、既にロードされているPDFDocumentServiceを使用するコードを追加します。CREATEコマンドを利用して、テンプレートiii_PDF_Template.xml をもとにPDFドキュメントを作成します。
6. ソースコードに* Load Serviceコードの3つのステートメントをコピーし貼り付けます。CHANGE Field(#JSMXCMD)コマンドを修正し、CREATEコマンドを定義します。
キーワード |
値 |
DOCUMENT |
iii_EMPREP.pdf |
CONTENT |
xml/iii_PDF_Template.xml |
実際のアプリケーションでは、ユーザーにまたは顧客より準備された特定のフォルダに出力する場合が多いでしょう。
完了したコードは次のようになります。
- PDF ドキュメントの作成
#jsmxcmd := ('CREATE DOCUMENT(iii_EMPREP.pdf) CONTENT(xml/iii_PDF_Template.xml)')
Use Builtin(JSMX_COMMAND) With_Args(#jsmxhdle1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
7. 変更内容を保存します。
8. 次のコメント行を探します。
* If found add content (見つかった場合、コンテンツを追加)
このコメントのすぐ前のコードで、必要な社員詳細フィールドが含まれる作業リスト (#HEADER) のエントリーが 1 件作成されています。
9. このコメントに続き、社員詳細を含む HEADER のロジックと内容を追加します。
このコードを追加して、* Add content HEADER (HEADER コンテンツを追加) のロジックを完成させます。
If_Status Is(*OKAY)
- Add content HEADER (HEADER コンテンツを追加)
Else
Message Msgtxt('社員 A1009 が見つかりません')
Endif
10. コメント行 * Add content HEADER (HEADER コンテンツを追加) の後に、ASSIGN コマンドを定義して、以下の情報に基づき追加 (ADD) する JSMXCMD フィールドを定義します。
11. 以下の情報をもとに、JSMX_COMMAND の使用 (USE) を定義します。
キーワード |
値 |
WITH_ARGS |
#JSMXHDLE1 |
|
#JSMXCMD |
|
#HEADER |
TO_GET |
#JSMSTS |
|
#JSMMSG |
注意:作業リストの#HEADERを3番目の引数として引き渡します。
12. 最後に EXECUTE コマンドを追加して、JSM ステータスを確認するサブルーチンを実行します。
完了したコードは以下のようになります。
If_Status Is(*OKAY)
- Add content HEADER (HEADER コンテンツを追加)
#JSMXCMD := 'ADD CONTENT(HEADER)'
Use Builtin(JSMx_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD #HEADER) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
Else
Message Msgtxt('社員 A1009 が見つかりません')
Endif
13. 変更内容を保存します。
14. 以下のコメント行を探します。
- If found add employee skills list (見つかった場合、社員のスキル・リストを追加)
15. 次のロジックを追加して、この中の JSM ロジックを完成させます。
If_Status Is_Not(*error)
- SKILLTBL コンテンツの追加
Else
Message Msgtxt('社員のスキルが見つかりません')
Endif
16. コメント * Add SKILTBL content (SKILTBL のコンテンツを追加) の後に、ASSIGN コマンドを定義して、以下の情報に基づき追加 (ADD) する JSMXCMD フィールドを定義します。
17. 以下の情報に基づき、JSMX_COMMAND BIF を実行するコマンドを使用 (USE) するロジックを追加します。
キーワード |
値 |
WITH_ARG |
#JSMXHDLE1 |
|
#JSMXCMD |
TO_GET |
#JSMSTS |
|
#JSMMSG |
|
#SKILLTBL |
18. EXECUTE コマンドを追加して、JSM ステータスを確認するサブルーチンを実行します。
完了したコードは以下のようになります。
If_Status Is_Not(*error)
- SKILLTBL コンテンツの追加
#JSMXCMD := 'ADD CONTENT(SKILLTBL)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG #SKILLTBL)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
Else
Message Msgtxt('社員のスキルが見つかりません')
Endif
19. ファンクションをコンパイルします。IBM i サーバーで Integrator を実行している場合は、ファンクションをチェックインし、サーバー上でコンパイルします。
20. ファンクション「iiiFN14 – 社員 1 名分の PDF 作成」を実行します。
JSM インスタンスのルートにある出力 PDF ドキュメントを見つけます。このドキュメントの名前は iii_EMPREP.PDF です。IBM i サーバーで実行している場合は、次のようなパスになります。
/LANSA_<pgmlib>/jsm/instance
<PGMLIB >は LANSA のライブラリ名です。
PDF ドキュメントは以下のようになっているはずです。
