1 | DIC0 ;SFISC/TKW-Lookup routine utilities called by DIC ;12/10/99 12:10
|
---|
2 | ;;22.0;VA FileMan;**4,20**;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | D ; Reset back to starting index for lookup.
|
---|
6 | S D=DINDEX("START") K DINDEX S (DINDEX,DINDEX("START"))=D,DINDEX("WAY")=1
|
---|
7 | S:$D(DID(1)) DID(1)=2
|
---|
8 | N DIFLAGS S DIFLAGS="4l"_$P("M^",U,DIC(0)["M")
|
---|
9 | D INDEX^DICUIX(.DIFILEI,DIFLAGS,.DINDEX,"",.DIVAL)
|
---|
10 | Q
|
---|
11 | ;
|
---|
12 | SETVAL ; If custom lookup routine (like MTLU) comes in to entry point after ASK, we need to set up the lookup values.
|
---|
13 | K DIVAL,DIALLVAL D CHKVAL
|
---|
14 | I DIVAL(0) D CHKVAL1(DINDEX("#"),.DIVAL,DIC(0),DIC(0),.DIALLVAL)
|
---|
15 | Q
|
---|
16 | ;
|
---|
17 | INIT ; Initialize variables at all entry points in ^DIC.
|
---|
18 | I '$D(DIFILEI)#2 D GETFILE(.DIC,.DIFILEI,.DIENS) Q:DIFILEI=""
|
---|
19 | I '$D(@(DIC_"0)")),'$D(DIC("P")),$E(DIC,1,6)'="^DOPT(" S DIC("P")=$$GETP^DIC0(DIFILEI) I DIC("P")="" S Y=-1 D Q^DIC2 Q
|
---|
20 | I $G(DO)="" K DO D GETFA^DIC1(.DIC,.DO)
|
---|
21 | S (DINDEX,DINDEX("START"))=D,DINDEX("WAY")=1
|
---|
22 | D INDEX^DICUIX(.DIFILEI,"4l",.DINDEX,"",.DIVAL)
|
---|
23 | I DIC(0)["V" S DIASKOK=1
|
---|
24 | S Y=-1 I DIC(0)["Z" K Y(0)
|
---|
25 | Q
|
---|
26 | ;
|
---|
27 | CHKVAL ; Check lookup values input by user.
|
---|
28 | N I I $G(X)="" S X=$G(X(1))
|
---|
29 | S DIVAL(0)=0,DIVAL(1)=X F I=2:1:DINDEX("#") S DIVAL(I)=$G(X(I))
|
---|
30 | N J,DIOUT S DIOUT=0
|
---|
31 | F I=1:1:DINDEX("#") S J=$G(DIVAL(I)) I J]"" D Q:DIOUT
|
---|
32 | . I DINDEX("#")>1 S X(I)=J
|
---|
33 | . I J["^" S (DUOUT,DIOUT)=1,DIVAL(0)=0 Q
|
---|
34 | . I J?1."?" K DIVAL S DIVAL(0)=0,X=$E(J,1,2),DIOUT=1 Q
|
---|
35 | . S DIVAL(0)=DIVAL(0)+1 Q
|
---|
36 | Q
|
---|
37 | ;
|
---|
38 | CHKVAL1(DIXNO,DIVAL,DIFLAGS,DIC0,DIALLVAL) ; Check for errors with values, flags,index.
|
---|
39 | N DIERROR,I S DIALLVAL=1 D
|
---|
40 | . I '$D(DIC0),DIFLAGS'["l" D Q:$G(DIERROR)
|
---|
41 | . . S I=$O(DIVAL(99999),-1) I I>DIXNO S DIERROR=8093 Q
|
---|
42 | . . S:DIXNO>1&(DIFLAGS["M") DIERROR=8095 Q
|
---|
43 | . F I=1:1:DIXNO S DIVAL(I)=$G(DIVAL(I)) D:DIVAL(I)=""
|
---|
44 | . . I DIFLAGS["X",DIFLAGS'["l" S DIERROR=8094 Q
|
---|
45 | . . S DIALLVAL=0 Q
|
---|
46 | . Q
|
---|
47 | I $D(DIERROR) D
|
---|
48 | . I '$D(DIC0) D ERR^DICF4(DIERROR) Q
|
---|
49 | . K DIVAL S DIVAL(0)=0 Q:DIC0'["E" W $C(7),!,$$EZBLD^DIALOG(DIERROR) Q
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | CHKVAL2(DIXNO,DIVAL,DIC0,DDS) ; Check lookup values for control characters or too long.
|
---|
53 | N I,J,DIER S DIER=""
|
---|
54 | F I=1:1:DIXNO S J=$G(DIVAL(I)) D:J]"" Q:DIER
|
---|
55 | . I J'?.ANP S DIER=204 Q
|
---|
56 | . I J?1.N.1".".N,($L($P(J,"."))>25!($L($P(J,".",2))>25)) S DIER=208 Q
|
---|
57 | . I ($L(J)-255)>0 S DIER=209
|
---|
58 | . Q
|
---|
59 | Q:'DIER
|
---|
60 | D:DIC0["Q"
|
---|
61 | . W $C(7) Q:DIC(0)'["E"
|
---|
62 | . I '$D(DDS) W !,$$EZBLD^DIALOG(DIER) Q
|
---|
63 | . N DDH S DDH=1,DDH(1,"T")=" ** "_$$EZBLD^DIALOG(DIER)
|
---|
64 | . S DDC=7,DDD=1 D LIST^DDSU
|
---|
65 | . Q
|
---|
66 | K DIVAL S DIVAL(0)=0
|
---|
67 | Q
|
---|
68 | ;
|
---|
69 | KILL2 K DIVAL,DIALLVAL
|
---|
70 | KILL1 K DIFILEI,DINDEX,DIMAXLEN,DIENS Q
|
---|
71 | ;
|
---|
72 | GETFILE(DIC,DIFILE,DIENS) ; Return file number, global references, IEN string and KEY fields data.
|
---|
73 | S DIFILE="" I $G(DIC)="" Q
|
---|
74 | I +$P(DIC,"E")'=DIC N DIDIC M DIDIC=DIC N DIC S DIDIC=$$CREF^DILF(DIDIC),DIDIC=$NA(@DIDIC),DIDIC=$$OREF^DILF(DIDIC) M DIC=DIDIC K DIDIC
|
---|
75 | N DA
|
---|
76 | I +$P(DIC,"E")=DIC D
|
---|
77 | . S DIFILE=DIC,DIC=$G(^DIC(DIC,0,"GL")) Q:DIC]""
|
---|
78 | . S DIC=DIFILE,DIFILE="" Q
|
---|
79 | E D
|
---|
80 | . S DIFILE=$G(@(DIC_"0)")) I DIFILE]"" S DIFILE=+$P(DIFILE,U,2) Q
|
---|
81 | . S DIFILE=+$G(DIC("P")) Q:DIFILE
|
---|
82 | . S DIFILE=$$FILENUM^DILIBF(DIC) Q
|
---|
83 | Q:DIFILE=""
|
---|
84 | S DIENS=","
|
---|
85 | I DIC(0)'["p" D SETIEN(DIC,DIFILE,.DIENS) Q:DIFILE=""
|
---|
86 | S DIFILE(DIFILE,"O")=DIC
|
---|
87 | S DIFILE(DIFILE)=$$CREF^DILF(DIC)
|
---|
88 | N I S I=$O(^DD("KEY","AP",DIFILE,"P",0)) Q:'I
|
---|
89 | S DIFILE(DIFILE,"KEY","IEN")=DIENS
|
---|
90 | N F,X F F=0:0 S F=$O(^DD("KEY",I,2,F)) Q:'F S X=$G(^(F,0)) D
|
---|
91 | . S DIFILE(DIFILE,"KEY",+$P(X,U,2),+$P(X,U,3),+X)="" Q
|
---|
92 | Q
|
---|
93 | ;
|
---|
94 | SETIEN(DIC,DIFILE,DIENS) ; Set DIENS from global root
|
---|
95 | N F,G,I,J,K,DIDA
|
---|
96 | S F=$$FNO^DILIBF(DIFILE) I F="" S DIFILE="" Q
|
---|
97 | S G=$G(^DIC(F,0,"GL")) I G="" S DIFILE="" Q
|
---|
98 | S F=$P(DIC,G,2)
|
---|
99 | S K=0 F I=1:2 S J=$P(F,",",I) Q:J="" S K=K+1,J(K)=J
|
---|
100 | S DIDA="" F J=1:1:K S DIDA(K+1-J)=J(J)
|
---|
101 | S DIENS=$$IENS^DILF(.DIDA) Q
|
---|
102 | ;
|
---|
103 | GETP(DISUB) ; Return DIC("P") for a subfile DIFILE.
|
---|
104 | N DIFILE S DIFILE=$G(^DD(DISUB,0,"UP")) Q:'DIFILE ""
|
---|
105 | N DIFIELD S DIFIELD=$O(^DD(DIFILE,"SB",DISUB,0)) Q:'DIFIELD ""
|
---|
106 | Q $P($G(^DD(DIFILE,DIFIELD,0)),U,2)
|
---|
107 | ;
|
---|
108 | DSPH ; Display name of indexed fields when DIC(0)["T" (called from DICF2)
|
---|
109 | Q:$G(DS(0,"HDRDSP",DIFILEI)) S DS(0,"HDRDSP",DIFILEI)=1
|
---|
110 | W ! N I S I=($G(DICR))*2 W:I ?I
|
---|
111 | W " Lookup: "
|
---|
112 | I $G(DICR) S I=$G(@(DIC_"0)")) I I]"" W $P(I,U)_" "
|
---|
113 | F I=1:1:DINDEX("#") W DINDEX(I,"PROMPT")_$P(", ^",U,I<DINDEX("#"))
|
---|
114 | Q
|
---|
115 | ;
|
---|
116 | ; Error messages:
|
---|
117 | ; 204 The input value contains control character
|
---|
118 | ; 349 String too long by |1| character(s)!
|
---|
119 | ; 8093 Too many lookup values for this index.
|
---|
120 | ; 8094 Not enough lookup values provided for an e
|
---|
121 | ; 8095 Only one compound index allowed on a looku
|
---|
122 | ;
|
---|