1 | XMJMFB ;ISC-SF/GMB-Find message: multiple conditions ;07/12/2002 10:40
|
---|
2 | ;;8.0;MailMan;;Jun 28, 2002
|
---|
3 | ; Replaces ^XMAL0,^XMAL0A (ISC-WASH/JSH/CAP)
|
---|
4 | ; XMF("BSKT") =number - Look in this basket ONLY
|
---|
5 | ; =* - Look in all baskets
|
---|
6 | ; XMF("SUBJ") Subject contains this string
|
---|
7 | ; XMF("SUBJ","S") Look for this string in the subject
|
---|
8 | ; XMF("FLINE") Message has this many or more lines
|
---|
9 | ; XMF("TLINE") Message has this many or fewer lines
|
---|
10 | ; XMF("FROM") Message is from this person
|
---|
11 | ; XMF("TO") Message is to this person
|
---|
12 | ; XMF("FDATE") Message was sent on or after this date
|
---|
13 | ; XMF("TDATE") Message was sent on or before this date
|
---|
14 | ; XMF("RFROM") Message has a response from this person
|
---|
15 | ; XMF("TEXT") Message contains this string
|
---|
16 | ; XMF("TEXT","S") Look for this string in the message
|
---|
17 | ; XMF("TEXT","L") =1 - Look in message only
|
---|
18 | ; =2 - Look in both message and responses
|
---|
19 | ; =3 - Look in responses only
|
---|
20 | ; XMF("TEXT","C") =0 - Search is not case-sensitive
|
---|
21 | ; =1 - Search is case-sensitive
|
---|
22 | FIND1(XMDUZ,XMF,XMWAIT) ;
|
---|
23 | N XMK,XMKN,XMKZ,XMCNT,XMABORT,XMLEN,XMFIRST,XMPAGE,XMDETAIL,XMPMAX,XMMORE,XMZOOM,XMCD,XMOPT,XMOX
|
---|
24 | K ^TMP("XM",$J,"MSG"),^TMP("XM",$J,".")
|
---|
25 | S XMKZ="",(XMPAGE,XMCNT,XMZOOM,XMCD,XMABORT)=0,(XMDETAIL,XMMORE)=1,XMPMAX=IOSL-3
|
---|
26 | D INIT1(XMDUZ,.XMF,XMDETAIL,XMPMAX,.XMK,.XMKN,.XMLEN)
|
---|
27 | D SETOPT^XMJMLR1(XMDUZ,$S(XMDUZ'=.5:0,XMK<1000:0,1:XMK),.XMOPT,.XMOX)
|
---|
28 | F D Q:XMABORT
|
---|
29 | . I XMCD S XMCD=0,XMDETAIL='XMDETAIL D INIT1(XMDUZ,.XMF,XMDETAIL,XMPMAX,.XMK,.XMKN,.XMLEN)
|
---|
30 | . D DISPLAY1(XMDUZ,.XMF,XMDETAIL,.XMK,XMKN,.XMKZ,.XMCNT,.XMFIRST,.XMPAGE,.XMMORE,.XMLEN,XMZOOM,XMPMAX)
|
---|
31 | . I XMCNT=0 S XMABORT=1 Q
|
---|
32 | . D CHOOSE^XMJMLN(XMDUZ,0,XMK,.XMKZ,.XMFIRST,.XMPAGE,XMMORE,.XMLEN,.XMZOOM,.XMOPT,.XMOX,"READMSG^XMJMFB",.XMABORT)
|
---|
33 | . S:'$D(^TMP("XM",$J,"MSG")) XMABORT=1
|
---|
34 | I XMCNT=0 D
|
---|
35 | . W $C(7),$$EZBLD^DIALOG(34401) ; No matches found.
|
---|
36 | . Q:'$G(XMWAIT)
|
---|
37 | . W ! D WAIT^XMXUTIL
|
---|
38 | K ^TMP("XM",$J,"MSG"),^TMP("XM",$J,".")
|
---|
39 | Q
|
---|
40 | INIT1(XMDUZ,XMF,XMDETAIL,XMPMAX,XMK,XMKN,XMLEN) ;
|
---|
41 | S:$D(XMF("SUBJ")) XMF("SUBJ","S")=$$UP^XLFSTR(XMF("SUBJ"))
|
---|
42 | S:$D(XMF("TEXT")) XMF("TEXT","S")=$S('XMF("TEXT","C"):$$UP^XLFSTR(XMF("TEXT")),1:XMF("TEXT"))
|
---|
43 | S XMK=XMF("BSKT")
|
---|
44 | S XMKN=$P(^XMB(3.7,XMDUZ,2,XMK,0),U)
|
---|
45 | D INIT^XMJML(XMDUZ,XMK,XMKN,XMDETAIL,.XMLEN,1)
|
---|
46 | Q
|
---|
47 | DISPLAY1(XMDUZ,XMF,XMDETAIL,XMK,XMKN,XMKZ,XMCNT,XMFIRST,XMPAGE,XMMORE,XMLEN,XMZOOM,XMPMAX) ;
|
---|
48 | N XMREC,XMZ
|
---|
49 | S XMFIRST(XMPAGE)=XMKZ
|
---|
50 | D HEADER^XMJML(XMDETAIL,.XMLEN,$$EZBLD^DIALOG(34404,XMKN)) ; XMKN_ Basket Search
|
---|
51 | I XMZOOM D Q
|
---|
52 | . F S XMKZ=$O(^TMP("XM",$J,".",XMKZ),XMV("ORDER")) Q:XMKZ="" D Q:$Y>XMPMAX
|
---|
53 | . . S XMREC=^TMP("XM",$J,"MSG",XMKZ)
|
---|
54 | . . D LISTMSG^XMJML($P(XMREC,U,1),$P(XMREC,U,2),XMKZ,$P(XMREC,U,3),XMDETAIL,.XMLEN)
|
---|
55 | F S XMKZ=$O(^TMP("XM",$J,"MSG",XMKZ),XMV("ORDER")) Q:XMKZ="" D Q:$Y>XMPMAX
|
---|
56 | . S XMREC=^TMP("XM",$J,"MSG",XMKZ)
|
---|
57 | . D LISTMSG^XMJML($P(XMREC,U,1),$P(XMREC,U,2),XMKZ,$P(XMREC,U,3),XMDETAIL,.XMLEN)
|
---|
58 | Q:$Y>XMPMAX!'XMMORE
|
---|
59 | D CHKNLST1(XMDUZ,.XMF,XMDETAIL,XMK,XMKN,.XMKZ,.XMCNT,XMPMAX,.XMLEN)
|
---|
60 | S:XMKZ'>0 XMMORE=0
|
---|
61 | W:'XMMORE !,$$EZBLD^DIALOG(34402) ; Search finished.
|
---|
62 | Q
|
---|
63 | CHKNLST1(XMDUZ,XMF,XMDETAIL,XMK,XMKN,XMKZ,XMCNT,XMPMAX,XMLEN) ; Check and List
|
---|
64 | N XMZ
|
---|
65 | S:XMKZ="" XMKZ=$O(^TMP("XM",$J,"MSG",""),-XMV("ORDER"))
|
---|
66 | F S XMKZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZ),XMV("ORDER")) Q:XMKZ'>0 D Q:$Y>XMPMAX
|
---|
67 | . S XMZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZ,0))
|
---|
68 | . I '$D(^XMB(3.7,XMDUZ,2,XMK,1,XMZ,0)) D ADDITC^XMUT4A(XMDUZ,XMK,XMZ,XMKZ)
|
---|
69 | . Q:'$$GOODMSG(XMDUZ,XMK,XMZ,.XMF)
|
---|
70 | . S XMCNT=XMCNT+1
|
---|
71 | . D LISTMSG^XMJML(XMK,XMKN,XMKZ,XMZ,XMDETAIL,.XMLEN)
|
---|
72 | . S ^TMP("XM",$J,"MSG",XMKZ)=XMK_U_XMKN_U_XMZ
|
---|
73 | Q
|
---|
74 | FINDALL(XMDUZ,XMF) ;
|
---|
75 | N XMK,XMKN,XMKZZ,XMKZ,XMCNT,XMABORT,XMLEN,XMFIRST,XMPAGE,XMDETAIL,XMPMAX,XMMORE,XMZOOM,XMCD,XMOPT,XMOX
|
---|
76 | S (XMKZ,XMKZZ)="",(XMK,XMPAGE,XMCNT,XMZOOM,XMCD,XMABORT)=0,(XMDETAIL,XMMORE)=1,XMPMAX=IOSL-3
|
---|
77 | D INITA(XMDUZ,.XMF,.XMK,.XMKN,.XMKZZ,.XMLEN,.XMABORT) Q:XMABORT
|
---|
78 | D SETOPT^XMJMLR1(XMDUZ,0,.XMOPT,.XMOX)
|
---|
79 | K ^TMP("XM",$J,"MSG"),^TMP("XM",$J,".")
|
---|
80 | F D Q:XMABORT
|
---|
81 | . D DISPLAYA(XMDUZ,.XMF,.XMDETAIL,.XMK,XMKN,.XMKZZ,.XMKZ,.XMCNT,.XMFIRST,.XMPAGE,.XMMORE,.XMLEN,XMZOOM,XMPMAX)
|
---|
82 | . D CHOOSE^XMJMLN(XMDUZ,1,0,.XMKZ,.XMFIRST,.XMPAGE,XMMORE,.XMLEN,.XMZOOM,.XMOPT,.XMOX,"READMSG^XMJMFB",.XMABORT)
|
---|
83 | . S:'$D(^TMP("XM",$J,"MSG")) XMABORT=1
|
---|
84 | K ^TMP("XM",$J,"MSG"),^TMP("XM",$J,".")
|
---|
85 | Q
|
---|
86 | INITA(XMDUZ,XMF,XMK,XMKN,XMKZZ,XMLEN,XMABORT) ;
|
---|
87 | S:$D(XMF("SUBJ")) XMF("SUBJ","S")=$$UP^XLFSTR(XMF("SUBJ"))
|
---|
88 | S:$D(XMF("TEXT")) XMF("TEXT","S")=$S('XMF("TEXT","C"):$$UP^XLFSTR(XMF("TEXT")),1:XMF("TEXT"))
|
---|
89 | S XMLEN("XMKZ")=0
|
---|
90 | F S XMK=$O(^XMB(3.7,XMDUZ,2,XMK)) Q:XMK'>0 D Q:$D(XMKN)
|
---|
91 | . F S XMKZZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZZ),XMV("ORDER")) Q:XMKZZ'>0 D Q:$D(XMKN)
|
---|
92 | . . S XMZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZZ,0))
|
---|
93 | . . Q:'$$GOODMSG(XMDUZ,XMK,XMZ,.XMF)
|
---|
94 | . . S XMKN=$P(^XMB(3.7,XMDUZ,2,XMK,0),U)
|
---|
95 | I $D(XMKN) S XMKZZ=XMKZZ-XMV("ORDER") Q
|
---|
96 | S XMABORT=1
|
---|
97 | W $C(7),$$EZBLD^DIALOG(34401),! ; No matches found.
|
---|
98 | D WAIT^XMXUTIL
|
---|
99 | Q
|
---|
100 | DISPLAYA(XMDUZ,XMF,XMDETAIL,XMK,XMKN,XMKZZ,XMKZ,XMCNT,XMFIRST,XMPAGE,XMMORE,XMLEN,XMZOOM,XMPMAX) ;
|
---|
101 | N XMREC,XMZ
|
---|
102 | S XMFIRST(XMPAGE)=XMKZ
|
---|
103 | I XMCD D
|
---|
104 | . S XMCD=0,XMDETAIL='XMDETAIL
|
---|
105 | . D INIT^XMJML(XMDUZ,XMK,XMKN,XMDETAIL,.XMLEN)
|
---|
106 | E I $L(XMCNT+XMPMAX)>XMLEN("XMKZ") D
|
---|
107 | . S XMLEN("XMKZ")=$L(XMCNT+XMPMAX)
|
---|
108 | . D INIT^XMJML(XMDUZ,XMK,XMKN,XMDETAIL,.XMLEN)
|
---|
109 | D HEADER^XMJML(XMDETAIL,.XMLEN,$$EZBLD^DIALOG(34405)) ; All Baskets Search
|
---|
110 | I XMZOOM D Q
|
---|
111 | . F S XMKZ=$O(^TMP("XM",$J,".",XMKZ)) Q:XMKZ="" D Q:$Y>XMPMAX
|
---|
112 | . . S XMREC=^TMP("XM",$J,"MSG",XMKZ)
|
---|
113 | . . D LISTMSG^XMJML($P(XMREC,U,1),$P(XMREC,U,2),XMKZ,$P(XMREC,U,3),XMDETAIL,.XMLEN)
|
---|
114 | F S XMKZ=$O(^TMP("XM",$J,"MSG",XMKZ)) Q:XMKZ="" D Q:$Y>XMPMAX
|
---|
115 | . S XMREC=^TMP("XM",$J,"MSG",XMKZ)
|
---|
116 | . D LISTMSG^XMJML($P(XMREC,U,1),$P(XMREC,U,2),XMKZ,$P(XMREC,U,3),XMDETAIL,.XMLEN)
|
---|
117 | Q:$Y>XMPMAX!'XMMORE
|
---|
118 | S XMK=XMK-.01
|
---|
119 | F S XMK=$O(^XMB(3.7,XMDUZ,2,XMK)) Q:XMK'>0 D Q:$Y>XMPMAX
|
---|
120 | . S XMKN=$P(^XMB(3.7,XMDUZ,2,XMK,0),U)
|
---|
121 | . D CHKNLSTA(XMDUZ,.XMF,XMDETAIL,XMK,XMKN,.XMKZZ,.XMCNT,XMPMAX,.XMLEN)
|
---|
122 | I XMK'>0,XMKZZ'>0 S XMMORE=0
|
---|
123 | S XMKZ=XMCNT
|
---|
124 | W:'XMMORE !,$$EZBLD^DIALOG(34402) ; Search finished.
|
---|
125 | Q
|
---|
126 | CHKNLSTA(XMDUZ,XMF,XMDETAIL,XMK,XMKN,XMKZZ,XMCNT,XMPMAX,XMLEN) ; Check and List
|
---|
127 | N XMZ
|
---|
128 | F S XMKZZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZZ),XMV("ORDER")) Q:XMKZZ'>0 D Q:$Y>XMPMAX
|
---|
129 | . S XMZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,"C",XMKZZ,0))
|
---|
130 | . I '$D(^XMB(3.7,XMDUZ,2,XMK,1,XMZ,0)) D ADDITC^XMUT4A(XMDUZ,XMK,XMZ,XMKZZ)
|
---|
131 | . Q:'$$GOODMSG(XMDUZ,XMK,XMZ,.XMF)
|
---|
132 | . I $L(XMKN)>$G(XMLEN("BSKT")) D
|
---|
133 | . . S XMLEN("BSKT")=$$MIN^XLFMTH($L(XMKN),10)
|
---|
134 | . . D INIT^XMJML(XMDUZ,XMK,XMKN,XMDETAIL,.XMLEN)
|
---|
135 | . S XMCNT=XMCNT+1
|
---|
136 | . D LISTMSG^XMJML(XMK,XMKN,XMCNT,XMZ,XMDETAIL,.XMLEN)
|
---|
137 | . S ^TMP("XM",$J,"MSG",XMCNT)=XMK_U_XMKN_U_XMZ
|
---|
138 | Q
|
---|
139 | GOODMSG(XMDUZ,XMK,XMZ,XMF) ;
|
---|
140 | N XMZREC,XMNOGOOD,XMZFROM,XMZDATE
|
---|
141 | S XMZREC=$G(^XMB(3.9,XMZ,0))
|
---|
142 | I XMZREC="",XMK D ZAPIT^XMXMSGS2(XMDUZ,XMK,XMZ) Q 0
|
---|
143 | I $D(XMF("SUBJ")),$$UP^XLFSTR($P(XMZREC,U,1))'[XMF("SUBJ","S") Q 0
|
---|
144 | I $D(XMF("FROM")) Q:'$$GOODFROM(XMZREC,XMF("FROM")) 0
|
---|
145 | I $D(XMF("FLINE"))!$D(XMF("TLINE")) D Q:XMNOGOOD 0
|
---|
146 | . N XMLINES
|
---|
147 | . S XMNOGOOD=1
|
---|
148 | . S XMLINES=$$LINE^XMXUTIL2(XMZ)
|
---|
149 | . I $D(XMF("FLINE")),XMLINES<XMF("FLINE") Q
|
---|
150 | . I $D(XMF("TLINE")),XMF("TLINE")<XMLINES Q
|
---|
151 | . S XMNOGOOD=0
|
---|
152 | I $D(XMF("FDATE"))!$D(XMF("TDATE")) D Q:XMNOGOOD 0
|
---|
153 | . S XMNOGOOD=1
|
---|
154 | . S XMZDATE=$P(XMZREC,U,3)
|
---|
155 | . S:XMZDATE'=+XMZDATE XMZDATE=$$CONVERT^XMXUTIL1(XMZDATE)
|
---|
156 | . S XMZDATE=$P(XMZDATE,".")
|
---|
157 | . I $D(XMF("FDATE")),XMZDATE<XMF("FDATE") Q
|
---|
158 | . I $D(XMF("TDATE")),XMF("TDATE")<XMZDATE Q
|
---|
159 | . S XMNOGOOD=0
|
---|
160 | I $D(XMF("TO")) D Q:XMNOGOOD 0
|
---|
161 | . I $D(^XMB(3.9,XMZ,6,"B",XMF("TO"))) S XMNOGOOD=0 Q
|
---|
162 | . I $L(XMF("TO"))>30,$D(^XMB(3.9,XMZ,6,"B",$E(XMF("TO"),1,30))),XMF("TO")=$P($G(^XMB(3.9,XMZ,6,+$O(^XMB(3.9,XMZ,6,"B",$E(XMF("TO"),1,30),0)),0)),U,1) S XMNOGOOD=0 Q
|
---|
163 | . S XMNOGOOD=1
|
---|
164 | . Q:XMF("TO")'["@"
|
---|
165 | . N XMTOX,XMTO
|
---|
166 | . S XMTO=""
|
---|
167 | . F S XMTO=$O(^XMB(3.9,XMZ,6,"B",XMTO)) Q:XMTO="" D Q:'XMNOGOOD
|
---|
168 | . . Q:XMTO'["@"
|
---|
169 | . . S XMTOX=$$UP^XLFSTR(XMTO)
|
---|
170 | . . Q:$P(XMTOX,"@")'[$P(XMF("TO"),"@")
|
---|
171 | . . Q:$P(XMTOX,"@",2)'[$P(XMF("TO"),"@",2)
|
---|
172 | . . S XMNOGOOD=0
|
---|
173 | I $D(XMF("RFROM")) D Q:XMNOGOOD 0
|
---|
174 | . N XMIEN,XMZR
|
---|
175 | . S XMNOGOOD=1
|
---|
176 | . S XMIEN=0
|
---|
177 | . F S XMIEN=$O(^XMB(3.9,XMZ,3,XMIEN)) Q:'XMIEN S XMZR=^(XMIEN,0) I $$GOODFROM($G(^XMB(3.9,XMZR,0)),XMF("RFROM")) S XMNOGOOD=0 Q
|
---|
178 | I $D(XMF("TEXT")) D Q:XMNOGOOD 0
|
---|
179 | . S XMNOGOOD=1
|
---|
180 | . I XMF("TEXT","L")<3 D Q:XMF("TEXT","L")=1!(XMNOGOOD=0)
|
---|
181 | . . S:$$GOODTEXT(XMZ,XMF("TEXT","S"),XMF("TEXT","C")) XMNOGOOD=0
|
---|
182 | . N XMIEN,XMZR
|
---|
183 | . S XMIEN=0
|
---|
184 | . F S XMIEN=$O(^XMB(3.9,XMZ,3,XMIEN)) Q:'XMIEN S XMZR=^(XMIEN,0) I $$GOODTEXT(XMZR,XMF("TEXT","S"),XMF("TEXT","C")) S XMNOGOOD=0 Q
|
---|
185 | Q 1
|
---|
186 | GOODFROM(XMZREC,XMF) ; Returns 1 if msg is from XMF; 0 if not
|
---|
187 | N XMZFROM
|
---|
188 | S XMZFROM=$P(XMZREC,U,2)
|
---|
189 | I XMF=+XMF,XMF=XMZFROM Q 1
|
---|
190 | Q:XMF'["@" 0
|
---|
191 | S XMZFROM=$$UP^XLFSTR(XMZFROM)
|
---|
192 | Q:$P(XMZFROM,"@")'[$P(XMF,"@") 0
|
---|
193 | Q:$P(XMZFROM,"@",2)'[$P(XMF,"@",2) 0
|
---|
194 | Q 1
|
---|
195 | GOODTEXT(XMZ,XMF,XMFMATTR) ; Returns positive number if msg contains XMF; 0 if not
|
---|
196 | N I
|
---|
197 | S I=.999999
|
---|
198 | I XMFMATTR D
|
---|
199 | . F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I Q:^(I,0)[XMF
|
---|
200 | E D
|
---|
201 | . F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I Q:$$UP^XLFSTR(^(I,0))[XMF
|
---|
202 | Q +I
|
---|
203 | READMSG ; (XMDUZ,XMKZ,XMREC) <- needed!
|
---|
204 | N XMK,XMKN,XMZ,XMRDR ; $G(XMRDR) is checked in READMSG^XMJBM
|
---|
205 | S XMK=$P(XMREC,U,1),XMKN=$P(XMREC,U,2),XMZ=$P(XMREC,U,3)
|
---|
206 | D READMSG^XMJBM(XMDUZ,XMK,XMKN,XMZ)
|
---|
207 | Q:$D(^XMB(3.7,"M",XMZ,XMDUZ,XMK))
|
---|
208 | I XMF("BSKT")=XMK K ^TMP("XM",$J,"MSG",XMKZ) Q
|
---|
209 | S XMK=+$O(^XMB(3.7,"M",XMZ,XMDUZ,0))
|
---|
210 | S ^TMP("XM",$J,"MSG",XMKZ)=XMK_U_$S(XMK=0:$$EZBLD^DIALOG(34014),1:$P(^XMB(3.7,XMDUZ,2,XMK,0),U))_U_XMZ ; * N/A *
|
---|
211 | Q
|
---|