ステップ3. 単一ページのPDFを生成するRDMLXファンクションを作成する

LANSA Integrator

ステップ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ドキュメントは以下のようになっているはずです。