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

DIQ.m

Go to the documentation of this file.
  1. DIQ ;SFISC/GFT - CAPTIONED TEMPLATE ;28NOV2016
  1. ;;22.2;VA FileMan;**2**;Jan 05, 2016;Build 139
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
  1. ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
  1. ;;Licensed under the terms of the Apache License, Version 2.0.
  1. ;GFT;;**19,64,74,81,99,129,133,999,1021,1035,1037,1053,1054**;
  1. ;
  1. ;
  1. G INQ^DII
  1. ;
  1. GET1(DIQGR,DA,DR,DIQGPARM,DIQGETA,DIQGERRA,DIQGIPAR) ;Extrinsic Function
  1. ; file,record,field,parm,targetarray,errortargetarray,internal
  1. I '$D(DIQUIET) N DIQUIET S DIQUIET=1
  1. I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
  1. G DDENTRY^DIQG
  1. ;
  1. GETS(DIQGR,DA,DR,DIQGPARM,DIQGTA,DIQGERRA,DIQGIPAR) ;Procedure Call
  1. ; file,record,field,parm,targetarray,errortargetarray,internal
  1. I '$D(DIQUIET) N DIQUIET S DIQUIET=1
  1. I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
  1. N DIQGQERR
  1. D DDENTRY^DIQGQ
  1. I $G(DIQGQERR)]"" S DIERR=DIQGQERR
  1. D:$G(DIQGERRA)]"" CALLOUT^DIEFU(DIQGERRA)
  1. Q
  1. ;
  1. ;
  1. CAPTION(DD,DA,A,N,E) ;
  1. ; Newing of Line Counter 'S' needs to be before call
  1. N D0,DIQ,DIC,DIQS
  1. S DIQ(0)=$G(A),DIC=^DIC(DD,0,"GL") I $G(DIA),DD=.6!(DD=1.1) S DIC=DIC_DIA_"," ;In DIQ(0), 'A' means AUDIT, 'R' means SHOW RECORD NUMBER
  1. S E=$S($G(E)="":"N<0",1:"N]]"""_E_"""")
  1. S N=$S($G(N)="":-1,1:$O(@(DIC_"DA,N)"),-1))
  1. D R
  1. S X=""
  1. Q
  1. ;
  1. GUY ;from DII
  1. N N S N=-1
  1. R S:'$G(IOM) IOM=80 S:'$G(IOSL) IOSL=24,IOST="C-OTHER"
  1. S:'$D(DTIME) DTIME=300 K DTOUT,DUOUT,DIRUT,DIR
  1. N DIQDD,DIQAUDE,DIQAUDD,DIQZ,D,DL,D1,D2,D3,D4,D5,D6,D7,D8,D9,DIQE
  1. S D0=DA,D=DIC_DA_",",DL=1,DIQDD=DD S:'$G(S) S=3
  1. I '$D(DIQS) W !
  1. E D
  1. .S DIQZ=0,A=0 F S @("DIQZ=$O("_DIQS_"DIQZ))") Q:DIQZ="" S @(DIQS_"DIQZ)=""""")
  1. D 1(DA)
  1. G Q
  1. ;
  1. 1(DA) ;recursive, for 1 entry or subentry
  1. N DIQAUD
  1. I $D(DIQS) D ;old parameter -- undocumented
  1. .S DIQZ=0,A=0 F S @("DIQZ=$O("_DIQS_"DIQZ))") Q:DIQZ="" D
  1. ..S A=$O(^DD(DD,"B",DIQZ,0)) Q:'A
  1. ..I $D(^DD(DD,A,0)) S C=$P(^(0),U,2) I C["C" D COM S @(DIQS_"DIQZ)=X")
  1. I N<0,$D(^DD(DD,.001,0)) S W=.001,A=-1,Y=@("D"_(DL\2)) D W Q:'S G A
  1. NUMBER I $G(DIQ(0))["R",DL=1 S W=.001,A=-1,O=$$EZBLD^DIALOG(7099),Y=D0 D W2 Q:'S ;**CCO/NI THE WORD 'NUMBER'
  1. A I DIQ(0)["A" D ;Get AUDIT TRAIL data
  1. .N Z,D,SUB
  1. .I DL=1 S DIQAUDD="",(DIQAUDE(0),DIQAUDE)=D0 F Z=2:2 Q:'$D(^DD(DIQDD,0,"UP")) D
  1. ..S A=DIQDD,DIQDD=^("UP"),(DIQAUDE,DIQAUDE(0))=$P(DIC,",",$L(DIC,",")-Z)_","_DIQAUDE,(DIQAUDD(0),DIQAUDD)=$O(^DD(DIQDD,"SB",A,0))_","_DIQAUDD
  1. .E S DIQAUDD=$G(DIQAUDD(0)),DIQAUDE=DIQAUDE(0) F A=3:2:DL S DIQAUDE=DIQAUDE_","_(@("D"_(A\2))),DIQAUDD=DIQAUDD_DIQAUDD(A-1)_","
  1. .F Z=0:0 S Z=$O(^DIA(DIQDD,"B",DIQAUDE,Z)) Q:'Z D
  1. ..S D=$P($G(^DIA(DIQDD,Z,0)),U,3) Q:'D ;get field number
  1. ..I DIQAUDD]"" S D=$P(D,DIQAUDD,2,9)
  1. ..E I E["]]"!(N]]0) S SUB=$P($P($G(^DD(DIQDD,+D,0)),U,4),";") D
  1. ...I N]]SUB S D=0 Q
  1. ...N N S N=SUB I @E S D=0 Q
  1. ..I D,D'["," S DIQAUD(D,Z)="" Q
  1. N S @("N=$O("_D_"N))") I N="" S N=-1 G END:DL#2,MISSAUD
  1. I DL=1,@E G END
  1. S DIQZ=$G(^(N)) I DIQZ]"" S A="" F S A=$O(^DD(DD,"GL",N,A)) G N:A="" D G Q:'S ;write out what's on one data node
  1. .S W=$O(^(A,0)) Q:'W I A S Y=$P(DIQZ,U,A) Q:Y=""
  1. .E S Y=$E(DIQZ,+$E(A,2,9),$P(A,",",2)) Q:Y?." "
  1. .D W
  1. I DL#2 S DIQZ=$O(^DD(DD,"GL",N,0,0)) G N:DIQZ="" S O=0,X=+$P(^DD(DD,DIQZ,0),U,2) X:$D(DICS) DICS E G N
  1. E G MISSAUD:N'>0 S X=DD,O=-1,@("D"_(DL\2)_"=N") Q:$$STOP I $D(DSC(X)) X DSC(X) E G N ;we've found a new sub-entry
  1. S DD(DL)=DD,D(DL)=D,N(DL)=N,DL=DL+1,DIQAUDD(DL)=DIQZ S:+N'=N N=""""_N_"""" S D=D_N_",",N=O,DD=X ;down a level
  1. FIND1 I DL#2=0 S N=0 N DIQAUDR K:$G(DIQAUDE) @("DIQE("_DIQAUDE_")") G N ;let's look for the 1st multiple
  1. WP I '$D(DIQS),$P(^DD(DD,.01,0),U,2)["W" S O=$$LABEL^DIALOGZ(DD,.01),C=$P(^DD(DD,.01,0),U,2) D S DL=DL-1 D WPAUD($G(DIQAUDD(DL)),1) G UP:S Q
  1. .N DIWF,DIWL,DIWR,DN,N,DD ;Word-processing field
  1. .D DIQ^DIWW I $D(DN),'DN S S=0
  1. S N=-1 D 1(DA) Q:'S
  1. UP S DL=DL-1,D=D(DL),DD=DD(DL),N=N(DL) Q:$$STOP G N ;go back UP a level
  1. ;
  1. MISSAUD I $G(DIQAUDE) S DIQE=DIQAUDE(0)_"," F S DIQE=$O(^DIA(DIQDD,"B",DIQE)) Q:'DIQE Q:DIQE-DIQAUDE Q:$$STOP I '$D(@("DIQE("_DIQE_")")) D ;SHOW MISSING ENTRIES THAT WERE CAPTURED BY AUDIT TRAIL
  1. .N E,DIQEMISS
  1. .S E="" F S E=$O(^DIA(DIQDD,"B",DIQE,E),-1) Q:'E Q:$$STOP I $P($G(^DIA(DIQDD,E,0)),U,3)=(DIQAUDD(DL)_",.01") D:'$G(DIQEMISS) D WRITEAUD
  1. ..D WRITE($$LABEL^DIALOGZ(DD,.01)_":") W ! S DIQEMISS=1 ;Write the label of the missing multiple
  1. G UP
  1. ;
  1. ;
  1. WPAUD(FLD,DIQCHNGD) N DIWF,DIWL,DIWR,E,O,Z,W,N ;DIQCHNGD=0 means FLD is currently deleted.
  1. Q:'$G(FLD)
  1. S E="",DIWF=$E("N",C["L")_"W|",DIWL=7,DIWR=IOM
  1. F S E=$O(DIQAUD(FLD,E),-1) Q:'E Q:$$STOP D
  1. .S W=""
  1. .I $D(^DIA(DIQDD,E,0)) S Z=$P(^(0),U,4),W=W_" on "_$$FMTE^DILIBF($P(^(0),U,2),"IL") I Z]"" S W=W_" by User #"_Z
  1. .S Z=$G(^(4.1)),O=$P(Z,U),Z=$P(Z,U,2) I O,$D(^DIC(19,O,0)) S W=W_" ("_$P(^(0),U)_" Option)"
  1. .I Z S O=+Z,Z=$P(Z,";",2) I Z]"",$D(@(U_Z_O_",0)")) S W=W_" ("_$P(^(0),U)_" Protocol)"
  1. .S X=$O(^DIA(DIQDD,E,2.14,0)) ;Do we have old text stored for this audited event?
  1. .I 'DIQCHNGD,X S W=$TR($$EZBLD^DIALOG(8197.1),"""")_W_":" S DIQCHNGD=1 ;'DELETED'
  1. .E I X S W="Changed"_W_" from:" S DIQCHNGD=1
  1. .E S W=$$EZBLD^DIALOG(8197.3)_W S DIQCHNGD=0 ;'CREATED'
  1. .W ?4 D WRITE(W)
  1. .S W=0,X="" F D S W=$O(^DIA(DIQDD,E,2.14,W)) Q:W'>0!(S=0) S X=^(W,0) D ^DIWP D
  1. ..N W D LF
  1. .D ^DIWW
  1. K DIQAUD(FLD)
  1. D LF Q
  1. ;
  1. END Q:$$STOP
  1. F DIQZ=0:0 S DIQZ=$O(DIQAUD(DIQZ)) Q:'DIQZ I $D(^DD(DD,DIQZ,0)) D ;write out audited DELETED fields
  1. .N D W ?2,$P(^(0),U),":" I $P(^(0),U,2) D WPAUD(DIQZ,0) Q
  1. .D PRINTAUD(DIQZ) Q:$$STOP
  1. I S,$G(DIQ(0))["C",$D(@(D_"0)")) D ^DIQ1 ;Computed fields at this level -- ONLY IF ENTRY EXISTS
  1. Q
  1. ;
  1. W S O=$$LABEL^DIALOGZ(DD,W),C=$P(^DD(DD,W,0),U,2) I $D(DICS) X DICS E Q
  1. VP I C["V" D I $D(^DD(DD,W,0)) ;get naked back
  1. .N F S F=$P(Y,";",2) I F["(",$D(@("^"_F_"0)"))#2 S F=+$P(^(0),U,2) I F S F=$O(^DD(DD,W,"V","B",F,0)) I F,$D(^DD(DD,W,"V",F,0)) S O=O_" ("_$P(^(0),U,4)_")"
  1. D Y
  1. I $D(DIQS) S:$D(@(DIQS_"O)")) @(DIQS_"O)=Y") S:$D(^(W)) @(DIQS_"W)=Y") Q
  1. W2 ;from DIQ1
  1. N DIQX
  1. S O=$E(O,1,253-$L(Y))_": "_Y
  1. D I $L(O)+DIQX>IOM!$D(DIQAUD(W)) Q:$$STOP D
  1. .S DIQX=$S($X:$X+1\40+1*40,W=.01!(W=.001):0,1:2)
  1. W ?DIQX
  1. D WRITE(O) D:$D(DIQAUD(W)) PRINTAUD(W) Q
  1. ;
  1. PRINTAUD(FLD) N E
  1. S E="" F S E=$O(DIQAUD(FLD,E),-1) Q:'E Q:$$STOP D WRITEAUD
  1. K DIQAUD(FLD) S @("DIQE("_DIQAUDE_")")=""
  1. D LF Q
  1. ;
  1. WRITEAUD N O,Z,W,N ;WRITE AN ENTRY FROM THE AUDIT TRAIL
  1. S O=$G(^DIA(DIQDD,E,2)),N=$G(^(3))
  1. I N="" S W=$$EZBLD^DIALOG(8197.1,O) ;**CCO/NI 'DELETED'
  1. E S W=$S(O]"":$$EZBLD^DIALOG(8197.2,O),1:$$EZBLD^DIALOG(8197.3)) ;**CCO/NI 'CHANGED FROM' OR 'CREATED'
  1. I $D(^DIA(DIQDD,E,0)) S:$P(^(0),U,6)="i" W=$$EZBLD^DIALOG(8197.5) K Z S Z(3)=$P(^(0),U,4),Z(2)=$$DATE^DIUTL($P(^(0),U,2)),Z(1)=W,W=$$EZBLD^DIALOG(8197.4,.Z) ;**'ACCESSED'; CCO/NI WHEN, WHO
  1. W ?4 D WRITE(W)
  1. K W S Z=$G(^DIA(DIQDD,E,4.1)),O=$P(Z,U),Z=$P(Z,U,2) I O,$D(^DIC(19,O,0)) S W=" ("_$P(^(0),U)_" Option)"
  1. I Z S O=+Z,Z=$P(Z,";",2) I Z]"",$D(@(U_Z_O_",0)")) S W=" ("_$P(^(0),U)_" Protocol)"
  1. I $D(W) D:$X+$L(W)>79 LF Q:'S W ?(79-$L(W)),W
  1. Q
  1. ;
  1. WRITE(DIQW) N DIQWL
  1. F S DIQWL=IOM-$X W $E(DIQW,1,DIQWL) S DIQW=$E(DIQW,DIQWL+1,999) Q:DIQW="" Q:$$STOP
  1. Q
  1. ;
  1. Y ;PRINT TEMPLATES CALL HERE NAKED REFERENCE IS TO ^DD(FILE#,FIELD#,0)
  1. I $G(Y)="" S Y="" Q
  1. TYPE I C["t" X $$OUTPUT^DIETLIBF Q ;DATA TYPE IS IN FILE .81!
  1. I C["O",$D(^(2)) X ^(2) Q
  1. S I C["S" D PARSET($$LANGSET,.Y) Q
  1. I C["P",$D(@("^"_$P(^(0),U,3)_"0)")) S C=$P(^(0),U,2) Q:'$D(^(+Y,0)) S Y=$P(^(0),U) I $D(^DD(+C,.01,0)) S C=$P(^(0),U,2) G S
  1. I C["V",+Y,Y["(",$D(@("^"_$P(Y,";",2)_"0)")) S C=$P(^(0),U,2) Q:'$D(^(+Y,0)) S Y=$P(^(0),U) I $D(^DD(+C,.01,0)) S C=$P(^(0),U,2) G S
  1. Q:C'["D" Q:'Y
  1. D S Y=$$NAKED^DIUTL("$$DATE^DIUTL(Y)") Q ;GENERAL DATE OUTPUT --NEEDS TO PRESERVE THE NAKED INDICATOR
  1. ;
  1. ;
  1. ;
  1. SET(FILE,FIELD,Y) ;GET EXTERNAL VERSION OF 'Y' FOR A SET FIELD
  1. I $D(^DD(FILE,FIELD,0)) D PARSET($$LANGSET,.Y)
  1. Q Y
  1. ;
  1. PARSET(C,Y) ;FOR SPECIFIER C, CHANGE Y TO ITS EXTERNAL VALUE called from DIDU & DDS11
  1. N DIN,%
  1. S DIN=Y,C=";"_C,%=$F(C,";"_Y_":") I % S Y=$P($E(C,%,999),";")
  1. Q
  1. ;
  1. LANGSET() ;USES NAKED REFERENCE TO ^DD(FILE,FIELD,0)
  1. N C S C=$P(^(0),U,3)
  1. I $G(DUZ("LANG"))>1 Q $$NAKED^DIUTL("$$SETOUT^DIALOGZ")
  1. Q C
  1. ;
  1. ;
  1. DT D D:Y W Y Q
  1. H G H^DIO2
  1. ;
  1. STOP() D LF Q 'S
  1. LF I '$D(DIQS),$X W ! S S=S+1
  1. I '$D(DIOT(2)),$G(IOSL),$S('$D(DIWF):1,$P(DIWF,"B",2):$P(DIWF,"B",2),1:1)+$Y'<IOSL D
  1. .I '$D(DX(0)),$G(IOST)?1"C".E D:S>(IOSL-3) Q
  1. ..N X,Y,DIR S DIR(0)="E" D ^DIR W ! S S='$D(DIRUT)
  1. .I $G(^UTILITY($J,1))?1U1P1E.E D S:Y=U!($D(DTOUT))!($D(DUOUT)) S=0
  1. ..N S X ^(1)
  1. .S $Y=0
  1. Q
  1. ;
  1. EN1 S DRX=DR
  1. EN2 S DR=$P(DRX,";",1),DRX=$P(DRX,";",2,999) D EN W ! G EN2:DRX]""&S
  1. K DRX Q
  1. EN ;
  1. N C,O,W,N,E,Z,D,DD S S=0 S:$D(DICSS) DICS=DICSS
  1. I '$D(IOST)!'$D(IOSL)!'$D(IOM) S IOP="HOME" D ^%ZIS Q:POP S:'$G(IOM) IOM=80
  1. G Q:'$D(@(DIC_"0)")) S U="^",DD=+$P(^(0),U,2),DK=DD
  1. I '$D(DR) S N=-1,O=""
  1. E S N=$P(DR,":"),N=$S(0[N:-1,+N=N:N-.000001,1:$E(N,1,$L(N)-1)_$C($A(N,$L(N))-1)),O=$P(DR,":",DR[":"+1) G EN1:DR[";"
  1. S E="N<0" I O]"" S E=E_"!(N]"""_$S(+O=O:"?"")!(N>"_O_")",1:O_""")")
  1. I '$D(DIQ(0)) N DIQ S DIQ(0)=""
  1. D R S DA=D0
  1. Q K C,O,W,N,E,Z,D,DD,IOP Q
  1. ;
  1. COM X $P(^(0),U,5,99) S C=$P($P(C,"J",2),",",2) I C?1N.E,X S X=$J(X,0,C)