1 | DDS10 ;SFISC/MKO-BLOCK SETUP ;21SEP2006
|
---|
2 | ;;22.0;VA FileMan;**147,151**;Mar 30, 1999;Build 10
|
---|
3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | SET(DDS1B,DDS1E,DA,DDP,DIE,DL,DDSDA) ;Get values for pointed-to block
|
---|
6 | ;In:
|
---|
7 | ; DDS1B = Block number or [Block name] (by ref)
|
---|
8 | ; DDS1E = 1, if we're loading a pointed-to block and we want
|
---|
9 | ; interactive dialog (DIC(0)["E") in the lookup
|
---|
10 | ; DA = Record array
|
---|
11 | ;Returns:
|
---|
12 | ; DDS1B = Block number
|
---|
13 | ; DDP = File number of block
|
---|
14 | ; DIE = Global root based on DDP and DA
|
---|
15 | ; DL = Level number (top=0)
|
---|
16 | ; DDSDA = DA,DA(1),...,
|
---|
17 | ;
|
---|
18 | D BK(.DDS1B,.DDP) Q:$G(DIERR)
|
---|
19 | D GDA(DDS1B,DDS1E,.DA) Q:$G(DIERR)
|
---|
20 | D GL(DDP,.DA,.DIE,.DL,.DDSDA,$P($G(^DIST(.403,+DDS,40,+$G(DDSPG),40,DDS1B,0)),U,4)'="d") Q:$G(DIERR) ;Don't LOCK record if block is display-only
|
---|
21 | Q
|
---|
22 | ;
|
---|
23 | BK(DDSBK,DDP) ;Lookup block, get file number
|
---|
24 | ;Input:
|
---|
25 | ; DDSBK = Block number or [Block name] (by ref)
|
---|
26 | ;Returns:
|
---|
27 | ; DDSBK = Block number
|
---|
28 | ; DDP = File number
|
---|
29 | ; DIERR
|
---|
30 | ;
|
---|
31 | I DDSBK=+$P(DDSBK,"E") D Q
|
---|
32 | . I $D(^DIST(.404,DDSBK,0))[0 D BLD^DIALOG(3051,"#"_DDSBK) Q
|
---|
33 | . S DDP=+$P(^DIST(.404,DDSBK,0),U,2)
|
---|
34 | I DDSBK?1"["1.E1"]" D Q
|
---|
35 | . N X,Y,DIC
|
---|
36 | . S X=$E(DDSBK,2,$L(DDSBK)-1),DIC="^DIST(.404,",DIC(0)="FZ"
|
---|
37 | . D ^DIC I Y<0 D BLD^DIALOG(3051,"named "_X) Q
|
---|
38 | . S DDSBK=+Y,DDP=+$P(Y(0),U,2)
|
---|
39 | D BLD^DIALOG(3051,"#"_DDSBK)
|
---|
40 | Q
|
---|
41 | ;
|
---|
42 | GDA(DDS1B,DDS1E,DA) ;Find new DA
|
---|
43 | ;Input:
|
---|
44 | ; DDS1B = Block number
|
---|
45 | ; DDS1E = 1:Interactive lookup
|
---|
46 | ; DDSDAORG = Original DA array
|
---|
47 | ; DDSDLORG = Original DL
|
---|
48 | ; DDSPG
|
---|
49 | ;Returns:
|
---|
50 | ; DA = Record number
|
---|
51 | ; DIERR
|
---|
52 | ;
|
---|
53 | N DDSDA,DDSI,X
|
---|
54 | ;
|
---|
55 | ;Set DA array to its original value
|
---|
56 | S DA=DDSDAORG
|
---|
57 | F DDSI=1:1:DDSDLORG S DA(DDSI)=DDSDAORG(DDSI)
|
---|
58 | D DDSDA(.DA,DDSDLORG,.DDSDA)
|
---|
59 | ;
|
---|
60 | ;Xecute each PTB node
|
---|
61 | F DDSI=1:1 Q:DA=""!'$D(@DDSREFS@(DDSPG,DDS1B,"PTB",DDSI)) X ^(DDSI) S:$G(X)'>0 DA=""
|
---|
62 | ;
|
---|
63 | ;Kill descendants of DA
|
---|
64 | I '$G(DIERR) S DDSI=DA K DA S DA=DDSI
|
---|
65 | S:DA'>0!$G(DIERR) DA=""
|
---|
66 | Q
|
---|
67 | ;
|
---|
68 | GL(F,DA,DIE,DL,DDSDA,DDSL) ;Get global root, level, and IEN
|
---|
69 | ;Input variables:
|
---|
70 | ; F = file #
|
---|
71 | ; DA = array
|
---|
72 | ; DDSL = flag to lock record
|
---|
73 | ;Returns:
|
---|
74 | ; DIE = global root of file (null if error)
|
---|
75 | ; DL = level (top=0) (null if error)
|
---|
76 | ; DDSDA = IEN
|
---|
77 | ; DIERR = Error flag
|
---|
78 | ;
|
---|
79 | I '$D(^DD(F)) D BLD^DIALOG(401,F) S (DIE,DL)="" Q
|
---|
80 | I $D(^DIC(F,0,"GL"))#2 S DIE=^("GL"),DL=0
|
---|
81 | E D SUBGL Q:$G(DIERR)
|
---|
82 | ;
|
---|
83 | I '$G(DA) S DDSDA="0," Q
|
---|
84 | D DDSDA(.DA,DL,.DDSDA)
|
---|
85 | ;
|
---|
86 | N DDSP S DDSP("FILE")=F,DDSP("IEN")=DDSDA
|
---|
87 | ;
|
---|
88 | I $D(@(DIE_DA_",0)"))[0 D BLD^DIALOG(601,"",.DDSP)
|
---|
89 | I $D(@(DIE_DA_",-9)")) D BLD^DIALOG(602,"",.DDSP)
|
---|
90 | ;
|
---|
91 | I $G(DDSL),$D(^TMP("DDS",$J,"LOCK",DIE_DA_")"))[0 D Q:$G(DIERR)
|
---|
92 | . D LOCK^DILF(DIE_DA_")") E D BLD^DIALOG(110,"",.DDSP) Q ;**147
|
---|
93 | . S ^TMP("DDS",$J,"LOCK",DIE_DA_")")=""
|
---|
94 | Q
|
---|
95 | ;
|
---|
96 | SUBGL ;Get root and level for subfile
|
---|
97 | N D,I,S,U1
|
---|
98 | S D=F
|
---|
99 | F DL=0:1 Q:$D(^DD(D,0,"UP"))[0 S U1=^("UP") G:'$D(^DD(U1,"SB",D)) SUBER G:$D(^DD(U1,$O(^(D,"")),0))[0 SUBER S S(DL+1)=""""_$P($P(^(0),U,4),";")_"""",D=U1
|
---|
100 | G:$D(^DIC(D,0,"GL"))[0 SUBER S DIE=^("GL")
|
---|
101 | F I=DL:-1:1 G:$D(DA(I))[0 SUBER S DIE=DIE_DA(I)_","_S(I)_","
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | SUBER ;Come here if an error is encountered in GL
|
---|
105 | S (DIE,DL)=""
|
---|
106 | D BLD^DIALOG(309)
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | DDSDA(DA,DL,DDSDA) ;Determine DDSDA
|
---|
110 | ;Input:
|
---|
111 | ; DA = Record array
|
---|
112 | ; DL = Level number (top=0)
|
---|
113 | ;Output:
|
---|
114 | ; DDSDA = DA,DA(1),...,
|
---|
115 | ;
|
---|
116 | N I
|
---|
117 | I DA="" S DDSDA="" Q
|
---|
118 | S DDSDA=DA_"," F I=1:1:DL S DDSDA=DDSDA_DA(I)_","
|
---|
119 | Q
|
---|