In this step, you will create a test function using the template JSMXSKEL to Open and Close the JSM and load the FTPService service.
JSMXCMD STRING(65535) (Must be an RDMLX field)
JSMXHDLE1 ALPHA(4)
JSMXSTS ALPHA(20)
JSMSTS ALPHA(20)
JSMXMSG ALPHA(200)
JSMMSG ALPHA(200)
Answer the template question as shown in the table below.
Question | Answer | Comments |
|---|---|---|
Do you wish to load a JSM Service? | FTPSERVICE |
The function might appear something like the following:
* ====================================================
* Process ........: IIIPRO01
* Function .......: IIIFN01
* Created on .....: 16/07/13 at 12:19:30
* Description ....: Test 01
* Template........: JSMXSKEL
* ====================================================
Function Options(*DIRECT)
*
* OPEN JSM AND VERIFY STATUS
Use Builtin(JSMX_OPEN) To_Get(#JSMSTS #JSMMSG #jsmxhdle1)
Execute Subroutine(CHECK_STS) With_Parms(#jsmxhdle1)
*
* BUILD THE SERVICE LOAD COMMAND
#JSMXCMD := 'SERVICE_LOAD'
Execute Subroutine(KEYWRD) With_Parms(#JSMXCMD 'SERVICE' 'FTPSERVICE')
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
*
* YOUR OWN LOGIC HERE
*
* UNLOAD SERVICE
#JSMXCMD := 'SERVICE_UNLOAD'
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
* CLOSE JSM AND VERIFY STATUS
Use Builtin(JSMX_CLOSE) With_Args(#JSMXHDLE1) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
*
Return
*
* Subroutine to build JSM commands. existing JSM command
*
Subroutine Name(KEYWRD) Parms((#W_CMDX *BOTH) (#W_KEYWRD *RECEIVED) (#W_KEYVAL *RECEIVED))
Define Field(#W_CMDX) Reffld(#JSMXCMD)
Define Field(#W_KEYWRD) Reffld(#STD_TEXT)
Define Field(#W_KEYVAL) Reffld(#STD_TEXTL)
#W_CMDX += ' ' + #W_KEYWRD + '(' + #W_KEYVAL + ')'
Endroutine
*
* Check the status of the JSM command issued
*
Subroutine Name(CHECK_STS) Parms(#W_HDLE)
*
Define Field(#MSGDTA) Type(*CHAR) Length(132)
Define Field(#W_HDLE) Type(*CHAR) Length(4)
*
If Cond('#JSMSTS *NE OK')
*
#MSGDTA := 'Error Status Code: ' + #JSMSTS
Message Msgid(DCM9899) Msgf(DC@M01) Msgdta(#MSGDTA)
#MSGDTA := 'Error Message: ' + #JSMMSG
Message Msgid(DCM9899) Msgf(DC@M01) Msgdta(#MSGDTA)
Endif
*
Endroutine
Notice the commands used to Open JSM, Load the FTPService Service, Unload the Service, and Close JSM.
Notice the use of the KEYWRD subroutine for an easy way to build the JSM command keywords and their values. Details of the KEYWRD subroutine are explained in INT002 - Using the FTP Service.
Notice the use of the CHECK_STS subroutine after each JSM command for error handling. This routine simply formats the error message. It does not ABORT the function when an error occurs.
The CHECK_STS subroutine requires a parameter that specifies Handle to check status on, since multiple connections to the JSM server could be open at the same time.