[613] | 1 | DIKCUTL3 ;SFISC/MKO-UTILITY OPTION TO MODIFY INDEX ;10:00 AM 12 Nov 2002
|
---|
| 2 | ;;22.0;VA FileMan;**58,68,116**;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;==============================================
|
---|
| 5 | ; KSC(topFile#,.oldLogic,.newLogic,.fieldList)
|
---|
| 6 | ;==============================================
|
---|
| 7 | ;Run old kill logic and/or new set logic.
|
---|
| 8 | ;Recompile input templates and xrefs.
|
---|
| 9 | ;In:
|
---|
| 10 | ; DIKCTOP = top level file #
|
---|
| 11 | ; .DIKCOLD = old kill logic (as loaded by LOADXREF^DIKC1)
|
---|
| 12 | ; .DIKCNEW = new set logic (")
|
---|
| 13 | ; .DIKCFLIS = list of fields for input template compilation
|
---|
| 14 | ;
|
---|
| 15 | ;Called from CREATE^DIKCUTL1 after a new Index is created and edited.
|
---|
| 16 | ;Called from ^DIKKUTL1 if a Uniqueness Index is created or modified.
|
---|
| 17 | ;
|
---|
| 18 | KSC(DIKCTOP,DIKCOLD,DIKCNEW,DIKCFLIS) ;
|
---|
| 19 | D:$D(DIKCOLD)>1 KOLD(DIKCTOP,.DIKCOLD)
|
---|
| 20 | D:$D(DIKCNEW)>1 SNEW(DIKCTOP,.DIKCNEW)
|
---|
| 21 | D:$D(DIKCFLIS)>1 DIEZ(DIKCTOP,.DIKCFLIS)
|
---|
| 22 | D DIKZ(DIKCTOP)
|
---|
| 23 | Q
|
---|
| 24 | ;
|
---|
| 25 | ;===========================
|
---|
| 26 | ; DIEZ(topFile#,.fieldList)
|
---|
| 27 | ;===========================
|
---|
| 28 | ;Loop through file/fields in DIKCFLIS input array.
|
---|
| 29 | ;For each of those fields loop through the ^DIE("AF") index which
|
---|
| 30 | ; contains the iens of the compiled input templates that use that
|
---|
| 31 | ; field. Recompile those templates.
|
---|
| 32 | ;In:
|
---|
| 33 | ; DIKCTOP = top level file #
|
---|
| 34 | ; DIKCFLIS(file#,field#) = ""
|
---|
| 35 | ;
|
---|
| 36 | DIEZ(DIKCTOP,DIKCFLIS) ;
|
---|
| 37 | N DA,DI,DIKCFD,DIKCFL,DIKCIT,DMAX,DNM,X,Y
|
---|
| 38 | ;
|
---|
| 39 | S DIKCFL=0 F S DIKCFL=$O(DIKCFLIS(DIKCFL)) Q:'DIKCFL D
|
---|
| 40 | . S DIKCFD=0 F S DIKCFD=$O(DIKCFLIS(DIKCFL,DIKCFD)) Q:'DIKCFD D
|
---|
| 41 | .. S DIKCIT=0 F S DIKCIT=$O(^DIE("AF",DIKCFL,DIKCFD,DIKCIT)) Q:DIKCIT'>0 D
|
---|
| 42 | ... Q:$D(DIKCIT(DIKCIT))#2 S DIKCIT(DIKCIT)=""
|
---|
| 43 | ... S X=$G(^DIE(DIKCIT,"ROUOLD"))
|
---|
| 44 | ... I X'?1(1A,1"%").7AN D I X'?1(1A,1"%").7AN D UNC^DIEZ(DIKCIT) Q
|
---|
| 45 | .... S X=$P($G(^DIE(DIKCIT,"ROU")),U,2)
|
---|
| 46 | ... K ^DIE("AF",DIKCFL,DIKCFD,DIKCIT),^DIE(DIKCIT,"ROU")
|
---|
| 47 | ... S DMAX=$G(^DD("ROU")),Y=DIKCIT
|
---|
| 48 | ... D EN^DIEZ
|
---|
| 49 | .. ;
|
---|
| 50 | .. I $D(^DD(DIKCFL,DIKCFD)),$P($G(^DIC(DIKCTOP,"%A")),U,2)-DT D
|
---|
| 51 | ... S ^DD(DIKCFL,DIKCFD,"DT")=DT
|
---|
| 52 | Q
|
---|
| 53 | ;
|
---|
| 54 | ;================
|
---|
| 55 | ; DIKZ(topFile#)
|
---|
| 56 | ;================
|
---|
| 57 | ;Recompile cross references on file Y.
|
---|
| 58 | ;In:
|
---|
| 59 | ; Y = top level file #
|
---|
| 60 | ;
|
---|
| 61 | DIKZ(Y) ;
|
---|
| 62 | Q:'$G(Y)
|
---|
| 63 | N DMAX,X
|
---|
| 64 | S X=$G(^DD(Y,0,"DIK")) Q:X=""
|
---|
| 65 | S DMAX=^DD("ROU")
|
---|
| 66 | D EN^DIKZ W !
|
---|
| 67 | Q
|
---|
| 68 | ;
|
---|
| 69 | ;===========================
|
---|
| 70 | ; KOLD(topFile#,.xrefLogic)
|
---|
| 71 | ;===========================
|
---|
| 72 | ;Determine whether to execute old kill logic; if yes, execute.
|
---|
| 73 | ;In:
|
---|
| 74 | ; DIKCTOP = top file #
|
---|
| 75 | ; DIKCOLD(file#,xref#) = array as built by LOADXREF^DIKC1
|
---|
| 76 | ;
|
---|
| 77 | KOLD(DIKCTOP,DIKCOLD) ;
|
---|
| 78 | Q:'$D(DIKCOLD)
|
---|
| 79 | N DIKCFILE,DIKCMSG,DIKCTYP,DIKCUC,DIXR
|
---|
| 80 | N DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y
|
---|
| 81 | ;
|
---|
| 82 | S DIKCFILE=$O(DIKCOLD(0)) Q:'DIKCFILE
|
---|
| 83 | S DIXR=$O(DIKCOLD(DIKCFILE,0)) Q:'DIXR
|
---|
| 84 | S DIKCTYP=$P(DIKCOLD(DIKCFILE,DIXR),U,4)
|
---|
| 85 | ;
|
---|
| 86 | ;Ask before removing Regular index or running kill logic of MUMPS xref
|
---|
| 87 | I DIKCTYP="R" D
|
---|
| 88 | . S DIKCMSG=" Removing old index ..."
|
---|
| 89 | . S DIR("A")="Do you want to delete the data in the old index now"
|
---|
| 90 | . S DIR("B")="YES"
|
---|
| 91 | . S DIR("?",1)=" Enter 'YES' to delete the data in the old index now."
|
---|
| 92 | . S DIR("?",2)=""
|
---|
| 93 | . S DIR("?",3)=" You might answer 'NO' if you know that there is no data in the index, or"
|
---|
| 94 | . S DIR("?",4)=" in order to remove the index, FileMan must loop through a large number"
|
---|
| 95 | . S DIR("?",5)=" of entries, and you would rather wait until a non-peak time to perform"
|
---|
| 96 | . S DIR("?",6)=" deletion. Note, however, that FileMan will use the WHOLE KILL LOGIC to"
|
---|
| 97 | . S DIR("?")=" remove the index, so the looping time may not be an issue."
|
---|
| 98 | E D
|
---|
| 99 | . S DIKCMSG=" Executing old kill logic ..."
|
---|
| 100 | . S DIR("A")="Do you want to execute the old kill logic now"
|
---|
| 101 | . S DIR("?",1)=" Enter 'YES' to execute the original kill logic now."
|
---|
| 102 | . S DIR("?")=" Otherwise, enter 'NO'."
|
---|
| 103 | S DIR(0)="Y"
|
---|
| 104 | F W ! D ^DIR Q:'$D(DUOUT) W $C(7)," Up-arrow not allowed."
|
---|
| 105 | K DIR Q:'Y!$D(DTOUT)
|
---|
| 106 | ;
|
---|
| 107 | ;Write message and call INDEX^DIKC to execute the kill logic
|
---|
| 108 | W !,DIKCMSG
|
---|
| 109 | S DIKCUC="K"_$S(DIKCTOP'=DIKCFILE:"W"_DIKCFILE,1:"")
|
---|
| 110 | S DIKCUC("LOGIC")="DIKCOLD"
|
---|
| 111 | D INDEX^DIKC(DIKCTOP,"","",DIXR,.DIKCUC)
|
---|
| 112 | W " DONE!"
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | ;===========================
|
---|
| 116 | ; SNEW(topFile#,.xrefLogic)
|
---|
| 117 | ;===========================
|
---|
| 118 | ;Determine whether to execute new set logic; if yes, execute.
|
---|
| 119 | ;In:
|
---|
| 120 | ; DIKCTOP = top file #
|
---|
| 121 | ; DIKCNEW(file#,xref#) = array as built by LOADXREF^DIKC1
|
---|
| 122 | ;
|
---|
| 123 | SNEW(DIKCTOP,DIKCNEW) ;
|
---|
| 124 | Q:'$D(DIKCNEW)
|
---|
| 125 | N DIKCFILE,DIKCMSG,DIKCTYP,DIKCUC,DIXR
|
---|
| 126 | N DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y
|
---|
| 127 | ;
|
---|
| 128 | S DIKCFILE=$O(DIKCNEW(0)) Q:'DIKCFILE
|
---|
| 129 | S DIXR=$O(DIKCNEW(DIKCFILE,0)) Q:'DIXR
|
---|
| 130 | S DIKCTYP=$P(DIKCNEW(DIKCFILE,DIXR),U,4)
|
---|
| 131 | ;
|
---|
| 132 | ;Ask before building Regular index or running set logic of MUMPS xref
|
---|
| 133 | I DIKCTYP="R" D
|
---|
| 134 | . S DIKCMSG=" Building new index ..."
|
---|
| 135 | . S DIR("A")="Do you want to build the index now"
|
---|
| 136 | . S DIR("B")="YES"
|
---|
| 137 | . S DIR("?",1)=" Enter 'YES' to loop through all entries in the file and build the index"
|
---|
| 138 | . S DIR("?",2)=" now."
|
---|
| 139 | . S DIR("?",3)=""
|
---|
| 140 | . S DIR("?",4)=" You might answer 'NO' if you know that there is no data in any of the"
|
---|
| 141 | . S DIR("?",5)=" fields being indexed, or if the file has a large number of entries, and"
|
---|
| 142 | . S DIR("?",6)=" you would rather wait until a non-peak time to build the index on a"
|
---|
| 143 | . S DIR("?")=" live system."
|
---|
| 144 | E D
|
---|
| 145 | . S DIKCMSG=" Executing new set logic ..."
|
---|
| 146 | . S DIR("A")="Do you want to cross reference existing data now"
|
---|
| 147 | . S DIR("?",1)=" Enter 'YES' to execute the new set logic now."
|
---|
| 148 | . S DIR("?")=" Otherwise, enter 'NO'."
|
---|
| 149 | S DIR(0)="Y"
|
---|
| 150 | F W ! D ^DIR Q:'$D(DUOUT) W $C(7)," Up-arrow not allowed."
|
---|
| 151 | K DIR Q:'Y!$D(DTOUT)
|
---|
| 152 | ;
|
---|
| 153 | W !,DIKCMSG
|
---|
| 154 | S DIKCUC="S"_$S(DIKCTOP'=DIKCFILE:"W"_DIKCFILE,1:"")
|
---|
| 155 | S DIKCUC("LOGIC")="DIKCNEW"
|
---|
| 156 | D INDEX^DIKC(DIKCTOP,"","",DIXR,.DIKCUC)
|
---|
| 157 | W " DONE!"
|
---|
| 158 | Q
|
---|
| 159 | ;
|
---|
| 160 | EOP ;Issue Press Return to continue prompt
|
---|
| 161 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
| 162 | S DIR(0)="E",DIR("A")="Press RETURN to continue"
|
---|
| 163 | S DIR("?")="Press the RETURN or ENTER key."
|
---|
| 164 | W ! D ^DIR
|
---|
| 165 | Q
|
---|