VBECRPCC ;HOIFO/bnt - VBECS VistALink RPC Client Utilities ;07/27/2002 13:00
;;2.0;VBECS;;Jun 05, 2015;Build 4
;
; Note: This routine supports data exchange with an FDA registered
; medical device. As such, it may not be changed in any way without
; prior written approval from the medical device manufacturer.
;
; Integration Agreements:
; Reference to $$GET^XPAR supported by IA #2263
; Reference to $$XMLHDR^XOBVLIB supported by IA #4090
;
QUIT
;
; -------------------------------------------------------------------
; RPC Client: Methods Calls
; -------------------------------------------------------------------
;
EXECUTE(VBECPRMS) ; -- execute rpc call
;
; -- validate parmeters passed
IF '$$VALIDATE(.VBECPRMS) QUIT 0
;
; -- call method to build request from parameters array
DO REQUEST(.VBECPRMS)
;SET VBECPRMS("CLOSE MESSAGE")="<VistaLink messageType='gov.va.med.foundations.rpc.request' ></VistaLink>"
IF $G(VBECPRMS("RESULTS"))="" SET VBECPRMS("RESULTS")=$NA(^TMP("VBECRPC",$J,"XML"))
QUIT $$EXECUTE^VBECVLC(.VBECPRMS)
;
VALIDATE(VBECPRMS) ; -- validate parameters sent in
; // TODO: Do checks and build validate error message
QUIT 1
;
REQUEST(VBECPRMS) ; -- build xml request
NEW VBECLINE,VBECPI,PTYPE,VBECREQ
SET VBECLINE=0
SET VBECPRMS("MESSAGE TYPE")="gov.va.med.foundations.rpc.request"
SET VBECPRMS("MODE")="singleton"
IF $G(VBECPRMS("REQUEST"))="" SET VBECPRMS("REQUEST")=$NA(VBECPRMS("REQUEST","XML"))
SET VBECREQ=VBECPRMS("REQUEST")
KILL @VBECREQ
;
DO ADD($$XMLHDR^XOBVLIB())
DO ADD("<VistaLink messageType="""_$G(VBECPRMS("MESSAGE TYPE"))_""" mode="""_$G(VBECPRMS("MODE"))_""" version=""1.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:noNamespaceSchemaLocation=""rpcRequest.xsd"" ")
DO ADD("xmlns=""http://domain.ext/Foundations"">")
DO ADD("<RpcHandler version=""1.0"" />")
DO ADD("<Request rpcName="""_$G(VBECPRMS("RPC NAME"))_""" version=""1.0"" rpcClientTimeOut=""900"" >")
DO ADD("<RpcContext><![CDATA["_$G(VBECPRMS("RPC CONTEXT"))_"]]></RpcContext>")
DO ADD("<Params>")
IF $D(VBECPRMS("PARAMS"))>9 DO
. SET VBECPI=0
. FOR SET VBECPI=$O(VBECPRMS("PARAMS",VBECPI)) Q:'VBECPI DO
. . SET PTYPE=$G(VBECPRMS("PARAMS",VBECPI,"TYPE"))
. . IF PTYPE="STRING" DO STRING QUIT
. . IF PTYPE="ARRAY" DO ARRAY QUIT
. . IF PTYPE="REF" DO REF QUIT
DO ADD("</Params>")
DO ADD("</Request>")
DO ADD("</VistaLink>")
QUIT
;
STRING ;
DO ADD("<Param type=""string"" position="""_VBECPI_""" >"_$G(VBECPRMS("PARAMS",VBECPI,"VALUE"))_"</Param>")
QUIT
;
ARRAY ;
NEW VBECNAME
DO ADD("<Param type=""array"" position="""_VBECPI_""" >")
DO ADD("<Indices>")
SET VBECNAME="" FOR SET VBECNAME=$O(VBECPRMS("PARAMS",VBECPI,"VALUE",VBECNAME)) Q:VBECNAME="" DO
. DO ADD("<Index name="""_VBECNAME_""" value="""_$G(VBECPRMS("PARAMS",VBECPI,"VALUE",VBECNAME))_""" />")
DO ADD("</Indices>")
DO ADD("</Param>")
QUIT
;
REF ;
DO ADD("<Param type=""ref"" position="""_VBECPI_""" >"_$G(VBECPRMS("PARAMS",VBECPI,"VALUE"))_"</Param>")
QUIT
;
ADD(STR) ; -- add string to array
SET VBECLINE=VBECLINE+1
SET @VBECREQ@(VBECLINE)=STR
QUIT
;
INITV(RPC) ; Initialize VBECS VistALink Client parameters
; Input: RPC = Parameter Toolkit Instance of RPC Name
; Output: VBECPRMS or -1^"error specific text" if error occurs setting any VBECPRMS parameter
;
NEW ENT,PAR
KILL VBECPRMS
SET VBECPRMS("ERROR")=0
IF RPC']"" DO ERR("NO RPC NAME SUPPLIED") QUIT
; Parameter Toolkit variables
SET ENT="PKG.VBECS" ;Entity
SET PAR="VBECS VISTALINK" ;Parameter
SET VBECPRMS("ADDRESS")=$$GET^XPAR(ENT,PAR,"LISTENER IP ADDRESS","Q")
IF VBECPRMS("ADDRESS")="" DO ERR("NO LISTENER IP ADDRESS FOUND") QUIT
SET VBECPRMS("PORT")=$$GET^XPAR(ENT,PAR,"LISTENER PORT NUMBER","Q")
IF VBECPRMS("PORT")="" DO ERR("NO LISTENER PORT NUMBER FOUND") QUIT
SET VBECPRMS("RPC NAME")=RPC
SET VBECPRMS("RPC CONTEXT")=$$GET^XPAR(ENT,PAR,RPC,"Q")
IF VBECPRMS("RPC CONTEXT")="" DO ERR("UNABLE TO RETRIEVE RPC CONTEXT FOR "_RPC) QUIT
QUIT
;
CHGADPRT(IP,PORT) ; Change the IP Address and Port of the VBECS VistALink Listner
NEW ERR,ENT,PAR
SET ENT="PKG.VBECS" ; Entity
SET PAR="VBECS VISTALINK" ; Parameter
IF IP]"" DO
. DO EN^XPAR(ENT,PAR,"LISTENER IP ADDRESS",IP,.ERR)
. IF ERR QUIT
;
IF PORT]"" DO
. DO EN^XPAR(ENT,PAR,"LISTENER PORT NUMBER",PORT,.ERR)
. IF ERR QUIT
QUIT ERR
;
CONTEXT(INSTANCE,CONTEXT) ; Adds, or changes, an RPC Instance and
; it's associated context
; Set CONTEXT to "@" to delete the instance of the RPC.
;
NEW ERR,ENT,PAR
SET ENT="PKG.VBECS" ; Entity
SET PAR="VBECS VISTALINK" ; Parameter
DO EN^XPAR(ENT,PAR,INSTANCE,CONTEXT,.ERR)
QUIT ERR
;
ERR(ERRTXT) ; Set VBECPRMS("ERROR") node with error text and quit
S VBECPRMS("ERROR")="1^"_ERRTXT
QUIT
;
; -------------------------------------------------------------------
; Request Format Documentation
; -------------------------------------------------------------------
;
; [ Parameter Array Format -->> passed to REQUEST^VBECRPCC(.VBECPRMS) ]
;
; -- general information
; VBECPRMS("ADDRESS")="127.0.0.1"
; VBECPRMS("PORT")=19811
; VBECPRMS("RPC NAME")="VBECS Order Entry"
; VBECPRMS("RPC CONTEXT")="VBECS VISTALINK CONTEXT"
;
; -- string parameter type
; VBECPRMS("PARAMS",1,"TYPE")="STRING"
; VBECPRMS("PARAMS",1,"VALUE")=2
; VBECPRMS("PARAMS",2,"TYPE")="STRING"
; VBECPRMS("PARAMS",2,"VALUE")=2961001
; VBECPRMS("PARAMS",3,"TYPE")="STRING"
; VBECPRMS("PARAMS",3,"VALUE")=3030101
;
; -- sample array parameter type
; VBECPRMS("PARAMS",4,"TYPE")="ARRAY"
; VBECPRMS("PARAMS",4,"VALUE","FNAME")="JOE"
; VBECPRMS("PARAMS",4,"VALUE","LNAME")="GOODMAN"
;
; -------------------------------------------------------------------
;
; [ Sample XML produced by calling REQUEST^VBECRPCC(.VBECPRMS) ]
;
; <?xml version="1.0" encoding="utf-8" ?>
; <VistaLink type="gov.va.med.foundations.rpc.request" mode="singleton"
; version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
; xsi:noNamespaceSchemaLocation="rpcRequest.xsd"
; xmlns="http://domain.ext/Foundations">
; <RpcHandler version="1.0" />
; <Request rpcName="VBECS Order Entry" version="1.0"
; rpcClientTimeOut="900">
; <RpcContext>
; <![CDATA[ VBECS VISTALINK ]]>
; </RpcContext>
; <Params>
; <Param type="string" position="1" >2</Param>
; <Param type="string" position="2" >2961001</Param>
; <Param type="string" position="3" >3030101</Param>
; <Param type="array" position="4" >
; <Indices>
; <Index name="status" value="veteran" />
; <Index name="gender" value="male" />
; </Indices>
; </Param>
; </Params>
; </Request>
; </VistaLink>
;
; -------------------------------------------------------------------
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HVBECRPCC 7064 printed Sep 15, 2024@22:08:13 Page 2
VBECRPCC ;HOIFO/bnt - VBECS VistALink RPC Client Utilities ;07/27/2002 13:00
+1 ;;2.0;VBECS;;Jun 05, 2015;Build 4
+2 ;
+3 ; Note: This routine supports data exchange with an FDA registered
+4 ; medical device. As such, it may not be changed in any way without
+5 ; prior written approval from the medical device manufacturer.
+6 ;
+7 ; Integration Agreements:
+8 ; Reference to $$GET^XPAR supported by IA #2263
+9 ; Reference to $$XMLHDR^XOBVLIB supported by IA #4090
+10 ;
+11 QUIT
+12 ;
+13 ; -------------------------------------------------------------------
+14 ; RPC Client: Methods Calls
+15 ; -------------------------------------------------------------------
+16 ;
EXECUTE(VBECPRMS) ; -- execute rpc call
+1 ;
+2 ; -- validate parmeters passed
+3 IF '$$VALIDATE(.VBECPRMS)
QUIT 0
+4 ;
+5 ; -- call method to build request from parameters array
+6 DO REQUEST(.VBECPRMS)
+7 ;SET VBECPRMS("CLOSE MESSAGE")="<VistaLink messageType='gov.va.med.foundations.rpc.request' ></VistaLink>"
+8 IF $GET(VBECPRMS("RESULTS"))=""
SET VBECPRMS("RESULTS")=$NAME(^TMP("VBECRPC",$JOB,"XML"))
+9 QUIT $$EXECUTE^VBECVLC(.VBECPRMS)
+10 ;
VALIDATE(VBECPRMS) ; -- validate parameters sent in
+1 ; // TODO: Do checks and build validate error message
+2 QUIT 1
+3 ;
REQUEST(VBECPRMS) ; -- build xml request
+1 NEW VBECLINE,VBECPI,PTYPE,VBECREQ
+2 SET VBECLINE=0
+3 SET VBECPRMS("MESSAGE TYPE")="gov.va.med.foundations.rpc.request"
+4 SET VBECPRMS("MODE")="singleton"
+5 IF $GET(VBECPRMS("REQUEST"))=""
SET VBECPRMS("REQUEST")=$NAME(VBECPRMS("REQUEST","XML"))
+6 SET VBECREQ=VBECPRMS("REQUEST")
+7 KILL @VBECREQ
+8 ;
+9 DO ADD($$XMLHDR^XOBVLIB())
+10 DO ADD("<VistaLink messageType="""_$GET(VBECPRMS("MESSAGE TYPE"))_""" mode="""_$GET(VBECPRMS("MODE"))_""" version=""1.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:noNamespaceSchemaLocation=""rpcRequest.xsd"" ")
+11 DO ADD("xmlns=""http://domain.ext/Foundations"">")
+12 DO ADD("<RpcHandler version=""1.0"" />")
+13 DO ADD("<Request rpcName="""_$GET(VBECPRMS("RPC NAME"))_""" version=""1.0"" rpcClientTimeOut=""900"" >")
+14 DO ADD("<RpcContext><![CDATA["_$GET(VBECPRMS("RPC CONTEXT"))_"]]></RpcContext>")
+15 DO ADD("<Params>")
+16 IF $DATA(VBECPRMS("PARAMS"))>9
Begin DoDot:1
+17 SET VBECPI=0
+18 FOR
SET VBECPI=$ORDER(VBECPRMS("PARAMS",VBECPI))
if 'VBECPI
QUIT
Begin DoDot:2
+19 SET PTYPE=$GET(VBECPRMS("PARAMS",VBECPI,"TYPE"))
+20 IF PTYPE="STRING"
DO STRING
QUIT
+21 IF PTYPE="ARRAY"
DO ARRAY
QUIT
+22 IF PTYPE="REF"
DO REF
QUIT
End DoDot:2
End DoDot:1
+23 DO ADD("</Params>")
+24 DO ADD("</Request>")
+25 DO ADD("</VistaLink>")
+26 QUIT
+27 ;
STRING ;
+1 DO ADD("<Param type=""string"" position="""_VBECPI_""" >"_$GET(VBECPRMS("PARAMS",VBECPI,"VALUE"))_"</Param>")
+2 QUIT
+3 ;
ARRAY ;
+1 NEW VBECNAME
+2 DO ADD("<Param type=""array"" position="""_VBECPI_""" >")
+3 DO ADD("<Indices>")
+4 SET VBECNAME=""
FOR
SET VBECNAME=$ORDER(VBECPRMS("PARAMS",VBECPI,"VALUE",VBECNAME))
if VBECNAME=""
QUIT
Begin DoDot:1
+5 DO ADD("<Index name="""_VBECNAME_""" value="""_$GET(VBECPRMS("PARAMS",VBECPI,"VALUE",VBECNAME))_""" />")
End DoDot:1
+6 DO ADD("</Indices>")
+7 DO ADD("</Param>")
+8 QUIT
+9 ;
REF ;
+1 DO ADD("<Param type=""ref"" position="""_VBECPI_""" >"_$GET(VBECPRMS("PARAMS",VBECPI,"VALUE"))_"</Param>")
+2 QUIT
+3 ;
ADD(STR) ; -- add string to array
+1 SET VBECLINE=VBECLINE+1
+2 SET @VBECREQ@(VBECLINE)=STR
+3 QUIT
+4 ;
INITV(RPC) ; Initialize VBECS VistALink Client parameters
+1 ; Input: RPC = Parameter Toolkit Instance of RPC Name
+2 ; Output: VBECPRMS or -1^"error specific text" if error occurs setting any VBECPRMS parameter
+3 ;
+4 NEW ENT,PAR
+5 KILL VBECPRMS
+6 SET VBECPRMS("ERROR")=0
+7 IF RPC']""
DO ERR("NO RPC NAME SUPPLIED")
QUIT
+8 ; Parameter Toolkit variables
+9 ;Entity
SET ENT="PKG.VBECS"
+10 ;Parameter
SET PAR="VBECS VISTALINK"
+11 SET VBECPRMS("ADDRESS")=$$GET^XPAR(ENT,PAR,"LISTENER IP ADDRESS","Q")
+12 IF VBECPRMS("ADDRESS")=""
DO ERR("NO LISTENER IP ADDRESS FOUND")
QUIT
+13 SET VBECPRMS("PORT")=$$GET^XPAR(ENT,PAR,"LISTENER PORT NUMBER","Q")
+14 IF VBECPRMS("PORT")=""
DO ERR("NO LISTENER PORT NUMBER FOUND")
QUIT
+15 SET VBECPRMS("RPC NAME")=RPC
+16 SET VBECPRMS("RPC CONTEXT")=$$GET^XPAR(ENT,PAR,RPC,"Q")
+17 IF VBECPRMS("RPC CONTEXT")=""
DO ERR("UNABLE TO RETRIEVE RPC CONTEXT FOR "_RPC)
QUIT
+18 QUIT
+19 ;
CHGADPRT(IP,PORT) ; Change the IP Address and Port of the VBECS VistALink Listner
+1 NEW ERR,ENT,PAR
+2 ; Entity
SET ENT="PKG.VBECS"
+3 ; Parameter
SET PAR="VBECS VISTALINK"
+4 IF IP]""
Begin DoDot:1
+5 DO EN^XPAR(ENT,PAR,"LISTENER IP ADDRESS",IP,.ERR)
+6 IF ERR
QUIT
End DoDot:1
+7 ;
+8 IF PORT]""
Begin DoDot:1
+9 DO EN^XPAR(ENT,PAR,"LISTENER PORT NUMBER",PORT,.ERR)
+10 IF ERR
QUIT
End DoDot:1
+11 QUIT ERR
+12 ;
CONTEXT(INSTANCE,CONTEXT) ; Adds, or changes, an RPC Instance and
+1 ; it's associated context
+2 ; Set CONTEXT to "@" to delete the instance of the RPC.
+3 ;
+4 NEW ERR,ENT,PAR
+5 ; Entity
SET ENT="PKG.VBECS"
+6 ; Parameter
SET PAR="VBECS VISTALINK"
+7 DO EN^XPAR(ENT,PAR,INSTANCE,CONTEXT,.ERR)
+8 QUIT ERR
+9 ;
ERR(ERRTXT) ; Set VBECPRMS("ERROR") node with error text and quit
+1 SET VBECPRMS("ERROR")="1^"_ERRTXT
+2 QUIT
+3 ;
+4 ; -------------------------------------------------------------------
+5 ; Request Format Documentation
+6 ; -------------------------------------------------------------------
+7 ;
+8 ; [ Parameter Array Format -->> passed to REQUEST^VBECRPCC(.VBECPRMS) ]
+9 ;
+10 ; -- general information
+11 ; VBECPRMS("ADDRESS")="127.0.0.1"
+12 ; VBECPRMS("PORT")=19811
+13 ; VBECPRMS("RPC NAME")="VBECS Order Entry"
+14 ; VBECPRMS("RPC CONTEXT")="VBECS VISTALINK CONTEXT"
+15 ;
+16 ; -- string parameter type
+17 ; VBECPRMS("PARAMS",1,"TYPE")="STRING"
+18 ; VBECPRMS("PARAMS",1,"VALUE")=2
+19 ; VBECPRMS("PARAMS",2,"TYPE")="STRING"
+20 ; VBECPRMS("PARAMS",2,"VALUE")=2961001
+21 ; VBECPRMS("PARAMS",3,"TYPE")="STRING"
+22 ; VBECPRMS("PARAMS",3,"VALUE")=3030101
+23 ;
+24 ; -- sample array parameter type
+25 ; VBECPRMS("PARAMS",4,"TYPE")="ARRAY"
+26 ; VBECPRMS("PARAMS",4,"VALUE","FNAME")="JOE"
+27 ; VBECPRMS("PARAMS",4,"VALUE","LNAME")="GOODMAN"
+28 ;
+29 ; -------------------------------------------------------------------
+30 ;
+31 ; [ Sample XML produced by calling REQUEST^VBECRPCC(.VBECPRMS) ]
+32 ;
+33 ; <?xml version="1.0" encoding="utf-8" ?>
+34 ; <VistaLink type="gov.va.med.foundations.rpc.request" mode="singleton"
+35 ; version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+36 ; xsi:noNamespaceSchemaLocation="rpcRequest.xsd"
+37 ; xmlns="http://domain.ext/Foundations">
+38 ; <RpcHandler version="1.0" />
+39 ; <Request rpcName="VBECS Order Entry" version="1.0"
+40 ; rpcClientTimeOut="900">
+41 ; <RpcContext>
+42 ; <![CDATA[ VBECS VISTALINK ]]>
+43 ; </RpcContext>
+44 ; <Params>
+45 ; <Param type="string" position="1" >2</Param>
+46 ; <Param type="string" position="2" >2961001</Param>
+47 ; <Param type="string" position="3" >3030101</Param>
+48 ; <Param type="array" position="4" >
+49 ; <Indices>
+50 ; <Index name="status" value="veteran" />
+51 ; <Index name="gender" value="male" />
+52 ; </Indices>
+53 ; </Param>
+54 ; </Params>
+55 ; </Request>
+56 ; </VistaLink>
+57 ;
+58 ; -------------------------------------------------------------------
+59 ;