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