| 1 | DICF0 ;SEA/TOAD,SF/TKW-VA FileMan: Finder, get alternate index ;2/8/00  11:11
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**28**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 | ALTIDX(DINDEX,DIFILE,DIVALUE,DISCREEN,DINUMBER) ; Find alternate index when lookup value for first subscript is null.
 | 
|---|
| 5 |  N DIX S DIX=DINDEX,DIX("WAY")=DINDEX("WAY"),DIX("OLDSUB")=DINDEX("#")
 | 
|---|
| 6 |  D IDXOK(.DINDEX,DIFILE,.DIX) Q:DIX'=DINDEX
 | 
|---|
| 7 | A1 ; Find next lookup value
 | 
|---|
| 8 |  N DIFIELD,DISUB,DITYPE,I,J,K,X,Y,Z
 | 
|---|
| 9 |  F DISUB=1:0 S DISUB=$O(DIVALUE(DISUB)) Q:'DISUB  I DIVALUE(DISUB)]"" D
 | 
|---|
| 10 |  . S X=$G(DINDEX(DISUB,"TYPE"))
 | 
|---|
| 11 |  . S DITYPE=$S(X="V":3,X="P":2,1:1),DITYPE(DITYPE,DISUB)=""
 | 
|---|
| 12 |  . Q
 | 
|---|
| 13 |  S DIX=""
 | 
|---|
| 14 |  F DITYPE=1,2,3 Q:DIX]""  I $D(DITYPE(DITYPE)) F DISUB=0:0 D  Q:'DISUB  Q:DIX]""
 | 
|---|
| 15 |  . S DISUB=$O(DITYPE(DITYPE,DISUB)) Q:'DISUB
 | 
|---|
| 16 |  . S DIFIELD=DINDEX(DISUB,"FIELD")
 | 
|---|
| 17 | A2 . ; find alternate index on that field.
 | 
|---|
| 18 |  . F I=0:0 S I=$O(^DD(DIFILE,DIFIELD,1,I)) Q:'I  S X=$G(^(I,0)) D  Q:DIX]""
 | 
|---|
| 19 |  . . I $P(X,U,3)="",$P(X,U,2)]"A[" S DIX=$P(X,U,2) Q:DIX'=DINDEX
 | 
|---|
| 20 |  . . S DIX="" Q
 | 
|---|
| 21 |  . I DIX]"" S DIX("#")=1,DIX(1)=DISUB Q
 | 
|---|
| 22 |  . F I=0:0 S I=$O(^DD("IX","F",DIFILE,DIFIELD,I)) Q:'I  D  Q:DIX]""
 | 
|---|
| 23 |  . . S DIX=$P($G(^DD("IX",I,0)),U,2) Q:DIX=""
 | 
|---|
| 24 |  . . I DIX=DINDEX S DIX="" Q
 | 
|---|
| 25 |  . . D IDXOK(.DINDEX,DIFILE,.DIX,I,.DIVALUE)
 | 
|---|
| 26 |  . . Q
 | 
|---|
| 27 |  . Q
 | 
|---|
| 28 |  Q:DIX=""
 | 
|---|
| 29 | A3 ; Rearrange lookup values and for new index
 | 
|---|
| 30 |  N DIV,DIS
 | 
|---|
| 31 |  M DIS("S")=DISCREEN("S"),DIS("F")=DISCREEN("F")
 | 
|---|
| 32 |  F I=1:1:DIX("#") S J=DIX(I) D
 | 
|---|
| 33 |  . Q:DIVALUE(J)=""
 | 
|---|
| 34 |  . M DIV(I)=DIVALUE(J),DIS(I)=DISCREEN(J)
 | 
|---|
| 35 |  . K DIVALUE(J),DISCREEN(J) Q
 | 
|---|
| 36 | A4 ; Build screening logic for fields whose lookup values are not on new index.
 | 
|---|
| 37 |  F J=0:0 S J=$O(DIVALUE(J)) Q:'J  D
 | 
|---|
| 38 |  . M DIS("VAL",J)=DIVALUE(J)
 | 
|---|
| 39 |  . I $D(DISCREEN(J)) D
 | 
|---|
| 40 |  . . S X="DINDEX(",Z="DISCREEN(""VAL"","
 | 
