| 1 | XWBRPCC ;OIFO-Oakland/REM - M2M Broker Client Utilities  ;06/05/2002  17:25
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28,34**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;p34 - added line to set "MODE" like in PRE^XWBM2MC. No longer will it
 | 
|---|
| 7 |  ;      be set in PRE^XWBM2MC - REQUEST.
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ; -------------------------------------------------------------------
 | 
|---|
| 10 |  ;                  RPC Client:  Methods Calls
 | 
|---|
| 11 |  ; -------------------------------------------------------------------
 | 
|---|
| 12 |  ; 
 | 
|---|
| 13 |  ; [Public/Supported Method]
 | 
|---|
| 14 | EXECUTE(XWBPARMS) ; -- execute rpc call
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ; -- validate parameters passed
 | 
|---|
| 17 |  IF '$$VALIDATE(.XWBPARMS) QUIT 0
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; -- call method to build request from parameters array
 | 
|---|
| 20 |  DO REQUEST(.XWBPARMS)
 | 
|---|
| 21 |  IF $G(XWBPARMS("RESULTS"))="" SET XWBPARMS("RESULTS")=$NA(^TMP("XWBRPC",$J,"XML"))
 | 
|---|
| 22 |  QUIT $$EXECUTE^XWBVLC(.XWBPARMS)
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | VALIDATE(XWBPARMS) ; -- validate parameters sent in
 | 
|---|
| 25 |  ; // TODO: Do checks and build validate error message
 | 
|---|
| 26 |  QUIT 1
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | REQUEST(XWBPARMS) ; -- build XML request
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  NEW XWBLINE,XWBPI,PTYPE
 | 
|---|
| 31 |  SET XWBLINE=0
 | 
|---|
| 32 |  SET XWBPARMS("MESSAGE TYPE")="Gov.VA.Med.RPC.Request"
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  S XWBPARMS("MODE")="RPCBroker" ;*p34-added line to set "MODE" instead of in PRE^XWBM2MC.
 | 
|---|
| 35 |  ;SET XWBPARMS("MODE")="single call" ;Comment out for **M2M
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  IF $G(XWBPARMS("REQUEST"))="" SET XWBPARMS("REQUEST")=$NA(XWBPARMS("REQUEST","XML"))
 | 
|---|
| 38 |  SET XWBREQ=XWBPARMS("REQUEST")
 | 
|---|
| 39 |  KILL @XWBREQ
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  DO ADD($$XMLHDR^XWBUTL())
 | 
|---|
| 42 |  ;p34-added 'broker m2m' in XML message
 | 
