1 | LA7UTILA ;DALOI/JMC - Browse UI message ; 6/19/96 09:00
|
---|
2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**23,27,46,64**;Sep 27, 1994
|
---|
3 | ;
|
---|
4 | EN ; Select a Universal Interface message to browse.
|
---|
5 | D EXIT ; Housekeeping before we start.
|
---|
6 | S DIC="^LAHM(62.49,",DIC("W")="W "" "",$P(^(0),U,6)"
|
---|
7 | S VAUTVB="LA7LIST",VAUTSTR="Message",VAUTNI=2,VAUTNALL=1
|
---|
8 | D FIRST^VAUTOMA
|
---|
9 | I Y<1!('$O(LA7LIST(0))) D EXIT Q
|
---|
10 | ;
|
---|
11 | DEV ; Called from LA7UXQA - when viewing message via alert system.
|
---|
12 | S DIR(0)="YO",DIR("A")="Parse message fields based on HL7 segments",DIR("B")="NO"
|
---|
13 | D ^DIR K DIR
|
---|
14 | I $D(DIRUT) D EXIT Q
|
---|
15 | S LA7PARS=+Y ; Save flag to parse message.
|
---|
16 | I LA7PARS D I $D(DIRUT) D EXIT Q
|
---|
17 | . S DIR(0)="YO",DIR("A")="Suppress blank segments",DIR("B")="YES"
|
---|
18 | . D ^DIR K DIR Q:$D(DIRUT)
|
---|
19 | . S $P(LA7PARS,"^",2)=+Y
|
---|
20 | ; Ask device and task if requested.
|
---|
21 | S %ZIS="Q" D ^%ZIS K %ZIS
|
---|
22 | I POP D EXIT Q
|
---|
23 | I $D(IO("Q")) D G EXIT
|
---|
24 | . S LA7TEST=0 ; Tasked - not a CRT.
|
---|
25 | . S ZTRTN="DQ^LA7UTILA",ZTDESC="Print LA7 UI Messages",ZTSAVE("LA7*")=""
|
---|
26 | . D ^%ZTLOAD
|
---|
27 | . W !,"Request ",$S($D(ZTSK):"",1:"NOT "),"Queued"
|
---|
28 | . K IO("Q")
|
---|
29 | U IO(0)
|
---|
30 | ;
|
---|
31 | ; Flag to determine if okay to use browser (default=true).
|
---|
32 | S LA7TEST=1
|
---|
33 | ;
|
---|
34 | ; Home device not current device or using non-CRT terminal type.
|
---|
35 | I IO'=IO(0)!($E(IOST,1,2)'="C-") S LA7TEST=0
|
---|
36 | ;
|
---|
37 | ; If not queued and home device then test for browser
|
---|
38 | I LA7TEST,'$$TEST^DDBRT D
|
---|
39 | . S LA7TEST=0 ; Unable to use browser.
|
---|
40 | . W !,$C(7),"This terminal does not support the needed functionality to use the Browser!"
|
---|
41 | . W !,"Will use standard FileMan Data Display.",!
|
---|
42 | I LA7TEST D
|
---|
43 | . N DIR,DIRUT,DTOUT,DUOUT,X,Y
|
---|
44 | . S DIR(0)="YO",DIR("A")="Use Browser to display message(s)",DIR("B")="YES"
|
---|
45 | . D ^DIR
|
---|
46 | . I $D(DIRUT) S LA7TEST=-1 Q
|
---|
47 | . S LA7TEST=+Y
|
---|
48 | I LA7TEST<0 D EXIT Q
|
---|
49 | D WAIT^DICD
|
---|
50 | ;
|
---|
51 | DQ ; Dequeue entry point.
|
---|
52 | U IO
|
---|
53 | K ^TMP($J),^TMP("DDB",$J)
|
---|
54 | S LA7IEN=0
|
---|
55 | F S LA7IEN=$O(LA7LIST(LA7IEN)) Q:'LA7IEN S LA7J=1 D BRO("LA7 UI Message Display",LA7IEN,LA7IEN)
|
---|
56 | I LA7TEST D Q ; Display using browser.
|
---|
57 | . D DOCLIST^DDBR("^TMP($J,""LIST"")","R")
|
---|
58 | . D EXIT
|
---|
59 | S (LA7IEN,LA7QUIT)=0
|
---|
60 | S HDR=""
|
---|
61 | F S HDR=$O(^TMP($J,"LIST",HDR)) Q:HDR="" D Q:LA7QUIT
|
---|
62 | . I IOST["C-" W @IOF
|
---|
63 | . W $$CJ^XLFSTR(HDR,IOM," "),!
|
---|
64 | . S LA7ROOT=^TMP($J,"LIST",HDR),LA7ROOT=$E(LA7ROOT,1,$L(LA7ROOT)-1)
|
---|
65 | . S LA7CONT=0 ; Flag to determine if line has been continue on followng line.
|
---|
66 | . S I=0
|
---|
67 | . F S I=$O(@(LA7ROOT_","_I_")")) Q:'I D Q:LA7QUIT
|
---|
68 | . . S LA7X=^(I)
|
---|
69 | . . I LA7X="" W ! Q ; Print blank separator line
|
---|
70 | . . F S LA7Y=$E(LA7X,1,IOM-1) Q:LA7Y="" D Q:LA7QUIT
|
---|
71 | . . . S LA7X=$E(LA7X,IOM,$L(LA7X))
|
---|
72 | . . . I $L(LA7X) S LA7CONT=1,LA7X="--->"_LA7X
|
---|
73 | . . . W !,LA7Y
|
---|
74 | . . . I $Y+7>IOSL D EOP W @IOF Q:LA7QUIT
|
---|
75 | . I 'LA7QUIT D EOP
|
---|
76 | . W !!
|
---|
77 | D EXIT
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | BRO(LA7HDR,LA7DOC,LA7IEN,LA7J) ; Setup text for browser.
|
---|
81 | ; Called from above.
|
---|
82 | N LA7,LA7DT,LA7X,I,J,K,X,Y
|
---|
83 | D GETS^DIQ(62.49,LA7IEN,".01:149;160;161","ENR","LA7") ; Retrieve data from file 62.49
|
---|
84 | S J=$G(LA7J,1)
|
---|
85 | S ^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Message Statistics ",IOM-4,"*")_"]"
|
---|
86 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
87 | S I="LA7(62.49)",K=0,J(0)=J
|
---|
88 | F S I=$Q(@I) Q:I="" Q:$QS(I,1)'=62.49 D
|
---|
89 | . S X=$QS(I,3)_": "_@I
|
---|
90 | . I K=0,$L(X)>((IOM\2)-1) S K=1,Y=""
|
---|
91 | . I K=0 S K=1,Y=$$LJ^XLFSTR(X,(IOM\2)+2)
|
---|
92 | . E S K=0,J=J+1,^TMP("DDB",$J,LA7DOC,J)=Y_$QS(I,3)_": "_@I
|
---|
93 | I K=1 S J=J+1,^TMP("DDB",$J,LA7DOC,J)=Y
|
---|
94 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR(" [None Found]",IOM-1)
|
---|
95 | S LA7X=$G(^LAHM(62.49,LA7IEN,0))
|
---|
96 | S LA7DT=$P(LA7X,"^",5) ; Date/time message received
|
---|
97 | S LA7DT(0)=LA7DT\1 ; Date message received.
|
---|
98 | S LA7DT(1)=LA7DT#1 ; Time message received.
|
---|
99 | S K="LA7ERR^"_(LA7DT(0)-.1)
|
---|
100 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
101 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Error Message ",IOM-4,"*")_"]"
|
---|
102 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
103 | S J(0)=J ; Save value of "J", determine if any error message found.
|
---|
104 | F S K=$O(^XTMP(K)) Q:K=""!($P(K,"^")'="LA7ERR") D
|
---|
105 | . I LA7DT(0)=$P(K,"^",2) S I=LA7DT(1)-.00000001 ; Start looking after date/time of message.
|
---|
106 | . E S I=0
|
---|
107 | . F S I=$O(^XTMP(K,I)) Q:'I D
|
---|
108 | . . S X=^XTMP(K,I)
|
---|
109 | . . I $P(X,"^",2)=LA7IEN D
|
---|
110 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)="Date: "_$$FMTE^XLFDT($P(K,"^",2)+I,1)
|
---|
111 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)="Text: "_$P(X,"^",4) ; Get error message.
|
---|
112 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
113 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR("[None Found]",IOM-1)
|
---|
114 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
115 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Text of Message ",IOM-4,"*")_"]"
|
---|
116 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
117 | ;
|
---|
118 | ; Retrieve text of message from 62.49.
|
---|
119 | S I=0,J(0)=J
|
---|
120 | F S I=$O(^LAHM(62.49,LA7IEN,150,I)) Q:'I D
|
---|
121 | . S J=J+1
|
---|
122 | . S ^TMP("DDB",$J,LA7DOC,J)=$G(^LAHM(62.49,LA7IEN,150,I,0))
|
---|
123 | . ; Parse each message segment.
|
---|
124 | . I '$G(LA7PARS) Q
|
---|
125 | . S X=$G(^LAHM(62.49,LA7IEN,150,I,0))
|
---|
126 | . ; Obtain field separator and encoding characters.
|
---|
127 | . I $E(X,1,3)="MSH" S HLFS=$E(X,4),HLECH=$E(X,5,8)
|
---|
128 | . ; Segement ID code.
|
---|
129 | . S Y=$P(X,HLFS)
|
---|
130 | . ; Parse fields.
|
---|
131 | . D PF
|
---|
132 | ;
|
---|
133 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR("[None Found]",IOM-1)
|
---|
134 | ;
|
---|
135 | ; If linked to another entry go pasrse that entry also
|
---|
136 | I $P(LA7X,"^",7) D BRO("LA7 UI Message Display",LA7DOC,$P(LA7X,"^",7),J)
|
---|
137 | ;
|
---|
138 | ; Setup document list.
|
---|
139 | S LA7HDR=LA7HDR_" Msg #"_LA7DOC_" - "_$P(^LAHM(62.49,LA7DOC,0),"^",6)
|
---|
140 | S ^TMP($J,"LIST",LA7HDR)="^TMP(""DDB"",$J,"_LA7DOC_")"
|
---|
141 | Q
|
---|
142 | ;
|
---|
143 | PF ; Parse message fields
|
---|
144 | ;
|
---|
145 | F K=$S(Y="MSH":1,1:2):1:$L(X,HLFS) D
|
---|
146 | . S Z=$P(X,HLFS,K)
|
---|
147 | . ; Don't display blank segments.
|
---|
148 | . I $P(LA7PARS,"^",2),Z="" Q
|
---|
149 | . S J=J+1
|
---|
150 | . I Y="MSH" S V=Y_"-"_K_" = "_$S(K=1:HLFS,1:$P(X,HLFS,K))
|
---|
151 | . E S V=Y_"-"_(K-1)_" = "_$P(X,HLFS,K)
|
---|
152 | . S ^TMP("DDB",$J,LA7DOC,J)=V
|
---|
153 | . I Z="" Q ; Don't parse blank segments.
|
---|
154 | . I Y="MSH",K<3 Q ; Don't parse MSH-1/2.
|
---|
155 | . ; Parse components.
|
---|
156 | . D PC
|
---|
157 | ; Separate segments with blank line.
|
---|
158 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" "
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | PC ; Parse field components
|
---|
162 | ;
|
---|
163 | F L=1:1:$L(Z,$E(HLECH,1)) D
|
---|
164 | . S V=$P(Z,$E(HLECH,1),L) Q:V=""
|
---|
165 | . I Z[$E(HLECH,1) D
|
---|
166 | . . S J=J+1
|
---|
167 | . . S ^TMP("DDB",$J,LA7DOC,J)=Y_"-"_($S(Y="MSH":K,1:K-1))_"-"_L_" = "_V
|
---|
168 | . I V'[$E(HLECH,2) Q
|
---|
169 | . ; Parse repetition of components.
|
---|
170 | . F M=1:1:$L(V,$E(HLECH,2)) D
|
---|
171 | . . S J=J+1
|
---|
172 | . . S ^TMP("DDB",$J,LA7DOC,J)=Y_"-"_($S(Y="MSH":K,1:K-1))_"-"_L_"-"_M_" = "_$P(V,$E(HLECH,2),M)
|
---|
173 | Q
|
---|
174 | ;
|
---|
175 | EOP ; End of page.
|
---|
176 | I LA7CONT W !!,"NOTE: '--->' indicates continuation of previous line." S LA7CONT=0
|
---|
177 | I $D(ZTQUEUED)!(IOST'["C-") Q
|
---|
178 | S DIR(0)="E" D ^DIR K DIR S:Y'=1 LA7QUIT=1
|
---|
179 | Q
|
---|
180 | ;
|
---|
181 | EXIT ; Clean up.
|
---|
182 | W @IOF
|
---|
183 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
184 | E D ^%ZISC
|
---|
185 | K ^TMP($J),^TMP("DDB",$J)
|
---|
186 | K LA7CONT,LA7IEN,LA7J,LA7LIST,LA7PARS,LA7QUIT,LA7ROOT,LA7TEST,LA7X,LA7Y
|
---|
187 | K DIC,DIR,HDR,HLECH,HLFS,I,J,K,L,M,V,X,Y,Z
|
---|
188 | K VAUTVB,VAUTNI,VAUTSTR,VAUTNALL
|
---|
189 | Q
|
---|
190 | ;
|
---|
191 | ;
|
---|
192 | FMT(LA76249) ; Perform test to determine storage format, each segment on one
|
---|
193 | ; node or segment has continuation nodes separated with null "" nodes.
|
---|
194 | ; Call with LA76249 = ien of entry in file #62.49
|
---|
195 | ; Returns LA7Y = 0-old format, 1-new format
|
---|
196 | ;
|
---|
197 | N LA7END,LA7Y,LA7ROOT
|
---|
198 | S (LA7END,LA7Y)=0,LA7ROOT="^LAHM(62.49,LA76249,150,0)"
|
---|
199 | F S LA7ROOT=$Q(@LA7ROOT) Q:LA7END D
|
---|
200 | . I $QS(LA7ROOT,1)'="62.49"!($QS(LA7ROOT,2)'=LA76249)!($QS(LA7ROOT,3)'=150) S LA7END=1 Q
|
---|
201 | . I @LA7ROOT="" S (LA7Y,LA7END)=1
|
---|
202 | Q LA7Y
|
---|