1 | DIEVK1 ;SFISC/MKO-KEY VALIDATION ;10:42 AM 30 Sep 1998
|
---|
2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | BUILD(DIVKFDA,DIVKFLAG) ;Loop thru FDA and load key info
|
---|
6 | N DIVKEYOK,DIVKFIL,DIVKFLD,DIVKIENS,DIVKQUIT
|
---|
7 | ;
|
---|
8 | S DIVKEYOK=1,DIVKFIL=0
|
---|
9 | F S DIVKFIL=$O(@DIVKFDA@(DIVKFIL)) Q:'DIVKFIL D Q:$G(DIVKQUIT)
|
---|
10 | . Q:'$D(^DD("KEY","F",DIVKFIL))
|
---|
11 | . D:$G(DIVKFLAG)["K" GETPKEY(DIVKFIL)
|
---|
12 | . S DIVKIENS=""
|
---|
13 | . F S DIVKIENS=$O(@DIVKFDA@(DIVKFIL,DIVKIENS)) Q:DIVKIENS="" D Q:$G(DIVKQUIT)
|
---|
14 | .. I $G(DIVKFLAG)["K",$E(DIVKIENS)="?",$E(DIVKIENS,2)'="+",'$$KFLD(DIVKFIL,DIVKIENS,DIVKFDA) S DIVKEYOK=0 I $G(DIVKFLAG)["Q" S DIVKQUIT=1 Q
|
---|
15 | .. S DIVKFLD=0
|
---|
16 | .. F S DIVKFLD=$O(@DIVKFDA@(DIVKFIL,DIVKIENS,DIVKFLD)) Q:'DIVKFLD D BLDFLD(DIVKFIL,DIVKIENS,DIVKFLD)
|
---|
17 | Q DIVKEYOK
|
---|
18 | ;
|
---|
19 | BLDFLD(DIVKFIL,DIVKIENS,DIVKFLD) ;Build key/index info on a given field
|
---|
20 | ; ^TMP("DIKK",$J,"L",key) = rfile^ui^priority
|
---|
21 | ; ... ,file,iens) = ""
|
---|
22 | ; ... ,"UIR") = uir
|
---|
23 | ; ... ,"SS",n) = file^field^maxlen
|
---|
24 | N DIVKEY,DIVKPRI,DIVKRFIL,DIVKSS,DIVKUI,DIVKUIR
|
---|
25 | ;
|
---|
26 | S DIVKEY=0
|
---|
27 | F S DIVKEY=$O(^DD("KEY","F",DIVKFIL,DIVKFLD,DIVKEY)) Q:'DIVKEY D
|
---|
28 | . Q:$D(^TMP("DIKK",$J,"L",DIVKEY,DIVKFIL,DIVKIENS))#2 S ^(DIVKIENS)=""
|
---|
29 | . Q:$D(^TMP("DIKK",$J,"L",DIVKEY))#2
|
---|
30 | . ;
|
---|
31 | . D LOADKEY^DIKK1(DIVKEY)
|
---|
32 | . S DIVKRFIL=$P($G(^DD("KEY",DIVKEY,0)),U),DIVKUI=$P($G(^(0)),U,4),DIVKPRI=$P($G(^(0)),U,3)
|
---|
33 | . S ^TMP("DIKK",$J,"L",DIVKEY)=DIVKRFIL_U_DIVKUI_U_DIVKPRI
|
---|
34 | . Q:'DIVKRFIL!'DIVKUI
|
---|
35 | . D XRINFO^DIKCU2(DIVKUI,.DIVKUIR,"","","","",.DIVKSS)
|
---|
36 | . S ^TMP("DIKK",$J,"L",DIVKEY,"UIR")=DIVKUIR
|
---|
37 | . M ^TMP("DIKK",$J,"L",DIVKEY,"SS")=DIVKSS
|
---|
38 | Q
|
---|
39 | ;
|
---|
40 | GETPKEY(KFIL) ;Get fields in primary key for file KFIL
|
---|
41 | ; ^TMP("DIKK",$J,"P",kfile) = key^ui#^uifile^uiname
|
---|
42 | ; ... ,file,field) = seq#
|
---|
43 | ;
|
---|
44 | N FIL,FLD,I,KEY,SEQ,UI
|
---|
45 | S KEY=$O(^DD("KEY","AP",KFIL,"P",0)) Q:'KEY
|
---|
46 | S I=0 F S I=$O(^DD("KEY",KEY,2,I)) Q:'I D
|
---|
47 | . Q:$D(^DD("KEY",KEY,2,I,0))[0 S FLD=$P(^(0),U),FIL=$P(^(0),U,2),SEQ=$P(^(0),U,3)
|
---|
48 | . Q:'FLD!'FIL!'SEQ
|
---|
49 | . S ^TMP("DIKK",$J,"P",KFIL,FIL,FLD)=SEQ
|
---|
50 | I $D(^TMP("DIKK",$J,"P",KFIL)) D
|
---|
51 | . S UI=$P(^DD("KEY",KEY,0),U,4)
|
---|
52 | . S ^TMP("DIKK",$J,"P",KFIL)=KEY_U_UI_U_$P($G(^DD("IX",+UI,0)),U,1,2)
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | KFLD(KFIL,IENS,FDA) ;Check that at least one primary key field is in FDA
|
---|
56 | N FIL,FLD,KEY,OK,SEQ
|
---|
57 | S KEY=+$G(^TMP("DIKK",$J,"P",KFIL)) Q:'KEY 1
|
---|
58 | S OK=0
|
---|
59 | S FIL=0 F S FIL=$O(^TMP("DIKK",$J,"P",KFIL,FIL)) Q:'FIL D Q:OK
|
---|
60 | . S FLD=0 F S FLD=$O(^TMP("DIKK",$J,"P",KFIL,FIL,FLD)) Q:'FLD D Q:OK
|
---|
61 | .. S:"@"'[$G(@FDA@(FIL,IENS,FLD)) OK=1
|
---|
62 | D:'OK ERR746(KFIL,KEY,IENS)
|
---|
63 | Q OK
|
---|
64 | ;
|
---|
65 | FINDCONV(DIVKIENS,DIVKFIEN) ;Replace ?n in DIVKIENS with actual ien's
|
---|
66 | N I,N,P
|
---|
67 | F I=1:1:$L(DIVKIENS,",")-1 D
|
---|
68 | . S P=$P(DIVKIENS,",",I) Q:P'["?"
|
---|
69 | . S N=$G(@DIVKFIEN@($TR(P,"?+"))) Q:'N
|
---|
70 | . S $P(DIVKIENS,",",I)=+$G(@DIVKFIEN@($TR(P,"?+")))
|
---|
71 | Q DIVKIENS
|
---|
72 | ;
|
---|
73 | ERR740(FILE,KEY,IENS) ;New values are invalid because they create a duplicate
|
---|
74 | ;Key '|1|' for the |2| file.
|
---|
75 | N P,PEXT
|
---|
76 | S P(1)=$P(^DD("KEY",KEY,0),U,2)
|
---|
77 | S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
|
---|
78 | S PEXT("FILE")=FILE,PEXT("KEY")=KEY,PEXT("IENS")=IENS
|
---|
79 | D BLD^DIALOG(740,.P,.PEXT)
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | ERR742(FILE,FIELD,KEY,IENS) ; The value of field |1| in the |2| file
|
---|
83 | ;cannot be deleted because that field is part of the '|3|' key.
|
---|
84 | N P,PEXT
|
---|
85 | S P(1)=$$FLDNM^DIEFU(FILE,FIELD)
|
---|
86 | S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
|
---|
87 | S P(3)=$P(^DD("KEY",KEY,0),U,2)
|
---|
88 | S PEXT("FILE")=FILE,PEXT("FIELD")=FIELD,PEXT("IENS")=IENS
|
---|
89 | D BLD^DIALOG(742,.P,.PEXT)
|
---|
90 | Q
|
---|
91 | ;
|
---|
92 | ERR744(FILE,FIELD,KEY,IENS) ;Field |1| is part of Key '|2|', but the
|
---|
93 | ;field has not been assigned a value.
|
---|
94 | N P,PEXT
|
---|
95 | S P(1)=$$FLDNM^DIEFU(FILE,FIELD)
|
---|
96 | S P(2)=$P(^DD("KEY",KEY,0),U,2)
|
---|
97 | S PEXT("FILE")=FILE,PEXT("FIELD")=FIELD,PEXT("IENS")=IENS
|
---|
98 | D BLD^DIALOG(744,.P,.PEXT)
|
---|
99 | Q
|
---|
100 | ;
|
---|
101 | ERR746(FILE,KEY,IENS) ;At least one field in Primary Key '|1|' must be
|
---|
102 | ;provided in the FDA to look up '|IENS|' in the |2| file.
|
---|
103 | N P,PEXT
|
---|
104 | S P(1)=$P(^DD("KEY",KEY,0),U,2)
|
---|
105 | S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
|
---|
106 | S P("IENS")=IENS
|
---|
107 | S PEXT("FILE")=FILE,PEXT("KEY")=KEY,PEXT("IENS")=IENS
|
---|
108 | D BLD^DIALOG(746,.P,.PEXT)
|
---|
109 | Q
|
---|