|---|
| 41 |  . . F K=0:0 S K=$O(DISCREEN(J,K)) Q:'K  S Y=DISCREEN(J,K) I Y[X S DISCREEN(J,K)="" F  Q:Y'[X  D
 | 
|---|
| 42 |  . . . N L,S S S=$P(Y,X),L=$L(S_X),S=S_Z,Y=$E(Y,L+1,$L(Y))
 | 
|---|
| 43 |  . . . S DISCREEN(J,K)=DISCREEN(J,K)_S
 | 
|---|
| 44 |  . . . I Y'[X S DISCREEN(J,K)=DISCREEN(J,K)_Y
 | 
|---|
| 45 |  . . . Q
 | 
|---|
| 46 |  . . M DIS("X",J)=DISCREEN(J) Q
 | 
|---|
| 47 |  . N DICODE,DINODE
 | 
|---|
| 48 |  . D GET^DICUIX1(DIFILE,DIFILE,DINDEX(J,"FIELD"),.DINODE,.DICODE)
 | 
|---|
| 49 |  . I "PVSD"'[DINDEX(J,"TYPE") S DIS("X",J,"GET")="S DIVAL="_DICODE Q
 | 
|---|
| 50 |  . S DIS("X",J,"GET")="S DIVAL=$$EXTERNAL^DIDU("_DIFILE_","_DINDEX(J,"FIELD")_","""","_DICODE_")"
 | 
|---|
| 51 |  . D
 | 
|---|
| 52 |  . . N DISAVJ S DISAVJ=J N J
 | 
|---|
| 53 |  . . S X=$$EXTERNAL^DIDU(DINDEX(DISAVJ,"FILE"),DINDEX(DISAVJ,"FIELD"),"",DIS("VAL",DISAVJ),"DIERR")
 | 
|---|
| 54 |  . . S J=$O(DIS("VAL",DISAVJ,99999),-1)+1
 | 
|---|
| 55 |  . . S DIS("VAL",DISAVJ,J)=X Q
 | 
|---|
| 56 |  . Q
 | 
|---|
| 57 |  K DINDEX S DINDEX=DIX,DINDEX("WAY")=DIX("WAY")
 | 
|---|
| 58 |  I DIFLAGS["l" S DINDEX("START")=DIX,DINDEX("OLDSUB")=DIX("OLDSUB")
 | 
|---|
| 59 |  K DISCREEN,DIVALUE M DISCREEN=DIS,DIVALUE=DIV K DIS,DIV
 | 
|---|
| 60 |  D INDEX^DICUIX(.DIFILE,DIFLAGS,.DINDEX,"",.DIVALUE,DINUMBER,.DISCREEN)
 | 
|---|
| 61 |  D XFORM^DICF1(DIFLAGS,.DIVALUE,.DISCREEN,.DINDEX)
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | IDXOK(DINDEX,DIFILE,DIX,DIXIEN,DIVALUE) ; Return alternate index name DIX if it has no set/kill conditions and all subscripts are fields from original index DINDEX.
 | 
|---|
| 65 |  I '$G(DIXIEN) S DIXIEN=$O(^DD("IX","BB",DIFILE,DIX,0)) I 'DIXIEN S DIX="" Q
 | 
|---|
| 66 |  I $G(^DD("IX",DIXIEN,1.4))]""!($G(^(2.4))]"") S DIX="" Q
 | 
|---|
| 67 |  N I,J,X,DIFIELD,DISKIP S DISKIP=1 I $O(DIVALUE(0)) S DIX("#")=0
 | 
|---|
| 68 |  F I=0:0 S I=$O(^DD("IX",DIXIEN,11.1,"AC",I)) Q:'I  S DISKIP=1 D  Q:DISKIP
 | 
|---|
| 69 |  . S X=$G(^DD("IX",DIXIEN,11.1,I,0))
 | 
|---|
| 70 |  . Q:$P(X,U,3)'=DIFILE  Q:$P(X,U,6)'=I  S DIFIELD=$P(X,U,4) Q:'DIFIELD
 | 
|---|
| 71 |  . Q:$G(^DD("IX",DIXIEN,11.1,I,2))]""
 | 
|---|
| 72 |  . I '$O(DIVALUE(0)) S DISKIP=0 Q
 | 
|---|
| 73 |  . F J=1:1:DINDEX("#") D  Q:'DISKIP
 | 
|---|
| 74 |  . . Q:DINDEX(J,"FIELD")'=DIFIELD
 | 
|---|
| 75 |  . . I I=1,DIVALUE(J)="" Q
 | 
|---|
| 76 |  . . S DIX(I)=J,DISKIP=0 Q
 | 
|---|
| 77 |  . I 'DISKIP S DIX("#")=DIX("#")+1
 | 
|---|
| 78 |  . Q
 | 
|---|
| 79 |  I DISKIP S DIX="" Q
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|