How can I get a file on the AS/400 into an XML document on the IFS?
| Date: | Archived |
|---|---|
| Product/Release: | LANSA Integrator |
| Abstract: | How can I get a file on the AS/400 into an XML document on the IFS? |
| Submitted By: | LANSA Services |
Question:
I have a file on the AS400 that I need to get into an XML document on the IFS so I can FTP it out.
Currently my RDML function is loading the file data into a list named #LIST_SEND. The XSL I've created is named BW_ORD_SEND_OUT.
Below are pieces of my RDML code
USE BUILTIN(JSM_COMMAND) WITH_ARGS('SERVICE_LOAD SERVICE(XMLCLIENT)')
TO_GET(#S_JSMSTS #S_JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
CHANGE FIELD(#S_JSMCMD) TO('LOAD METHOD(*STORAGE)
SERVICE_LIST(CUSTID,PRODID,FIRSTN,LASTN,PASSWD,ACTDAT)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#S_JSMCMD) TO_GET(#S_JSMSTS #S_JSMMSG #LIST_SEND)
EXECUTE SUBROUTINE(CHECK_STS)
CHANGE FIELD(#S_JSMCMD) TO('TRANSFORM XSL(BW_ORD_SEND_OUT)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#S_JSMCMD) TO_GET(#S_JSMSTS #S_JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
CHANGE FIELD(#S_JSMCMD) TO('STORE NAME(/main/bworder.xml) OBJECT(*TRANSFORM)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#S_JSMCMD) TO_GET(#S_JSMSTS #S_JSMMSG)
EXECUTE SUBROUTINE(CHECK_STS)
Answer:
Note: There are two names for each service. One is the Java Class name and the other is the service keyword name ( SERVICE_LOAD SERVICE(XMLCLIENT).
Your intention is to assemble some data from AS/400 files and then create and XML document and dispatch it using FTP. The service which you require is the FILECLIENT (5.8 XMLFileService) and not the XMLCLIENT (5.2 XMLParserService). XMLCLIENT allows only the reading of data in an XML document and does not provide for the creation of an XML document. The FILECLIENT service allows for both reading in the values of the document and creating an XML document. When you have created the document, you then will have use the FTPCLIENT (5.3 FTPService) service to send the file via FTP. The XMLClient works on a programming model which is different from the FILECLIENT. With the XMLClient, you traverse the XML root/node structure or XSL. With the FILECLIENT you just use the stylesheet approach.
For your purposes, in the XMLCLIENT service, you will need to use the SEND command (which really doesn't send the document but does transform the database information into the output XML document ) and then the WRITE command which actually puts the document out to the IFS. Then for FTPing you will have to use several commands to manage the FTP connection.
So a terse outline of the JSM commands required are as follows:
JSM_OPEN SERVICE_LOAD SERVICE(FILECLIENT) * RDML commands to read in data into fields and into the working list SEND XSL(stylesheet) SERVICE_LIST(list of working list fields) WRITE FILE(name_and_location_of_LOCAL_file) SERVICE_UNLOAD SERVICE_LOAD SERVICE(FTPCLIENT) CONNECT HOST(xxx.xxx.xxx.xxx:21) LOGIN USER(xxxxxxxxx) PASSWORD(XXXXXXXXX) CHGDIR PATH(xxxx/xxxx/xxxx) BINARY PUT FROM(LOCAL_file) TO(remote_file_name) DATALINK(*PASV) // passive * If behind firewall QUIT CLOSE SERVICE_UNLOAD JSM_CLOSE
This is a basic sketch of the process. Your needs may vary depending on your requirements. Examples showing RDML code form are provided in APPENDIX B (of the LANSA Integrator documentation).