Step 3. Create an RDMLX Function to Produce a Single Page PDF
INT013 - Create PDF Output using PDFDocumentService
In this step you will create an RDMLX function, based on the RDMLX source in INT013 - Appendix B. You will complete this function to produce a PDF document for a single employee.
1. Create a new process iiiPRO10 – PDF Examples.
2. Create a new RDMLX enabled function iiiFN16 – Create PDF for an Employee, belonging to process iiiPRO10, without using a template.
3. Replace its code with the RDMLX source from INT013. Appendix B.
4. Save your function and review its content. Note that at the beginning of the program a number of field values are hard coded, such as EMPNO and STD_TEXTL. This function will process a single fixed employee number.
5. Find the following comment:
* Create PDF Document
Following this comment, add code to use the PDFDocumentService which has already been loaded. Use the CREATE command to create a PDF document based on the template iii_PDF_Template.xml.
6. In your source code, copy and paste the three statements from the * Load Service code and modify the CHANGE Field(#JSMXCMD) command to define the CREATE command:
|
In a real application you would want to write the output to a specific folder, perhaps organized by user or customer.
Your completed code should look like the following.
* 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. Save your changes.
8. Locate this comment:
* If found add content
The code immediately preceding this comment has created a single entry working list (#HEADER) containing the required employee detail fields.
9. Following this comment, add logic to add content HEADER containing employee details.
Add this code and then complete the * Add content HEADER logic:
If_Status Is(*OKAY)
* Add content HEADER
Else
Message Msgtxt('Employee A0090 not found')
Endif
10.Following the * Add content HEADER comment line, define an ASSIGN command to set up the JSMXCMD field to ADD based on:
|
11.Define the USE the JSMX_COMMAND based on:
|
Note: You are passing the working list #HEADER as the third argument.
12.Finally add an EXECUTE command to perform subroutine to check JSM status.
Your completed code should look like the following:
If_Status Is(*OKAY)
#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('Employee A0090 not found')
Endif
13. Save your changes
14.Locate the following comment:
* If found add employee skills list
15.Add the following logic and complete your JSM logic within it:
If_Status Is_Not(*error)
* Add SKILLTBL content
Else
Message Msgtxt('Employee skills not found')
Endif
16.Following the * Add SKILTBL content comment, add a CHANGE command to change the JSMXCMD field to ADD based on:
|
17.Add a USE command to perform the JSMX_COMMAND BIF, based on:
|
18.Add an EXECUTE command to perform the subroutine to check JSM status.
Your completed code should look like the following:
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.Compile your function. If you are running Integrator on an IBM i server, check in and compile your function on the server.
20.Execute your function iiiFN16 – Create a PDF for a Single Employee.
Find the output PDF document in the root of your JSM instance. If you are running on the IBM i server, this will be a path such as:
/LANSA_<pgmlib>/jsm/instance
where <pgmlib> is the LANSA library name.
The PDF document should look like the following: