This example is self contained and requires no additional work besides compilation.
FUNCTION OPTIONS(*DIRECT)
**********
DEFINE FIELD(#JSMSTS) TYPE(*CHAR) LENGTH(20)
DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(256)
DEFINE FIELD(#JSMMSG) TYPE(*CHAR) LENGTH(256)
**********
DEFINE FIELD(#PRDID) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#PRDNME) TYPE(*CHAR) LENGTH(20)
DEFINE FIELD(#PRDAMT) TYPE(*DEC) LENGTH(10) DECIMALS(2)
DEFINE FIELD(#TEMP) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#COUNT) TYPE(*DEC) LENGTH(5) DECIMALS(0)
**********
DEF_LIST NAME(#LST1) FIELDS((#PRDID) (#PRDNME) (#PRDAMT)) TYPE(*WORKING)
**********
********** JSM_OPEN
**********
USE BUILTIN(JSM_OPEN) WITH_ARGS('LOCALHOST:7560') TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** SERVICE_LOAD
**********
CHANGE FIELD(#JSMCMD) TO('SERVICE_LOAD SERVICE(ExcelService) TRACE(*YES)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** CREATE
**********
CHANGE FIELD(#JSMCMD) TO('CREATE')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** ADD OBJECT(*SHEET)
**********
USE BUILTIN(JSM_COMMAND) WITH_ARGS('''ADD OBJECT(*SHEET) SHEET(MyTest)''') TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** ADD OBJECT(*CELLSTYLE)
**********
CHANGE FIELD(#JSMCMD) TO('ADD OBJECT(*CELLSTYLE) TYPE(*NUMBER) COLUMN(5) RANGE(10,20)
FONT(*TAHOME) FORMAT(*FORMAT4) HALIGN(*RIGHT) BACKGROUND(*YELLOW)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** WRITE LIST
**********
BEGIN_LOOP USING(#COUNT) FROM(1) TO(20)
USE BUILTIN(NUMERIC_STRING) WITH_ARGS(#COUNT) TO_GET(#TEMP)
USE BUILTIN(TCONCAT) WITH_ARGS('ID' #TEMP) TO_GET(#PRDID)
USE BUILTIN(TCONCAT) WITH_ARGS('''Product''' #TEMP) TO_GET(#PRDNME)
CHANGE FIELD(#PRDAMT) TO('1000.45 + #COUNT')
ADD_ENTRY TO_LIST(#LST1)
END_LOOP
**********
CHANGE FIELD(#JSMCMD) TO('WRITE R1C1(10,3) SERVICE_LIST(PRDID,PRDNME,PRDAMT)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #LST1)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** READ LIST
**********
CLR_LIST NAMED(#LST1)
**********
CHANGE FIELD(#JSMCMD) TO('READ R1C1(10,3) ROWCOUNT(5) SERVICE_LIST(PRDID,PRDNME,PRDAMT)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #LST1)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
SELECTLIST NAMED(#LST1)
DISPLAY FIELDS((#PRDID) (#PRDNME) (#PRDAMT))
ENDSELECT
**********
********** SAVE FILE
**********
USE BUILTIN(JSM_COMMAND) WITH_ARGS('''SAVE FILE(demo.xlsx)''') TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** CLOSE
**********
USE BUILTIN(JSM_COMMAND) WITH_ARGS('CLOSE') TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** SERVICE_UNLOAD
**********
USE BUILTIN(JSM_COMMAND) WITH_ARGS('SERVICE_UNLOAD') TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** JSM_CLOSE
**********
USE BUILTIN(JSM_CLOSE) TO_GET(#JSMSTS #JSMMSG)
EXECUTE SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)
**********
********** SUB ROUTINES
**********
SUBROUTINE NAME(CHECK) PARMS((#JSMSTS *RECEIVED) (#JSMMSG *RECEIVED))
**********
IF COND('#JSMSTS *NE OK')
DISPLAY FIELDS((#JSMSTS) (#JSMMSG))
**********
USE BUILTIN(JSM_CLOSE) TO_GET(#JSMSTS #JSMMSG)
**********
MENU MSGTXT('Java service error has occurred')
**********
**********
ENDIF
**********
ENDROUTINE