Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ONCSAPIT

ONCSAPIT.m

Go to the documentation of this file.
  1. ONCSAPIT ;Hines OIFO/SG - COLLABORATIVE STAGING (TABLES) ;06/23/10
  1. ;;2.2;ONCOLOGY;**1**;Jul 31, 2013;Build 8
  1. ;
  1. ;--- STRUCTURE OF THE RESPONSE
  1. ;
  1. ; <?xml version="1.0" encoding="utf-8"?>
  1. ; <soap:Envelope
  1. ; xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
  1. ; soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  1. ; <soap:Body>
  1. ; <CS-RESPONSE xmlns="http://vista.domain.ext/oncology">
  1. ; <SCHEMA>...</SCHEMA>
  1. ; <TABLE>
  1. ; <NUMBER>...</NUMBER>
  1. ; <PATTERN>...</PATTERN>
  1. ; <ROLE>...</ROLE>
  1. ; <SUBTITLE>...</SUBTITLE>
  1. ; <TITLE>...</TITLE>
  1. ; <ROWS>
  1. ; <ROW>
  1. ; <CODE>...</CODE>
  1. ; <DESCR>
  1. ; <P>...</P>
  1. ; ...
  1. ; </DESCR>
  1. ; <AC>...</AC>
  1. ; ...
  1. ; </ROW>
  1. ; ...
  1. ; </ROWS>
  1. ; <NOTES>
  1. ; <TN>
  1. ; <P>...</P>
  1. ; ...
  1. ; </TN>
  1. ; ...
  1. ; <FN>
  1. ; <P>...</P>
  1. ; ...
  1. ; </FN>
  1. ; ...
  1. ; </NOTES>
  1. ; </TABLE>
  1. ; ...
  1. ; </CS-RESPONSE>
  1. ; <soap:Fault>
  1. ; <faultcode> ... </faultcode>
  1. ; <faultstring> ... </faultstring>
  1. ; <detail>
  1. ; <RC> ... </RC>
  1. ; </detail>
  1. ; </soap:Fault>
  1. ; </soap:Body >
  1. ; </soap:Envelope>
  1. ;
  1. Q
  1. ;
  1. ;***** LOADS THE CS CODE DESCRIPTION
  1. ;
  1. ; [.ONCSAPI] Reference to the API descriptor (see the ^ONCSAPI)
  1. ;
  1. ; SITE Primary site
  1. ; HIST Histology
  1. ;
  1. ; TABLE Table number (see the ^ONCSAPI routine)
  1. ; CODE Primary code of a table row
  1. ;
  1. ; ONC8DST Closed reference of the destination buffer
  1. ;
  1. ; Return Values:
  1. ; 0 Ok
  1. ; <0 Error code
  1. ;
  1. CODEDESC(ONCSAPI,SITE,HIST,TABLE,CODE,ONC8DST) ;
  1. N I,NODE,RC,ROW,TBLIEN,TMP
  1. D CLEAR^ONCSAPIE() K @ONC8DST
  1. Q:$G(CODE)?." " $$ERROR^ONCSAPIE(-6,,"CODE",$G(CODE))
  1. ;---
  1. L +^XTMP("ONCSAPI","TABLES","JOB",$J):5 E D Q RC
  1. . S RC=$$ERROR^ONCSAPIE(-15,,"access control node")
  1. ;
  1. S RC=0 D
  1. . ;--- Get the table IEN
  1. . S TBLIEN=$$GETCSTBL(.ONCSAPI,SITE,HIST,TABLE)
  1. . I TBLIEN<0 S RC=TBLIEN Q
  1. . S NODE=$NA(^XTMP("ONCSAPI","TABLES",TBLIEN))
  1. . S CODE=+$G(CODE)
  1. . ;--- Check the single code
  1. . S ROW=$G(@NODE@("C",CODE))
  1. . ;--- Check the interval
  1. . I ROW'>0 D I ROW'>0 S RC=$$ERROR^ONCSAPIE(-6,,"CODE",CODE) Q
  1. . . S TMP=$O(@NODE@("C",CODE),-1) Q:TMP=""
  1. . . S ROW=$G(@NODE@("C",TMP))
  1. . . S:CODE>$P(ROW,U,2) ROW=0
  1. . ;--- Load the description
  1. . M @ONC8DST=@NODE@(+ROW,3)
  1. ;
  1. L -^XTMP("ONCSAPI","TABLES","JOB",$J)
  1. Q $S(RC<0:RC,1:0)
  1. ;
  1. ;***** END ELEMENT CALLBACK FOR THE SAX PARSER
  1. ;
  1. ; ELMT Name of the element
  1. ;
  1. ENDEL(ELMT) ;
  1. N I,J,L,L2E,L3E,SUBS,TMP
  1. S L=$L(ONCXML("PATH"),","),L2E=$P(ONCXML("PATH"),",",L-1,L)
  1. S L3E=$P(ONCXML("PATH"),",",L-2,L)
  1. D ENDEL^ONCSAPIX(ELMT)
  1. ;---
  1. I L2E="CS-RESPONSE,TABLE" D Q
  1. . N NAME,SCHEMA,TABLE
  1. . S SCHEMA=+$G(ONCXML("SCHEMA")),TABLE=+$P(ONCTBDSC,U,3)
  1. . S NAME=$P(ONCTBDSC,U,5)
  1. . I (SCHEMA'>0)!(TABLE'>0)!(NAME="") K @ONCXML@(ONCTBIEN) Q
  1. . S $P(ONCTBDSC,U,2)=SCHEMA
  1. . ;---
  1. . S @ONCXML@(ONCTBIEN,0)=$E(ONCTBDSC,1,254)
  1. . S @ONCXML@("ST",SCHEMA,TABLE)=ONCTBIEN
  1. ;---
  1. I L2E="ROW,CODE" D Q
  1. . S $P(@ONCXML@(ONCTBIEN,ONCTBROW,1),U)=ONCXML("ROWCODE")
  1. . Q:ONCXML("ROWCODE")?."-"
  1. . S TMP=ONCTBROW
  1. . S:ONCXML("ROWCODE")["-" $P(TMP,U,2)=+$P(ONCXML("ROWCODE"),"-",2)
  1. . S @ONCXML@(ONCTBIEN,"C",+ONCXML("ROWCODE"))=TMP
  1. I L3E="ROW,DESCR,P" D Q
  1. . S J=+$O(@ONCXML@(ONCTBIEN,ONCTBROW,3,""),-1)
  1. . S I=""
  1. . F S I=$O(^UTILITY($J,"W",1,I)) Q:I="" D
  1. . . S TMP=$G(^UTILITY($J,"W",1,I,0)),J=J+1
  1. . . S @ONCXML@(ONCTBIEN,ONCTBROW,3,J)=$$TRIM^XLFSTR(TMP,"R")
  1. ;---
  1. I (L3E="NOTES,FN,P")!(L3E="NOTES,TN,P") D Q
  1. . S SUBS=$P(L3E,",",2)
  1. . S J=+$O(@ONCXML@(ONCTBIEN,SUBS,ONCXML(SUBS),""),-1)
  1. . S I=""
  1. . F S I=$O(^UTILITY($J,"W",1,I)) Q:I="" D
  1. . . S TMP=$G(^UTILITY($J,"W",1,I,0)),J=J+1
  1. . . S @ONCXML@(ONCTBIEN,SUBS,ONCXML(SUBS),J)=$$TRIM^XLFSTR(TMP,"R")
  1. Q
  1. ;
  1. ;***** RETURNS THE TABLE IEN (LOADS THE TABLES IF NECESSARY)
  1. ;
  1. ; [.ONCSAPI] Reference to the API descriptor (see the ^ONCSAPI)
  1. ;
  1. ; SITE Primary site
  1. ; HIST Histology
  1. ; TABLE Table number (see the ^ONCSAPI)
  1. ;
  1. ; The ^TMP("ONCSAPIT",$J) global node is used by this function.
  1. ;
  1. ; Return Values:
  1. ; >0 IEN of the table
  1. ; <0 Error code
  1. ;
  1. GETCSTBL(ONCSAPI,SITE,HIST,TABLE) ;
  1. N ONCTBDSC ; Descriptor of the table
  1. N ONCTBIEN ; IEN of the table
  1. N ONCTBROW ; Row number
  1. ;
  1. N DST,ONCREQ,ONCRSP,ONCXML,SCHEMA,URL,XHIST,XSITE
  1. D CLEAR^ONCSAPIE()
  1. Q:TABLE'>0 $$ERROR^ONCSAPIE(-6,,"TABLE",TABLE)
  1. ;--- Initialize constants and variables
  1. S ONCXML=$NA(^XTMP("ONCSAPI","TABLES"))
  1. S ONCXML("XSITE")=$S(SITE'="":SITE,1:" ")
  1. S ONCXML("XHIST")=$S(HIST'="":HIST,1:" ")
  1. S ONCXML("XDISC")=$S(DISCRIM'="":DISCRIM,1:" ")
  1. ;
  1. ;--- Check if the schema number is available
  1. S SCHEMA=+$G(@ONCXML@("SH",ONCXML("XSITE"),ONCXML("XHIST"),ONCXML("XDISC")))
  1. I SCHEMA'>0 D Q:SCHEMA<0 SCHEMA
  1. . S SCHEMA=+$$SCHEMA^ONCSAPIS(.ONCSAPI,SITE,HIST,DISCRIM)
  1. ;
  1. ;--- Check if the table is available
  1. S ONCTBIEN=+$G(@ONCXML@("ST",SCHEMA,TABLE))
  1. Q:ONCTBIEN>0 ONCTBIEN
  1. S ONCRSP=$NA(^TMP("ONCSAPIT",$J)) K @ONCRSP
  1. ;
  1. ;--- Get the server URL
  1. S URL=$$GETCSURL^ONCSAPIU()
  1. ;
  1. L +@ONCXML@("ST",SCHEMA,TABLE):5
  1. E Q $$ERROR^ONCSAPIE(-15,,"local CS table")
  1. S RC=0 D
  1. . ;--- Check if the table has become available
  1. . S ONCTBIEN=+$G(@ONCXML@("ST",SCHEMA,TABLE)) Q:ONCTBIEN>0
  1. . ;--- Prepare the request data
  1. . S DST="ONCREQ"
  1. . D HEADER^ONCSAPIR(.DST,"CS-GET-TABLES")
  1. . D PUT^ONCSAPIR(.DST,"SCHEMA",SCHEMA)
  1. . D PUT^ONCSAPIR(.DST,"TABLE",TABLE)
  1. . D TRAILER^ONCSAPIR(.DST)
  1. . K DST
  1. . ;--- Send the request and get the response
  1. . D:$G(ONCSAPI("DEBUG"))
  1. . . D ZW^ONCSAPIU("ONCREQ","*** 'TABLE' REQUEST ***")
  1. . S RC=$$REQUEST^ONCSAPIR(URL,ONCRSP,"ONCREQ") Q:RC<0
  1. . D:$G(ONCSAPI("DEBUG"))
  1. . . D ZW^ONCSAPIU(ONCRSP,"*** 'TABLE' RESPONSE ***")
  1. . ;--- Load the table into the XTMP global
  1. . D SETCBK(.CBK),EN^MXMLPRSE(ONCRSP,.CBK,"W")
  1. . ;--- Check for parsing and web service errors
  1. . S RC=$$CHKERR^ONCSAPIR(.ONCXML) Q:RC<0
  1. L -@ONCXML@("ST",SCHEMA,TABLE)
  1. ;
  1. ;--- Cleanup
  1. K @ONCRSP
  1. Q $S(RC<0:RC,1:+$G(ONCTBIEN))
  1. ;
  1. ;***** SETS THE EVENT INTERFACE ENTRY POINTS
  1. ;
  1. ; .CBK Reference to the destination list
  1. ;
  1. SETCBK(CBK) ;
  1. ;;CHARACTERS ^ TEXT^ONCSAPIT
  1. ;;ENDELEMENT ^ ENDEL^ONCSAPIT
  1. ;;STARTELEMENT^STARTEL^ONCSAPIT
  1. ;
  1. D SETCBK^ONCSAPIX(.CBK,"SETCBK^ONCSAPIT")
  1. Q
  1. ;
  1. ;***** START ELEMENT CALLBACK FOR THE SAX PARSER
  1. ;
  1. ; ELMT Name of the element
  1. ;
  1. ; .ATTR List of attributes and their values
  1. ;
  1. STARTEL(ELMT,ATTR) ;
  1. N L,L2E,L3E,SUBS,TBLIEN
  1. D STARTEL^ONCSAPIX(ELMT,.ATTR)
  1. S L=$L(ONCXML("PATH"),","),L2E=$P(ONCXML("PATH"),",",L-1,L)
  1. S L3E=$P(ONCXML("PATH"),",",L-2,L)
  1. ;---
  1. I L2E="CS-RESPONSE,TABLE" D Q
  1. . S ONCTBIEN=+$O(@ONCXML@(" "),-1)+1
  1. . S ONCTBDSC="",ONCTBROW=0
  1. . S (ONCXML("FN"),ONCXML("TN"))=0
  1. ;---
  1. I L2E="ROWS,ROW" D Q
  1. . S ONCXML("ROWCODE")="",ONCXML("AC")=1
  1. . S ONCTBROW=ONCTBROW+1
  1. ;---
  1. I L2E="ROW,AC" S ONCXML("AC")=ONCXML("AC")+1 Q
  1. I L3E="ROW,DESCR,P" K ^UTILITY($J,"W") Q
  1. ;---
  1. I (L2E="NOTES,FN")!(L2E="NOTES,TN") D Q
  1. . S SUBS=$P(L2E,",",2),ONCXML(SUBS)=$G(ONCXML(SUBS))+1 ; Note number
  1. I L3E="NOTES,FN,P" K ^UTILITY($J,"W") Q
  1. I L3E="NOTES,TN,P" K ^UTILITY($J,"W") Q
  1. Q
  1. ;
  1. ;***** RETURNS THE TABLE TITLE AND SUBTITLE
  1. ;
  1. ; [.ONCSAPI] Reference to the API descriptor (see the ^ONCSAPI)
  1. ;
  1. ; SITE Primary site
  1. ; HIST Histology
  1. ; TABLE Table number (see the ^ONCSAPI)
  1. ;
  1. ; Tables other than site specific factors (10-15) usually do not
  1. ; have subtitles.
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 0^Title^Subtitle
  1. ;
  1. TBLTTL(ONCSAPI,SITE,HIST,TABLE) ;
  1. N TBLIEN
  1. ;--- Make sure that table info is loaded
  1. S TBLIEN=$$GETCSTBL(.ONCSAPI,SITE,HIST,TABLE) Q:TBLIEN<0 TBLIEN
  1. ;--- Return the table subtitle
  1. Q 0_U_$P($G(^XTMP("ONCSAPI","TABLES",TBLIEN,0)),U,5,6)
  1. ;
  1. ;***** TEXT CALLBACK FOR THE SAX PARSER
  1. ;
  1. ; TXT Line of unmarked text
  1. ;
  1. TEXT(TXT) ;
  1. N I,L,L2E,L3E,TMP
  1. S L=$L(ONCXML("PATH"),","),L2E=$P(ONCXML("PATH"),",",L-1,L)
  1. S L3E=$P(ONCXML("PATH"),",",L-2,L)
  1. ;---
  1. I L2E="CS-RESPONSE,SCHEMA" S ONCXML("SCHEMA")=TXT Q
  1. ;--- Table descriptor
  1. I L2E="TABLE,NUMBER" S $P(ONCTBDSC,U,3)=$P(ONCTBDSC,U,3)_TXT Q
  1. I L2E="TABLE,PATTERN" S $P(ONCTBDSC,U,4)=$P(ONCTBDSC,U,4)_TXT Q
  1. I L2E="TABLE,SUBTITLE" S $P(ONCTBDSC,U,6)=$P(ONCTBDSC,U,6)_TXT Q
  1. I L2E="TABLE,TITLE" S $P(ONCTBDSC,U,5)=$P(ONCTBDSC,U,5)_TXT Q
  1. ;--- Codes
  1. I L2E="ROW,AC" D Q
  1. . S $P(@ONCXML@(ONCTBIEN,ONCTBROW,1),U,ONCXML("AC"))=TXT
  1. I L2E="ROW,CODE" D Q
  1. . S ONCXML("ROWCODE")=ONCXML("ROWCODE")_TXT
  1. ;--- Row description
  1. I L3E="ROW,DESCR,P" D WW(.TXT,70) Q
  1. ;--- Notes
  1. I L3E="NOTES,FN,P" D WW(.TXT,75) Q
  1. I L3E="NOTES,TN,P" D WW(.TXT,75) Q
  1. ;--- Default processing
  1. D TEXT^ONCSAPIX(TXT)
  1. Q
  1. ;
  1. ;***** REFORMATS THE TEXT AND WRAPS THE LINES
  1. WW(TXT,DIWR) ;
  1. N CR,DIWF,DIWL,I,ONCI1,ONCI2,LF,X
  1. S DIWF="|",DIWL=1
  1. S ONCI1=1,(ONCI2,L)=$L(TXT)
  1. F D Q:ONCI2>L S ONCI1=ONCI2
  1. . S ONCI2=$F(TXT,$C(13),ONCI1),(CR,LF)=0
  1. . I ONCI2>0 S CR=1 S:$A(TXT,ONCI2)=10 LF=1,ONCI2=ONCI2+1
  1. . E D
  1. . . S ONCI2=$F(TXT,$C(10),ONCI1)
  1. . . I ONCI2>0 S LF=1
  1. . . E S ONCI2=L+1
  1. . F I=ONCI1:1:ONCI2 Q:$E(TXT,I)'=" "
  1. . S X=$E(TXT,(I+ONCI1)\2,ONCI2-1-CR-LF)
  1. . D ^DIWP
  1. Q
  1. ;
  1. CLEANUP ;Cleanup
  1. K DISCRIM