| 1 | XOBVLIB ;; mjk/alb - VistaLink Programmer Library ; 07/27/2002 13:00
|
---|
| 2 | ;;1.5;VistALink;;Sep 09, 2005
|
---|
| 3 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026]
|
---|
| 4 | ;
|
---|
| 5 | QUIT
|
---|
| 6 | ; --------------------------------------------------------------
|
---|
| 7 | ; Application Developer Supported Calls
|
---|
| 8 | ; --------------------------------------------------------------
|
---|
| 9 | ;
|
---|
| 10 | XMLHDR() ; -- provides current XML standard header
|
---|
| 11 | QUIT "<?xml version=""1.0"" encoding=""utf-8"" ?>"
|
---|
| 12 | ;
|
---|
| 13 | CHARCHK(STR) ; -- replace xml character limits with entities
|
---|
| 14 | NEW A,I,X,Y,Z,NEWSTR
|
---|
| 15 | SET (Y,Z)=""
|
---|
| 16 | IF STR["&" SET NEWSTR=STR DO SET STR=Y_Z
|
---|
| 17 | . FOR X=1:1 SET Y=Y_$PIECE(NEWSTR,"&",X)_"&",Z=$PIECE(STR,"&",X+1,999) QUIT:Z'["&"
|
---|
| 18 | IF STR["<" FOR SET STR=$PIECE(STR,"<",1)_"<"_$PIECE(STR,"<",2,99) QUIT:STR'["<"
|
---|
| 19 | IF STR[">" FOR SET STR=$PIECE(STR,">",1)_">"_$PIECE(STR,">",2,99) QUIT:STR'[">"
|
---|
| 20 | IF STR["'" FOR SET STR=$PIECE(STR,"'",1)_"'"_$PIECE(STR,"'",2,99) QUIT:STR'["'"
|
---|
| 21 | IF STR["""" FOR SET STR=$PIECE(STR,"""",1)_"""_$PIECE(STR,"""",2,99) QUIT:STR'[""""
|
---|
| 22 | ;
|
---|
| 23 | FOR I=1:1:$LENGTH(STR) DO
|
---|
| 24 | . SET X=$EXTRACT(STR,I)
|
---|
| 25 | . SET A=$ASCII(X)
|
---|
| 26 | . IF A<31 SET STR=$PIECE(STR,X,1)_$PIECE(STR,X,2,99)
|
---|
| 27 | QUIT STR
|
---|
| 28 | ;
|
---|
| 29 | STOP() ; -- called by application to determine if processing should stop gracefully
|
---|
| 30 | NEW XOBFLAG
|
---|
| 31 | ;
|
---|
| 32 | ; -- do checks (only one now is time out)
|
---|
| 33 | DO TOFLAG
|
---|
| 34 | ;
|
---|
| 35 | ; -- set 'stop' flag
|
---|
| 36 | SET XOBFLAG=$$TOCHK()
|
---|
| 37 | ;
|
---|
| 38 | QUIT XOBFLAG
|
---|
| 39 | ;
|
---|
| 40 | GETTO() ; -- get time out value
|
---|
| 41 | QUIT $GET(XOBDATA("XOB RPC","TIMEOUT"),300)
|
---|
| 42 | ;
|
---|
| 43 | SETTO(TO) ; -- set time out value on the fly
|
---|
| 44 | SET XOBDATA("XOB RPC","TIMEOUT")=TO
|
---|
| 45 | QUIT 1
|
---|
| 46 | ;
|
---|
| 47 | ; --------------------------------------------------------------
|
---|
| 48 | ; Foundations Developer Calls (Unsupported)
|
---|
| 49 | ; --------------------------------------------------------------
|
---|
| 50 | ;
|
---|
| 51 | VLHDR(NUM) ; -- provides current VistaLink standard header
|
---|
| 52 | NEW X,TYPE,SCHEMA
|
---|
| 53 | ;
|
---|
| 54 | ; -- get type info
|
---|
| 55 | SET X=$PIECE($TEXT(TYPE+NUM),";;",2)
|
---|
| 56 | SET TYPE=$PIECE(X,"^",2)
|
---|
| 57 | SET SCHEMA=$PIECE(X,"^",3)
|
---|
| 58 | QUIT $$ENVHDR(TYPE,SCHEMA)
|
---|
| 59 | ;
|
---|
| 60 | TYPE ; -- return message types [ number ^ message type ^ schema file ]
|
---|
| 61 | ;;1^gov.va.med.foundations.rpc.response^rpcResponse.xsd
|
---|
| 62 | ;;2^gov.va.med.foundations.rpc.fault^rpcFault.xsd
|
---|
| 63 | ;;3^gov.va.med.foundations.vistalink.system.fault^vlFault.xsd
|
---|
| 64 | ;;4^gov.va.med.foundations.vistalink.system.response^vlSimpleResponse.xsd
|
---|
| 65 | ;
|
---|
| 66 | ERROR(XOBDAT) ; -- send error type message
|
---|
| 67 | NEW XOBI,XOBY,XOBOS
|
---|
| 68 | SET XOBY="XOBY"
|
---|
| 69 | ; -- build xml
|
---|
| 70 | DO BUILD(.XOBY,.XOBDAT)
|
---|
| 71 | ;
|
---|
| 72 | USE XOBPORT
|
---|
| 73 | DO OS^XOBVSKT
|
---|
| 74 | ; -- write xml
|
---|
| 75 | DO PRE^XOBVSKT
|
---|
| 76 | SET XOBI=0 FOR SET XOBI=$ORDER(XOBY(XOBI)) QUIT:'XOBI DO WRITE^XOBVSKT(XOBY(XOBI))
|
---|
| 77 | ; -- send eot and flush buffer
|
---|
| 78 | DO POST^XOBVSKT
|
---|
| 79 | QUIT
|
---|
| 80 | ;
|
---|
| 81 | BUILD(XOBY,XOBDAT) ; -- store built xml in passed store reference (XOBY)
|
---|
| 82 | ; -- input format
|
---|
| 83 | ; XOBDAT("MESSAGE TYPE") = # type of message (ex. 2 = gov.va.med.foundations.vistalink.rpc.fault :: See TYPE tag)
|
---|
| 84 | ; XOBDAT("ERRORS",<integer>,"CODE") = error code
|
---|
| 85 | ; XOBDAT("ERRORS",<integer>,"ERROR TYPE") = type of error (system/application/security)
|
---|
| 86 | ; XOBDAT("ERRORS",<integer>,"MESSAGE",<integer>) = error message
|
---|
| 87 | ;
|
---|
| 88 | ; -- SOAP related information
|
---|
| 89 | ; XOBDAT("ERRORS",<integer>,"FAULT CODE") = high level code on where error occurred (ex. Client, Server, etc.)
|
---|
| 90 | ; - Default: Server
|
---|
| 91 | ; XOBDAT("ERRORS",<integer>,"FAULT STRING") = high level fault type text (ex. System Error)
|
---|
| 92 | ; - Default: System Error
|
---|
| 93 | ; XOBDAT("ERRORS",<integer>,"FAULT ACTOR") = RPC, routine, etc. running when error occurred
|
---|
| 94 | ; - Default: [none]
|
---|
| 95 | ;
|
---|
| 96 | NEW XOBCODE,XOBI,XOBERR,XOBLINE,XOBETYPE
|
---|
| 97 | SET XOBLINE=0
|
---|
| 98 | ;
|
---|
| 99 | DO ADD($$VLHDR($GET(XOBDAT("MESSAGE TYPE"))))
|
---|
| 100 | DO ADD("<Fault>")
|
---|
| 101 | DO ADD("<FaultCode>"_$GET(XOBDAT("ERRORS",1,"FAULT CODE"),"Server")_"</FaultCode>")
|
---|
| 102 | DO ADD("<FaultString>"_$GET(XOBDAT("ERRORS",1,"FAULT STRING"),"System Error")_"</FaultString>")
|
---|
| 103 | DO ADD("<FaultActor>"_$GET(XOBDAT("ERRORS",1,"FAULT ACTOR"))_"</FaultActor>")
|
---|
| 104 | DO ADD("<Detail>")
|
---|
| 105 | SET XOBERR=0
|
---|
| 106 | FOR SET XOBERR=$ORDER(XOBDAT("ERRORS",XOBERR)) QUIT:'XOBERR DO
|
---|
| 107 | . SET XOBCODE=$GET(XOBDAT("ERRORS",XOBERR,"CODE"),0)
|
---|
| 108 | . SET XOBETYPE=$GET(XOBDAT("ERRORS",XOBERR,"ERROR TYPE"),0)
|
---|
| 109 | . DO ADD("<Error type="""_XOBETYPE_""" code="""_XOBCODE_""" >")
|
---|
| 110 | . DO ADD("<Message>")
|
---|
| 111 | . IF $GET(XOBDAT("ERRORS",XOBERR,"CDATA")) DO ADD("<![CDATA[")
|
---|
| 112 | . SET XOBI=0
|
---|
| 113 | . FOR SET XOBI=$ORDER(XOBDAT("ERRORS",XOBERR,"MESSAGE",XOBI)) QUIT:'XOBI DO
|
---|
| 114 | . . DO ADD(XOBDAT("ERRORS",XOBERR,"MESSAGE",XOBI))
|
---|
| 115 | . IF $GET(XOBDAT("ERRORS",XOBERR,"CDATA")) DO ADD("]]>")
|
---|
| 116 | . DO ADD("</Message>")
|
---|
| 117 | . DO ADD("</Error>")
|
---|
| 118 | DO ADD("</Detail>")
|
---|
| 119 | DO ADD("</Fault>")
|
---|
| 120 | DO ADD($$ENVFTR())
|
---|
| 121 | ;
|
---|
| 122 | QUIT
|
---|
| 123 | ;
|
---|
| 124 | ADD(TXT) ; -- add line
|
---|
| 125 | SET XOBLINE=XOBLINE+1
|
---|
| 126 | SET @XOBY@(XOBLINE)=TXT
|
---|
| 127 | QUIT
|
---|
| 128 | ;
|
---|
| 129 | GETRATE() ; -- get J2SE heartbeat rate in seconds
|
---|
| 130 | NEW X
|
---|
| 131 | SET X=$PIECE($GET(^XOB(18.01,1,0)),"^",2)
|
---|
| 132 | QUIT $SELECT(X:X,1:180)
|
---|
| 133 | ;
|
---|
| 134 | GETDELTA() ; -- get J2SE latancy delta in seconds
|
---|
| 135 | NEW X
|
---|
| 136 | SET X=$PIECE($GET(^XOB(18.01,1,0)),"^",3)
|
---|
| 137 | QUIT $SELECT(X:X,1:180)
|
---|
| 138 | ;
|
---|
| 139 | GETASTO() ; -- get J2EE application server time out in seconds (one day = 86400)
|
---|
| 140 | NEW X
|
---|
| 141 | SET X=$PIECE($GET(^XOB(18.01,1,0)),"^",4)
|
---|
| 142 | QUIT $SELECT(X:X,1:86400)
|
---|
| 143 | ;
|
---|
| 144 | GETRASTO() ; -- get J2EE application server reauthenticated seesion time out in seconds (ten minutes = 600)
|
---|
| 145 | NEW X
|
---|
| 146 | SET X=$PIECE($GET(^XOB(18.01,1,0)),"^",5)
|
---|
| 147 | QUIT $SELECT(X:X,1:600)
|
---|
| 148 | ;
|
---|
| 149 | TOFLAG ; -- set timed out flag
|
---|
| 150 | ; -- if run in non-VistALink environment never time out ; set both now & start = $h
|
---|
| 151 | SET XOBDATA("XOB RPC","TIMED OUT")=($$HDIFF^XLFDT($HOROLOG,$GET(XOBDATA("XOB RPC","START"),$HOROLOG),2)>$$GETTO())
|
---|
| 152 | QUIT
|
---|
| 153 | ;
|
---|
| 154 | TOCHK() ; -- did RPC timeout?
|
---|
| 155 | QUIT +$GET(XOBDATA("XOB RPC","TIMED OUT"))
|
---|
| 156 | ;
|
---|
| 157 | ENVHDR(TYPE,SCHEMA) ; -- vistalink beg tag (header)
|
---|
| 158 | NEW X,VLVER
|
---|
| 159 | SET X=$$XMLHDR()
|
---|
| 160 | SET X=X_"<VistaLink"
|
---|
| 161 | SET X=X_" messageType="""_TYPE_""""
|
---|
| 162 | ; -- indicates to VL v1.0 client that this VL v1.5 server is backwards compatible
|
---|
| 163 | SET VLVER="1.5"
|
---|
| 164 | IF $GET(XOBDATA("VL VERSION"))="1.0" SET VLVER="1.0"
|
---|
| 165 | SET X=X_" version="""_VLVER_""""
|
---|
| 166 | SET X=X_" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"""
|
---|
| 167 | SET X=X_" xsi:noNamespaceSchemaLocation="""_SCHEMA_""""
|
---|
| 168 | ;SET X=X_" xmlns=""http://med.va.gov/Foundations"""
|
---|
| 169 | SET X=X_">"
|
---|
| 170 | QUIT X
|
---|
| 171 | ;
|
---|
| 172 | ENVFTR() ; -- vistalink end tag (footer)
|
---|
| 173 | QUIT "</VistaLink>"
|
---|
| 174 | ;
|
---|
| 175 | SYSOS(XOBOS) ; -- get system operating system
|
---|
| 176 | ; -- DBIA #3522
|
---|
| 177 | QUIT $SELECT(XOBOS["OpenM":$$OS^%ZOSV(),XOBOS["DSM":"VMS",1:"Unknown")
|
---|
| 178 | ;
|
---|