ONCWEBP2 ;HINES OIFO/RTK - PARSER DISPLAY FOR CLOUD SERVER ; 2/5/24 1:07pm
;;2.2;ONCOLOGY;**19**;Jul 31, 2013;Build 4
;
Q
;
;--- CS SCHEMA RESPONSE FROM THE CLOUD WEB SERVICE
;
; <CsGetSchemaResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema...
; <IsRequestValid>false</IsRequestValid>
; <Schema>106</Schema>
; <SchemaName>Breast</SchemaName>
; <Discriminator />
; </CsGetSchemaResponse>
;
;
PARSESCR ;parse CS Schema response message from cloud server
;
;Supported IA #3561 reference to ^MXMLDOM
;
;ONCRHDL = response handle from the MXML parser
;ONCTAG1 = 1st level tags
;ONCPARR = array of server response values; ^TMP("ONCPARSE" = errors
;ERRFLG SET = 0 if NO CS errors, if there are CS errors set = 1
N ONCRHDL,ONCTAG1
S ONCCSSCH="E",ONCCSSNM=""
S ERRFLG=0 S ONCRHDL=$$EN^MXMLDOM($NA(^TMP("ONCSCRSP",$J)),"W")
I $D(^TMP("MXMLERR",$J)) D Q
.N HDL S HDL=^TMP("MXMLERR",$J)
.W !!?3,"XML message",!
.N X S X=^TMP("MXMLERR",$J,HDL,"MSG") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.W !?3,"XML error",!
.N X S X=^TMP("MXMLERR",$J,HDL,"XML") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.S ERRFLG=2
;--- Traverse top level child(ren) nodes
K ONCPARR,^TMP("ONCPARSE",$J)
N CT S CT=1 F S CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT) Q:CT=0 D
.N ONCTAG1 S ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
.N OUT S OUT=""
.N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT,"TXT") OUT=TXT(1)
.S ONCPARR(ONCTAG1)=OUT
.I ONCTAG1="Schema" S ONCCSSCH=OUT
.I ONCTAG1="SchemaName" S ONCCSSNM=OUT
.Q
D DELETE^MXMLDOM(ONCRHDL)
K ONCRHDL
Q
;
;--- CS TABLE RESPONSE FROM THE CLOUD WEB SERVICE
;
; <CsGetSchemaResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema...
; <IsRequestValid></IsRequestValid>
; <CrResponse></CrResponse>
; <SCHEMA></SCHEMA>
; <TABLE>
; <ROWS>
; <ROW>
; <CODE>
; <DESCR>
; <ACS>
; . . .
; <NUMBER></NUMBER>
; <PATTERN></PATTERN>
; <SUBTITLE></SUBTITLE>
; <TITLE></TITLE>
; <NOTES>
; <TNS>
; <TN>
; . . .
; </TNS>
; <FNS/>
; </NOTES>
; </TABLE>
; </CrResponse>
;</TableRecordCompleteResponse>
;
;
PARSETBR ;parse CS Table response message from cloud server
;
;Supported IA #3561 reference to ^MXMLDOM
;
;ONCRHDL = response handle from the MXML parser
;ONCTAG1 = 1st level tags; ONCTAG2 = 2nd level tags; ONCTAG3 = 3rd level tags
;ONCPARR = array of server response values; ^TMP("ONCPARSE" = errors
;ERRFLG SET = 0 if NO EDITs errors, if there are EDITs errors set = 1
N ONCRHDL,ONCTAG1,ONCTAG2,ONCTAG3,ONCTAG4,ONCTAG5
S ERRFLG=0 S ONCRHDL=$$EN^MXMLDOM($NA(^TMP("ONCTBRSP",$J)),"W")
I $D(^TMP("MXMLERR",$J)) D Q
.N HDL S HDL=^TMP("MXMLERR",$J)
.W !!?3,"XML message",!
.N X S X=^TMP("MXMLERR",$J,HDL,"MSG") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.W !?3,"XML error",!
.N X S X=^TMP("MXMLERR",$J,HDL,"XML") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.S ERRFLG=2
;--- Traverse top level child(ren) nodes
K ONCPARR,ONCVLARR,^TMP("ONCPARSE",$J)
N CT,NUM,NOTE S NUM=0,NOTE=1
S CT=1 F S CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT) Q:CT=0 D
.N ONCTAG1 S ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
.;--- Traverse second level child(ren) nodes
.N CT2 S CT2=1 F S CT2=$$CHILD^MXMLDOM(ONCRHDL,CT,CT2) Q:CT2=0 D
..N ONCTAG2 S ONCTAG2=$$NAME^MXMLDOM(ONCRHDL,CT2)
..N OUT S OUT=""
..N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT2,"TXT") OUT=TXT(1)
..;S ONCPARR(ONCTAG2)=OUT
..;--- Traverse third level child(ren) nodes
..N CT3 S CT3=1 F S CT3=$$CHILD^MXMLDOM(ONCRHDL,CT2,CT3) Q:CT3=0 D
...N ONCTAG3 S ONCTAG3=$$NAME^MXMLDOM(ONCRHDL,CT3)
...N OUT S OUT=""
...N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT3,"TXT") OUT=TXT(1)
...S ONCPARR(ONCTAG3)=OUT
...;--- Traverse fourth level child(ren) nodes
...N CT4 S CT4=1 F S CT4=$$CHILD^MXMLDOM(ONCRHDL,CT3,CT4) Q:CT4=0 D
....N ONCTAG4 S ONCTAG4=$$NAME^MXMLDOM(ONCRHDL,CT4)
....N OUT S OUT=""
....N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT4,"TXT") OUT=TXT(1)
....I ONCTAG4="ROW" S NUM=NUM+1
....;--- Traverse fifth level child(ren) nodes
....N CT5 S CT5=1 F S CT5=$$CHILD^MXMLDOM(ONCRHDL,CT4,CT5) Q:CT5=0 D
.....N ONCTAG5 S ONCTAG5=$$NAME^MXMLDOM(ONCRHDL,CT5)
.....N OUT S OUT=""
.....N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT5,"TXT") OUT=TXT(1)
.....I ONCTAG5="CODE" S ^TMP("ONCPARSE",$J,NUM,"CODE")=OUT D
......I OUT?3N1"-"3N D RANGE Q
......I OUT="000" S ONCVLARR(0)=""
......S ONCVLARR(OUT)=""
.....I ONCTAG5="DESCR" S ^TMP("ONCPARSE",$J,NUM,"DESCR")=OUT ;txt runs 1 line?
.....I ONCTAG5="TN" S ^TMP("ONCPARSE",$J,"NOTE",NOTE)=OUT,NOTE=NOTE+1
...Q
..Q
.Q
D DELETE^MXMLDOM(ONCRHDL)
K ONCRHDL
Q
;
;--- CS COMPUTE COLLABORATIVE STAGE RESPONSE FROM THE CLOUD WEB SERVICE
;
; CS ERRORS
; <CsCalculateResponse xmlns:xsi="http://www.w3.org/2001/...XMLSchema">
; <NumberOfError>0</NumberOfError>
; <IsRequestValid>false</IsRequestValid>
; <Message>Lookup of codes (988, 988, 988) in Serum Tumor Marker S Value Table
; Based on CS SSF 1, 2, 3 returns "ERROR".
; </Message>
; </CsCalculateResponse>
;
; CS SUCCESS
; <CsCalculateResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema-inst...
; <NumberOfError>0</NumberOfError>
; <IsRequestValid>true</IsRequestValid>
; <CS-STOR>
; <T>30</T>
; <TDESCR>p</TDESCR>
; <N>00</N>
; <NDESCR>c</NDESCR>
; <M>00</M>
; <MDESCR>c</MDESCR>
; <AJCC>30</AJCC>
; <AJCC7-T></AJCC7-T>
; <AJCC7-TDESCR></AJCC7-TDESCR>
; <AJCC7-N></AJCC7-N>
; <AJCC7-NDESCR></AJCC7-NDESCR>
; <AJCC7-M></AJCC7-M>
; <AJCC7-MDESCR></AJCC7-MDESCR>
; <AJCC7-STAGE></AJCC7-STAGE>
; <SS1977>2</SS1977>
; <SS2000>2</SS2000>
; </CS-STOR>
; <CS-DISP>
; <T>T3</T>
; <TDESCR>p</TDESCR>
; <N>N0</N>
; <NDESCR>c</NDESCR>
; <M>M0</M>
; <MDESCR>c</MDESCR>
; <AJCC>II</AJCC>
; <AJCC7-T></AJCC7-T>
; <AJCC7-TDESCR></AJCC7-TDESCR>
; <AJCC7-N></AJCC7-N>
; <AJCC7-NDESCR></AJCC7-NDESCR>
; <AJCC7-M></AJCC7-M>
; <AJCC7-MDESCR></AJCC7-MDESCR>
; <AJCC7-STAGE></AJCC7-STAGE>
; <SS1977>RE</SS1977>
; <SS2000>RE</SS2000>
; </CS-DISP>
; <APIVER>020550</APIVER>
; <VERSION>2.00P</VERSION>
; </CS-RESPONSE>
;
PARSECS ;parse CS Schema response message from cloud server
;
;Supported IA #3561 reference to ^MXMLDOM
;
;ONCRHDL = response handle from the MXML parser
;ONCTAG1 = 1st level tags, ONCTAG2 = 2nd level tags
;ONCPARR = array of server response tags and values
;ONCSTORE = array for derived values to store in 165.5, returned if successful
;ONCDISPL = array for derived values to display, returned if successful
;ONCCSERR = array of error messages, returned if unsuccessful
;ONCAPIVR = CS version number, ONCVERSN = version
;ERRFLG SET = 0 if NO CS errors, success
; = 1 if there are CS errors set
; = 2 if there is XML request/response failure
N ONCRHDL,ONCTAG1
S ONCCSSCH="E",ONCCSSNM=""
S ERRFLG=0 S ONCRHDL=$$EN^MXMLDOM($NA(^TMP("ONCCSRSP",$J)),"W")
I $D(^TMP("MXMLERR",$J)) D Q
.S ERRFLG=2
.N HDL S HDL=^TMP("MXMLERR",$J)
.W !!?3,"XML message",!
.N X S X=^TMP("MXMLERR",$J,HDL,"MSG") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.W !?3,"XML error",!
.N X S X=^TMP("MXMLERR",$J,HDL,"XML") S DIWL=3,DIWR=77 D ^DIWP,^DIWW
.K ONCRHDL,^TMP("ONCCSRSP",$J)
;--- Traverse top level child(ren) nodes
K ONCPARR,ONCSTORE,ONCDISPL,ONCAPIVR,ONCVERSN,ONCCSERR
N CT S CT=1 F S CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT) Q:CT=0 D
.N ONCTAG1 S ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
.N OUT S OUT=""
.N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT,"TXT") OUT=TXT(1)
.;W !?2,"onctag1=",ONCTAG1,"---> out=",OUT
.S ONCPARR(ONCTAG1)=OUT
.;I ONCTAG1="IsRequestValid",OUT="false" S ERRFLG=1
.I ONCTAG1="Message" S ONCCSERR(ONCTAG1)=OUT S ERRFLG=1 Q
.I ONCTAG1="ErrorMessage" S ONCCSERR(ONCTAG1)=OUT S ERRFLG=1 Q
.;--- Traverse second level child(ren) nodes
.N CT2 S CT2=1 F S CT2=$$CHILD^MXMLDOM(ONCRHDL,CT,CT2) Q:CT2=0 D
..N ONCTAG2 S ONCTAG2=$$NAME^MXMLDOM(ONCRHDL,CT2)
..N OUT S OUT=""
..N TXT S:$$TEXT^MXMLDOM(ONCRHDL,CT2,"TXT") OUT=TXT(1)
..;W !,?8,"onctag2=",ONCTAG2,": ",OUT
..S ONCPARR(ONCTAG2)=OUT
..I ONCTAG1="CsStor" S ONCSTORE(ONCTAG2)=OUT
..I ONCTAG1="CsDisp" S ONCDISPL(ONCTAG2)=OUT
..Q
.I ONCTAG1="Apiver" S ONCAPIVR=OUT
.I ONCTAG1="Version" S ONCVERSN=OUT
D DELETE^MXMLDOM(ONCRHDL)
K ONCRHDL,^TMP("ONCCSRSP",$J)
Q
;
DISERR ;
I $D(ONCPARR("Message")) W !?3,ONCPARR("Message"),!!
I $D(ONCPARR("ErrorMessage")) W !?3,ONCPARR("ErrorMessage"),!!
; W N N F N=1:1 S N=$O(ONCCSERR(N)) W !,N
Q
;
RANGE ;
N LOW,HIGH,Z
S LOW=$P(OUT,"-",1),HIGH=$P(OUT,"-",2)
F Z=LOW:1:HIGH S ONCVLARR(Z)=""
Q
;
DISPLAY ; display CS table codes, descriptions and notes
;
K ^UTILITY($J,"W")
S PG=0,EX="",LINE=$S($E(IOST,1,2)="C-":IOSL-2,1:IOSL-6)
W @IOF
I $D(ONCPARR("TITLE")) W !?4,ONCPARR("TITLE")
I $D(ONCPARR("SUBTITLE")) W !?4,ONCPARR("SUBTITLE")
W !
N CODE,DESCR S CODE="",DESCR=""
F N=0:0 S N=$O(^TMP("ONCPARSE",$J,N)) Q:N'>0 D
.S CODE=^TMP("ONCPARSE",$J,N,"CODE"),DESCR=^TMP("ONCPARSE",$J,N,"DESCR")
.N X S X=CODE_" "_DESCR S DIWL=3,DIWR=77 D ^DIWP,^DIWW D P Q:EX=U
F N=0:0 S N=$O(^TMP("ONCPARSE",$J,"NOTE",N)) Q:N'>0 D
.W ! N X S X=^TMP("ONCPARSE",$J,"NOTE",N)
.S DIWL=3,DIWR=77 D ^DIWP,^DIWW D P Q:EX=U
Q
;
P ;
I ($Y'<(LINE-1)) D Q:EX=U W !
.I IOST?1"C".E W ! K DIR S DIR(0)="E",DIR("A")="Enter RETURN to continue"
.D ^DIR I 'Y S EX=U Q
.D HDR Q
Q
HDR ; Header
W @IOF S PG=PG+1
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HONCWEBP2 9632 printed Dec 13, 2024@02:29:16 Page 2
ONCWEBP2 ;HINES OIFO/RTK - PARSER DISPLAY FOR CLOUD SERVER ; 2/5/24 1:07pm
+1 ;;2.2;ONCOLOGY;**19**;Jul 31, 2013;Build 4
+2 ;
+3 QUIT
+4 ;
+5 ;--- CS SCHEMA RESPONSE FROM THE CLOUD WEB SERVICE
+6 ;
+7 ; <CsGetSchemaResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema...
+8 ; <IsRequestValid>false</IsRequestValid>
+9 ; <Schema>106</Schema>
+10 ; <SchemaName>Breast</SchemaName>
+11 ; <Discriminator />
+12 ; </CsGetSchemaResponse>
+13 ;
+14 ;
PARSESCR ;parse CS Schema response message from cloud server
+1 ;
+2 ;Supported IA #3561 reference to ^MXMLDOM
+3 ;
+4 ;ONCRHDL = response handle from the MXML parser
+5 ;ONCTAG1 = 1st level tags
+6 ;ONCPARR = array of server response values; ^TMP("ONCPARSE" = errors
+7 ;ERRFLG SET = 0 if NO CS errors, if there are CS errors set = 1
+8 NEW ONCRHDL,ONCTAG1
+9 SET ONCCSSCH="E"
SET ONCCSSNM=""
+10 SET ERRFLG=0
SET ONCRHDL=$$EN^MXMLDOM($NAME(^TMP("ONCSCRSP",$JOB)),"W")
+11 IF $DATA(^TMP("MXMLERR",$JOB))
Begin DoDot:1
+12 NEW HDL
SET HDL=^TMP("MXMLERR",$JOB)
+13 WRITE !!?3,"XML message",!
+14 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"MSG")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+15 WRITE !?3,"XML error",!
+16 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"XML")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+17 SET ERRFLG=2
End DoDot:1
QUIT
+18 ;--- Traverse top level child(ren) nodes
+19 KILL ONCPARR,^TMP("ONCPARSE",$JOB)
+20 NEW CT
SET CT=1
FOR
SET CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT)
if CT=0
QUIT
Begin DoDot:1
+21 NEW ONCTAG1
SET ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
+22 NEW OUT
SET OUT=""
+23 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT,"TXT")
SET OUT=TXT(1)
+24 SET ONCPARR(ONCTAG1)=OUT
+25 IF ONCTAG1="Schema"
SET ONCCSSCH=OUT
+26 IF ONCTAG1="SchemaName"
SET ONCCSSNM=OUT
+27 QUIT
End DoDot:1
+28 DO DELETE^MXMLDOM(ONCRHDL)
+29 KILL ONCRHDL
+30 QUIT
+31 ;
+32 ;--- CS TABLE RESPONSE FROM THE CLOUD WEB SERVICE
+33 ;
+34 ; <CsGetSchemaResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema...
+35 ; <IsRequestValid></IsRequestValid>
+36 ; <CrResponse></CrResponse>
+37 ; <SCHEMA></SCHEMA>
+38 ; <TABLE>
+39 ; <ROWS>
+40 ; <ROW>
+41 ; <CODE>
+42 ; <DESCR>
+43 ; <ACS>
+44 ; . . .
+45 ; <NUMBER></NUMBER>
+46 ; <PATTERN></PATTERN>
+47 ; <SUBTITLE></SUBTITLE>
+48 ; <TITLE></TITLE>
+49 ; <NOTES>
+50 ; <TNS>
+51 ; <TN>
+52 ; . . .
+53 ; </TNS>
+54 ; <FNS/>
+55 ; </NOTES>
+56 ; </TABLE>
+57 ; </CrResponse>
+58 ;</TableRecordCompleteResponse>
+59 ;
+60 ;
PARSETBR ;parse CS Table response message from cloud server
+1 ;
+2 ;Supported IA #3561 reference to ^MXMLDOM
+3 ;
+4 ;ONCRHDL = response handle from the MXML parser
+5 ;ONCTAG1 = 1st level tags; ONCTAG2 = 2nd level tags; ONCTAG3 = 3rd level tags
+6 ;ONCPARR = array of server response values; ^TMP("ONCPARSE" = errors
+7 ;ERRFLG SET = 0 if NO EDITs errors, if there are EDITs errors set = 1
+8 NEW ONCRHDL,ONCTAG1,ONCTAG2,ONCTAG3,ONCTAG4,ONCTAG5
+9 SET ERRFLG=0
SET ONCRHDL=$$EN^MXMLDOM($NAME(^TMP("ONCTBRSP",$JOB)),"W")
+10 IF $DATA(^TMP("MXMLERR",$JOB))
Begin DoDot:1
+11 NEW HDL
SET HDL=^TMP("MXMLERR",$JOB)
+12 WRITE !!?3,"XML message",!
+13 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"MSG")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+14 WRITE !?3,"XML error",!
+15 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"XML")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+16 SET ERRFLG=2
End DoDot:1
QUIT
+17 ;--- Traverse top level child(ren) nodes
+18 KILL ONCPARR,ONCVLARR,^TMP("ONCPARSE",$JOB)
+19 NEW CT,NUM,NOTE
SET NUM=0
SET NOTE=1
+20 SET CT=1
FOR
SET CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT)
if CT=0
QUIT
Begin DoDot:1
+21 NEW ONCTAG1
SET ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
+22 ;--- Traverse second level child(ren) nodes
+23 NEW CT2
SET CT2=1
FOR
SET CT2=$$CHILD^MXMLDOM(ONCRHDL,CT,CT2)
if CT2=0
QUIT
Begin DoDot:2
+24 NEW ONCTAG2
SET ONCTAG2=$$NAME^MXMLDOM(ONCRHDL,CT2)
+25 NEW OUT
SET OUT=""
+26 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT2,"TXT")
SET OUT=TXT(1)
+27 ;S ONCPARR(ONCTAG2)=OUT
+28 ;--- Traverse third level child(ren) nodes
+29 NEW CT3
SET CT3=1
FOR
SET CT3=$$CHILD^MXMLDOM(ONCRHDL,CT2,CT3)
if CT3=0
QUIT
Begin DoDot:3
+30 NEW ONCTAG3
SET ONCTAG3=$$NAME^MXMLDOM(ONCRHDL,CT3)
+31 NEW OUT
SET OUT=""
+32 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT3,"TXT")
SET OUT=TXT(1)
+33 SET ONCPARR(ONCTAG3)=OUT
+34 ;--- Traverse fourth level child(ren) nodes
+35 NEW CT4
SET CT4=1
FOR
SET CT4=$$CHILD^MXMLDOM(ONCRHDL,CT3,CT4)
if CT4=0
QUIT
Begin DoDot:4
+36 NEW ONCTAG4
SET ONCTAG4=$$NAME^MXMLDOM(ONCRHDL,CT4)
+37 NEW OUT
SET OUT=""
+38 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT4,"TXT")
SET OUT=TXT(1)
+39 IF ONCTAG4="ROW"
SET NUM=NUM+1
+40 ;--- Traverse fifth level child(ren) nodes
+41 NEW CT5
SET CT5=1
FOR
SET CT5=$$CHILD^MXMLDOM(ONCRHDL,CT4,CT5)
if CT5=0
QUIT
Begin DoDot:5
+42 NEW ONCTAG5
SET ONCTAG5=$$NAME^MXMLDOM(ONCRHDL,CT5)
+43 NEW OUT
SET OUT=""
+44 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT5,"TXT")
SET OUT=TXT(1)
+45 IF ONCTAG5="CODE"
SET ^TMP("ONCPARSE",$JOB,NUM,"CODE")=OUT
Begin DoDot:6
+46 IF OUT?3N1"-"3N
DO RANGE
QUIT
+47 IF OUT="000"
SET ONCVLARR(0)=""
+48 SET ONCVLARR(OUT)=""
End DoDot:6
+49 ;txt runs 1 line?
IF ONCTAG5="DESCR"
SET ^TMP("ONCPARSE",$JOB,NUM,"DESCR")=OUT
+50 IF ONCTAG5="TN"
SET ^TMP("ONCPARSE",$JOB,"NOTE",NOTE)=OUT
SET NOTE=NOTE+1
End DoDot:5
End DoDot:4
+51 QUIT
End DoDot:3
+52 QUIT
End DoDot:2
+53 QUIT
End DoDot:1
+54 DO DELETE^MXMLDOM(ONCRHDL)
+55 KILL ONCRHDL
+56 QUIT
+57 ;
+58 ;--- CS COMPUTE COLLABORATIVE STAGE RESPONSE FROM THE CLOUD WEB SERVICE
+59 ;
+60 ; CS ERRORS
+61 ; <CsCalculateResponse xmlns:xsi="http://www.w3.org/2001/...XMLSchema">
+62 ; <NumberOfError>0</NumberOfError>
+63 ; <IsRequestValid>false</IsRequestValid>
+64 ; <Message>Lookup of codes (988, 988, 988) in Serum Tumor Marker S Value Table
+65 ; Based on CS SSF 1, 2, 3 returns "ERROR".
+66 ; </Message>
+67 ; </CsCalculateResponse>
+68 ;
+69 ; CS SUCCESS
+70 ; <CsCalculateResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema-inst...
+71 ; <NumberOfError>0</NumberOfError>
+72 ; <IsRequestValid>true</IsRequestValid>
+73 ; <CS-STOR>
+74 ; <T>30</T>
+75 ; <TDESCR>p</TDESCR>
+76 ; <N>00</N>
+77 ; <NDESCR>c</NDESCR>
+78 ; <M>00</M>
+79 ; <MDESCR>c</MDESCR>
+80 ; <AJCC>30</AJCC>
+81 ; <AJCC7-T></AJCC7-T>
+82 ; <AJCC7-TDESCR></AJCC7-TDESCR>
+83 ; <AJCC7-N></AJCC7-N>
+84 ; <AJCC7-NDESCR></AJCC7-NDESCR>
+85 ; <AJCC7-M></AJCC7-M>
+86 ; <AJCC7-MDESCR></AJCC7-MDESCR>
+87 ; <AJCC7-STAGE></AJCC7-STAGE>
+88 ; <SS1977>2</SS1977>
+89 ; <SS2000>2</SS2000>
+90 ; </CS-STOR>
+91 ; <CS-DISP>
+92 ; <T>T3</T>
+93 ; <TDESCR>p</TDESCR>
+94 ; <N>N0</N>
+95 ; <NDESCR>c</NDESCR>
+96 ; <M>M0</M>
+97 ; <MDESCR>c</MDESCR>
+98 ; <AJCC>II</AJCC>
+99 ; <AJCC7-T></AJCC7-T>
+100 ; <AJCC7-TDESCR></AJCC7-TDESCR>
+101 ; <AJCC7-N></AJCC7-N>
+102 ; <AJCC7-NDESCR></AJCC7-NDESCR>
+103 ; <AJCC7-M></AJCC7-M>
+104 ; <AJCC7-MDESCR></AJCC7-MDESCR>
+105 ; <AJCC7-STAGE></AJCC7-STAGE>
+106 ; <SS1977>RE</SS1977>
+107 ; <SS2000>RE</SS2000>
+108 ; </CS-DISP>
+109 ; <APIVER>020550</APIVER>
+110 ; <VERSION>2.00P</VERSION>
+111 ; </CS-RESPONSE>
+112 ;
PARSECS ;parse CS Schema response message from cloud server
+1 ;
+2 ;Supported IA #3561 reference to ^MXMLDOM
+3 ;
+4 ;ONCRHDL = response handle from the MXML parser
+5 ;ONCTAG1 = 1st level tags, ONCTAG2 = 2nd level tags
+6 ;ONCPARR = array of server response tags and values
+7 ;ONCSTORE = array for derived values to store in 165.5, returned if successful
+8 ;ONCDISPL = array for derived values to display, returned if successful
+9 ;ONCCSERR = array of error messages, returned if unsuccessful
+10 ;ONCAPIVR = CS version number, ONCVERSN = version
+11 ;ERRFLG SET = 0 if NO CS errors, success
+12 ; = 1 if there are CS errors set
+13 ; = 2 if there is XML request/response failure
+14 NEW ONCRHDL,ONCTAG1
+15 SET ONCCSSCH="E"
SET ONCCSSNM=""
+16 SET ERRFLG=0
SET ONCRHDL=$$EN^MXMLDOM($NAME(^TMP("ONCCSRSP",$JOB)),"W")
+17 IF $DATA(^TMP("MXMLERR",$JOB))
Begin DoDot:1
+18 SET ERRFLG=2
+19 NEW HDL
SET HDL=^TMP("MXMLERR",$JOB)
+20 WRITE !!?3,"XML message",!
+21 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"MSG")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+22 WRITE !?3,"XML error",!
+23 NEW X
SET X=^TMP("MXMLERR",$JOB,HDL,"XML")
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
+24 KILL ONCRHDL,^TMP("ONCCSRSP",$JOB)
End DoDot:1
QUIT
+25 ;--- Traverse top level child(ren) nodes
+26 KILL ONCPARR,ONCSTORE,ONCDISPL,ONCAPIVR,ONCVERSN,ONCCSERR
+27 NEW CT
SET CT=1
FOR
SET CT=$$CHILD^MXMLDOM(ONCRHDL,1,CT)
if CT=0
QUIT
Begin DoDot:1
+28 NEW ONCTAG1
SET ONCTAG1=$$NAME^MXMLDOM(ONCRHDL,CT)
+29 NEW OUT
SET OUT=""
+30 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT,"TXT")
SET OUT=TXT(1)
+31 ;W !?2,"onctag1=",ONCTAG1,"---> out=",OUT
+32 SET ONCPARR(ONCTAG1)=OUT
+33 ;I ONCTAG1="IsRequestValid",OUT="false" S ERRFLG=1
+34 IF ONCTAG1="Message"
SET ONCCSERR(ONCTAG1)=OUT
SET ERRFLG=1
QUIT
+35 IF ONCTAG1="ErrorMessage"
SET ONCCSERR(ONCTAG1)=OUT
SET ERRFLG=1
QUIT
+36 ;--- Traverse second level child(ren) nodes
+37 NEW CT2
SET CT2=1
FOR
SET CT2=$$CHILD^MXMLDOM(ONCRHDL,CT,CT2)
if CT2=0
QUIT
Begin DoDot:2
+38 NEW ONCTAG2
SET ONCTAG2=$$NAME^MXMLDOM(ONCRHDL,CT2)
+39 NEW OUT
SET OUT=""
+40 NEW TXT
if $$TEXT^MXMLDOM(ONCRHDL,CT2,"TXT")
SET OUT=TXT(1)
+41 ;W !,?8,"onctag2=",ONCTAG2,": ",OUT
+42 SET ONCPARR(ONCTAG2)=OUT
+43 IF ONCTAG1="CsStor"
SET ONCSTORE(ONCTAG2)=OUT
+44 IF ONCTAG1="CsDisp"
SET ONCDISPL(ONCTAG2)=OUT
+45 QUIT
End DoDot:2
+46 IF ONCTAG1="Apiver"
SET ONCAPIVR=OUT
+47 IF ONCTAG1="Version"
SET ONCVERSN=OUT
End DoDot:1
+48 DO DELETE^MXMLDOM(ONCRHDL)
+49 KILL ONCRHDL,^TMP("ONCCSRSP",$JOB)
+50 QUIT
+51 ;
DISERR ;
+1 IF $DATA(ONCPARR("Message"))
WRITE !?3,ONCPARR("Message"),!!
+2 IF $DATA(ONCPARR("ErrorMessage"))
WRITE !?3,ONCPARR("ErrorMessage"),!!
+3 ; W N N F N=1:1 S N=$O(ONCCSERR(N)) W !,N
+4 QUIT
+5 ;
RANGE ;
+1 NEW LOW,HIGH,Z
+2 SET LOW=$PIECE(OUT,"-",1)
SET HIGH=$PIECE(OUT,"-",2)
+3 FOR Z=LOW:1:HIGH
SET ONCVLARR(Z)=""
+4 QUIT
+5 ;
DISPLAY ; display CS table codes, descriptions and notes
+1 ;
+2 KILL ^UTILITY($JOB,"W")
+3 SET PG=0
SET EX=""
SET LINE=$SELECT($EXTRACT(IOST,1,2)="C-":IOSL-2,1:IOSL-6)
+4 WRITE @IOF
+5 IF $DATA(ONCPARR("TITLE"))
WRITE !?4,ONCPARR("TITLE")
+6 IF $DATA(ONCPARR("SUBTITLE"))
WRITE !?4,ONCPARR("SUBTITLE")
+7 WRITE !
+8 NEW CODE,DESCR
SET CODE=""
SET DESCR=""
+9 FOR N=0:0
SET N=$ORDER(^TMP("ONCPARSE",$JOB,N))
if N'>0
QUIT
Begin DoDot:1
+10 SET CODE=^TMP("ONCPARSE",$JOB,N,"CODE")
SET DESCR=^TMP("ONCPARSE",$JOB,N,"DESCR")
+11 NEW X
SET X=CODE_" "_DESCR
SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
DO P
if EX=U
QUIT
End DoDot:1
+12 FOR N=0:0
SET N=$ORDER(^TMP("ONCPARSE",$JOB,"NOTE",N))
if N'>0
QUIT
Begin DoDot:1
+13 WRITE !
NEW X
SET X=^TMP("ONCPARSE",$JOB,"NOTE",N)
+14 SET DIWL=3
SET DIWR=77
DO ^DIWP
DO ^DIWW
DO P
if EX=U
QUIT
End DoDot:1
+15 QUIT
+16 ;
P ;
+1 IF ($Y'<(LINE-1))
Begin DoDot:1
+2 IF IOST?1"C".E
WRITE !
KILL DIR
SET DIR(0)="E"
SET DIR("A")="Enter RETURN to continue"
+3 DO ^DIR
IF 'Y
SET EX=U
QUIT
+4 DO HDR
QUIT
End DoDot:1
if EX=U
QUIT
WRITE !
+5 QUIT
HDR ; Header
+1 WRITE @IOF
SET PG=PG+1
+2 QUIT