ステップ3. 単一ページのPDFを生成するRDMLXファンクションを作成する
このステップでは、INT013 - 付録BのRDMLXソースを元にRDMLXファンクションを作成します。このファンクションを完成させると、社員1名のPDFドキュメントを生成することができます。
1. 新しいプロセス「iiiPRO10 - PDF例」を作成します。
2. テンプレートを使用せずに新しいRDMLXのファンクション「iiiFN16 - 社員のPDFを作成」を作成します。
3. コードをINT013 - 付録BのRDMLXソースと置き換えます。
4. ファンクションを保存し、その内容を確認します。プログラムの始めにEMPNOやSTD_TEXTLなど、複数のフィールド値が設定されていることに注意してください。このファンクションは単一のハードコーディングされた社員番号を処理します。
5. 次のコメント行を探します。
* Create PDF Document
このコメントの次に、既にロードされている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 |
これにより、JSMInstanceのルートにPDFファイルが書きこまれます。実際のアプリケーションでは、ユーザーまたは顧客により準備された特定のフォルダに出力する場合が多いでしょう。
完了したコードは次のようになります。
* Create PDF Document
Change Field(#JSMXCMD) To('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 のロジックを完成させます。
If_Status Is(*OKAY)
* Add content
HEADER
Else
Message Msgtxt('Employee A0090 not
found')
Endif
10. 以下の情報をもとに、、* Add content HEADER のコメント行の後にCHANGEコマンドでJSMXCMDフィールドにADDコマンドを定義します。
キーワード |
値 |
CONTENT |
HEADER |
11. 以下の情報をもとに、JSMX_COMMANDのUSEコマンドを定義します。
キーワード |
値 |
WITH_ARGS |
#JSMXHDLE1 |
|
#JSMXCMD |
|
#HEADER |
TO_GET |
#JSMSTS |
|
#JSMMSG |
注:作業リストの#HEADERを3番目の引数として引き渡します。
12. 最後にEXECUTEコマンドを追加して、JSMのステータスを確認するサブルーチンを実行します。
完了したコードは以下のようになります。
If_Status Is(*OKAY)
Change Field(#JSMXCMD) To('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('Employee A0090 not found')
Endif
13. 変更内容を保存します。
14. 以下のコメント行を探します。
* If found add employee skills list
15. 次のロジックを追加して、この中でJSMロジックを完成させます。
If_Status Is_Not(*error)
* add SKILLTBL
content
Else
Message Msgtxt('Employee skills not
found')
Endif
16. * Add SKILTBL contentのコメントの後にCHANGEコマンドを追加して、以下の情報をもとにJSMXCMDフィールドにADDコマンドを定義します。
キーワード |
値 |
CONTENT |
SKILLTBL |
17. USEコマンドを追加して、以下の情報をもとに、JSMX_COMMANDのBIFを定義します。
キーワード |
値 |
WITH_ARG |
#JSMXHDLE1 |
|
#JSMXCMD |
TO_GET |
#JSMSTS |
|
#JSMMSG |
|
#SKILLTBL |
18. EXECUTEコマンドを追加し、JSMのステータスを確認するサブルーチンを実行します。
完了したコードは以下のようになります。
If_Status Is_Not(*error)
* add SKILLTBL
content
Change Field(#JSMXCMD) To('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('Employee skills not
found')
Endif
19. ファンクションをコンパイルします。IBM i サーバーでIntegratorを実行している場合は、チェックインし、ファンクションをサーバー上でコンパイルします。
20. ファンクションiiiFN16 - 社員のPDFを作成を実行します。
JSMインスタンスのルートにある出力PDFドキュメントを探します。IBM i サーバーで実行している場合は以下のようなパスになります。
/LANSA_<pgmlib>/jsm/instance
<pgmlib>はLANSAライブラリ名です。
PDFドキュメントは以下のようになっているはずです。