1 | DIKCUTL1 ;SFISC/MKO-UTILITY OPTION TO MODIFY INDEX ;9:10 AM 7 Aug 2001
|
---|
2 | ;;22.0;VA FileMan;**11,68**;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | CREATE(DIKCTOP,DIKCFILE) ;Create a new index
|
---|
6 | N DIKCF01,DIKCFLIS,DIKCNAME,DIKCNEW,DIKCTLIS,DIKCTYPE,DIKCUSE,DIXR
|
---|
7 | N DA,DDSFILE,DR
|
---|
8 | ;
|
---|
9 | ;Get Type, File, Use, and Name
|
---|
10 | S DIKCTYPE=$$TYPE Q:DIKCTYPE=-1
|
---|
11 | S DIKCF01=$$FILE01(DIKCTOP,DIKCFILE) Q:DIKCF01=-1
|
---|
12 | S DIKCUSE=$$USE(DIKCTYPE) Q:DIKCUSE=-1
|
---|
13 | S DIKCNAME=$$NAME(DIKCF01,DIKCUSE) Q:DIKCNAME=-1
|
---|
14 | ;
|
---|
15 | ;Create the new index in the Index file
|
---|
16 | D ADD(DIKCF01,DIKCFILE,DIKCNAME,DIKCTYPE,DIKCUSE,.DIXR) Q:DIXR=-1
|
---|
17 | ;
|
---|
18 | ;Invoke form to edit index, quit if deleted,
|
---|
19 | ;delete if no short description
|
---|
20 | S DDSFILE=.11,DA=DIXR,DR="[DIKC EDIT]" D ^DDS K DDSFILE,DA,DR
|
---|
21 | Q:$D(^DD("IX",DIXR,0))[0
|
---|
22 | I $P($G(^DD("IX",DIXR,0)),U,3)="" D Q
|
---|
23 | . N DIK,DA
|
---|
24 | . S DIK="^DD(""IX"",",DA=DIXR D ^DIK
|
---|
25 | . W !!," Index definition deleted."
|
---|
26 | ;
|
---|
27 | ;Get new fields list and set logic.
|
---|
28 | ;Modify the trigger logic of fields that trigger fields in the index
|
---|
29 | ;Set new index, recompile input templates and xrefs.
|
---|
30 | D GETFLIST^DIKCUTL(DIXR,.DIKCFLIS)
|
---|
31 | K DIKCTLIS D TRIG^DICR(.DIKCFLIS,.DIKCTLIS)
|
---|
32 | D:$D(DIKCTLIS) DIEZ^DIKCUTL3(" ",.DIKCTLIS)
|
---|
33 | D LOADXREF^DIKC1(DIKCFILE,"","S",DIXR,"","DIKCNEW")
|
---|
34 | D KSC^DIKCUTL3(DIKCTOP,"",.DIKCNEW,.DIKCFLIS)
|
---|
35 | Q
|
---|
36 | ;
|
---|
37 | TYPE() ;Prompt for index type (regular or MUMPS)
|
---|
38 | N DIKCTYPE,DIR,DIROUT,DIRUT,DTOUT,X,Y
|
---|
39 | ;
|
---|
40 | S DIR(0)=".11,.2",DIR("A")="Type of index",DIR("B")="REGULAR"
|
---|
41 | F D Q:$D(DIRUT)!$D(DIKCTYPE)
|
---|
42 | . W ! D ^DIR Q:$D(DIRUT)
|
---|
43 | . I Y="MU",$G(DUZ(0))'="@" D
|
---|
44 | .. W !,$C(7)_"Only programmers can create MUMPS cross references."
|
---|
45 | . E I Y="MU",$P($G(^DD(DIKCTOP,0,"DI")),U)="Y" D
|
---|
46 | .. W !,$C(7)_"Cannot create MUMPS cross references on archived files."
|
---|
47 | . E S DIKCTYPE=Y
|
---|
48 | ;
|
---|
49 | Q $S($D(DIRUT):-1,1:DIKCTYPE)
|
---|
50 | ;
|
---|
51 | FILE01(DIKCTOP,DIKCFILE) ;Return file on which to store xref
|
---|
52 | ;If DIKCFILE is not a subfile, return that file #
|
---|
53 | I DIKCTOP=DIKCFILE Q DIKCFILE
|
---|
54 | ;
|
---|
55 | ;Otherwise, prompt for file on which to store xref
|
---|
56 | N FILE01,FINFO,LEV
|
---|
57 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
58 | ;
|
---|
59 | ;Get info on subfile DICKFILE
|
---|
60 | D FINFO^DIKCU1(DIKCFILE,.FINFO)
|
---|
61 | ;
|
---|
62 | ;Prompt for whether whole file indexes should be created
|
---|
63 | W !
|
---|
64 | S DIR(0)="Y",DIR("B")="Yes"
|
---|
65 | S DIR("?")=" Enter 'Yes' if you want the index to reside at this level."
|
---|
66 | F LEV=0:1:$O(FINFO(""),-1)-1 D Q:$D(DIRUT)!$D(FILE01)
|
---|
67 | . S DIR("A")="Want to index whole "_$S(LEV:"sub",1:"")_"file "_$P(FINFO(LEV),U,3)_" (#"_$P(FINFO(LEV),U)_")"
|
---|
68 | . D ^DIR Q:$D(DIRUT)!'Y
|
---|
69 | . S FILE01=$P(FINFO(LEV),U)
|
---|
70 | ;
|
---|
71 | Q $S($D(DIRUT):-1,'$D(FILE01):DIKCFILE,1:FILE01)
|
---|
72 | ;
|
---|
73 | USE(DIKCTYPE) ;Prompt for Use (Lookup or Lookup & Sorting)
|
---|
74 | ;DIKCTYPE = type of index
|
---|
75 | ;
|
---|
76 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
77 | S DIR(0)=".11,.42"
|
---|
78 | I $G(DIKCTYPE)="MU" D
|
---|
79 | . S DIR("A")="How is this MUMPS cross reference to be used"
|
---|
80 | . S DIR("B")="ACTION"
|
---|
81 | E D
|
---|
82 | . S DIR("A",1)="Want index to be used for Lookup & Sorting"
|
---|
83 | . S DIR("A")=" or Sorting Only"
|
---|
84 | . S DIR("B")="LOOKUP & SORTING"
|
---|
85 | . S DIR(0)=DIR(0)_"^^I X=""A"" W !!,$C(7)_""** Only MUMPS cross references can be ACTION-type cross references. **"" K X"
|
---|
86 | W ! D ^DIR K DIR
|
---|
87 | Q $S($D(DTOUT)!$D(DUOUT):-1,1:Y)
|
---|
88 | ;
|
---|
89 | NAME(DIKCF01,DIKCUSE) ;Get next available index name
|
---|
90 | N DIKCASC,DIKCNAME,DIKCSTRT
|
---|
91 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
92 | ;
|
---|
93 | ;Get next available index name
|
---|
94 | S DIKCSTRT=$S(DIKCUSE="LS":"",1:"A")
|
---|
95 | F DIKCASC=67:1 D Q:DIKCNAME]""
|
---|
96 | . S DIKCNAME=DIKCSTRT_$C(DIKCASC)
|
---|
97 | . I $D(^DD("IX","BB",DIKCF01,DIKCNAME)) S DIKCNAME="" Q
|
---|
98 | . I $D(^DD(DIKCF01,0,"IX",DIKCNAME)) S DIKCNAME="" Q
|
---|
99 | ;
|
---|
100 | ;If not a programmer, return next available index name
|
---|
101 | Q:DUZ(0)'="@" DIKCNAME
|
---|
102 | ;
|
---|
103 | ;Otherwise, prompt for index name
|
---|
104 | W !
|
---|
105 | S DIR(0)=".11,.02"
|
---|
106 | S DIR("A")="Index Name",DIR("B")=DIKCNAME
|
---|
107 | F D Q:$D(X)!$D(DIRUT)
|
---|
108 | . D ^DIR Q:$D(DIRUT)
|
---|
109 | . ;
|
---|
110 | . ;Check response; print message and kill X if invalid
|
---|
111 | . I DIKCUSE="LS",$E(X)="A" D Q
|
---|
112 | .. D NAMERR("Indexes used for Lookup & Sorting cannot start with 'A'")
|
---|
113 | . I DIKCUSE="S",$E(X)'="A" D Q
|
---|
114 | .. D NAMERR("Indexes used for Sorting Only must start with 'A'")
|
---|
115 | . I DIKCUSE="A",$E(X)'="A" D Q
|
---|
116 | .. D NAMERR("Action-type indexes must start with 'A'")
|
---|
117 | . I $D(^DD("IX","BB",DIKCF01,X)) D Q
|
---|
118 | .. D NAMERR("There is already an index defined with this name.")
|
---|
119 | . I $D(^DD(DIKCF01,0,"IX",X)) D Q
|
---|
120 | .. D NAMERR("There is already a cross-reference defined with this name.") Q
|
---|
121 | ;
|
---|
122 | Q $S($D(DIRUT):-1,1:X)
|
---|
123 | ;
|
---|
124 | NAMERR(MSG) ;Invalid index name error
|
---|
125 | W !!,$C(7)_$G(MSG),!
|
---|
126 | K X
|
---|
127 | Q
|
---|
128 | ;
|
---|
129 | ADD(DIKCF01,DIKCFILE,DIKCNAME,DIKCTYPE,DIKCUSE,DIXR) ;
|
---|
130 | ;Add new entry to Index file
|
---|
131 | ;Returns DIXR=-1 if error
|
---|
132 | N DIKCFDA,DIKCIEN
|
---|
133 | S DIKCFDA(.11,"+1,",.01)=DIKCF01
|
---|
134 | S DIKCFDA(.11,"+1,",.02)=DIKCNAME
|
---|
135 | S DIKCFDA(.11,"+1,",.2)=DIKCTYPE
|
---|
136 | S DIKCFDA(.11,"+1,",.4)="F"
|
---|
137 | S DIKCFDA(.11,"+1,",.41)="IR"
|
---|
138 | S:$G(DIKCUSE)]"" DIKCFDA(.11,"+1,",.42)=DIKCUSE
|
---|
139 | S DIKCFDA(.11,"+1,",.5)=$S(DIKCF01=DIKCFILE:"I",1:"W")
|
---|
140 | S DIKCFDA(.11,"+1,",.51)=DIKCFILE
|
---|
141 | S DIKCFDA(.11,"+1,",1.1)="Q"
|
---|
142 | S DIKCFDA(.11,"+1,",2.1)="Q"
|
---|
143 | D UPDATE^DIE("","DIKCFDA","DIKCIEN")
|
---|
144 | I '$D(DIERR) S DIXR=DIKCIEN(1)
|
---|
145 | E D MSG^DIALOG() S DIXR=-1
|
---|
146 | Q
|
---|