1 | DICA1 ;SEA/TOAD-VA FileMan: Updater, Pre-Processor ;11:46 AM 11 May 1999
|
---|
2 | ;;22.0;VA FileMan;**1**;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | CHECK(DIFLAGS,DIFDA,DINUMS,DIRULE,DIOK) ;
|
---|
6 | ; ENTRY POINT--check out the FDA
|
---|
7 | ; subroutine, DIFLAGS passed by value
|
---|
8 | N DIC,DIEN,DIFILE,DIFLD,DIN,DINODE,DINT,DINUM,DIOP
|
---|
9 | N DIOUT1,DIOUT2,DIOUT3,DIRID,DIRIGHT,DISEQ,DITYPE,DIVAL
|
---|
10 | N DIKEYEX
|
---|
11 | FILES ;
|
---|
12 | S DIFILE=0,DIOUT1=0 F D Q:DIOUT1!$G(DIERR)
|
---|
13 | . S DIFILE=$O(@DIFDA@(DIFILE))
|
---|
14 | . I 'DIFILE S DIOUT1=1 Q
|
---|
15 | . S DINODE=$G(^DD(DIFILE,.01,0))
|
---|
16 | . I DINODE="" D Q
|
---|
17 | . . D ERR^DICA3($S('$D(^DD(DIFILE)):401,1:406),DIFILE)
|
---|
18 | . I $P(DINODE,U,2)["W" D Q
|
---|
19 | . . D ERR^DICA3(407,DIFILE)
|
---|
20 | . S DIRID=$$RID^DICU(DIFILE)
|
---|
21 | . ;
|
---|
22 | . ;If we're using primary keys for lookup, get key info
|
---|
23 | . S DIKEYEX=$D(^DD("KEY","F",DIFILE))
|
---|
24 | . I $G(DIFLAGS)["K",DIKEYEX D GETPKEY^DIEVK1(DIFILE)
|
---|
25 | . ;
|
---|
26 | IENS . ;
|
---|
27 | . S DIEN="",DIOUT2=0 F D Q:DIOUT2!$G(DIERR)
|
---|
28 | . . S DIEN=$O(@DIFDA@(DIFILE,DIEN))
|
---|
29 | . . I DIEN="" S DIOUT2=1 Q
|
---|
30 | . . N DIDA D IEN^DICA2(.DIFILE,DIEN,.DIDA,DIRULE,.DIOK) Q:$G(DIERR)
|
---|
31 | . . I 'DIOK S DIOUT1=1,DIOUT2=1 D Q
|
---|
32 | . . . I $E(DIEN,$L(DIEN))'="," D ERR^DICA3(304,"",DIEN) Q
|
---|
33 | . . . D ERR^DICA3(202,"","","","IENS")
|
---|
34 | . . Q:'$$RID(DIFILE,DIEN,DIFDA,DIRID,DIFLAGS,DIKEYEX)
|
---|
35 | . . I $D(@DIFDA@(DIFILE,DIEN,.001))#2 D
|
---|
36 | . . . N DIENS S DIENS=@DIFDA@(DIFILE,DIEN,.001)
|
---|
37 | . . . I $D(@DINUMS@(@DIRULE@("NUM")))[0 D
|
---|
38 | . . . . S @DINUMS@(@DIRULE@("NUM"))=DIENS
|
---|
39 | . . . S @DIRULE@("SAVE",$J,DIFILE,DIEN,.001)=DIENS
|
---|
40 | . . . K @DIFDA@(DIFILE,DIEN,.001)
|
---|
41 | VALUES . . ;
|
---|
42 | . . I DIFLAGS'["E",$G(DIFLAGS)["U"!'DIKEYEX Q
|
---|
43 | . . S DIFLD="",DIOUT3=0 F D Q:DIOUT3!$G(DIERR)
|
---|
44 | . . . S DIFLD=$O(@DIFDA@(DIFILE,DIEN,DIFLD))
|
---|
45 | . . . I DIFLD="" S DIOUT3=1 Q
|
---|
46 | . . . I $G(DIFLAGS)'["U",DIKEYEX D BLDFLD^DIEVK1(DIFILE,DIEN,DIFLD) Q:DIFLAGS'["E"
|
---|
47 | . . . I $E(DIEN)="?",$E(DIEN,2)'="+" Q:DIFLD=.01&(DIFLAGS'["K") I DIFLAGS["K",$D(^TMP("DIKK",$J,"P",DIFILE,DIFILE,DIFLD))#2 Q
|
---|
48 | . . . S DIVAL=$G(@DIFDA@(DIFILE,DIEN,DIFLD))
|
---|
49 | . . . D DTYP^DIOU(DIFILE,DIFLD,.DITYPE)
|
---|
50 | . . . I DITYPE=5 S DINT=DIVAL
|
---|
51 | CONVERT . . . ;
|
---|
52 | . . . I DITYPE'=5 D Q:$G(DIERR)
|
---|
53 | . . . . I DIEN["?"!(DIEN["+") D Q:$G(DIERR)
|
---|
54 | . . . . . I "@"[DIVAL D Q
|
---|
55 | . . . . . . I DIEN["?",$P($G(^DD(DIFILE,DIFLD,0)),U,2)["R" D Q
|
---|
56 | . . . . . . . D ERR712(DIFILE,DIFLD)
|
---|
57 | . . . . . . S DINT=DIVAL
|
---|
58 | . . . . . I DIFLAGS["K",$E(DIEN)'="+",$P($G(^DD(DIFILE,DIFLD,0)),U,5,999)["DINUM",$D(^TMP("DIKK",$J,"P",DIFILE)),$D(^(DIFILE,DIFLD))[0 D Q
|
---|
59 | . . . . . . D ERR^DICA3(520,DIFILE,"",DIFLD,"DINUMed")
|
---|
60 | . . . . . N DA M DA=DIDA
|
---|
61 | . . . . . N DIARG S DIARG="D0"
|
---|
62 | . . . . . N DIMAX S DIMAX=$O(DA(""),-1)
|
---|
63 | . . . . . N DIVAR F DIVAR=1:1:DIMAX S DIARG=DIARG_",D"_DIVAR
|
---|
64 | . . . . . N @DIARG F DIVAR=0:1:DIMAX-1 S @("D"_DIVAR)=DA(DIMAX-DIVAR)
|
---|
65 | . . . . . S:DIMAX @("D"_DIMAX)=DA
|
---|
66 | . . . . . N DIDA D CHK^DIE(DIFILE,DIFLD,"N",DIVAL,.DINT)
|
---|
67 | . . . . E D Q:$G(DIERR)
|
---|
68 | . . . . . N DIVALFLG S DIVALFLG="RU"_$E("Y",DIFLAGS["Y")
|
---|
69 | . . . . . D VAL^DIE(DIFILE,DIEN,DIFLD,DIVALFLG,DIVAL,.DINT)
|
---|
70 | . . . . Q:$D(DINUM)[0
|
---|
71 | . . . . S @DINUMS@(@DIRULE@("NUM"))=DINUM K DINUM
|
---|
72 | . . . S @DIRULE@("FDA",DIFILE,DIEN,DIFLD)=DINT
|
---|
73 | CLEANUP ;
|
---|
74 | I $G(DIERR)!'DIOK K @DIRULE Q
|
---|
75 | K @DIRULE@("L"),@DIRULE@("NUM"),@DIRULE@("OP"),@DIRULE@("ROOT")
|
---|
76 | K @DIRULE@("SEQ"),@DIRULE@("TEMP"),@DIRULE@("UP")
|
---|
77 | S DIN=$NA(@DIRULE@("ORDER")),DIC=0,@DIRULE@("THE END")=""
|
---|
78 | F S DIN=$Q(@DIN) Q:DIN=""!($P(DIN,",",3)'="""ORDER""") D
|
---|
79 | . S DIC=DIC+1,@DIRULE@("NEXT",DIC)=@DIN
|
---|
80 | K @DIRULE@("ORDER"),@DIRULE@("THE END")
|
---|
81 | I DIFLAGS["E" S DIFDA=$NA(@DIRULE@("FDA"))
|
---|
82 | Q
|
---|
83 | ;
|
---|
84 | RID(DIFILE,DIEN,DIFDA,DIRID,DIFLAGS,DIKEYEX) ;
|
---|
85 | N DIC,DIK,DIOK,DIP,DIR
|
---|
86 | ;
|
---|
87 | ;Check required ids
|
---|
88 | S DIP=$P(DIEN,","),DIOK=1
|
---|
89 | F DIC=1:1 S DIR=$P(DIRID,U,DIC) Q:DIR="" D
|
---|
90 | . I DIR=.01 D
|
---|
91 | . . I DIP'?1P.E
|
---|
92 | . . E I DIP["+" D:"@"[$G(@DIFDA@(DIFILE,DIEN,.01))
|
---|
93 | . . . S DIOK=0 D ERR^DICA3(352,DIFILE,DIEN)
|
---|
94 | . . E I DIFLAGS'["K" D:"@"[$G(@DIFDA@(DIFILE,DIEN,.01))
|
---|
95 | . . . S DIOK=0 D ERR^DICA3(351,DIFILE,DIEN)
|
---|
96 | . E I DIP["+" D:"@"[$G(@DIFDA@(DIFILE,DIEN,DIR))
|
---|
97 | . . S DIOK=0 D ERR^DICA3(311,DIFILE,DIEN,DIR)
|
---|
98 | . E D:"@"[$G(@DIFDA@(DIFILE,DIEN,DIR),0)
|
---|
99 | . . S DIOK=0 D ERR712(DIFILE,DIR)
|
---|
100 | ;
|
---|
101 | ;Check that the FDA contains the appropriate key fields
|
---|
102 | Q:'$G(DIKEYEX,1) DIOK
|
---|
103 | ;
|
---|
104 | ;If appropriate, ensure all primary and secondary keys are provided
|
---|
105 | I DIFLAGS'["U",DIP["+" D
|
---|
106 | . S DIR=0 F S DIR=$O(^DD("KEY","F",DIFILE,DIR)) Q:'DIR D
|
---|
107 | . . D:"@"[$G(@DIFDA@(DIFILE,DIEN,DIR))
|
---|
108 | . . . S DIK=0 F S DIK=$O(^DD("KEY","F",DIFILE,DIR,DIK)) Q:'DIK D
|
---|
109 | . . . . S DIOK=0 D ERR744^DIEVK1(DIFILE,DIR,DIK,DIEN)
|
---|
110 | ;
|
---|
111 | ;If appropriate, ensure at least one key field is provided
|
---|
112 | E I $G(DIFLAGS)["K",$E(DIEN)="?",$E(DIEN,2)'="+"!($G(DIFLAGS)["U") D
|
---|
113 | . S:'$$KFLD^DIEVK1(DIFILE,DIEN,DIFDA) DIOK=0
|
---|
114 | Q DIOK
|
---|
115 | ;
|
---|
116 | ERR712(DIFILE,DIFIELD) ;
|
---|
117 | N DIFILNAM S DIFILNAM=$O(^DD(DIFILE,0,"NM","")) S:DIFILNAM?." " DIFILNAM="#"_DIFILE
|
---|
118 | N DIFLDNAM S DIFLDNAM=$$FLDNM^DIEFU(DIFILE,DIFIELD)
|
---|
119 | D ERR^DICA3(712,DIFILE,"",DIFIELD,DIFLDNAM,DIFILNAM)
|
---|
120 | Q
|
---|