XMLQueryService Example

LANSA Integrator

XMLQueryService Example

function options(*DIRECT)

define field(#ORDERXML) type(*CHAR) length(256) desc('Path to salesorder.xml') input_atr(LC)
def_list name(#BROWSE) fields((#ORDERNUM *OUT) (#CUSTNUM *OUT))

change field(#ORDERXML) to('/LANSA_dc@pgmlib/jsm/instance/order.xml')
begin_loop

request fields(#ORDERXML) identify(*DESC) browselist(#browse)
clr_list named(#BROWSE)
execute subroutine(LOADORDERS)
selectlist named(#ORDERS)
add_entry to_list(#BROWSE)
endselect

end_loop

subroutine name(LOADORDERS)

define field(#ORDERNUM) type(*CHAR) length(10) colhdg('Order' 'Number') input_atr(LC)
define field(#CUSTNUM) type(*CHAR) length(10) colhdg('Customer' 'Number') input_atr(LC)
def_list name(#ORDERS) fields(#ORDERNUM #CUSTNUM) type(*WORKING) entrys(100)

* open JSM connection
* load the XMLQueryService
use builtin(JSM_OPEN) to_get(#JSMSTS #JSMMSG)
execute subroutine(CHECK) with_parms(#JSMSTS #JSMMSG)

change field(#JSMCMD) to('''service_load service(XMLQueryService) trace(*yes)''')
use builtin(JSM_COMMAND) with_args(#JSMCMD) to_get(#JSMSTS #JSMMSG)
execute subroutine(CHECK) with_parms(#JSMSTS #JSMMSG)

* load the salesorder.xml file
use builtin(TCONCAT) with_args('load file(' #ORDERXML ')') to_get(#JSMCMD)
use builtin(JSM_COMMAND) with_args(#JSMCMD) to_get(#JSMSTS #JSMMSG)
execute subroutine(CHECK) with_parms(#JSMSTS #JSMMSG)

* query each <SalesOrder> element, for each, return
* - value of @SONumber attribute (sales order number)
* - value of @CustNumber attribute of the contained <Customer> element
clr_list named(#ORDERS)
change field(#JSMCMD) to('''query nodes(//SalesOrder) nodesvalue1(@SONumber) nodesvalue2(Customer/@CustNumber) service_list(ORDERNUM,CUSTNUM)''')
use builtin(JSM_COMMAND) with_args(#JSMCMD) to_get(#JSMSTS #JSMMSG #ORDERS)
execute subroutine(CHECK) with_parms(#JSMSTS #JSMMSG)

* unload the XMLQueryService
* close the JSM connection
change field(#JSMCMD) to('service_unload')
use builtin(JSM_COMMAND) with_args(#JSMCMD) to_get(#JSMSTS #JSMMSG)
use builtin(JSM_CLOSE) to_get(#JSMSTS #JSMMSG)

endroutine

* -----------------------------------------------
* Subroutine CHECK: checks 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