XMLParserServiceの例2 (ノードのトラバース)

LANSA Integrator

XMLParserServiceの例2 (ノードのトラバース)


これは、比較的複雑なXMLParserServiceの例で、受信したxmlのノードのトラバースを実証します。受信したxmlとLANSAフィールドおよびリストを直接バインドする場合、ほとんどの状況でノードをトラバースする必要がなくなります(HTTPServiceサービスを参照)。この例では、xmlを解析し、DOMツリー内でノードをトラバースしてノードの属性値をロードします。

 

********** Beginning of RDML commands ********** 

FUNCTION   OPTIONS(*DIRECT)                                    

**********                                                     

DEFINE     FIELD(#JSMSTS) TYPE(*CHAR) LENGTH(20)               

DEFINE     FIELD(#JSMMSG) TYPE(*CHAR) LENGTH(255)              

DEFINE     FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(255)

**********                                                     

DEFINE     FIELD(#MESSAGE) TYPE(*CHAR) LENGTH(255)             

DEF_LIST   NAME(#MSGLST) FIELDS((#MESSAGE)) TYPE(*WORKING)     

**********                                                     

********** 'Open service'                                      

**********                                                     

USE        BUILTIN(JSM_OPEN) TO_GET(#JSMSTS #JSMMSG)           

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG) 

**********                                                        

********** 'Load service'                                          

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('SERVICE_LOAD SERVICE(XM 

           LPARSERSERVICE)') TO_GET(#JSMSTS #JSMMSG)               

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)           

**********                                                        

********** 'Load XML source'                                       

**********                                                        

********** Load from a file 

CHANGE     FIELD(#JSMCMD) TO('LOAD METHOD(*FILE) FILE(order.xml)') 

USE        BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS  

           #JSMMSG)                                                

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)           

**********                                                        

********** 'Parse XML'                                             

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('PARSE') TO_GET(#JSMSTS  

           #JSMMSG)                                                

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)           

**********                                                        

********** 'Get ROOT tag'                                          

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('GET OBJECT(*ROOTTAGNAME 

           )') TO_GET(#JSMSTS #JSMMSG)                             

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                             

**********                                                  

********** Get warning and error messages                         

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('GET OBJECT(*MESSAGES) S

           ERVICE_LIST(MESSAGE)') TO_GET(#JSMSTS #JSMMSG #MSGLST) 

**********                                                        

SELECTLIST NAMED(#MSGLST)                                         

DISPLAY    FIELDS((#MESSAGE))                                     

ENDSELECT                                                         

********** 'Get node value'                                       

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('GET NODE(/SALESORDER/CU

           STOMER/CUSTNAME)') TO_GET(#JSMSTS #JSMMSG  )           

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                            

**********                                                        

********** 'Collect SALESORDER/LINE elements'                     

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('FOREACH NODE(/SALESORDE

           R/LINE)') TO_GET(#JSMSTS #JSMMSG)                      

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                            

**********                                                        

 

Part 2

********** 'Loop through Line elements'                           

**********                                                        

BEGIN_LOOP                                                        

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('NEXT OBJECT(*NODE)') TO

           _GET(#JSMSTS #JSMMSG)                                  

**********                                                        

IF         COND('#JSMSTS *NE OK')                                 

GOTO       LABEL(BRK)                                             

ENDIF                                                             

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('GET NODE(*CURRENT) ATTR

           IBUTE(LineNumber)') TO_GET(#JSMSTS #JSMMSG)            

**********                                                        

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                            

**********                                                        

CHANGE     FIELD(#JSMCMD) TO('GET NODE(PART) ATTRIBUTE(PARTNUMBER)

                ')                                                

USE        BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS  

           #JSMMSG)                                                

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                             

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('GET NODE(PART/DESCRIPTI 

           ON)') TO_GET(#JSMSTS #JSMMSG)                           

DISPLAY    FIELDS((#JSMSTS) (#JSMMSG))                             

**********                                                        

END_LOOP                                                           

BRK ********** 'Loop breakout                                    

**********                                                       

********** 'Unload service'                                       

**********                                                        

USE        BUILTIN(JSM_COMMAND) WITH_ARGS('SERVICE_UNLOAD') TO_GET

           (#JSMSTS #JSMMSG)                                      

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)          

**********                                                        

********** 'Close service'                                        

**********                                                        

USE        BUILTIN(JSM_CLOSE) TO_GET(#JSMSTS #JSMMSG)             

EXECUTE    SUBROUTINE(CHECK) WITH_PARMS(#JSMSTS #JSMMSG)          

**********                                                        

********** SUB ROUTINES                                           

**********                                                        

SUBROUTINE NAME(CHECK) PARMS((#JSMSTS *RECEIVED) (#JSMMSG *RECEIVE

           D))                                                    

**********                                                        

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