|---|
| 43 |  DO ADD("<vistalink type="""_$G(XWBPARMS("MESSAGE TYPE"))_""" mode="""_$G(XWBPARMS("MODE"))_""" >")
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  I $G(XWBPARMS("MODE"))'="RPCBroker" D
 | 
|---|
| 46 |  . DO ADD("<session>")
 | 
|---|
| 47 |  . ;
 | 
|---|
| 48 |  . ;**M2M - don't send DUZ 
 | 
|---|
| 49 |  . DO ADD("<duz value="""_$G(XWBPARMS("DUZ"))_""" />")
 | 
|---|
| 50 |  . DO ADD("<security>")
 | 
|---|
| 51 |  . ;
 | 
|---|
| 52 |  . DO ADD("<token value="""_$G(XWBPARMS("TOKEN"))_""" />")
 | 
|---|
| 53 |  . DO ADD("</security>")
 | 
|---|
| 54 |  . DO ADD("</session>")
 | 
|---|
| 55 |  . Q
 | 
|---|
| 56 |  DO ADD("<rpc uri="""_$G(XWBPARMS("URI"))_""" method="""_$G(XWBPARMS("METHOD"))_""" >")
 | 
|---|
| 57 |  IF $D(XWBPARMS("PARAMS"))>9 DO
 | 
|---|
| 58 |  . DO ADD("<params>")
 | 
|---|
| 59 |  . SET XWBPI=0
 | 
|---|
| 60 |  . FOR  SET XWBPI=$O(XWBPARMS("PARAMS",XWBPI)) Q:'XWBPI!(XWBCRLFL)  DO
 | 
|---|
| 61 |  . . SET PTYPE=$G(XWBPARMS("PARAMS",XWBPI,"TYPE"))
 | 
|---|
| 62 |  . . IF PTYPE="STRING" DO STRING QUIT
 | 
|---|
| 63 |  . . IF PTYPE="ARRAY" DO ARRAY QUIT
 | 
|---|
| 64 |  . . IF PTYPE="REF" DO REF QUIT
 | 
|---|
| 65 |  . DO ADD("</params>")
 | 
|---|
| 66 |  DO ADD("</rpc>")
 | 
|---|
| 67 |  DO ADD("</vistalink>")
 | 
|---|
| 68 |  QUIT
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | STRING ;
 | 
|---|
| 71 |  ;;DO ADD("<param type=""string"" position="""_XWBPI_""" >"_$G(XWBPARMS("PARAMS",XWBPI,"VALUE"))_"</param>")
 | 
|---|
| 72 |  I $$CTLCHK($G(XWBPARMS("PARAMS",XWBPI,"VALUE"))) S XWBCRLFL=1 D ERROR^XWBM2MC(8) Q
 | 
|---|
| 73 |  DO ADD("<param type=""string"" position="""_XWBPI_""" >"_$$CHARCHK^XWBUTL($G(XWBPARMS("PARAMS",XWBPI,"VALUE")))_"</param>")
 | 
|---|
| 74 |  QUIT
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | ARRAY ;
 | 
|---|
| 77 |  NEW XWBNAME
 | 
|---|
| 78 |  DO ADD("<param type=""array"" position="""_XWBPI_""" >")
 | 
|---|
| 79 |  DO ADD("<indices>")
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  SET XWBNAME="" FOR  SET XWBNAME=$O(XWBPARMS("PARAMS",XWBPI,"VALUE",XWBNAME)) Q:XWBNAME=""  DO
 | 
|---|
| 82 |  . ;;DO ADD("<index name="""_XWBNAME_""" value="""_$G(XWBPARMS("PARAMS",XWBPI,"VALUE",XWBNAME))_""" />")
 | 
|---|
| 83 |  . I $$CTLCHK($G(XWBPARMS("PARAMS",XWBPI,"VALUE",XWBNAME))) S XWBCRLFL=1 D ERROR^XWBM2MC(8) Q
 | 
|---|
| 84 |  . DO ADD("<index name="""_XWBNAME_""" >"_$$CHARCHK^XWBUTL($G(XWBPARMS("PARAMS",XWBPI,"VALUE",XWBNAME)))_"</index>")
 | 
|---|
| 85 |  DO ADD("</indices>")
 | 
|---|
| 86 |  DO ADD("</param>")
 | 
|---|
| 87 |  QUIT
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | REF ;
 | 
|---|
| 90 |  I $$CTLCHK($G(XWBPARMS("PARAMS",XWBPI,"VALUE"))) S XWBCRLFL=1 D ERROR^XWBM2MC(8) Q
 | 
|---|
| 91 |  DO ADD("<param type=""ref"" position="""_XWBPI_""" >"_$$CHARCHK^XWBUTL($G(XWBPARMS("PARAMS",XWBPI,"VALUE")))_"</param>")
 | 
|---|
| 92 |  QUIT
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | ADD(STR) ; -- add string to array
 | 
|---|
| 95 |  SET XWBLINE=XWBLINE+1
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  I $G(XWBDBUG) S ^REM("M2MCL","REQUEST",XWBLINE)=STR
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  SET @XWBREQ@(XWBLINE)=STR
 | 
|---|
| 100 |  QUIT
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | CTLCHK(STR) ;Check for control character in string.  
 | 
|---|
| 103 |  ;        Exception are $C(10)-LF, $C(13)-CR
 | 
|---|
| 104 |  N I,Q,X
 | 
|---|
| 105 |  S X=0
 | 
|---|
| 106 |  I '(STR?.E1C.E) Q X
 | 
|---|
| 107 |  S I="" F I=1:1:$L(STR) D
 | 
|---|
| 108 |  .S Q="" F Q=1:1:31 D  Q:X
 | 
|---|
| 109 |  ..;I Q=10!(Q=13) Q
 | 
|---|
| 110 |  ..;W !,"I= ",I," Q= ",Q
 | 
|---|
| 111 |  ..I $E(STR,I)[$C(Q) S X=1 Q
 | 
|---|
| 112 |  Q X
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  ; -------------------------------------------------------------------
 | 
|---|
| 115 |  ;                   Request Format Documentation
 | 
|---|
| 116 |  ; -------------------------------------------------------------------
 | 
|---|
| 117 |  ; 
 | 
|---|
| 118 |  ; [ Parameter Array Format -->> passed to REQUEST^XWBRPCC(.XWBPARMS) ] 
 | 
|---|
| 119 |  ; 
 | 
|---|
| 120 |  ; -- general information
 | 
|---|
| 121 |  ; XWBPARMS("ADDRESS")="127.0.0.1"
 | 
|---|
| 122 |  ; XWBPARMS("ADDRESS")="152.127.1.35"
 | 
|---|
| 123 |  ; XWBPARMS("PORT")=9800
 | 
|---|
| 124 |  ; XWBPARMS("DUZ")=990
 | 
|---|
| 125 |  ; XWBPARMS("TOKEN")="SOMETHING"
 | 
|---|
| 126 |  ; XWBPARMS("RPC NAME")="SDOE LIST ENCOUNTERS FOR PAT"
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  ; -- string parameter type
 | 
|---|
| 129 |  ; XWBPARMS("PARAMS",1,"TYPE")="STRING"
 | 
|---|
| 130 |  ; XWBPARMS("PARAMS",1,"VALUE")=2
 | 
|---|
| 131 |  ; XWBPARMS("PARAMS",2,"TYPE")="STRING"
 | 
|---|
| 132 |  ; XWBPARMS("PARAMS",2,"VALUE")=2961001
 | 
|---|
| 133 |  ; XWBPARMS("PARAMS",3,"TYPE")="STRING"
 | 
|---|
| 134 |  ; XWBPARMS("PARAMS",3,"VALUE")=3030101
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  ; -- sample array parameter type
 | 
|---|
| 137 |  ; XWBPARMS("PARAMS",4,"TYPE")="ARRAY"
 | 
|---|
| 138 |  ; XWBPARMS("PARAMS",4,"VALUE","FNAME")="JOE"
 | 
|---|
| 139 |  ; XWBPARMS("PARAMS",4,"VALUE","LNAME")="GOODMAN"
 | 
|---|
| 140 |  ;                   
 | 
|---|
| 141 |  ; -------------------------------------------------------------------
 | 
|---|
| 142 |  ;                   
 | 
|---|
| 143 |  ; [ Sample XML produced by calling REQUEST^XWBRPCC(.XWBPARMS) ]
 | 
|---|
| 144 |  ; 
 | 
|---|
| 145 |  ; <?xml version="1.0" encoding="utf-8" ?>
 | 
|---|
| 146 |  ; <vistalink type="Gov.VA.Med.RPC.Request" mode="single call" >
 | 
|---|
| 147 |  ;   <rpc uri="XWB TEST CALL" >
 | 
|---|
| 148 |  ;      <session>
 | 
|---|
| 149 |  ;         <duz value="990" />
 | 
|---|
| 150 |  ;         <security>
 | 
|---|
| 151 |  ;            <token value="something" />
 | 
|---|
| 152 |  ;         </security>
 | 
|---|
| 153 |  ;      </session>
 | 
|---|
| 154 |  ;      <params>
 | 
|---|
| 155 |  ;         <param type="string" position="1" >2</param>
 | 
|---|
| 156 |  ;         <param type="string" position="2" >2961001</param>
 | 
|---|
| 157 |  ;         <param type="string" position="3" >3030101</param>
 | 
|---|
| 158 |  ;         <param type="array" position="4" >
 | 
|---|
| 159 |  ;            <indices>
 | 
|---|
| 160 |  ;               <index name="status" value="veteran" />
 | 
|---|
| 161 |  ;               <index name="gender" value="male" />
 | 
|---|
| 162 |  ;            </indices>
 | 
|---|
| 163 |  ;         </param>
 | 
|---|
| 164 |  ;      </params>
 | 
|---|
| 165 |  ;   </rpc>
 | 
|---|
| 166 |  ; </vistalink>
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  ; -------------------------------------------------------------------
 | 
|---|
| 169 |  ;
 | 
|---|