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

CIAZGRU.m

Go to the documentation of this file.
  1. CIAZGRU ;MSC/IND/DKM - Generic Retrieval Utility ;29-Aug-2011 13:52;PLS
  1. ;;1.4;GENERIC RETRIEVAL UTILITY;;Feb 14, 2008
  1. ;;Copyright 2000-2008, Medsphere Systems Corporation
  1. ;=================================================================
  1. ;Modification 09/03/2010;MSC/MMT;Implement specific code to handle the AUDIT file
  1. ; EP: Main entry point for user interaction
  1. ENTRY N GRU,CRT,ABORT,WHEN
  1. S GRU=$$GETIEN^CIAZGUTP(19950.41,"Select Retrieval: ","N X S X=^(0) I $P(X,U,3)=DUZ!$P(X,U,4)",.ABORT)
  1. Q:$G(ABORT)
  1. D GETCRT(GRU,.CRT,,.ABORT)
  1. Q:$G(ABORT)
  1. S WHEN=$$DIR^CIAZGUTP("DO^::FR","Run at what time","NOW",,.ABORT)
  1. D:'$G(ABORT) SUBMIT(GRU,WHEN,.CRT)
  1. Q
  1. ; EP: Submit a query
  1. SUBMIT(GRU,WHEN,CRT,GBL) ;
  1. N SRT,PRT,RSLT
  1. D GETITEMS(GRU,30,.SRT),GETITEMS(GRU,40,.PRT)
  1. S RSLT=$$SUBMIT2(GRU,.WHEN,.CRT,.SRT,.PRT,.GBL)
  1. Q:$Q RSLT
  1. Q
  1. ; EP: Submit a query (alternate entry)
  1. SUBMIT2(GRU,WHEN,CRT,SRT,PRT,GBL) ;
  1. N FDA,RSLT,IEN
  1. S RSLT=$$RSLTID^CIAZGUTL,IEN(1)=RSLT
  1. S FDA=$NA(FDA(19950.49,"+1,"))
  1. S @FDA@(.01)=$$NOW^XLFDT
  1. S @FDA@(1)=DUZ
  1. S @FDA@(2)=$P(^CIAZG(19950.41,GRU,0),U)
  1. S @FDA@(5)=0
  1. S @FDA@(7)=0
  1. S @FDA@(8)=0
  1. S @FDA@(9)=GRU
  1. D UPDATE^DIE(,"FDA","IEN")
  1. I '$G(WHEN) D
  1. .D TASK
  1. E D RSLTUPD^CIAZGUTL(RSLT,6,$$QUEUE^CIAUTSK("TASK^CIAZGRU","Generic Retrieval Query",.WHEN,"CRT(^SRT(^PRT(^RSLT^GRU^GBL"))
  1. Q:$Q RSLT
  1. Q
  1. ; EP: Taskman entry point
  1. TASK N GBLRT,GBLS,ABORT,INTRV,X,$ET,$ES
  1. S $ET="D TASKERR^CIAZGRU",ZTREQ="@"
  1. D RSLTUPD^CIAZGUTL(RSLT,5,1,1)
  1. D RSLTUPD^CIAZGUTL(RSLT,3,$$NOW^XLFDT)
  1. S GBLRT=$NA(^XTMP("CIAZGRU",RSLT)),(GBLS,PRT,ABORT)=0,INTRV=$$GET^XPAR("ALL","CIAZG UPDATE INTERVAL")
  1. S:INTRV<100 INTRV=100
  1. K @GBLRT
  1. S @GBLRT@(0)=DT+10000_U_DT_U_GRU
  1. F X="CRT","SRT","PRT" M @GBLRT@(X)=@X
  1. D OUTPRT($NA(@GBLRT@("FLD")),GRU)
  1. D RETRIEVE(GRU,.GBL,1)
  1. D RSLTUPD^CIAZGUTL(RSLT,5,$S(ABORT:3,1:2),1)
  1. D RSLTUPD^CIAZGUTL(RSLT,4,$$NOW^XLFDT)
  1. Q
  1. ; Error handler for task
  1. TASKERR D ^%ZTER,RSLTUPD^CIAZGUTL(RSLT,5,5),UNWIND^%ZTER
  1. Q
  1. ; Output field list to result global
  1. ; Format in output global is:
  1. ; Item Name^Width^Format^Datatype^Item IEN^Definition IEN^Multiple IEN
  1. OUTPRT(GBL,GRU) ;
  1. N PRTX,LNK,ITM,FMT,TYP,WID,DTP,X
  1. S PRTX=0
  1. F S PRTX=$O(PRT("C",GRU,PRTX)) Q:'PRTX D
  1. .S X=PRT(PRTX,0),LNK=$P(X,U,3),FMT=$P(X,U,4),WID=$P(X,U,5)
  1. .S X=PRT(PRTX,-1),ITM=$P(X,U),TYP=$P(X,U,4),DTP=$P(X,U,7),LNK=$S(LNK:$P(X,U,6),1:0)
  1. .I $L(FMT),FMT'=2,TYP<2 S @GBL@(PRTX)=ITM_U_WID_U_FMT_U_DTP_U_PRT(PRTX)
  1. .Q:'LNK
  1. .I TYP>1 D
  1. ..S @GBL@(PRTX)=ITM
  1. ..D OUTPRT($NA(@GBL@(PRTX)),LNK)
  1. .E D OUTPRT(GBL,LNK)
  1. Q
  1. ; Collect criteria for query
  1. ; GRU = GR Definition IEN
  1. ; .ARY = Array to receive data
  1. ; .VALS = Supplied values (optional)
  1. ; .ABORT= Abort flag (returned)
  1. GETCRT(GRU,ARY,VALS,ABORT) ;
  1. N ARYX
  1. D GETITEMS(GRU,20,.ARY)
  1. S ARYX=0
  1. F S ARYX=$O(ARY(ARYX)) Q:'ARYX D Q:$G(ABORT)
  1. .N GRU,VAL,LP,LPX,MLT,IENS
  1. .S GRU=+$P(ARY(ARYX),U,2),MLT=+$P(ARY(ARYX),U,3),IENS=MLT_","_GRU_","
  1. .I $D(VALS(IENS)) M VAL=VALS(IENS)
  1. .E D
  1. ..S (LP,LPX)=0
  1. ..F S LP=$O(ARY(ARYX,10,LP)) Q:'LP S LPX=LPX+1,VAL(LPX)=ARY(ARYX,10,LP,0)
  1. ..I $P(ARY(ARYX,0),U,6) D
  1. ...N DTP,OPR,VTP,PROMPT
  1. ...M PROMPT=ARY(ARYX,20)
  1. ...K PROMPT(0)
  1. ...S DTP=+$P(ARY(ARYX,-1),U,7),OPR=+$P(ARY(ARYX,0),U,5),VTP=+$P(ARY(ARYX,0),U,6)
  1. ...S:VTP VTP=+$P($G(^CIAZG(19950.44,OPR,0)),U,2)
  1. ...X:VTP $G(^CIAZG(19950.43,DTP,10,VTP,1))
  1. .K ARY(ARYX,10),ARY(ARYX,20)
  1. .Q:'$D(VAL)!$G(ABORT)
  1. .S LP=0
  1. .F S LP=$O(VAL(LP)) Q:'LP S:$D(VAL(LP))#2 VAL("B",$S($L(VAL(LP)):VAL(LP),1:$C(1)))=""
  1. .M ARY(ARYX,"V")=VAL
  1. K:$G(ABORT) ARY
  1. Q
  1. ; Perform the retrieval
  1. ; GRU = GR Definition IEN
  1. ; IENS = IENS of subfile
  1. ; or global root for a join
  1. ; TOP = Flag indicating top level file
  1. ;
  1. RETRIEVE(GRU,IENS,TOP) ;
  1. N IEN,FILE,ROOT,TMP,GBL,RTN,SRTL,CNT,TOT,FILEIEN,AUDIEN
  1. S (RTN,GBLS)=GBLS+1,GBL=$NA(@GBLRT@(GBLS)),TMP=$$TMPGBL^CIAZGUTL(GBLS),TOP=+$G(TOP),IENS=$G(IENS)
  1. S FILE=$P(^CIAZG(19950.41,GRU,0),U,2)
  1. I $E(IENS)=U S ROOT=IENS,IENS=""
  1. E S ROOT=$$ROOT^DILFD(FILE,","_IENS,1)
  1. S (CNT,TOT,IEN,CNT(0))=0,TOT(0)=INTRV
  1. ;If processing the AUDIT file, branch to separate logic
  1. G:FILE="1.1" RETAUDIT
  1. F Q:$$ABORT S IEN=$O(@ROOT@(IEN)) Q:'IEN D
  1. .N CRTV,PRTV,SRTV,IENX
  1. .I TOP,TOT'<TOT(0) D UPDCNT
  1. .S IENX=IEN_","_IENS,TOT=TOT+1
  1. .D FETCH(GRU,IENX,.CRT,.CRTV)
  1. .Q:'$$SCREEN(.CRT,.CRTV)
  1. .S:TOP @GBLRT@("IEN",IEN)=""
  1. .S CNT=CNT+1
  1. .D FETCH(GRU,IENX,.PRT,.PRTV,.CRTV)
  1. .D FETCH(GRU,IENX,.SRT,.SRTV,.PRTV)
  1. .D:'$D(SRTL) BLDSRT
  1. .D SUBFIL(GRU,IENX)
  1. .D SORT
  1. D MOVE
  1. D:TOP UPDCNT
  1. Q:$Q RTN
  1. Q
  1. ;Handle AUDIT file differently due to different IEN structure (^DIA(File#,IEN,...))
  1. RETAUDIT ;
  1. S (FILEIEN,AUDIEN)=0
  1. F Q:$$ABORT S FILEIEN=$O(@ROOT@(FILEIEN)) Q:'FILEIEN S AUDIEN=0 D
  1. .I '$D(CRT(2)),$D(CRT(1,"V",1)),$D(CRT(1,"V",2)),$G(CRT(1,-1))["DATE/TIME RECOR" D Q
  1. ..N MSCI,MSCEND S MSCI=CRT(1,"V",1)-.01,MSCEND=$S(CRT(1,"V",2)[".":CRT(1,"V",2),1:CRT(1,"V",2)+.9) F S MSCI=$O(@ROOT@(FILEIEN,"C",MSCI)) Q:('MSCI)!(MSCI>MSCEND) D
  1. ...S AUDIEN=0 F Q:$$ABORT S AUDIEN=$O(@ROOT@(FILEIEN,"C",MSCI,AUDIEN)) Q:'AUDIEN D MSC
  1. .F Q:$$ABORT S AUDIEN=$O(@ROOT@(FILEIEN,AUDIEN)) Q:'AUDIEN D MSC
  1. D MOVE
  1. D:TOP UPDCNT
  1. Q:$Q RTN
  1. Q
  1. MSC S IEN=FILEIEN_","_AUDIEN
  1. N CRTV,PRTV,SRTV,IENX
  1. I TOP,TOT'<TOT(0) D UPDCNT
  1. S IENX=IEN_","_IENS,TOT=TOT+1
  1. D FETCHAUD(GRU,IENX,.CRT,.CRTV)
  1. Q:'$$SCREEN(.CRT,.CRTV)
  1. S:TOP @GBLRT@("IEN",IEN)=""
  1. S CNT=CNT+1
  1. D FETCHAUD(GRU,IENX,.PRT,.PRTV,.CRTV)
  1. D FETCHAUD(GRU,IENX,.SRT,.SRTV,.PRTV)
  1. D:'$D(SRTL) BLDSRT
  1. D SUBFIL(GRU,IENX)
  1. D SORT
  1. Q
  1. ; Update counts in result file
  1. UPDCNT D RSLTUPD^CIAZGUTL(RSLT,7,CNT,1):CNT'=CNT(0)
  1. D RSLTUPD^CIAZGUTL(RSLT,8,TOT)
  1. S TOT(0)=TOT\INTRV*INTRV+INTRV,CNT(0)=CNT
  1. Q
  1. ; Returns true if task should abort
  1. ABORT() Q:ABORT 1
  1. S:$$S^%ZTLOAD ABORT=1
  1. S:$$RSLTSTA^CIAZGUTL(RSLT)>2 ABORT=1
  1. Q ABORT
  1. ; Iterate over subfiles
  1. SUBFIL(GRU,IENS) ;
  1. N PRTX,LINK,TYPE,X
  1. S PRTX=0
  1. F S PRTX=$O(PRT("C",GRU,PRTX)) Q:'PRTX D
  1. .S LINK=$P(PRT(PRTX,0),U,3),TYPE=$P(PRT(PRTX,-1),U,4)
  1. .S:LINK LINK=$P(PRT(PRTX,-1),U,6)
  1. .Q:'LINK
  1. .I TYPE=2 D
  1. ..S X=$$RETRIEVE(LINK,IENS),PRTV(PRTX,"I")=X,PRTV(PRTX,"E")=X
  1. .E I TYPE=3 D
  1. ..X ^CIAZG(19950.42,+PRT(PRTX),20)
  1. ..S X=$$RETRIEVE(LINK,X),PRTV(PRTX,"I")=X,PRTV(PRTX,"E")=X
  1. .E D:$G(PRTV(PRTX,"I")) SUBFIL(LINK,PRTV(PRTX,"I")_",")
  1. Q
  1. ; Apply screening criteria. Returns true if all criteria met.
  1. SCREEN(CRT,CRTV) ;EP-
  1. N CRTX,OK,FLG,NEG
  1. S CRTX=0,(FLG,OK)=1
  1. F S CRTX=$O(CRTV(CRTX)) Q:'CRTX D
  1. .N VAL,OPR,EXE,DTP,OR,X,Y
  1. .S Y=CRT(CRTX,0),ITM=+CRT(CRTX),OPR=$P(Y,U,5),OR=$P(Y,U,4),NEG=$P(Y,U,7),DTP=$P(CRT(CRTX,-1),U,7)
  1. .Q:'OPR
  1. .I 'FLG,OK=OR Q
  1. .S X=CRTV(CRTX,"I"),X("I")=X,X("E")=CRTV(CRTX,"E")
  1. .M VAL=CRT(CRTX,"V")
  1. .S VAL(1)=$G(VAL(1)),VAL(2)=$G(VAL(2))
  1. .I 1
  1. .X $G(^CIAZG(19950.43,DTP,20,OPR,1))
  1. .S Y=$S(NEG:'$T,1:$T)
  1. .I FLG S OK=Y,FLG=0
  1. .E I OR S OK=OK!Y
  1. .E S OK=OK&Y
  1. Q OK
  1. ; Build list of sort items
  1. BLDSRT S SRTL=0
  1. F S SRTL=$O(SRTV(SRTL)) Q:'SRTL S SRTL(SRTL)=$S($P($G(SRT(SRTL,0)),U,5):-1,1:1)
  1. S SRTL(999999999999)=1
  1. Q
  1. ; Save the result of a single record retrieval in sort order
  1. ; Result saved as
  1. ; @TMP@(S1,S2...,Sn,N,S)
  1. ; where Sn = sort field values
  1. ; N = sequence # within identical sort values
  1. ; S = sequence # in PRT control array
  1. SORT N KEY,VAL,FMT,SRTX,KEYX,PRTX
  1. S SRTX=0,KEY=TMP
  1. F S SRTX=$O(SRTV(SRTX)) Q:'SRTX D
  1. .S FMT=$P(SRT(SRTX,0),U,4)
  1. .S VAL=$G(SRTV(SRTX,$S(FMT:"E",1:"I")))
  1. .S:VAL="" VAL=$C(0)
  1. .S KEY=$NA(@KEY@(VAL))
  1. S KEYX=$O(@KEY@(""),-1)+1,PRTX=0
  1. F S PRTX=$O(PRTV(PRTX)) Q:'PRTX D
  1. .S FMT=$P(PRT(PRTX,0),U,4)
  1. .S:$P(PRT(PRTX,-1),U,4)>1 FMT=0
  1. .M:$L(FMT)&(FMT'=2) @KEY@(KEYX,PRTX)=PRTV(PRTX,$S(FMT:"E",1:"I"))
  1. Q
  1. ; Move sorted results into target global
  1. ; Iterates over each sort value in ascending or descending order
  1. MOVE N GBLX
  1. S GBLX=0
  1. D MOVEX(TMP,0)
  1. K @TMP
  1. Q
  1. ; Recurse over each sort subscript.
  1. MOVEX(TMP,SRTX) ;
  1. N ORD,NXT
  1. S SRTX=$O(SRTL(SRTX))
  1. I 'SRTX D:$D(@TMP) Q
  1. .S GBLX=GBLX+1
  1. .M @GBL@(GBLX)=@TMP
  1. S ORD=SRTL(SRTX),NXT=""
  1. F S NXT=$O(@TMP@(NXT),ORD) Q:'$L(NXT) D
  1. .D MOVEX($NA(@TMP@(NXT)),SRTX)
  1. Q
  1. ; Build item array from multiple
  1. ; GRU = IEN of GR Definition
  1. ; NODE = Multiple root node
  1. ; ARY = Local array to receive data
  1. ; where N = sequence #
  1. ; I = IEN of GR Item
  1. ; D = IEN of GR Definiton
  1. ; M = IEN in multiple
  1. ; ARY(N) = I^D^M
  1. ; ARY(N,-1) = 0 node of GR Item entry
  1. ; ARY(N,x) = x node of multiple
  1. ; ARY("B",I,N) = xref
  1. ; ARY("C",D,N) = xref
  1. GETITEMS(GRU,NODE,ARY,ARYX) ;
  1. N SEQ,MLT,ITM,LNK
  1. S SEQ="",ARYX=+$G(ARYX)
  1. F S SEQ=$O(^CIAZG(19950.41,GRU,NODE,"B",SEQ)),MLT=0 Q:'$L(SEQ) D
  1. .F S MLT=$O(^CIAZG(19950.41,GRU,NODE,"B",SEQ,MLT)) Q:'MLT D
  1. ..S ARYX=ARYX+1
  1. ..M ARY(ARYX)=^CIAZG(19950.41,GRU,NODE,MLT)
  1. ..S ITM=$P(ARY(ARYX,0),U,2),ARY("B",ITM,ARYX)="",ARY("C",GRU,ARYX)=""
  1. ..S ARY(ARYX)=ITM_U_GRU_U_MLT,ARY(ARYX,-1)=^CIAZG(19950.42,ITM,0)
  1. ..S LNK=$P(ARY(ARYX,0),U,3)
  1. ..S:LNK LNK=$P(ARY(ARYX,-1),U,6)
  1. ..D:LNK GETITEMS(LNK,NODE,.ARY,.ARYX)
  1. Q
  1. ; Fetch specified items
  1. ; GRU = GR Definition IEN
  1. ; IENS = IENS of entry to fetch
  1. ; .ITEMS= Items control array
  1. ; .VALS = Array to receive values
  1. ; .CACHE= Array of cached values (optional)
  1. FETCH(GRU,IENS,ITEMS,VALS,CACHE) ;
  1. N FILE,FLDS,TYPE,DATA,LINK,ITMX,ITM,IEN,X,Y
  1. ; Build list of fields, computed values, and linked items
  1. S FLDS="",ITMX=0,FILE=$P(^CIAZG(19950.41,GRU,0),U,2),IEN=+IENS
  1. F S ITMX=$O(ITEMS("C",GRU,ITMX)) Q:'ITMX D
  1. .S LINK=$P(ITEMS(ITMX,0),U,3)
  1. .S X=ITEMS(ITMX,-1),TYPE=+$P(X,U,4),LINK=$S(LINK:$P(X,U,6),1:0)
  1. .Q:TYPE>1
  1. .S VALS(ITMX,"I")="",VALS(ITMX,"E")=""
  1. .S:LINK LINK(ITMX)=LINK
  1. .S Y=$O(CACHE("B",+ITEMS(ITMX),""))
  1. .I Y M VALS(ITMX)=CACHE(Y) Q
  1. .S TYPE(TYPE,ITMX)=""
  1. .I 'TYPE D
  1. ..S X=$P(X,U,5)
  1. ..I 'X S (VALS(ITMX,"I"),VALS(ITMX,"E"))=IEN
  1. ..E S FLDS=FLDS_$S($L(FLDS):";",1:"")_X
  1. ; Fetch field values and move into ITEMS array
  1. S DATA=$$TMPGBL^CIAZGUTL("FETCH")
  1. D:$L(FLDS) GETS^DIQ(FILE,IENS,FLDS,"IE",DATA)
  1. S ITMX=0
  1. F S ITMX=$O(TYPE(0,ITMX)) Q:'ITMX D
  1. .N X,Y,Z
  1. .S X=$P(ITEMS(ITMX,-1),U,5),Y=$O(@DATA@(FILE,IENS,X,0))
  1. .I 'Y M VALS(ITMX)=@DATA@(FILE,IENS,X)
  1. .E D ; WP Field
  1. ..S (VALS(ITMX,"I"),VALS(ITMX,"E"))=@DATA@(FILE,IENS,X,Y)
  1. ..F S Y=$O(@DATA@(FILE,IENS,X,Y)) Q:'Y!(Y>10000) D
  1. ...S (VALS(ITMX,"I",Y-1),VALS(ITMX,"E",Y-1))=$S(Y=10000:"<DATA TRUNCATED",1:@DATA@(FILE,IENS,X,Y))
  1. K @DATA
  1. ; Evaluate computed values and move into ITEMS array
  1. S ITMX=0
  1. F S ITMX=$O(TYPE(1,ITMX)) Q:'ITMX D
  1. .N X
  1. .X $G(^CIAZG(19950.42,+ITEMS(ITMX),20))
  1. .S VALS(ITMX,"I")=$G(X("I"),$G(X))
  1. .S VALS(ITMX,"E")=$G(X("E"),$G(X))
  1. ; Iterate over linked items
  1. S ITMX=0
  1. F S ITMX=$O(LINK(ITMX)) Q:'ITMX D
  1. .S X=$G(VALS(ITMX,"I"))
  1. .D:X FETCH(LINK(ITMX),X_",",.ITEMS,.VALS,.CACHE)
  1. Q
  1. ;AUDIT file specific FETCH routine
  1. FETCHAUD(GRU,IENS,ITEMS,VALS,CACHE) ;
  1. N FILE,FLDS,TYPE,DATA,LINK,ITMX,ITM,IEN,X,Y
  1. K DATA M DATA=^DIA(FILEIEN,AUDIEN)
  1. ; Build list of fields, computed values, and linked items
  1. S FLDS="",ITMX=0,FILE=$P(^CIAZG(19950.41,GRU,0),U,2),IEN=+IENS
  1. F S ITMX=$O(ITEMS("C",GRU,ITMX)) Q:'ITMX D
  1. .S LINK=$P(ITEMS(ITMX,0),U,3)
  1. .S X=ITEMS(ITMX,-1),TYPE=+$P(X,U,4),LINK=$S(LINK:$P(X,U,6),1:0)
  1. .Q:TYPE>1
  1. .S VALS(ITMX,"I")="",VALS(ITMX,"E")=""
  1. .S:LINK LINK(ITMX)=LINK
  1. .S Y=$O(CACHE("B",+ITEMS(ITMX),""))
  1. .I Y M VALS(ITMX)=CACHE(Y) Q
  1. .S TYPE(TYPE,ITMX)=""
  1. .I 'TYPE D
  1. ..S X=$P(X,U,5)
  1. ..I 'X S (VALS(ITMX,"I"),VALS(ITMX,"E"))=IEN
  1. ..E D
  1. ...S VALS(ITMX,"I")=$$AUDINT(X)
  1. ...S VALS(ITMX,"E")=$$AUDEXT(X)
  1. ; Evaluate computed values and move into ITEMS array
  1. S ITMX=0
  1. F S ITMX=$O(TYPE(1,ITMX)) Q:'ITMX D
  1. .N X
  1. .X $G(^CIAZG(19950.42,+ITEMS(ITMX),20))
  1. .S VALS(ITMX,"I")=$G(X("I"),$G(X))
  1. .S VALS(ITMX,"E")=$G(X("E"),$G(X))
  1. ; Iterate over linked items
  1. S ITMX=0
  1. F S ITMX=$O(LINK(ITMX)) Q:'ITMX D
  1. .S X=$G(VALS(ITMX,"I"))
  1. .D:X FETCH(LINK(ITMX),X_",",.ITEMS,.VALS,.CACHE)
  1. Q
  1. ;FETCH AUDIT internal values
  1. AUDINT(FLD) ;EP-
  1. N X
  1. I FLD=".001" Q $P(IENS,",",2)
  1. I FLD=".01" Q $P(DATA(0),U,1)
  1. I FLD=".02" Q $P(DATA(0),U,2)
  1. I FLD=".03" Q $P(DATA(0),U,3)
  1. I FLD=".04" Q $P(DATA(0),U,4)
  1. I FLD=".05" Q $P(DATA(0),U,5)
  1. I FLD="1" Q $S($P(DATA(0),U,1)'="":$$GET1^DIQ(FILEIEN,$P(DATA(0),U,1),.01),1:"")
  1. I FLD="1.1" Q $P(^DD(FILEIEN,$P($P(DATA(0),U,3),",",1),0),U,1)
  1. I FLD="2" Q $G(DATA(2))
  1. I FLD="2.1" Q $P($G(DATA(2.1)),U,1)
  1. I FLD="2.2" Q $P($G(DATA(2.1)),U,2)
  1. I FLD="3" Q $G(DATA(3))
  1. I FLD="3.1" Q $P($G(DATA(3.1)),U,1)
  1. I FLD="3.2" Q $P($G(DATA(3.1)),U,2)
  1. I FLD="4.1" Q $P($G(DATA(4.1)),U,1)
  1. I FLD="4.2" Q $P($G(DATA(4.1)),U,2)
  1. I FLD=".06" Q $P(DATA(0),U,6)
  1. I FLD="2.9" N X,D0 S DIA=+$P(IENS,",",1),D0=+$P(IENS,",",2) X ^DD(1.1,2.9,9.1) Q X
  1. Q FLD_"intunk"
  1. Q
  1. ;FETCH AUDIT external values
  1. AUDEXT(FLD) S INTVAL=$$AUDINT(FLD)
  1. ;RETURN INTERNAL VALUES FOR FIELDS NOT NEEDING TRANSLATION
  1. Q:(FLD=".001")!(FLD=".01")!(FLD=".03")!(FLD="1")!(FLD="1.1")!(FLD="2")!(FLD="2.1")!(FLD="3")!(FLD="3.1") INTVAL
  1. ;Get external values for other fields
  1. I FLD=".02" S Y=INTVAL D DD^%DT Q Y
  1. I FLD=".04" Q $$GET1^DIQ(200,INTVAL,".01")
  1. I FLD=".05" Q $S(INTVAL="A":"Added Record",1:"")
  1. I FLD=".06" Q $S(INTVAL="i":"Inquired",1:"")
  1. I FLD="2" Q $S(INTVAL="":"<no previous value>",1:INTVAL)
  1. I (FLD="2.2")!(FLD="3.2") Q $S(INTVAL="S":"Set",INTVAL="P":"Pointer",INTVAL="V":"Variable Pointer",1:"")
  1. I FLD="3" Q $S(INTVAL="":"<deleted>",1:INTVAL)
  1. I FLD="4.1" Q $$GET1^DIQ(19,INTVAL,".01")
  1. I FLD="4.2" Q INTVAL ; THIS NEEDS TO DETERMINE HOW TO EVALUATE THIS "VARIABLE POINTER"
  1. I FLD=2.9 Q $P($G(^DPT(+INTVAL,0)),U)
  1. Q FLD_"exunk"
  1. Q