SVFileService Example

LANSA Integrator

SVFileService Example

This simple form allows data to be read from or written to a separated variable file.

 

* Uses Integrator Services: SVFileService

* This forms connects to the local JSM Server and allows SV files to be read, with the resulting information displayed in a list,
* or written, based on the information currently in the list.

* The browse and working list definitions are defined with 5 columns to support the definition of an order.

* The following field must be defined in your repository:
* jsmstring           string 1000
* jsmsts          alpha     20
* jsmmsg          alpha    255
* jsmhdle         char     4
* jsmcmd          alpha   4
 
function options(*DIRECT)
begin_com role(*EXTENDS #PRIM_FORM) clientheight(573) clientwidth(692) framestyle(Dialog) height(607) left(441) top(129) width(700)

define_com class(#PRIM_PHBN) name(#Connect) caption('Connect') displayposition(1) left(5) parent(#PANL_2) tabposition(1) top(5) width(120)
define_com class(#PRIM_PHBN) name(#Read) caption('Read') displayposition(2) enabled(False) left(135) parent(#PANL_2) tabposition(2) top(5) width(120)
define_com class(#PRIM_PHBN) name(#Disconnect) caption('Disconnect') displayposition(5) enabled(False) left(525) parent(#PANL_2) tabposition(5) top(5) width(120)
define_com class(#PRIM_PHBN) name(#Write) caption('Write') displayposition(3) enabled(False) left(265) parent(#PANL_2) tabposition(3) top(5) width(120)
define_com class(#PRIM_PHBN) name(#Clear) caption('Clear') displayposition(4) enabled(False) left(395) parent(#PANL_2) tabposition(4) top(5) width(120)

define_com class(#PRIM_STBR) name(#stbr_1) displayposition(1) height(24) left(0) messageposition(1) parent(#PANL_1) tabposition(1) tabstop(False) top(77) width(692)

define_com class(#PRIM_PANL) name(#PANL_1) displayposition(2) height(101) left(0) parent(#COM_OWNER) tabposition(2) tabstop(False) top(472) width(692)
define_com class(#PRIM_PANL) name(#PANL_2) displayposition(2) height(34) left(5) parent(#PANL_1) tabposition(2) tabstop(False) top(34) width(692)

define_com class(#PRIM_grid) name(#detaillst) columnbuttonheight(15) componentversion(1) displayposition(1) height(366) left(0) parent(#COM_OWNER) selectionstyle(Multiple) tabposition(1) top(94) width(692)
define_com class(#PRIM_gdcl) name(#linenum) caption('Line') captiontype(Caption) displayposition(1) parent(#detaillst) readonly(False) source(#STD_NUM) width(15)
define_com class(#PRIM_gdCL) name(#partnum) caption('Part') captiontype(Caption) displayposition(2) parent(#detaillst) readonly(False) source(#STD_OBJ) width(14)
define_com class(#PRIM_gdCL) name(#partdsc) caption('Description') captiontype(Caption) displayposition(3) parent(#detaillst) readonly(False) source(#STD_DESC) width(30)
define_com class(#PRIM_gdCL) name(#partamt) caption('Unit Amount') captiontype(Caption) displayposition(4) parent(#detaillst) readonly(False) source(#STD_AMNT)
define_com class(#PRIM_gdCL) name(#partqty) caption('Quantity') captiontype(Caption) displayposition(5) parent(#detaillst) readonly(False) source(#STD_QTY) widthtype(Remainder)
define_com class(#JSMSTRING.Visual) name(#jsmfile) caption('Path and File Name') displayposition(3) height(19) labeltype(Caption) left(10) marginleft(100) parent(#COM_OWNER) tabposition(3) top(16) usepicklist(False) width(594)

define_com class(#PRIM_GPBX) name(#GPBX_1) caption('SV type') displayposition(4) height(45) left(8) parent(#COM_OWNER) tabposition(4) tabstop(False) top(40) width(281)
define_com class(#PRIM_RDBN) name(#CSV) buttonchecked(True) caption('CSV') displayposition(1) height(21) left(16) parent(#GPBX_1) tabposition(1) top(16) width(50)
define_com class(#PRIM_RDBN) name(#TSV) caption('TSV') displayposition(3) left(88) parent(#GPBX_1) tabposition(3) top(16) width(50)
define_com class(#PRIM_RDBN) name(#SV) caption('Other') displayposition(2) left(152) parent(#GPBX_1) tabposition(2) top(16) width(50)
define_com class(#STD_descs.Visual) name(#separator) displayposition(4) height(19) labeltype(Caption) left(200) marginleft(2) parent(#GPBX_1) tabposition(4) top(16) usepicklist(False) width(70)

def_list name(#valueslst) fields(#std_num #std_obj #std_desc #std_amnt #std_qty) counter(#listcount) type(*working)

evtroutine handling(#com_owner.Initialize)
#jsmhdle := *default
#com_owner.clearlists
#com_owner.setlist
endroutine

evtroutine handling(#Connect.Click)
#com_owner.Connect
endroutine

evtroutine handling(#Read.Click)
#com_owner.ReadSVFile
endroutine

evtroutine handling(#Disconnect.Click)
#com_owner.DisConnect
endroutine

evtroutine handling(#Write.Click)
#com_owner.WriteSVFile
endroutine

evtroutine handling(#Clear.Click)
#com_owner.ClearLists
#com_owner.SetList
endroutine

mthroutine name(Connect)

if (#jsmhdle.IsNull)

* connect the JSMX client to the Java Service Manager and start a thread for the service

* Start JSM Server on IBM i
* use builtin(jsmx_open) with_args('ISERIES01:9990') to_get(#jsmsts #jsmmsg #jsmhdle)

* Start default JSM server
use builtin(jsmx_open) to_get(#jsmsts #jsmmsg #jsmhdle)
#com_owner.check( #jsmsts #jsmmsg )

* Load the service
#jsmcmd := 'service_load service(svfileservice)'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

#connect.enabled := false
#read.enabled := true
#write.enabled := true
#clear.enabled := true
#disconnect.enabled := true

endif

endroutine

mthroutine name(ReadSVFile)

* add variables for any additional keywords you need to modify
#jsmcmd := 'read file(' + #jsmfile + ')'

if (#csv.buttonchecked)
#jsmcmd := #jsmcmd + ' content(*csv)'
endif

if (#tsv.buttonchecked)
#jsmcmd := #jsmcmd + ' content(*tsv)'
endif

if (#sv.buttonchecked)

if (#com_owner.checksv = false)
return
endif

#jsmcmd := #jsmcmd + ' content(*sv) separator(' + #separator + ')'

endif

#com_owner.ClearLists

use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg #valueslst)
#com_owner.check( #jsmsts #jsmmsg )

selectlist named(#valueslst)
add_entry to_list(#detaillst)
endselect

* add some blank entries to allow for additions to the file
#std_obj #std_desc #std_amnt #std_qty := *null
#std_num := #listcount

begin_loop using(#std_count) to(20)
#std_num := #std_num + 1
add_entry to_list(#detaillst)
end_loop

endroutine

mthroutine name(WriteSVFile)

clr_list named(#valueslst)

selectlist named(#detaillst)

if (#std_obj <> *blank)
add_entry to_list(#valueslst)
endif

endselect

* add variables for any additional keywords you need to modify
#jsmcmd := 'write file(' + #jsmfile + ')'

if (#csv.buttonchecked)
#jsmcmd := #jsmcmd + ' content(*csv)'
endif

if (#tsv.buttonchecked)
#jsmcmd := #jsmcmd + ' content(*tsv)'
endif

if (#sv.buttonchecked)

if (#com_owner.checksv = false)
return
endif

#jsmcmd := #jsmcmd + ' content(*sv) separator(' + #separator + ')'

endif

use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg #valueslst)
#com_owner.check( #jsmsts #jsmmsg )

endroutine

mthroutine name(ClearLists)

clr_list named(#valueslst)
clr_list named(#detaillst)

endroutine

mthroutine name(SetList)

#std_obj #std_desc #std_amnt #std_qty := *null

begin_loop using(#std_num) to(20)
add_entry to_list(#detaillst)
end_loop

endroutine

mthroutine name(DisConnect)

if (#jsmhdle <> *blank)

* disconnect from IBM i host
use builtin(jsmx_command) with_args(#jsmhdle disconnect) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

* unload the service
use builtin(jsmx_command) with_args(#jsmhdle service_unload) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

* Close the thread
use builtin(jsmx_close) with_args(#jsmhdle) to_get(#jsmsts #jsmmsg)

#jsmhdle := *null

#connect.enabled := true
#read.enabled := false
#write.enabled := false
#clear.enabled := false
#disconnect.enabled := false

endif

endroutine

* check the JSM return status

mthroutine name(check)
define_map for(*input) class(#jsmsts) name(#i_status)
define_map for(*input) class(#jsmmsg) name(#i_message)

message msgtxt(#i_status + ' : ' + #i_message)

endroutine

mthroutine name(checkSV)
define_map for(*result) class(#std_bool) name(#i_state) mandatory('true')

if (#separator *EQ *blank)
use builtin(message_box_show) with_args(ok ok ERROR ERROR 'Character used as separator must be entered')
#i_state := false
endif

endroutine

end_com