[796] | 1 | TMGDIT ;SFISC/GFT-GET XFR ANSWERS ;4/6/94 13:03
|
---|
| 2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 |
|
---|
| 5 | ;"Copied from FM, for decompiling and modifications
|
---|
| 6 | ;"Revised interface added at end.
|
---|
| 7 |
|
---|
| 8 | 0 S DIC="^DOPT(""DIT"","
|
---|
| 9 | G OPT:$D(^DOPT("DIT",2))
|
---|
| 10 | S ^(0)="TRANSFER OPTION^1.01"
|
---|
| 11 | K ^("B")
|
---|
| 12 | F X=1,2 S ^DOPT("DIT",X,0)=$P("TRANSFER^COMPARE/MERGE",U,X)_" FILE ENTRIES"
|
---|
| 13 | S DIK=DIC
|
---|
| 14 | D IXALL^DIK
|
---|
| 15 | OPT W !!
|
---|
| 16 | S DIC(0)="AEQZI"
|
---|
| 17 | ;"//ktD ^DIC ;"do menu asking for options --> Y=1^Transfer...
|
---|
| 18 | S Y=1 ;"//kt added
|
---|
| 19 | G Q:Y<0
|
---|
| 20 | I +Y=2 D ^DITM K DIC G 0 ;"2 --> compare/merge 2 entries
|
---|
| 21 | D Q ;"cleanup local variables.
|
---|
| 22 | S DLAYGO=1 ;"allow addition of new file, if wanted
|
---|
| 23 | D W^DICRW ;"ask 'INPUT TO WHAT FILE?' Y --> 200^NEW PERSON...
|
---|
| 24 | G Q:$D(DTOUT)
|
---|
| 25 | Q:Y<0
|
---|
| 26 | S DFL=$P(Y,U,2)_": "
|
---|
| 27 | I '$D(DIC) do Q:'$D(DG) G FROM
|
---|
| 28 | . D DIE^DIB
|
---|
| 29 | . Q:'$D(DG)
|
---|
| 30 | . S L=DG,Y=DLAYGO
|
---|
| 31 | . K DG,DIE,DQ
|
---|
| 32 | S DIC("B")=+Y ;"save destination file number
|
---|
| 33 | S L=DIC
|
---|
| 34 | ;
|
---|
| 35 | FROM S DMRG=1,DKP=1,(DDF(1),DDT(0))=+Y,DIC=1,DIC(0)="EQAZ",DIC("A")="TRANSFER FROM FILE: "
|
---|
| 36 | S DIC("S")="S DIFILE=+Y,DIAC=""RD"" D ^DIAC I %"
|
---|
| 37 | D ^DIC ;"ask 'Transfer FROM which file? Y --> 200^Newperson...
|
---|
| 38 | K DIC
|
---|
| 39 | G Q:Y<0
|
---|
| 40 | G Q:'$D(^(0,"GL"))
|
---|
| 41 | S DTO=^("GL") ;"DTO = root of source file
|
---|
| 42 | I DUZ(0)'="@",$S($D(^VA(200,DUZ,"FOF",+Y,0)):1,1:$D(^DIC(3,DUZ,"FOF",+Y,0))) G DTR:+$P(^(0),U,3),Q
|
---|
| 43 | I DUZ(0)'="@",$D(^DIC(+Y,0,"DEL")) F X=1:1 G Q:X>$L(^("DEL")) Q:DUZ(0)[$E(^("DEL"),X)
|
---|
| 44 | DTR D PTS ;"get pointers into ^UTILITY("DIT",$J,0,#)=File^Field^FieldDefInfo
|
---|
| 45 | I +Y=DDF(1)
|
---|
| 46 | G ^TMGDIT0 ;"prepare to transfer
|
---|
| 47 | ;"
|
---|
| 48 | ;"=============================================================
|
---|
| 49 | TWO S (DTO(0),F)=L,L(+Y)=DDT(0),L=0,DDF(1)=+Y,DFR(1)=DTO_"D0,",DHIT=DLAYGO-(Y#1),%=0
|
---|
| 50 | W !!
|
---|
| 51 | K ^UTILITY("DITR",$J),A
|
---|
| 52 | I DLAYGO-1 do G Q:%<1
|
---|
| 53 | . W "DO YOU WANT TO TRANSFER THE '",$P(Y,U,2),"'",!
|
---|
| 54 | . W "DATA DICTIONARY INTO YOUR NEW FILE"
|
---|
| 55 | . D YN^DICN
|
---|
| 56 | . QUIT:%<1
|
---|
| 57 | . D ^DIT1:%=1
|
---|
| 58 |
|
---|
| 59 | K DITF,Y,B
|
---|
| 60 | W !
|
---|
| 61 | G Q:'$D(L)
|
---|
| 62 | D MAP
|
---|
| 63 | I '$D(DITF) W $C(7),"FILES DON'T MATCH!" G Q
|
---|
| 64 | W:$X>40 ! W:'$D(A) " WILL BE TRANSFERRED",!!
|
---|
| 65 | S %=2,DMRG=0
|
---|
| 66 | I @("$O("_DTO(0)_"0))>0") W !,"WANT TO MERGE TRANSFERRED ENTRIES WITH ONES ALREADY THERE" D YN^DICN G Q:%<1 I %=1 S DMRG=1
|
---|
| 67 | S (DIK,DIC)=DTO,DTO=1,L="TRANSFER ENTRIES",FLDS="",DHD="@",%ZIS="F"
|
---|
| 68 | D S %=0
|
---|
| 69 | W !,"WANT EACH ENTRY TO BE DELETED AS IT'S TRANSFERRED"
|
---|
| 70 | D YN^DICN
|
---|
| 71 | S DHIT="S DI=99 D F^DITR"_$P(",^DIK",%,%=1)
|
---|
| 72 | G Q:%<0
|
---|
| 73 | I '% D F G D
|
---|
| 74 | S DISTOP=0
|
---|
| 75 | s DIOEND="S DIK=DTO(0),DIK(0)=""B"" D KL^DIT,IXALL^DIK,Q^DIT"
|
---|
| 76 | D EN1^DIP
|
---|
| 77 | Q ;
|
---|
| 78 | K ^UTILITY("DITR",$J),^UTILITY("DIT",$J),DIT,DIC,DA,DB1,DFR,DIK,L,FLDS,DHIT,DISTOP,DIOEND,%ZIS
|
---|
| 79 | KL K DIU,DIV,DIG,DIH,DLAYGO,DITF,DFN,DMRG,DTO,DTN,DDF,DTL,DFL,DDT,A,B,DKP,W,X,FLDS,Y,Z
|
---|
| 80 | Q
|
---|
| 81 | ;
|
---|
| 82 | MAP ;"BUILD MAP OF FIELDS FROM 'FROM' TO 'TO' FILE
|
---|
| 83 | N DFL
|
---|
| 84 | S DFL=1
|
---|
| 85 | MAP2 ;"ENTRY POINT FROM ^DIT3
|
---|
| 86 | K:L]"" L(L)
|
---|
| 87 | S L=$O(L(0))
|
---|
| 88 | Q:L']""
|
---|
| 89 | F Y=0:0 S Y=$O(^DD(L,Y)) G MAP2:Y="",MAP2:'$D(^(Y,0)) S %=^(0) I $P(%,U,2)'["C" S DIC=$P(%,U,1),X=$O(^DD(L(L),"B",DIC,0)) I X>0,'^(X),$P(^DD(L(L),X,0),U,2)'["C" D T
|
---|
| 90 | Q
|
---|
| 91 | ;"
|
---|
| 92 | T S Z=$P(^(0),U,4)
|
---|
| 93 | S V=$P($P(^(0),U,2),U,Z[";0")
|
---|
| 94 | S ^UTILITY("DITR",$J,L,Y)=$P(Z,";",2)_U_$P(Z,";",1)
|
---|
| 95 | S:V ^(Y)=^(Y)_U_V,L(+$P(%,U,2))=+V
|
---|
| 96 | I Z="0;1",DDF(DFL)=L
|
---|
| 97 | S DITF=$P(%,U,4)
|
---|
| 98 | Q:$D(A)
|
---|
| 99 | W:$X ", "
|
---|
| 100 | W:$L(DIC)+$X>66 !
|
---|
| 101 | W "'"_DIC_"' FIELDS"
|
---|
| 102 | Q
|
---|
| 103 | ;
|
---|
| 104 | PTS ;
|
---|
| 105 | ;"Loads up ^UTILITY('DIT',$J) with pointers out (I think)
|
---|
| 106 | ;"Input: Y as filenumber
|
---|
| 107 | S DL=0
|
---|
| 108 | F X=0:0 S X=$O(^DD(+Y,0,"PT",X)) Q:X'>0 do
|
---|
| 109 | . F Z=.001:0 S Z=$O(^DD(+Y,0,"PT",X,Z)) Q:Z'>0 do
|
---|
| 110 | . . I '$D(^DD(X,Z,0))#2 quit
|
---|
| 111 | . . S %=^(0)
|
---|
| 112 | . . I '(U_$P(%,U,3)=DTO!($D(^DD(X,Z,"V","B",+Y)))) quit
|
---|
| 113 | . . I $P(%,U,2)'["I" do
|
---|
| 114 | . . . S DL=DL+1
|
---|
| 115 | . . . S ^UTILITY("DIT",$J,0,DL)=X_U_Z_U_$P(%,U,2)
|
---|
| 116 | Q
|
---|
| 117 | ;
|
---|
| 118 | F W !?7,"(TYPE '^' TO FORGET THE WHOLE THING!)",!
|
---|
| 119 | Q
|
---|
| 120 | ;
|
---|
| 121 | ;"=============================================================
|
---|
| 122 | ;"=============================================================
|
---|
| 123 | TRNMRG(DIFLG,DIFFNO,DITFNO,DIFIEN,DITIEN)
|
---|
| 124 | ;"Purpose: SILENT TRANSFER/MERGE OF SINGLE RECORDS IN FILE OR SUBFILE
|
---|
| 125 | ;"Input:
|
---|
| 126 | ;" DIFLG = FLAGS
|
---|
| 127 | ;" DIFFNO = TRANSFER 'FROM' FILE/SUBFILE NO. OR ROOT
|
---|
| 128 | ;" DITFNO = TRANSFER 'TO' FILE/SUBFILE NO.
|
---|
| 129 | ;" DIFIEN = TRANSFER 'FROM' IEN STRING
|
---|
| 130 | ;" DITIEN = TRANSFER 'TO' IEN STRING (PASS BY REFERENCE)
|
---|
| 131 | ;"
|
---|
| 132 | ;"//kt According to post from George Timpson, here is the
|
---|
| 133 | ;" definations for FLAGS:
|
---|
| 134 | ;" "M" Merge the two entries. -- If a field exists on the target
|
---|
| 135 | ;" record, do not write over it)
|
---|
| 136 | ;" "O" Overwrite the merge 'TO' entry. (if a field exists on the
|
---|
| 137 | ;" merge 'from' record, it overwrites the same field on the target record)
|
---|
| 138 | ;" "A" Add the new record. This does not look for a match, but always
|
---|
| 139 | ;" adds the merge 'from' record as a new entry in the target file.
|
---|
| 140 | ;" "R" Replace. (Used only for package installation). In ^DIT
|
---|
| 141 | ;" and ^DIT3, this works the same as 'O'. In replace mode, if a match
|
---|
| 142 | ;" is found between a record coming in with the installation and a
|
---|
| 143 | ;" record on the target system, the record on the target system is
|
---|
| 144 | ;" deleted, except for any locally developed fields. We haven't yet
|
---|
| 145 | ;" worked out the details of how this will be done. We may be setting
|
---|
| 146 | ;" a new internal flags to pass to ^DITR, based on this flag containing
|
---|
| 147 | ;" an "R". It seems to me that ^DITR would be the place to delete the
|
---|
| 148 | ;" existing record, if a match is found.
|
---|
| 149 | ;" "X" If this optional flag is included, the routine will run the SET
|
---|
| 150 | ;" cross-reference logic on the merged 'TO' record, after it has been
|
---|
| 151 | ;" installed.
|
---|
| 152 |
|
---|
| 153 | G TRNMRG^DIT3
|
---|
| 154 |
|
---|
| 155 | ;"=============================================================
|
---|
| 156 | ;"=============================================================
|
---|
| 157 |
|
---|
| 158 | XFERREC(File,FromIEN,ToIEN)
|
---|
| 159 | ;"Purpose:
|
---|
| 160 | ;"Input: FromFile -- IEN of file of source
|
---|
| 161 |
|
---|
| 162 | new DIC
|
---|
| 163 | D Q2 ;"cleanup local variables.
|
---|
| 164 | set File=+$get(File)
|
---|
| 165 | if File'>0 quit
|
---|
| 166 | set ToIEN=+$get(ToIEN) ;"not supporting IENS right now.
|
---|
| 167 | if ToIEN'>0 quit
|
---|
| 168 | set FromIEN=+$get(FromIEN)
|
---|
| 169 | if FromIEN'>0 quit
|
---|
| 170 | S L=$get(^DIC(File,0,"GL"))
|
---|
| 171 | if L="" quit
|
---|
| 172 |
|
---|
| 173 | S DMRG=1,DKP=1
|
---|
| 174 | S (DDF(1),DDT(0))=File
|
---|
| 175 | S DTO=L ;"DTO = root of source file
|
---|
| 176 | ;"D PTS ;"get pointers into ^UTILITY("DIT",$J,0,#)=File^Field^FieldDefInfo
|
---|
| 177 |
|
---|
| 178 | ;"=============================================
|
---|
| 179 |
|
---|
| 180 | K DIC
|
---|
| 181 | S DIC=L
|
---|
| 182 | set Y=ToIEN ;"//kt
|
---|
| 183 |
|
---|
| 184 | S DFR=ToIEN
|
---|
| 185 | S DTO(1)=L_ToIEN_"," ;"DTO is DESTINATION info array
|
---|
| 186 | set Y=FromIEN ;"//kt
|
---|
| 187 |
|
---|
| 188 | S ^UTILITY("DIT",$J,FromIEN)=ToIEN_";"_$E(L,2,999)
|
---|
| 189 | S DTO=0
|
---|
| 190 | S (D0,DA)=+Y
|
---|
| 191 | S DIK=L
|
---|
| 192 | S DFR(1)=L_DA_","
|
---|
| 193 | K DIC
|
---|
| 194 |
|
---|
| 195 | GO D GO^DITR ;"Find fields to XRef
|
---|
| 196 |
|
---|
| 197 | D KL^TMGDIT
|
---|
| 198 | S DA=ToIEN
|
---|
| 199 | K DFR
|
---|
| 200 | D IX1^DIK ;"input: DIK (Root of file), DA (used as IEN)
|
---|
| 201 |
|
---|
| 202 | Q2 G Q^TMGDIT
|
---|
| 203 | ;
|
---|