| 1 | DIKKUTL3 ;SFISC/MKO-VERIFY KEY INTEGRITY ;3:10 PM  27 Oct 1998 | 
|---|
| 2 | ;;22.0;VA FileMan;;Mar 30, 1999 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | VERIFY(DIKKEY,DIKKTOP,DIKKFILE) ;Verify key integrity | 
|---|
| 6 | N DIKKTEMP,POP,%ZIS | 
|---|
| 7 | ; | 
|---|
| 8 | ;Ask whether to save records in a template | 
|---|
| 9 | S DIKKTEMP=$$ASKTEMP(DIKKTOP) | 
|---|
| 10 | ; | 
|---|
| 11 | ;Select Device | 
|---|
| 12 | S %ZIS=$S($D(^%ZTSK):"Q",1:"") | 
|---|
| 13 | W ! D ^%ZIS Q:$G(POP) | 
|---|
| 14 | K %ZIS,POP | 
|---|
| 15 | ; | 
|---|
| 16 | ;Queue report | 
|---|
| 17 | I $D(IO("Q")) D  Q | 
|---|
| 18 | . N I,ZTSK | 
|---|
| 19 | . S ZTRTN="MAIN^DIKKUTL3" | 
|---|
| 20 | . S ZTDESC="KEY INTEGRITY CHECK" | 
|---|
| 21 | . F I="DIKKEY","DIKKTOP","DIKKFILE","DIKKTEMP" S ZTSAVE(I)="" | 
|---|
| 22 | . D ^%ZTLOAD | 
|---|
| 23 | . I $D(ZTSK)#2 W !,"Report queued!",!,"Task number: "_$G(ZTSK),! | 
|---|
| 24 | . E  W !,"Report canceled!",! | 
|---|
| 25 | . S IOP="HOME" D ^%ZIS | 
|---|
| 26 | ; | 
|---|
| 27 | U IO | 
|---|
| 28 | ; | 
|---|
| 29 | MAIN ;Queued tasks enter here | 
|---|
| 30 | N DIKKHLIN,DIKKFIL,DIKKNAME,DIKKPAGE,DIKKTAB,DIKKUI,DIKKUIFL,DIKKUINM | 
|---|
| 31 | N DIKKIENS,DIKKFLD,DIKKFNAM,DIKKROOT,DIKKSUPP | 
|---|
| 32 | K ^TMP("DIKKUTL",$J) | 
|---|
| 33 | ; | 
|---|
| 34 | ;Check key integrity | 
|---|
| 35 | D INTEG^DIKK(DIKKTOP,"","",DIKKEY,"",1) | 
|---|
| 36 | I $D(DIERR) D MSG^DIALOG() Q | 
|---|
| 37 | ; | 
|---|
| 38 | ;Initialize "global" variables for report | 
|---|
| 39 | S DIKKPAGE=0 | 
|---|
| 40 | S %H=$H D YX^%DTC | 
|---|
| 41 | S DIKKHLIN=$P(Y,"@")_"  "_$P($P(Y,"@",2),":",1,2)_"    PAGE " | 
|---|
| 42 | S DIKKTAB(1)=9,DIKKTAB(2)=41 | 
|---|
| 43 | S DIKKNAME=$P($G(^DD("KEY",DIKKEY,0)),U,2) | 
|---|
| 44 | S DIKKUI=$P($G(^DD("KEY",DIKKEY,0)),U,4) | 
|---|
| 45 | S DIKKUINM=$P($G(^DD("IX",+DIKKUI,0)),U,2),DIKKUIFL=$P($G(^(0)),U) | 
|---|
| 46 | ; | 
|---|
| 47 | ;Print first header | 
|---|
| 48 | W:$E(IOST,1,2)="C-" @IOF | 
|---|
| 49 | D HDR | 
|---|
| 50 | I '$D(^TMP("DIKKTAR",$J)) W !!," ** NO PROBLEMS **" G END | 
|---|
| 51 | ; | 
|---|
| 52 | ;Loop through target error and list problems | 
|---|
| 53 | S DIKKFIL=0 | 
|---|
| 54 | F  S DIKKFIL=$O(^TMP("DIKKTAR",$J,DIKKFIL)) Q:'DIKKFIL!$D(DIRUT)  D | 
|---|
| 55 | . D COLHDR | 
|---|
| 56 | . S DIKKROOT=$$FROOTDA^DIKCU(DIKKFIL) | 
|---|
| 57 | . S DIKKIENS=" " | 
|---|
| 58 | . F  S DIKKIENS=$O(^TMP("DIKKTAR",$J,DIKKFIL,DIKKIENS)) Q:DIKKIENS=""!$D(DIRUT)  D | 
|---|
| 59 | .. D:$D(^TMP("DIKKTAR",$J,DIKKFIL,DIKKIENS,"K",DIKKEY)) KEYERR(DIKKFIL,DIKKIENS,DIKKEY,DIKKROOT) | 
|---|
| 60 | .. S (DIKKSUPP,DIKKFLD)=0 | 
|---|
| 61 | .. F  S DIKKFLD=$O(^TMP("DIKKTAR",$J,DIKKFIL,DIKKIENS,DIKKFLD)) Q:'DIKKFLD!$D(DIRUT)  D FLDERR(DIKKFIL,DIKKIENS,DIKKFLD,DIKKROOT,.DIKKSUPP) | 
|---|
| 62 | .. Q:$D(DIRUT) | 
|---|
| 63 | .. D W() | 
|---|
| 64 | ; | 
|---|
| 65 | END D:'$D(DIRUT) EOPREAD | 
|---|
| 66 | ; | 
|---|
| 67 | ;Save in template, cleanup, and quit | 
|---|
| 68 | D:$G(DIKKTEMP) SAVETEMP(DIKKTEMP) | 
|---|
| 69 | K ^TMP("DIKKTAR",$J) | 
|---|
| 70 | I $D(ZTQUEUED) S ZTREQ="@" | 
|---|
| 71 | E  X $G(^%ZIS("C")) | 
|---|
| 72 | Q | 
|---|
| 73 | ; | 
|---|
| 74 | KEYERR(RFIL,IENS,KEY,ROOT) ; | 
|---|
| 75 | D WRREC(RFIL,IENS,DIKKTAB(1),.ROOT) Q:$D(DIRUT) | 
|---|
| 76 | W ?DIKKTAB(2),"Duplicate Key "_$P($G(^DD("KEY",KEY,0)),U,2)_" (#"_KEY_")" | 
|---|
| 77 | Q | 
|---|
| 78 | ; | 
|---|
| 79 | FLDERR(FIL,IENS,FLD,ROOT,SUPP) ; | 
|---|
| 80 | I '$G(SUPP) D  Q:$D(DIRUT) | 
|---|
| 81 | . D WRREC(FIL,IENS,DIKKTAB(1),.ROOT) Q:$D(DIRUT) | 
|---|
| 82 | . W ?DIKKTAB(2),"Missing Key Field(s):" | 
|---|
| 83 | D W($P($G(^DD(FIL,FLD,0)),U)_" ["_FIL_","_FLD_"]",DIKKTAB(2)+1) | 
|---|
| 84 | S SUPP=1 | 
|---|
| 85 | Q | 
|---|
| 86 | ; | 
|---|
| 87 | WRREC(FILE,IENS,TAB,ROOT) ;Write the record info | 
|---|
| 88 | N DA,DIERR,ENAM,MSG | 
|---|
| 89 | S:$G(ROOT)="" ROOT=$$FROOTDA^DIKCU(FILE) | 
|---|
| 90 | D DA(IENS,.DA) Q:$D(DIRUT) | 
|---|
| 91 | S ENAM=$P($G(@ROOT@(DA,0)),U) | 
|---|
| 92 | S:ENAM]"" ENAM=$$EXTERNAL^DILFD(FILE,.01,"",ENAM,"MSG") | 
|---|
| 93 | W ?TAB,$S(ENAM]"":ENAM,1:"Unknown record name") | 
|---|
| 94 | Q | 
|---|
| 95 | ; | 
|---|
| 96 | W(STR,TAB,KWN) ;Write STR | 
|---|
| 97 | I $Y+3+$G(KWN)'<IOSL D  Q:$D(DIRUT) | 
|---|
| 98 | . D EOP Q:$D(DIRUT) | 
|---|
| 99 | . D HDR,COLHDR | 
|---|
| 100 | W !?+$G(TAB),$G(STR) | 
|---|
| 101 | Q | 
|---|
| 102 | ; | 
|---|
| 103 | EOP ;Check whether task should be stopped | 
|---|
| 104 | I $D(ZTQUEUED),$$S^%ZTLOAD S (ZTSTOP,DIRUT)=1 Q | 
|---|
| 105 | D EOPREAD Q:$D(DIRUT) | 
|---|
| 106 | W @IOF | 
|---|
| 107 | Q | 
|---|
| 108 | ; | 
|---|
| 109 | EOPREAD ; | 
|---|
| 110 | Q:$E(IOST,1,2)'="C-"!$D(ZTQUEUED) | 
|---|
| 111 | N DIR,DIROUT,DTOUT,DUOUT,X,Y | 
|---|
| 112 | S DIR(0)="E" W ! D ^DIR | 
|---|
| 113 | Q | 
|---|
| 114 | ; | 
|---|
| 115 | HDR ;Write page header | 
|---|
| 116 | S DIKKPAGE=$G(DIKKPAGE)+1 | 
|---|
| 117 | S $X=0 W "KEY INTEGRITY CHECK" | 
|---|
| 118 | W ?(IOM-$L(DIKKHLIN)-$L(DIKKPAGE)-1),DIKKHLIN_DIKKPAGE | 
|---|
| 119 | W !,$TR($J("",IOM-1)," ","-") | 
|---|
| 120 | W !,"             Key: "_DIKKNAME_" (#"_DIKKEY_"), File #"_DIKKFILE | 
|---|
| 121 | W !,"Uniqueness Index: "_DIKKUINM_" (#"_DIKKUI_")" | 
|---|
| 122 | W:DIKKFILE'=DIKKUIFL ", Whole File #"_DIKKUIFL | 
|---|
| 123 | Q | 
|---|
| 124 | ; | 
|---|
| 125 | COLHDR ;Write column headers | 
|---|
| 126 | N FNAM | 
|---|
| 127 | S FNAM=$P($G(^DD(DIKKFIL,.01,0)),U) | 
|---|
| 128 | D W() Q:$D(DIRUT) | 
|---|
| 129 | D W("ENTRY #","",2) Q:$D(DIRUT)  W ?DIKKTAB(1),FNAM,?DIKKTAB(2),"ERROR" | 
|---|
| 130 | W !,"-------",?DIKKTAB(1),$TR($J("",$L(FNAM))," ","-"),?DIKKTAB(2),"-----" | 
|---|
| 131 | Q | 
|---|
| 132 | ; | 
|---|
| 133 | ASKTEMP(DIKKTOP) ;Ask for a template name | 
|---|
| 134 | N DDA,DIC,DICKL,DIR,DIROUT,DIRUT,DIU0,DK,DQ,DTOUT,DUOUT | 
|---|
| 135 | N C,D,D1,D1,D2,D3,D4,I,J,L,O,X,Y | 
|---|
| 136 | ; | 
|---|
| 137 | S DK=DIKKTOP | 
|---|
| 138 | D S2^DIBT1 Q:Y<0!$D(DIRUT) "" | 
|---|
| 139 | Q +Y | 
|---|
| 140 | ; | 
|---|
| 141 | SAVETEMP(Y) ;Save records in template Y | 
|---|
| 142 | N CNT,DK,FILE,FLD,IENS,REC | 
|---|
| 143 | S (CNT,FILE)=0 F  S FILE=$O(^TMP("DIKKTAR",$J,FILE)) Q:'FILE  D | 
|---|
| 144 | . S IENS="" F  S IENS=$O(^TMP("DIKKTAR",$J,FILE,IENS)) Q:IENS=""  D | 
|---|
| 145 | .. S REC=$P(IENS,",",$L(IENS,",")-1) | 
|---|
| 146 | .. S:$D(^DIBT(+Y,1,REC))[0 CNT=CNT+1,^DIBT(+Y,1,REC)="" | 
|---|
| 147 | S:CNT>0 ^DIBT(+Y,"QR")=DT_U_CNT | 
|---|
| 148 | Q | 
|---|
| 149 | ; | 
|---|
| 150 | DA(IENS,DA) ;Given IENS, write ien's and setup DA array | 
|---|
| 151 | N I | 
|---|
| 152 | D W("","",$L(IENS,",")-2) Q:$D(DIRUT) | 
|---|
| 153 | K DA | 
|---|
| 154 | F I=$L(IENS,",")-1:-1:2 S DA(I-1)=$P(IENS,",",I) W DA(I-1),! | 
|---|
| 155 | S DA=$P(IENS,",") W DA | 
|---|
| 156 | Q | 
|---|
| 157 | ; | 
|---|