1 | TIUSRVT ; SLC/JM - Server functions for templates 8/23/2001 [8/19/04 1:57pm]
|
---|
2 | ;;1.0;TEXT INTEGRATION UTILITIES;**76,80,102,105,119,125,166**;Jun 20, 1997
|
---|
3 | ;
|
---|
4 | ; Nodes Returned by GETROOTS and GETITEMS
|
---|
5 | ;
|
---|
6 | ; Piece Data
|
---|
7 | ; ----- ---------------------
|
---|
8 | ; 1 IEN
|
---|
9 | ; 2 TYPE
|
---|
10 | ; 3 STATUS
|
---|
11 | ; 4 NAME
|
---|
12 | ; 5 EXCLUDE FROM GROUP BOILERPLATE
|
---|
13 | ; 6 BLANK LINES
|
---|
14 | ; 7 PERSONAL OWNER
|
---|
15 | ; 8 HAS CHILDREN FLAG (0=NONE, 1=ACTIVE, 2=INACTIVE, 3=BOTH)
|
---|
16 | ; 9 DIALOG
|
---|
17 | ; 10 DISPLAY ONLY
|
---|
18 | ; 11 FIRST LINE
|
---|
19 | ; 12 ONE ITEM ONLY
|
---|
20 | ; 13 HIDE DIALOG ITEMS
|
---|
21 | ; 14 HIDE TREE ITEMS
|
---|
22 | ; 15 INDENT ITEMS
|
---|
23 | ; 16 REMINDER DIALOG IEN
|
---|
24 | ; 17 REMINDER DIALOG NAME
|
---|
25 | ; 18 LOCKED
|
---|
26 | ; 19 COM OBJECT POINTER
|
---|
27 | ; 20 COM OBJECT PARAMETER
|
---|
28 | ; 21 LINK POINTER
|
---|
29 | ; 22 REMINDER DIALOG PATIENT SPECIFIC VALUE
|
---|
30 | GETROOTS(TIUY,USER) ;Get template root info
|
---|
31 | N IDX,TYPE
|
---|
32 | I +$G(USER) D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",USER,0)),1)
|
---|
33 | F TYPE="R","TF","CF","OF" D
|
---|
34 | .D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",$$ROOTIDX^TIUDDT(TYPE),0)),1)
|
---|
35 | Q
|
---|
36 | ;
|
---|
37 | GETPROOT(TIUY,USER) ;Get personal template root info only
|
---|
38 | N IDX
|
---|
39 | I +$G(USER) D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",USER,0)),1)
|
---|
40 | Q
|
---|
41 | ;
|
---|
42 | GETITEMS(TIUY,TIUDA) ; Returns all children of a non-Template Node
|
---|
43 | N IDX,ITEM,SEQ,ITEMNODE
|
---|
44 | K ^TMP("TIU TEMPLATE",$J)
|
---|
45 | S TIUY=$NA(^TMP("TIU TEMPLATE",$J))
|
---|
46 | I $P($G(^TIU(8927,TIUDA,0)),U,3)'="T" D
|
---|
47 | .S (IDX,SEQ)=0
|
---|
48 | .F S SEQ=$O(^TIU(8927,TIUDA,10,"B",SEQ)) Q:'SEQ D
|
---|
49 | ..S ITEM=0
|
---|
50 | ..F S ITEM=$O(^TIU(8927,TIUDA,10,"B",SEQ,ITEM)) Q:'ITEM D
|
---|
51 | ...S ITEMNODE=$G(^TIU(8927,TIUDA,10,ITEM,0))
|
---|
52 | ...D ADDNODE(.IDX,$P(ITEMNODE,U,2))
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | GETBOIL(TIUY,TIUDA) ;Returns a Template's Unexpanded Boilerplate Text
|
---|
56 | N IDX,LINE,TYPE
|
---|
57 | K ^TMP("TIU TEMPLATE",$J)
|
---|
58 | S TIUY=$NA(^TMP("TIU TEMPLATE",$J))
|
---|
59 | S (IDX,LINE)=0
|
---|
60 | S TYPE=$P($G(^TIU(8927,TIUDA,0)),U,3)
|
---|
61 | I (TYPE="T")!(TYPE="G") D
|
---|
62 | .F S LINE=$O(^TIU(8927,TIUDA,2,LINE)) Q:'LINE D
|
---|
63 | ..S IDX=IDX+1
|
---|
64 | ..S ^TMP("TIU TEMPLATE",$J,IDX)=$G(^TIU(8927,TIUDA,2,LINE,0))
|
---|
65 | Q
|
---|
66 | ;
|
---|
67 | GETTEXT(TIUY,DFN,VSTR,TIUX) ; Expand Boilerplate
|
---|
68 | D BLRPLT^TIUSRVD(.TIUY,"",DFN,VSTR,"TIUX")
|
---|
69 | Q
|
---|
70 | ISEDITOR(TIUY,ROOT,USER) ; Returns TRUE if user is a Template Editor
|
---|
71 | N CLASS,TIUERR
|
---|
72 | S CLASS=$P($G(^TIU(8927,ROOT,0)),U,7)
|
---|
73 | I 'CLASS S TIUY="^NO CLASS OWNER DEFINED"
|
---|
74 | E D
|
---|
75 | .S TIUY=$$ISA^USRLM(USER,CLASS,.TIUERR)
|
---|
76 | .I 'TIUY,$D(TIUERR) S TIUY=U_TIUERR
|
---|
77 | Q
|
---|
78 | LISTOWNR(TIUY,TIUFROM,DIR) ; Return subset of personal owners
|
---|
79 | N FILE,IENS,FIELDS,FLAGS,NUMBER,TIUPART,INDEX,SCREEN,ID,TIU,TIUERR
|
---|
80 | S FILE=200,FIELDS="@;.01",FLAGS="PB",INDEX="B",NUMBER=44
|
---|
81 | S (IENS,TIUPART,ID,TIU,TIUERR)=""
|
---|
82 | I DIR=1 S FLAGS="P"
|
---|
83 | S SCREEN="I $O(^TIU(8927,""AROOT"",Y,0))"
|
---|
84 | D LIST^DIC(FILE,IENS,FIELDS,FLAGS,NUMBER,.TIUFROM,.TIUPART,INDEX,SCREEN,ID,"TIU","TIUERR")
|
---|
85 | K TIU("DILIST",0)
|
---|
86 | N DA,I
|
---|
87 | S DA="",I=0
|
---|
88 | F S DA=$O(TIU("DILIST",DA),DIR) Q:'DA D
|
---|
89 | . S I=I+1
|
---|
90 | . S TIUY(I)=$G(TIU("DILIST",DA,0))
|
---|
91 | Q
|
---|
92 | ;
|
---|
93 | ; Internal Routines
|
---|
94 | ;
|
---|
95 | ADDNODE(IDX,TIUDA,INTIUY) ;Adds template node info
|
---|
96 | N DATA
|
---|
97 | S DATA=$$NODEDATA(TIUDA)
|
---|
98 | I DATA'="" D
|
---|
99 | .S IDX=$G(IDX)+1
|
---|
100 | .I $G(INTIUY) S TIUY(IDX)=DATA
|
---|
101 | .E S ^TMP("TIU TEMPLATE",$J,IDX)=DATA
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | NODEDATA(TIUDA) ;Returns template node data
|
---|
105 | N NODE,DATA,RDIEN
|
---|
106 | S DATA=""
|
---|
107 | I +TIUDA D
|
---|
108 | .S NODE=$G(^TIU(8927,TIUDA,0))
|
---|
109 | .S DATA=TIUDA_$$NP(3)_$$NP(4)_$$NP(1)_$$NP(5)_$$NP(2)_$$NP(6)_U_$$HASITEMS(TIUDA)_U_$P(NODE,U,8,14)
|
---|
110 | .S RDIEN=$P(NODE,U,15)
|
---|
111 | .I +RDIEN D
|
---|
112 | ..N RDN
|
---|
113 | ..S RDN=$G(^PXRMD(801.41,+RDIEN,0))
|
---|
114 | ..; TIU*166
|
---|
115 | ..I RDN'="" D
|
---|
116 | ...S $P(DATA,U,16)=RDIEN_U_$P(RDN,U,1)
|
---|
117 | ...S $P(DATA,U,22)=$S($P($G(RDN),U,17)=1:1,1:0)
|
---|
118 | .S $P(DATA,U,18)=$P(NODE,U,16,19)
|
---|
119 | Q DATA
|
---|
120 | ;
|
---|
121 | NP(PNUM) ;Returns the piece of the node
|
---|
122 | Q U_$P(NODE,U,PNUM)
|
---|
123 | ;
|
---|
124 | HASITEMS(TIUDA) ; Returns Has Children flag (0=NONE,1=ACTIVE,2=INACTIVE,3=BOTH)
|
---|
125 | N FLAG,FLAGA,FLAGI,ITEM,ITEMNODE
|
---|
126 | S (FLAG,FLAGA,FLAGI,ITEM)=0
|
---|
127 | I $P($G(^TIU(8927,TIUDA,0)),U,3)'="T" D
|
---|
128 | .F S ITEM=$O(^TIU(8927,TIUDA,10,ITEM)) Q:'ITEM D Q:(FLAG=3)
|
---|
129 | ..S ITEMNODE=$P($G(^TIU(8927,TIUDA,10,ITEM,0)),U,2)
|
---|
130 | ..I +ITEMNODE D
|
---|
131 | ...I $P($G(^TIU(8927,ITEMNODE,0)),U,4)="A" S FLAGA=1
|
---|
132 | ...E S FLAGI=2
|
---|
133 | ..S FLAG=FLAGA+FLAGI
|
---|
134 | Q FLAG
|
---|
135 | SETTMPLT(SUCCESS,TIUDA,TIUX) ; Create/update a TEMPLATE
|
---|
136 | N FLD
|
---|
137 | S:'+TIUDA TIUDA=$$CREATE($G(TIUX(.01)),$G(TIUX(.03)))
|
---|
138 | S SUCCESS=TIUDA Q:'+SUCCESS
|
---|
139 | I $G(TIUX(.03))="R" S TIUX(.07)=+$$CLPAC^TIUSRVT1
|
---|
140 | F FLD=2,5 D Q:$D(TIUX)'>9
|
---|
141 | . I +$O(TIUX(FLD,0)) D Q:$D(TIUX)'>9
|
---|
142 | . . K ^TIU(8927,TIUDA,FLD)
|
---|
143 | . . I $G(TIUX(FLD,1))="@" K TIUX(FLD) Q
|
---|
144 | . . M ^TIU(8927,TIUDA,FLD)=TIUX(FLD) K TIUX(FLD)
|
---|
145 | . . D SETXT0^TIUSRVT1(TIUDA,FLD)
|
---|
146 | D FILE^TIUSRVT1(.SUCCESS,""""_TIUDA_",""",.TIUX)
|
---|
147 | Q
|
---|
148 | CREATE(NAME,TYPE) ; Get or create TEMPLATE record
|
---|
149 | N DIC,DLAYGO,DR,X,Y
|
---|
150 | S (DIC,DLAYGO)=8927,DIC(0)="FL"
|
---|
151 | S X=""""_NAME_"""" D ^DIC
|
---|
152 | I +Y'>0 Q "0^ Unable to create a new TEMPLATE record."
|
---|
153 | Q +Y
|
---|
154 | DELETE(SUCCESS,TIUDA) ; Delete TEMPLATES
|
---|
155 | ; Pass TIUDA as array of record numbers to be deleted by reference
|
---|
156 | ; SUCCESS will be returned as the actual number of templates deleted
|
---|
157 | N TIUI S (SUCCESS,TIUI)=0
|
---|
158 | F S TIUI=$O(TIUDA(TIUI)) Q:+TIUI'>0 D
|
---|
159 | . N DA
|
---|
160 | . S DA=+TIUDA(TIUI)
|
---|
161 | . I 'DA Q
|
---|
162 | . L -^TIU(8927,DA,0):1 ; Unlock before deleting
|
---|
163 | . ; Quit if the Template is NOT an ORPHAN
|
---|
164 | . I +$O(^TIU(8927,"AD",DA,0)) Q
|
---|
165 | . ; Otherwise, call FileMan to DELETE the record
|
---|
166 | . D ZAP(DA) S SUCCESS=SUCCESS+1
|
---|
167 | Q
|
---|
168 | ZAP(DA) ; Call ^DIK to remove an entry - CAREFUL...NO CHECKS
|
---|
169 | N DIK
|
---|
170 | S DIK="^TIU(8927," D ^DIK
|
---|
171 | Q
|
---|
172 | SETITEMS(SUCCESS,TIUDA,TIUX) ; Change ITEMs of a group, class, or root
|
---|
173 | ; Receives:
|
---|
174 | ; TIUDA=IEN of TEMPLATE record
|
---|
175 | ; TIUX(SEQ)=IEN of item
|
---|
176 | ; Returns:
|
---|
177 | ; SUCCESS(SEQ)=IEN of item if successful, or
|
---|
178 | ; 0^ Explanatory message if not
|
---|
179 | N TIUI S TIUI=0
|
---|
180 | D CLRITMS(TIUDA) ; Remove ITEMS
|
---|
181 | ; Iterate through TIUX and file items
|
---|
182 | F S TIUI=$O(TIUX(TIUI)) Q:+TIUI'>0 D
|
---|
183 | . N TIUITEM,TIUSUCC
|
---|
184 | . S TIUITEM(.01)=TIUI,TIUITEM(.02)=TIUX(TIUI),TIUSUCC=TIUI
|
---|
185 | . D UPDATE^TIUSRVT1(.TIUSUCC,"""+"_TIUI_","_TIUDA_",""",.TIUITEM)
|
---|
186 | . S SUCCESS(TIUI)=TIUSUCC
|
---|
187 | Q
|
---|
188 | CLRITMS(TIUDA) ; Remove all items from a group, class, or root
|
---|
189 | N DA S DA=0
|
---|
190 | F S DA=$O(^TIU(8927,TIUDA,10,DA)) Q:+DA'>0 D
|
---|
191 | . N DIK S DIK="^TIU(8927,TIUDA,10,",DA(1)=TIUDA D ^DIK
|
---|
192 | Q
|
---|
193 | OBJLST(TIUY) ; Get the list of active objects
|
---|
194 | N TIUDA,TIUD0,TIUI
|
---|
195 | S (TIUDA,TIUI)=0,TIUY=$NA(^TMP("TIU OBJECTS",$J)) K @TIUY
|
---|
196 | F S TIUDA=$O(^TIU(8925.1,"AT","O",TIUDA)) Q:+TIUDA'>0 D
|
---|
197 | . S TIUD0=$G(^TIU(8925.1,TIUDA,0)) Q:'+$$CANPICK^TIULP(+TIUDA)
|
---|
198 | . S TIUI=TIUI+1
|
---|
199 | . S @TIUY@(TIUI)=TIUDA_U_$P(TIUD0,U,1,3)
|
---|
200 | Q
|
---|
201 | BPCHECK(TIUTY,TIUX) ; Checks objects in boilerplate text.
|
---|
202 | N LINE,TIUI,TIUFWHO,TIUFPRIV,TIUY
|
---|
203 | S TIUI=0,TIUY=1,TIUFPRIV=1,TIUFWHO="M"
|
---|
204 | K ^TMP("TIUF",$J)
|
---|
205 | F S TIUI=$O(TIUX(2,TIUI)) Q:+TIUI'>0 D Q:'+TIUY
|
---|
206 | . S LINE=$G(TIUX(2,TIUI,0))
|
---|
207 | . I LINE["|" D
|
---|
208 | . . I ($L(LINE,"|")+1)#2 D Q
|
---|
209 | . . . S TIUY=0
|
---|
210 | . . . S TIUTY(1)="Object split between lines, rest of line not checked:"
|
---|
211 | . . . S TIUTY(2)=LINE
|
---|
212 | . . N PIECE
|
---|
213 | . . F PIECE=2:2:$L(LINE,"|") D Q:TIUY=0
|
---|
214 | . . . N OBJNM
|
---|
215 | . . . S OBJNM=$P(LINE,"|",PIECE)
|
---|
216 | . . . I OBJNM="" D Q
|
---|
217 | . . . . S TIUY=0
|
---|
218 | . . . . S TIUTY(1)="Brackets are there, but there's no name inside ||:"
|
---|
219 | . . . . S TIUTY(2)=LINE
|
---|
220 | . . . N XREF,ARR
|
---|
221 | . . . F XREF="B","C","D" D Q:'+TIUY
|
---|
222 | . . . . N ODA S ODA=0
|
---|
223 | . . . . F S ODA=$O(^TIU(8925.1,XREF,OBJNM,ODA)) Q:+ODA'>0 D Q:'+TIUY
|
---|
224 | . . . . . S:$D(^TIU(8925.1,"AT","O",ODA)) ARR(ODA)=""
|
---|
225 | . . . . . I $O(ARR($O(ARR(0)))) D
|
---|
226 | . . . . . . S TIUY=0
|
---|
227 | . . . . . . S TIUTY(1)="Object |"_OBJNM_"| is ambiguous."
|
---|
228 | . . . . . . S TIUTY(2)="It could be any of SEVERAL objects. Please contact IRM."
|
---|
229 | . . . I '$D(ARR) D Q
|
---|
230 | . . . . S TIUY=0
|
---|
231 | . . . . S TIUTY(1)="Object |"_OBJNM_"| cannot be found in the file."
|
---|
232 | . . . . S TIUTY(2)="Use UPPERCASE and object's exact NAME, PRINT NAME, or ABBREVIATION."
|
---|
233 | . . . . S TIUTY(3)="Any of these may have changed since |"_OBJNM_"| was embedded."
|
---|
234 | . . . S ODA=$O(ARR(0)) N OBJCK D CHECK^TIUFLF3(ODA,0,0,.OBJCK)
|
---|
235 | . . . I '+OBJCK D Q:'+TIUY
|
---|
236 | . . . . N SUBS
|
---|
237 | . . . . F SUBS="F","T","O","S","J" D
|
---|
238 | . . . . . I $D(OBJCK(SUBS)) D
|
---|
239 | . . . . . . S TIUY=0
|
---|
240 | . . . . . . S TIUTY(1)="Object |"_OBJNM_"| is faulty: "
|
---|
241 | . . . . . . S TIUTY(2)=OBJCK(SUBS)_"."
|
---|
242 | . . . I $P(^TIU(8925.1,ODA,0),U,7)'=11 D
|
---|
243 | . . . . S TIUY=0
|
---|
244 | . . . . S TIUTY(1)="Object |"_OBJNM_"| is NOT ACTIVE."
|
---|
245 | K ^TMP("TIUF",$J)
|
---|
246 | Q
|
---|