1 | PXRMEXU1 ; SLC/PKR/PJH - Reminder exchange repository utilities, #1.;08/16/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
3 | ;=====================================================
|
---|
4 | CLIST(IEN) ;Build the list of components for the repository
|
---|
5 | ;entry IEN. EXTYPE is the type of Exchange entry. The default is
|
---|
6 | ;reminder.
|
---|
7 | N COMIND,COMORDR,CSTART,CSUM,END,FILENAME,FILENUM
|
---|
8 | N IND,INDEXAT,JND,LINE,NCMPNT,NCTYPE,NITEMS,NLINES,NUMCMPNT
|
---|
9 | N PT01,START,TEMP,TAG,TYPE,UCOM,VERSN
|
---|
10 | S LINE=^PXD(811.8,IEN,100,1,0)
|
---|
11 | ;Make sure it is XML version 1.
|
---|
12 | I LINE'["<?xml version=""1.0""" D Q
|
---|
13 | . W !,"Exchange file entry not in proper format!"
|
---|
14 | . S IEN=-1
|
---|
15 | . H 2
|
---|
16 | S LINE=^PXD(811.8,IEN,100,2,0)
|
---|
17 | I LINE'="<REMINDER_EXCHANGE_FILE_ENTRY>" D Q
|
---|
18 | . W !,"Not an Exchange File entry!"
|
---|
19 | . S IEN=-1
|
---|
20 | . H 2
|
---|
21 | S LINE=^PXD(811.8,IEN,100,3,0)
|
---|
22 | S VERSN=$$GETTAGV^PXRMEXU3(LINE,"<PACKAGE_VERSION>")
|
---|
23 | S LINE=^PXD(811.8,IEN,100,4,0)
|
---|
24 | S INDEXAT=+$P(LINE,"<INDEX_AT>",2)
|
---|
25 | S LINE=^PXD(811.8,IEN,100,INDEXAT,0)
|
---|
26 | I LINE'="<INDEX>" D Q
|
---|
27 | . W !,"Index missing, cannot continue!"
|
---|
28 | . S IEN=-1
|
---|
29 | . H 2
|
---|
30 | S JND=INDEXAT+1
|
---|
31 | S LINE=^PXD(811.8,IEN,100,JND,0)
|
---|
32 | S NCMPNT=+$$GETTAGV^PXRMEXU3(LINE,"<NUMBER_OF_COMPONENTS>")
|
---|
33 | K ^TMP($J,"CMPNT")
|
---|
34 | F IND=1:1:NCMPNT D
|
---|
35 | . K END,START
|
---|
36 | . F S JND=JND+1,LINE=^PXD(811.8,IEN,100,JND,0) Q:LINE="</COMPONENT>" D
|
---|
37 | .. S TAG=$$GETTAG^PXRMEXU3(LINE)
|
---|
38 | .. I TAG["START" S START(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG)
|
---|
39 | .. I TAG["END" S END(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG)
|
---|
40 | . I $D(START("<M_ROUTINE_START>")) D
|
---|
41 | .. S CSTART=START("<M_ROUTINE_START>")
|
---|
42 | .. S ^TMP($J,"CMPNT",IND,"TYPE")="ROUTINE"
|
---|
43 | .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0)
|
---|
44 | .. S ^TMP($J,"CMPNT",IND,"NAME")=$$GETTAGV^PXRMEXU3(LINE,"<ROUTINE_NAME>")
|
---|
45 | .. S ^TMP($J,"CMPNT",IND,"FILENUM")=0
|
---|
46 | ..;Save the actual start and end of the code.
|
---|
47 | .. S ^TMP($J,"CMPNT",IND,"START")=START("<ROUTINE_CODE_START>")
|
---|
48 | .. S ^TMP($J,"CMPNT",IND,"END")=END("<ROUTINE_CODE_END>")
|
---|
49 | . I $D(START("<FILE_START>")) D
|
---|
50 | .. S CSTART=START("<FILE_START>")
|
---|
51 | .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0)
|
---|
52 | .. S (^TMP($J,"CMPNT",IND,"TYPE"),^TMP($J,"CMPNT",IND,"FILENAME"))=$$GETTAGV^PXRMEXU3(LINE,"<FILE_NAME>",1)
|
---|
53 | .. S LINE=^PXD(811.8,IEN,100,CSTART+2,0)
|
---|
54 | .. S ^TMP($J,"CMPNT",IND,"FILENUM")=$$GETTAGV^PXRMEXU3(LINE,"<FILE_NUMBER>")
|
---|
55 | .. S LINE=^PXD(811.8,IEN,100,CSTART+3,0)
|
---|
56 | .. S (^TMP($J,"CMPNT",IND,"NAME"),^TMP($J,"CMPNT",IND,"POINT_01"))=$$GETTAGV^PXRMEXU3(LINE,"<POINT_01>",1)
|
---|
57 | ..;Save the actual start and end of the FileMan FDA.
|
---|
58 | .. S ^TMP($J,"CMPNT",IND,"FDA_START")=START("<FDA_START>")
|
---|
59 | .. S ^TMP($J,"CMPNT",IND,"FDA_END")=END("<FDA_END>")
|
---|
60 | .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_START")=$G(START("<IEN_ROOT_START>"))
|
---|
61 | .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_END")=$G(END("<IEN_ROOT_END>"))
|
---|
62 | ;Build some indexes to order the component list.
|
---|
63 | F IND=1:1:NCMPNT D
|
---|
64 | . S TYPE=^TMP($J,"CMPNT",IND,"TYPE")
|
---|
65 | . S COMIND(TYPE,IND)=""
|
---|
66 | . S UCOM(TYPE)=""
|
---|
67 | ;Build the component order for display and install.
|
---|
68 | D CORDER^PXRMEXCO(IEN,.UCOM,.NUMCMPNT,.COMORDR)
|
---|
69 | ;Set the 0 node.
|
---|
70 | S ^PXD(811.8,IEN,120,0)=U_"811.802A"_U_NCMPNT_U_NCMPNT
|
---|
71 | S NCTYPE=0
|
---|
72 | S NITEMS=0
|
---|
73 | F NCTYPE=1:1:NUMCMPNT D
|
---|
74 | . S TYPE=$O(COMORDR(NCTYPE,""))
|
---|
75 | . S NITEMS=0
|
---|
76 | . S IND=""
|
---|
77 | . F S IND=$O(COMIND(TYPE,IND)) Q:IND="" D
|
---|
78 | .. S NITEMS=NITEMS+1
|
---|
79 | .. I NITEMS=1 S FILENUM=^TMP($J,"CMPNT",IND,"FILENUM")
|
---|
80 | .. I TYPE="ROUTINE" S TEMP=^TMP($J,"CMPNT",IND,"NAME")_U_^TMP($J,"CMPNT",IND,"START")_U_^TMP($J,"CMPNT",IND,"END")
|
---|
81 | .. E S TEMP=^TMP($J,"CMPNT",IND,"NAME")_U_^TMP($J,"CMPNT",IND,"FDA_START")_U_^TMP($J,"CMPNT",IND,"FDA_END")_U_$G(^TMP($J,"CMPNT",IND,"IEN_ROOT_START"))_U_$G(^TMP($J,"CMPNT",IND,"IEN_ROOT_END"))
|
---|
82 | .. S ^PXD(811.8,IEN,120,NCTYPE,1,NITEMS,0)=TEMP
|
---|
83 | . S ^PXD(811.8,IEN,120,NCTYPE,0)=TYPE_U_FILENUM_U_NITEMS
|
---|
84 | . S ^PXD(811.8,IEN,120,NCTYPE,1,0)=U_"811.8021A"_U_NITEMS_U_NITEMS
|
---|
85 | ;
|
---|
86 | ;Save the number of component types.
|
---|
87 | S ^PXD(811.8,IEN,119)=NCTYPE
|
---|
88 | K ^TMP($J,"CMPNT")
|
---|
89 | Q
|
---|
90 | ;
|
---|
91 | ;=====================================================
|
---|
92 | DELETE(LIST) ;Delete the repository entries in LIST.
|
---|
93 | N DA,DIK
|
---|
94 | S DIK="^PXD(811.8,"
|
---|
95 | S DA=""
|
---|
96 | F S DA=$O(LIST(DA)) Q:+DA=0 D ^DIK
|
---|
97 | Q
|
---|
98 | ;
|
---|
99 | ;=====================================================
|
---|
100 | DELHIST(RIEN,IHIEN) ;Delete install history IHIEN in repository entry RIEN.
|
---|
101 | N DA,DIK
|
---|
102 | S DA=IHIEN,DA(1)=RIEN
|
---|
103 | S DIK="^PXD(811.8,"_DA(1)_",130,"
|
---|
104 | D ^DIK
|
---|
105 | Q
|
---|
106 | ;
|
---|
107 | ;=====================================================
|
---|
108 | DESC(RIEN,DESL,DESC,KEYWORD) ;Build the description.
|
---|
109 | N JND,LC,NKEYW
|
---|
110 | S LC=1
|
---|
111 | S ^PXD(811.8,RIEN,110,LC,0)="Reminder: "_DESL("RNAME")
|
---|
112 | S LC=LC+1
|
---|
113 | S ^PXD(811.8,RIEN,110,LC,0)="Source: "_DESL("SOURCE")
|
---|
114 | S LC=LC+1
|
---|
115 | S ^PXD(811.8,RIEN,110,LC,0)="Date Packed: "_DESL("DATEP")
|
---|
116 | S LC=LC+1
|
---|
117 | S ^PXD(811.8,RIEN,110,LC,0)="Package Version: "_DESL("VRSN")
|
---|
118 | S LC=LC+1
|
---|
119 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
120 | ;Add the user's description.
|
---|
121 | S LC=LC+1
|
---|
122 | S ^PXD(811.8,RIEN,110,LC,0)="Description:"
|
---|
123 | F JND=1:1:+$P($G(@DESC@(1,0)),U,4) D
|
---|
124 | . S LC=LC+1
|
---|
125 | . S ^PXD(811.8,RIEN,110,LC,0)=@DESC@(1,JND,0)
|
---|
126 | S LC=LC+1
|
---|
127 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
128 | ;Add the keywords.
|
---|
129 | S LC=LC+1
|
---|
130 | S ^PXD(811.8,RIEN,110,LC,0)="Keywords:"
|
---|
131 | S NKEYW=+$P($G(@KEYWORD@(1,0)),U,4)
|
---|
132 | I NKEYW=0 D
|
---|
133 | . S LC=LC+1
|
---|
134 | . S ^PXD(811.8,RIEN,110,LC,0)="No keywords given"
|
---|
135 | F JND=1:1:NKEYW D
|
---|
136 | . S LC=LC+1
|
---|
137 | . S ^PXD(811.8,RIEN,110,LC,0)=@KEYWORD@(1,JND,0)
|
---|
138 | S LC=LC+1
|
---|
139 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
140 | S LC=LC+1
|
---|
141 | S ^PXD(811.8,RIEN,110,LC,0)="Components:"
|
---|
142 | S ^PXD(811.8,RIEN,110,0)=U_811.804_U_LC_U_LC
|
---|
143 | Q
|
---|
144 | ;
|
---|
145 | ;=====================================================
|
---|
146 | RIEN(LIEN) ;Given the list ien return the repository ien.
|
---|
147 | N RIEN
|
---|
148 | S RIEN=$G(^TMP("PXRMEXLR",$J,"SEL",LIEN))
|
---|
149 | Q RIEN
|
---|
150 | ;
|
---|
151 | ;=====================================================
|
---|
152 | SAVHIST ;Save the installation history in the repository.
|
---|
153 | N ACTION,DATE,CMPNT,FTYPE,IND,INDEX,ITEM,JND,NEWNAME
|
---|
154 | N SUB,TEMP,TOTAL,TYPE,USER
|
---|
155 | ;Find the first open spot in the Installation History node.
|
---|
156 | S (IND,JND)=0
|
---|
157 | F S IND=+$O(^PXD(811.8,PXRMRIEN,130,IND)) S JND=JND+1 Q:(IND=0)!(IND>JND)
|
---|
158 | S IND=JND
|
---|
159 | S JND=0
|
---|
160 | F SUB="PXRMEXIA","PXRMEXIAD" D
|
---|
161 | . S INDEX=0
|
---|
162 | . F S INDEX=$O(^TMP(SUB,$J,INDEX)) Q:+INDEX=0 D
|
---|
163 | .. S JND=JND+1
|
---|
164 | .. S CMPNT=$O(^TMP(SUB,$J,INDEX,""))
|
---|
165 | .. S ITEM=$O(^TMP(SUB,$J,INDEX,CMPNT,""))
|
---|
166 | .. S ACTION=$O(^TMP(SUB,$J,INDEX,CMPNT,ITEM,""))
|
---|
167 | .. S NEWNAME=$G(^TMP(SUB,$J,INDEX,CMPNT,ITEM,ACTION))
|
---|
168 | .. S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,0)=INDEX_U_CMPNT_U_ITEM_U_ACTION_U_NEWNAME
|
---|
169 | ..;Set the 0 node.
|
---|
170 | .. S ^PXD(811.8,PXRMRIEN,130,IND,1,0)=U_"811.8031A"_U_JND_U_JND
|
---|
171 | ..;Check for finding item changes and save them.
|
---|
172 | .. S FTYPE=""
|
---|
173 | .. I CMPNT["DEFINITION" S FTYPE="DEFF"
|
---|
174 | .. I CMPNT["DIALOG" S FTYPE="DIAF"
|
---|
175 | .. I CMPNT["TERM" S FTYPE="TRMF"
|
---|
176 | .. I (FTYPE'=""),($D(^TMP(SUB,$J,FTYPE))) D
|
---|
177 | ... N FI,FINDING,KND,OFINDING
|
---|
178 | ... S KND=2
|
---|
179 | ... S FI=""
|
---|
180 | ... F S FI=$O(^TMP(SUB,$J,FTYPE,FI)) Q:FI="" D
|
---|
181 | .... S OFINDING=$O(^TMP(SUB,$J,FTYPE,FI,""))
|
---|
182 | .... S FINDING=^TMP(SUB,$J,FTYPE,FI,OFINDING)
|
---|
183 | .... I OFINDING=FINDING Q
|
---|
184 | .... S KND=KND+1
|
---|
185 | .... S TEMP=$E(OFINDING,1,33)
|
---|
186 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_FINDING
|
---|
187 | ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND
|
---|
188 | ... I KND>2 D
|
---|
189 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" Finding Changes"
|
---|
190 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New"
|
---|
191 | ..;
|
---|
192 | ..;Check for TIU template replacements and save them.
|
---|
193 | .. I CMPNT["DIALOG" S FTYPE="DIATIU"
|
---|
194 | .. E S FTYPE=""
|
---|
195 | .. I (FTYPE'=""),($D(^TMP(SUB,$J,FTYPE))) D
|
---|
196 | ... N KND,OTIUT,TIUT,TYPE
|
---|
197 | ... S TYPE=""
|
---|
198 | ... S KND=2
|
---|
199 | ... F S TYPE=$O(^TMP(SUB,$J,FTYPE,TYPE)) Q:TYPE="" D
|
---|
200 | .... S OTIUT=""
|
---|
201 | .... F S OTIUT=$O(^TMP(SUB,$J,FTYPE,TYPE,OTIUT)) Q:OTIUT="" D
|
---|
202 | ..... S TIUT=$G(^TMP(SUB,$J,FTYPE,TYPE,OTIUT))
|
---|
203 | ..... I OTIUT=TIUT Q
|
---|
204 | ..... I '$D(^TMP(SUB,$J,FTYPE,TYPE,OTIUT,ITEM)) Q
|
---|
205 | ..... S KND=KND+1
|
---|
206 | ..... S TEMP=$E(OTIUT,1,33)
|
---|
207 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_TIUT
|
---|
208 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND
|
---|
209 | .... I KND>2 D
|
---|
210 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" "_TYPE
|
---|
211 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New"
|
---|
212 | ;If JND is still 0 then there was nothing to save.
|
---|
213 | I JND>0 D
|
---|
214 | .;Save the header information.
|
---|
215 | . S DATE=^TMP("PXRMEXIA",$J,"DT")
|
---|
216 | . S TYPE=^TMP("PXRMEXIA",$J,"TYPE")
|
---|
217 | . S USER=$$GET1^DIQ(200,DUZ,.01,"")
|
---|
218 | . S ^PXD(811.8,PXRMRIEN,130,IND,0)=DATE_U_USER_U_TYPE
|
---|
219 | . S ^PXD(811.8,PXRMRIEN,130,"B",DATE,IND)=""
|
---|
220 | .;Set the 0 node.
|
---|
221 | . S (KND,TOTAL)=0
|
---|
222 | . F S KND=+$O(^PXD(811.8,PXRMRIEN,130,KND)) Q:KND=0 S TOTAL=TOTAL+1
|
---|
223 | . S ^PXD(811.8,PXRMRIEN,130,0)=U_"811.803DA"_U_IND_U_TOTAL
|
---|
224 | K ^TMP("PXRMEXIA",$J)
|
---|
225 | K ^TMP("PXRMEXIAD",$J)
|
---|
226 | Q
|
---|
227 | ;
|
---|