| 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 |  ;
 | 
|---|