PDFSpoolFileServiceの例
このファンクションでは、IBM i に接続し、指定の出力待ち行列の最初の3つのスプール・ファイルを、アクティブなJSMインスタンスのルート・ディレクトリでPDFドキュメントに変換します。
· アクティブなJSMサーバーが、スプール・ファイル情報の取得元のIBM i 上にある場合、サーバー、ユーザー、パスワードは任意です。
· ユーザーを指定しない場合、オプション*ALLを使用してスプール・ファイルを取得します。大量のスプール・ファイルがある出力待ち行列を指定した場合、パフォーマンスのオーバーヘッドが発生する可能性があります。
使用するサイトに合うように、表示される省略値を修正します。
* Uses Integrator Services: PDFSPOOLFILESERVICE
* This function connects to a
IBM
i & converts
* the 1st 3 spool files from the nominated outq to PDF
* documents on the root dir of the active JSM Instance.
* Server, User & Password are optional if the active JSM
* Server is located on the same IBM
i as spool files
* If the User is NOT specified the option of *ALL is used
* THIS MAY BE A PERFORMANCE OVERHEAD
* Modify the default values to suit your site.
* Beginning of RDML commands **********
FUNCTION OPTIONS(*DIRECT)
DEFINE FIELD(#JSMSTS) TYPE(*CHAR) LENGTH(020)
DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(255)
DEFINE FIELD(#JSMMSG) TYPE(*CHAR) LENGTH(255)
DEFINE FIELD(#JSMSERVER) TYPE(*char) LENGTH(20)
DEFINE FIELD(#JSMUSER) TYPE(*CHAR) LENGTH(010) LABEL('User')
DEFINE FIELD(#JSMPSSWRD) TYPE(*char) LENGTH(10)
DEFINE FIELD(#JSMLIB) TYPE(*CHAR) LENGTH(010) LABEL('Library')
DEFINE FIELD(#JSMOUTQ) TYPE(*char) LENGTH(10)
DEFINE FIELD(#FLENAM) TYPE(*CHAR) LENGTH(010)
DEFINE FIELD(#FLENUM) TYPE(*CHAR) LENGTH(006)
DEFINE FIELD(#JOBNAME) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#JOBUSER) REFFLD(#JOBNAME)
DEFINE FIELD(#JOBNUMBER) TYPE(*CHAR) LENGTH(006)
DEFINE FIELD(#SPLFILSTS) TYPE(*CHAR) LENGTH(010)
DEFINE FIELD(#PDFKEY) TYPE(*CHAR) LENGTH(020)
DEFINE FIELD(#PDFVALUE) TYPE(*CHAR) LENGTH(050)
DEFINE FIELD(#DOCNME) TYPE(*CHAR) LENGTH(150)
DEFINE FIELD(#DOCCNT) TYPE(*DEC) LENGTH(003) DECIMALS(0)
DEF_LIST NAME(#PDFLST) FIELDS((#PDFKEY *INP) (#PDFVALUE *INP)) TYPE(*WORKING)
DEF_LIST NAME(#SPOOLLST) FIELDS(#FLENAM #FLENUM #JOBNAME #JOBUSER #JOBNUMBER #SPLFILSTS) COUNTER(#LISTCOUNT) TYPE(*WORKING) ENTRYS(0009999)
* set default values for screen
CHANGE FIELD(#STD_INSTR) TO('''Set your appropriate information then press ENTER to generate PDF files''')
CHANGE FIELD(#JSMSERVER) TO(ISERIES01)
CHANGE FIELD(#JSMUSER) TO(USER)
CHANGE FIELD(#JSMPSSWRD) TO(PASSWORD)
CHANGE FIELD(#JSMLIB) TO(QUSRSYS)
CHANGE FIELD(#JSMOUTQ) TO(QEZJOBLOG)
* Connect to JSM Server
USE BUILTIN(JSM_OPEN) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
* Load the PDF service
CHANGE FIELD(#JSMCMD) TO('SERVICE_LOAD SERVICE(PDFSPOOLFILESERVICE) TRACE(*YES)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
MESSAGE MSGTXT('PDFSpoolFileService loaded')
BEGIN_LOOP
* Format and Process JSM commands
REQUEST FIELDS((#STD_INSTR *L004 *P002 *OUTPUT *NOID) (#JSMSERVER *L007 *P026) (#JSMUSER *L009 *P026) (#JSMPSSWRD *L011 *P026) (#JSMLIB *L13 *P26) (#JSMOUTQ *L15 *P26)) IDENTIFY(*LABEL) EXIT_KEY(*NO) MENU_KEY(*YES *NEXT) PROMPT_KEY(*NO)
IF_KEY WAS(*MENU)
* Close service
EXECUTE SUBROUTINE(DISCONNECT)
MENU
ENDIF
* Connect to IBM
i server
EXECUTE SUBROUTINE(CONNECT)
* Get list of spool files to process
EXECUTE SUBROUTINE(LIST)
* Create PDF files
EXECUTE SUBROUTINE(PDF)
END_LOOP
* Connect to host database
SUBROUTINE NAME(CONNECT)
* Connect to the required IBM
i host
USE BUILTIN(TCONCAT) WITH_ARGS('CONNECT HOST(' #JSMSERVER ') USER(' #JSMUSER ') PASSWORD(') TO_GET(#JSMCMD)
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD #JSMPSSWRD ')') TO_GET(#JSMCMD)
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
MESSAGE MSGTXT('JSM Server connected')
ENDROUTINE
* Generate a list of spool files from selected location
SUBROUTINE NAME(LIST)
MESSAGE MSGTXT('Searching output queue ...') TYPE(*STATUS)
USE BUILTIN(TCONCAT) WITH_ARGS('LIST LIBRARY(' #JSMLIB ') QUEUE(' #JSMOUTQ ') USER(') TO_GET(#JSMCMD)
IF COND('#JSMUSER *NE *BLANK')
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD #JSMUSER) TO_GET(#JSMCMD)
ELSE
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD '*ALL') TO_GET(#JSMCMD)
ENDIF
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD ') USERDATA(*ALL) FORMTYPE(*STD) SERVICE_LIST(' 'FLENAM, FLENUM, JOBNAME, JOBUSER, JOBNUMBER, ' 'SPLFILSTS)') TO_GET(#JSMCMD)
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #SPOOLLST)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
MESSAGE MSGTXT('List of spool files generated')
ENDROUTINE
* Create a PDF file from selected spool file
SUBROUTINE NAME(PDF)
MESSAGE MSGTXT('PDFs files being generated ...') TYPE(*STATUS)
* Create an entry for each consistent keyword
CLR_LIST NAMED(#PDFLST)
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(JOBNUMBER #JOBNUMBER)
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(AUTHOR 'LANSAUSER')
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(TITLE 'PDF example created using PDFSpoolFileService')
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(SUBJECT 'Generated by LANSA SUPPLIED Test Function')
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(CREATOR *FUNCTION)
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(PAGESIZE '*A4')
EXECUTE SUBROUTINE(ADDKEYWRD) WITH_PARMS(MARGIN '15')
CHANGE FIELD(#DOCCNT) TO(0)
SELECTLIST NAMED(#SPOOLLST)
* build a unique PDF file name
CHANGE FIELD(#DOCCNT) TO('#DOCCNT + 1')
SUBSTRING FIELD(#DOCCNT) INTO_FIELD(#DOCNME)
USE BUILTIN(TCONCAT) WITH_ARGS('PDFTST' #DOCNME '.pdf') TO_GET(#DOCNME)
* Build the CREATE command using list details
USE BUILTIN(TCONCAT) WITH_ARGS('CREATE SERVICE_LIST(PDFKEY,PDFVALUE) DOCUMENT(' #DOCNME ') NAME(' #FLENAM ') NUMBER(') TO_GET(#JSMCMD)
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD #FLENUM ') JOBNAME(' #JOBNAME ') JOBUSER(') TO_GET(#JSMCMD)
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMCMD #JOBUSER ')') TO_GET(#JSMCMD)
* Create PDF
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #PDFLST)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
USE BUILTIN(BCONCAT) WITH_ARGS('PDF document' #DOCNME 'created') TO_GET(#STD_TEXTL)
MESSAGE MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#STD_TEXTL)
* Only create PDF files for first 3 spool files
LEAVE IF('#DOCCNT = 3')
ENDSELECT
ENDROUTINE
SUBROUTINE NAME(DISCONNECT)
* Unload service
USE BUILTIN(JSM_COMMAND) WITH_ARGS('SERVICE_UNLOAD') TO_GET(#JSMSTS #JSMMSG)
USE BUILTIN(JSM_CLOSE) TO_GET(#JSMSTS #JSMMSG)
* Close service
USE BUILTIN(JSM_CLOSE) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
ENDROUTINE
* Keywords to list
SUBROUTINE NAME(ADDKEYWRD) PARMS((#PDFKEY *RECEIVED) (#PDFVALUE *RECEIVED))
ADD_ENTRY TO_LIST(#PDFLST)
ENDROUTINE
* Check the JSM return status
SUBROUTINE NAME(CHECK) PARMS((#JSMSTS *RECEIVED) (#JSMMSG *RECEIVED))
IF COND('#JSMSTS *NE OK')
USE BUILTIN(TCONCAT) WITH_ARGS(#JSMSTS ' : ' #JSMMSG) TO_GET(#STD_TEXTL)
MENU MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#STD_TEXTL)
ENDIF
ENDROUTINE
* End of RDML commands **********