| 1 | XWBUTL ;OIFO-Oakland/REM - M2M Programmer Utilities ;05/17/2002  17:46
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28,34**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;p34 -correct typo changing ">" to "<" in QUIT:STR'[">" - CHARCHK.
 | 
|---|
| 7 |  ;    -add "[]" as escape characters - CHARCHK.
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | XMLHDR() ; -- provides current XML standard header 
 | 
|---|
| 11 |  QUIT "<?xml version=""1.0"" encoding=""utf-8"" ?>"
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | ERROR(XWBDAT) ; -- send error type message
 | 
|---|
| 14 |  NEW XWBI,XWBY
 | 
|---|
| 15 |  SET XWBY="XWBY"
 | 
|---|
| 16 |  ; -- build xml
 | 
|---|
| 17 |  DO BUILD(.XWBY,.XWBDAT)
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; -- write xml
 | 
|---|
| 20 |  DO PRE^XWBRL
 | 
|---|
| 21 |  SET XWBI=0 FOR  SET XWBI=$O(XWBY(XWBI)) Q:'XWBI  DO WRITE^XWBRL(XWBY(XWBI))
 | 
|---|
| 22 |  ; -- send eot and flush buffer
 | 
|---|
| 23 |  DO POST^XWBRL
 | 
|---|
| 24 |  QUIT
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | BUILD(XWBY,XWBDAT) ;  -- build xml in passed store reference (XWBY)
 | 
|---|
| 27 |  ; -- input format
 | 
|---|
| 28 |  ; XWBDAT("MESSAGE TYPE") = type of message (ex. Gov.VA.Med.RPC.Error) 
 | 
|---|
| 29 |  ; XWBDAT("ERRORS",<integer>,"CODE") = error code
 | 
|---|
| 30 |  ; XWBDAT("ERRORS",<integer>,"ERROR TYPE") = type of error (system/application/security)
 | 
|---|
| 31 |  ; XWBDAT("ERRORS",<integer>,"MESSAGE",<integer>) = error message
 | 
|---|
| 32 |  ; 
 | 
|---|
| 33 |  NEW XWBCODE,XWBI,XWBERR,XWBLINE,XWBETYPE
 | 
|---|
| 34 |  SET XWBLINE=0
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  DO ADD($$XMLHDR())
 | 
|---|
| 37 |  DO ADD("<vistalink type="""_$G(XWBDAT("MESSAGE TYPE"))_""" >")
 | 
|---|
| 38 |  DO ADD("<errors>")
 | 
|---|
| 39 |  SET XWBERR=0
 | 
|---|
| 40 |  FOR  SET XWBERR=$O(XWBDAT("ERRORS",XWBERR)) Q:'XWBERR  DO
 | 
|---|
| 41 |  . SET XWBCODE=$G(XWBDAT("ERRORS",XWBERR,"CODE"),0)
 | 
|---|
| 42 |  . SET XWBETYPE=$G(XWBDAT("ERRORS",XWBERR,"ERROR TYPE"),0)
 | 
|---|
| 43 |  . DO ADD("<error type="""_XWBETYPE_""" code="""_XWBCODE_""" >")
 | 
|---|
| 44 |  . DO ADD("<msg>")
 | 
|---|
| 45 |  . IF $G(XWBDAT("ERRORS",XWBERR,"CDATA")) DO ADD("<![CDATA[")
 | 
|---|
| 46 |  . SET XWBI=0
 | 
|---|
| 47 |  . FOR  SET XWBI=$O(XWBDAT("ERRORS",XWBERR,"MESSAGE",XWBI)) Q:'XWBI  DO
 | 
|---|
| 48 |  . . DO ADD(XWBDAT("ERRORS",XWBERR,"MESSAGE",XWBI))
 | 
|---|
| 49 |  . IF $G(XWBDAT("ERRORS",XWBERR,"CDATA")) DO ADD("]]>")
 | 
|---|
| 50 |  . DO ADD("</msg>")
 | 
|---|
| 51 |  . DO ADD("</error>")
 | 
|---|
| 52 |  DO ADD("</errors>")
 | 
|---|
| 53 |  DO ADD("</vistalink>")
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  QUIT
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | ADD(TXT) ; -- add line
 | 
|---|
| 58 |  SET XWBLINE=XWBLINE+1
 | 
|---|
| 59 |  SET @XWBY@(XWBLINE)=TXT
 | 
|---|
| 60 |  QUIT
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | CHARCHK(STR) ; -- replace xml character limits with entities
 | 
|---|
| 63 |  NEW A,I,X,Y,Z,NEWSTR
 | 
|---|
| 64 |  SET (Y,Z)=""
 | 
|---|
| 65 |  IF STR["&" SET NEWSTR=STR DO  SET STR=Y_Z
 | 
|---|
| 66 |  . FOR X=1:1  SET Y=Y_$PIECE(NEWSTR,"&",X)_"&",Z=$PIECE(STR,"&",X+1,999) QUIT:Z'["&"
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;*p34-typo, change ">" to "<" in Q:STR'[... 
 | 
|---|
| 69 |  IF STR["<" FOR  SET STR=$PIECE(STR,"<",1)_"<"_$PIECE(STR,"<",2,99) Q:STR'["<"
 | 
|---|
| 70 |  IF STR[">" FOR  SET STR=$PIECE(STR,">",1)_">"_$PIECE(STR,">",2,99) Q:STR'[">"
 | 
|---|
| 71 |  IF STR["'" FOR  SET STR=$PIECE(STR,"'",1)_"'"_$PIECE(STR,"'",2,99) Q:STR'["'"
 | 
|---|
| 72 |  IF STR["""" FOR  SET STR=$PIECE(STR,"""",1)_"""_$PIECE(STR,"""",2,99) QUIT:STR'[""""
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ;*p34-add "[]" as escape characters.
 | 
|---|
| 75 |  IF STR["[" FOR  SET STR=$PIECE(STR,"[",1)_"["_$PIECE(STR,"[",2,99) Q:STR'["["
 | 
|---|
| 76 |  IF STR["]" FOR  SET STR=$PIECE(STR,"]",1)_"]"_$PIECE(STR,"]",2,99) Q:STR'["]"
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  ;Remove ctrl char's
 | 
|---|
| 79 |  S STR=$TR(STR,$C(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31))
 | 
|---|
| 80 |  ;FOR I=1:1:$LENGTH(STR) DO
 | 
|---|
| 81 |  ;. SET X=$EXTRACT(STR,I)
 | 
|---|
| 82 |  ;. SET A=$ASCII(X)
 | 
|---|
| 83 |  ;. IF A<31 S STR=$P(STR,X,1)_$P(STR,X,2,99)
 | 
|---|
| 84 |  QUIT STR
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ;D=0 STR 2 NUM, D=1 NUM 2 STR
 | 
|---|
| 87 | NUM(STR,D) ;Convert a string to numbers
 | 
|---|
| 88 |  N I,Y
 | 
|---|
| 89 |  S Y="",D=$G(D,0)
 | 
|---|
| 90 |  I D=0 F I=1:1:$L(STR) S Y=Y_$E(1000+$A(STR,I),2,4)
 | 
|---|
| 91 |  I D=1 F I=1:3:$L(STR) S Y=Y_$C($E(STR,I,I+2))
 | 
|---|
| 92 |  Q Y
 | 
|---|