1 | SCRPBK2 ;MJK/ALB - RPC Broker Utilities ; 27 FEB 96
|
---|
2 | ;;5.3;Scheduling;**41**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | SAVE(SCDATA,SCQDEF) ; -- save query definition
|
---|
5 | ;
|
---|
6 | ; -- SCDATA(0) -> <1 - success> ^ <new query ien> ^ <reload client>
|
---|
7 | ; -> <0 - errors found> ^ <number of errors>
|
---|
8 | ; (1...n) -> error text
|
---|
9 | ;
|
---|
10 | ; -- SEE BOTTOM OF SCRPBK FOR VARIABLE DEFINITIONS
|
---|
11 | ;
|
---|
12 | ; Related RPC: SCRP QUERY SAVE
|
---|
13 | ;
|
---|
14 | N SCQREC,SCERR,SCIENS,SCSTAT,SCVM,SCLOG,SCERS,DIERR,SCPROC
|
---|
15 | S SCPROC="Save Template"
|
---|
16 | D PARSE^SCRPBK5(.SCQDEF,.SCQREC)
|
---|
17 | ;
|
---|
18 | ; -- do full validation mode(SCVM) check
|
---|
19 | S SCVM="FULL",SCLOG="SCDATA"
|
---|
20 | D VALCHK^SCRPBK4(SCLOG,.SCQREC,SCVM)
|
---|
21 | IF $G(DIERR) D G SAVEQ
|
---|
22 | . D HDREC^SCUTBK3(.SCDATA,DIERR,"Save Template Validation Check")
|
---|
23 | ;
|
---|
24 | ; -- try to save record and get status of save
|
---|
25 | S SCSTAT=$$SAVEREC(.SCQREC,.SCIENS,.SCERR)
|
---|
26 | IF SCSTAT D
|
---|
27 | . S SCDATA(0)=1_U_$S(SCQREC("QUERYID")="+1":+$G(SCIENS(1)),1:"")_U_$P(SCSTAT,U,2)
|
---|
28 | ELSE D
|
---|
29 | . D ERRCHK^SCUTBK3(.SCDATA,.SCERR,SCPROC)
|
---|
30 | SAVEQ Q
|
---|
31 | ;
|
---|
32 | SAVEREC(SCQREC,SCIENS,SCERR) ; -- actual save process
|
---|
33 | N SCFILE,SCFDA,SCDFDA,SCQRY,SCNEW,SCMOD
|
---|
34 | S SCFILE=404.95
|
---|
35 | S SCFDA="SCFDA",SCDFDA="SCDFDA",SCERR="SCERR",SCIENS="SCIENS"
|
---|
36 | S SCQRY=SCQREC("QUERYID")
|
---|
37 | ;
|
---|
38 | ; -- strip out data not needed
|
---|
39 | ; SCMOD = 1 means some stripping occurred and query needs to reload
|
---|
40 | S SCMOD=$$STRIP(.SCQREC)
|
---|
41 | ;
|
---|
42 | D FDA^DILF(SCFILE,SCQRY_",",.01,"",SCQREC("NAME"),SCFDA,SCERR)
|
---|
43 | D FDA^DILF(SCFILE,SCQRY_",",.02,"",SCQREC("CREATORID"),SCFDA,SCERR)
|
---|
44 | D FDA^DILF(SCFILE,SCQRY_",",.03,"",SCQREC("ACCESSID"),SCFDA,SCERR)
|
---|
45 | D FDA^DILF(SCFILE,SCQRY_",",.04,"",SCQREC("REPORTID"),SCFDA,SCERR)
|
---|
46 | D FDA^DILF(SCFILE,SCQRY_",",.05,"",$$NOW^XLFDT(),SCFDA,SCERR)
|
---|
47 | IF $D(SCQREC("DESCRIPTION")) D
|
---|
48 | . D FDA^DILF(SCFILE,SCQRY_",",10,"",$NA(SCQREC("DESCRIPTION")),SCFDA,SCERR)
|
---|
49 | ; -- is this a new record?
|
---|
50 | S SCNEW=$S(SCQRY="+1":1,1:0)
|
---|
51 | D SAVFLD(.SCQREC,.SCFDA,.SCDFDA,.SCERR,.SCNEW)
|
---|
52 | D SAVSEL(.SCQREC,.SCFDA,.SCDFDA,.SCERR,.SCNEW)
|
---|
53 | ;
|
---|
54 | ; -- process any deletions (SCDFDA array holds deletion FDA)
|
---|
55 | IF $D(SCDFDA)>10 D
|
---|
56 | . D FILE^DIE("K",SCDFDA,SCERR)
|
---|
57 | ;
|
---|
58 | ; -- process new items and changes
|
---|
59 | IF SCNEW D
|
---|
60 | . D UPDATE^DIE("",SCFDA,SCIENS,SCERR)
|
---|
61 | ELSE D
|
---|
62 | . D FILE^DIE("K",SCFDA,SCERR)
|
---|
63 | ;
|
---|
64 | ; -- ret := <success 0/1> ^ <unneeded data automatically stripped out>
|
---|
65 | SAVERECQ Q '$G(SCERR("DIERR"))_U_SCMOD
|
---|
66 | ;
|
---|
67 | SAVFLD(SCQREC,SCFDA,SCDFDA,SCERR,SCNEW) ;
|
---|
68 | ; -- determine which fields were changed or deleted
|
---|
69 | ;
|
---|
70 | N SCUR,SCAN,SCQRY,SCI,SCFLD
|
---|
71 | S SCQRY=SCQREC("QUERYID")
|
---|
72 | ;
|
---|
73 | ; -- scan fields multiple and build array
|
---|
74 | S SCI=0
|
---|
75 | F S SCI=$O(^SD(404.95,SCQRY,"FIELDS",SCI)) Q:'SCI S X=$G(^(SCI,0)) D
|
---|
76 | . IF $D(^SD(404.93,+X,0)) S SCAN($P(^(0),U,2))=SCI_U_$P(X,U,2)
|
---|
77 | ;
|
---|
78 | ; -- delete fields not passed down and set delete fda
|
---|
79 | S SCFLD=""
|
---|
80 | F S SCFLD=$O(SCAN(SCFLD)) Q:SCFLD="" IF '$D(SCQREC("FIELDS",SCFLD)) D
|
---|
81 | . D FDA^DILF(404.9502,+SCAN(SCFLD)_","_SCQRY_",",.01,"","@",SCDFDA,SCERR)
|
---|
82 | ;
|
---|
83 | ; -- set fda for changes
|
---|
84 | S SCFLD=""
|
---|
85 | F S SCFLD=$O(SCQREC("FIELDS",SCFLD)) Q:SCFLD="" D
|
---|
86 | . N SCVAL,SCFLDI,SCIEN,SCUR
|
---|
87 | . S SCVAL=SCQREC("FIELDS",SCFLD)
|
---|
88 | . S SCFLDI=+$O(^SD(404.93,"C",SCFLD,0))
|
---|
89 | . S SCUR=$G(SCAN(SCFLD))
|
---|
90 | . S SCIEN=+SCUR IF 'SCIEN S SCNEW=SCNEW+1,SCIEN="+"_SCNEW
|
---|
91 | . IF SCIEN="+1"!($P(SCUR,U,2)'=SCVAL) D
|
---|
92 | . . D FDA^DILF(404.9502,SCIEN_","_SCQRY_",",.01,"",SCFLDI,SCFDA,SCERR)
|
---|
93 | . . D FDA^DILF(404.9502,SCIEN_","_SCQRY_",",.02,"",SCVAL,SCFDA,SCERR)
|
---|
94 | Q
|
---|
95 | ;
|
---|
96 | SAVSEL(SCQREC,SCFDA,SCDFDA,SCERR,SCNEW) ;
|
---|
97 | ; -- determine which file selections were changed or deleted
|
---|
98 | ;
|
---|
99 | N SCUR,SCAN,SCQRY,SCI,SCSEL,SCTYPE,SCHIT
|
---|
100 | S SCQRY=SCQREC("QUERYID")
|
---|
101 | ; -- scan fields and build array
|
---|
102 | S SCI=0
|
---|
103 | F S SCI=$O(^SD(404.95,SCQRY,"FILES",SCI)) Q:'SCI S X=$G(^(SCI,0)) D
|
---|
104 | . S SCAN($P(^(0),U))=SCI
|
---|
105 | ;
|
---|
106 | ; -- delete fields not passed down
|
---|
107 | S SCSEL=""
|
---|
108 | F S SCSEL=$O(SCAN(SCSEL)) Q:SCSEL="" D
|
---|
109 | . S SCTYPE="",SCHIT=0
|
---|
110 | . F S SCTYPE=$O(SCQREC("SELECTIONS",SCTYPE)) Q:SCTYPE="" IF $D(SCQREC("SELECTIONS",SCTYPE,SCSEL)) S SCHIT=1 Q
|
---|
111 | . D:'SCHIT FDA^DILF(404.9503,+SCAN(SCSEL)_","_SCQRY_",",.01,"","@",SCDFDA,SCERR)
|
---|
112 | ;
|
---|
113 | ; -- set fda
|
---|
114 | S SCTYPE=""
|
---|
115 | F S SCTYPE=$O(SCQREC("SELECTIONS",SCTYPE)) Q:SCTYPE="" D
|
---|
116 | . S SCSEL=""
|
---|
117 | . F S SCSEL=$O(SCQREC("SELECTIONS",SCTYPE,SCSEL)) Q:SCSEL="" IF '$D(SCAN(SCSEL)) D
|
---|
118 | . . S SCNEW=SCNEW+1,SCIEN="+"_SCNEW
|
---|
119 | . . D FDA^DILF(404.9503,SCIEN_","_SCQRY_",",.01,"",SCSEL,SCFDA,SCERR)
|
---|
120 | Q
|
---|
121 | ;
|
---|
122 | DELETE(SCDATA,SCQDEF) ; -- delete a query record
|
---|
123 | ;
|
---|
124 | ; -- SCDATA(0) -> <1 - success> ^
|
---|
125 | ; -> <0 - errors found> ^ <number of errors>
|
---|
126 | ; (1...n) -> error text
|
---|
127 | ;
|
---|
128 | ; -- SEE BOTTOM OF SCRPBK FOR VARIABLE DEFINITIONS
|
---|
129 | ;
|
---|
130 | ; Related RPC: SCRP QUERY DELETE
|
---|
131 | ;
|
---|
132 | N SCQREC,DIERR,SCLOG
|
---|
133 | S SCLOG="SCDATA"
|
---|
134 | D PARSE^SCRPBK5(.SCQDEF,.SCQREC)
|
---|
135 | D DELCHK(SCLOG,.SCQREC)
|
---|
136 | D HDREC^SCUTBK3(.SCDATA,$G(DIERR),"Template Deletion")
|
---|
137 | IF SCDATA(0) D DELREC(.SCQREC)
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | DELCHK(SCLOG,SCQREC) ; -- check to see if query can be deleted
|
---|
141 | ; -- is the query being used as a default by any user?
|
---|
142 | ;
|
---|
143 | N SCQRY,PARAM
|
---|
144 | S SCQRY=SCQREC("QUERYID")
|
---|
145 | IF SCQRY=+SCQRY,'$D(^SCRS(403.35,"AC",SCQRY)) D G DELCHKQ
|
---|
146 | . Q
|
---|
147 | ELSE D
|
---|
148 | . S SCPARM("QUERY NAME")=SCQREC("NAME")
|
---|
149 | . D BLD^DIALOG(4035002.001,.SCPARM,"",SCLOG,"S")
|
---|
150 | DELCHKQ Q
|
---|
151 | ;
|
---|
152 | DELREC(SCQREC) ; -- actually delete query record
|
---|
153 | N DIK,DA,X
|
---|
154 | S DIK="^SD(404.95,",DA=SCQREC("QUERYID") D ^DIK
|
---|
155 | Q
|
---|
156 | ;
|
---|
157 | NAME(SCDATA,SCQNAME,SCUSER) ;
|
---|
158 | ; -- check to see if user has a query with same name
|
---|
159 | ;
|
---|
160 | ; input: SCQNAME -> query name
|
---|
161 | ; SCUSER -> user id (DUZ)
|
---|
162 | ;output: SCDATA(1) -> 0 means no query with that name found
|
---|
163 | ; -> <n> means query with that name found has this ien
|
---|
164 | ; -- SEE BOTTOM OF SCRPBK FOR VARIABLE DEFINITIONS
|
---|
165 | ;
|
---|
166 | ; Related RPC: SCRP QUERY CHECK NAME
|
---|
167 | ;
|
---|
168 | N SCERR,SCDUP
|
---|
169 | IF $$NAMECHK(.SCQNAME,.SCUSER,.SCERR,.SCDUP) D
|
---|
170 | . S SCDATA(1)=0
|
---|
171 | ELSE D
|
---|
172 | . S SCDATA(1)=SCDUP
|
---|
173 | Q
|
---|
174 | ;
|
---|
175 | NAMECHK(SCQNAME,SCUSER,SCERR,SCDUP) ; -- actuallt scan xref for query name
|
---|
176 | N SCOK,SDI
|
---|
177 | S SCOK=1,SCI=0
|
---|
178 | F S SCI=$O(^SD(404.95,"AC",SCUSER,SCI)) Q:'SCI D Q:'SCOK
|
---|
179 | . IF SCQNAME=$P($G(^SD(404.95,SCI,0)),U) S SCOK=0,SCDUP=SCI
|
---|
180 | Q SCOK
|
---|
181 | ;
|
---|
182 | STRIP(SCQREC) ; -- strip out inappropriate data for report type
|
---|
183 | N I,X,SCAN,SCFLD,SCMOD
|
---|
184 | S SCMOD=0
|
---|
185 | D GETFLDS(+SCQREC("REPORTID"),.SCAN)
|
---|
186 | S SCFLD=""
|
---|
187 | F S SCFLD=$O(SCQREC("FIELDS",SCFLD)) Q:SCFLD="" D
|
---|
188 | . IF '$D(SCAN(SCFLD)) K SCQREC("FIELDS",SCFLD) S SCMOD=1
|
---|
189 | ;
|
---|
190 | K SCAN
|
---|
191 | D GETYPE(+SCQREC("REPORTID"),.SCAN)
|
---|
192 | S SCTYPE=""
|
---|
193 | F S SCTYPE=$O(SCQREC("SELECTIONS",SCTYPE)) Q:SCTYPE="" D
|
---|
194 | . IF '$D(SCAN(SCTYPE)) K SCQREC("SELECTIONS",SCTYPE) S SCMOD=1
|
---|
195 | Q SCMOD
|
---|
196 | ;
|
---|
197 | GETFLDS(RPTID,SCAN) ; -- build array of fields used/needed by report
|
---|
198 | N SCI,SCX
|
---|
199 | S SCI=0
|
---|
200 | F S SCI=$O(^SD(404.92,RPTID,"FIELDS",SCI)) Q:'SCI S SCX=$G(^(SCI,0)) D
|
---|
201 | . IF $D(^SD(404.93,+SCX,0)) S SCAN($P(^(0),U,2))=SCX
|
---|
202 | Q
|
---|
203 | ;
|
---|
204 | GETYPE(RPTID,SCAN) ; -- build array of files used/needed by report
|
---|
205 | N SCI,SCX
|
---|
206 | S SCI=0
|
---|
207 | F S SCI=$O(^SD(404.92,RPTID,"FILES",SCI)) Q:'SCI S SCX=$G(^(SCI,0)) D
|
---|
208 | . S SCTYPE=$$TYPE^SCRPBK(+SCX)
|
---|
209 | . IF $$CHKTYPE(SCTYPE) S SCAN(SCTYPE)=SCX
|
---|
210 | Q
|
---|
211 | ;
|
---|
212 | CHKTYPE(SCTYPE) ; -- special checks to see if file type is ok to use
|
---|
213 | N SCOK S SCOK=1
|
---|
214 | IF SCTYPE="" S SCOK=0
|
---|
215 | ;
|
---|
216 | ; -- is site using user class relationship in PCMM?
|
---|
217 | IF SCTYPE="USERCLASS",'$P($G(^SD(404.91,1,"PCMM")),U) S SCOK=0
|
---|
218 | Q SCOK
|
---|
219 | ;
|
---|