XMTDL2 ;ISC-SF/GMB-Deliver local mail to mailbox (cont.) ;04/17/2002 11:31
;;8.0;MailMan;;Jun 28, 2002
; Replaces ^XMADJF1B (ISC-WASH/CAP)
; XMTO Recipient DUZ
; XMZ Original XMZ
; XMZSUBJ Msg subject
; XMZFROM Who sent the original message
; XMFROM Who sent the msg or reply, or who forwarded the msg
; XMREPLY 0=msg is not a reply; 1=msg is a reply
; XMK Basket number (or name) to deliver to (as specified by sender XMFROM)
; XMDEL Delete Date (as specified by sender XMZFROM)
; XMKCURR Basket the msg is currently in
DELIVER(XMTO,XMZ,XMZSUBJ,XMZFROM,XMFROM,XMREPLY,XMK,XMDEL,XMZBSKT) ;
N XMKCURR,XMACT
I +XMTO'>0!'$D(^XMB(3.7,XMTO,2)) Q ; Do not deliver if invalid mailbox
S XMFROM=+$G(XMFROM),XMREPLY=+$G(XMREPLY),XMK=$G(XMK),XMDEL=+$G(XMDEL),XMZBSKT=$G(XMZBSKT)
I XMTO=.6,XMREPLY Q ; Do not deliver response to Shared,Mail
S XMKCURR=$O(^XMB(3.7,"M",XMZ,XMTO,0)) ; Get basket it is in
I XMKCURR D Q ; Already in a basket (ignore any basket sender may have specified)
. Q:'XMREPLY ; If this is a reply, continue, else it must be a forwarded msg, so quit.
. I XMKCURR=.5 D Q ; Msg is in waste basket
. . D CHEKBSKT(XMTO,.XMK,XMZSUBJ,XMZFROM,XMZBSKT,.XMACT) ; Where should it go?
. . Q:XMK=.5
. . D MOVENEW(XMFROM,XMTO,XMK,XMZ,.XMACT) ; Move msg and make it new.
. ; Msg is not in waste basket. Make the msg new.
. Q:$D(^XMB(3.7,XMTO,"N0",XMKCURR,XMZ)) ; Already new.
. D:XMFROM'=XMTO MAKENEW(XMTO,XMKCURR,XMZ)
; Not yet in a basket.
; Reinstated user may not see replies to old msgs which he doesn't already have.
I XMREPLY,$P(^XMB(3.7,XMTO,0),U,7) Q:$$SECRET($P(^(0),U,7),XMZ)
S:$G(XMK)="" XMK=0
I +XMK=XMK D
. D CHEKBSKT(XMTO,.XMK,XMZSUBJ,XMZFROM,XMZBSKT,.XMACT)
E D
. S XMK=$$NAMEBSKT(XMTO,XMK,"Y")
D ADDNEW($S(XMREPLY:XMFROM,1:XMZFROM),XMTO,XMK,XMZ,XMDEL,.XMACT,XMREPLY)
Q
CHEKBSKT(XMTO,XMK,XMZSUBJ,XMZFROM,XMZBSKT,XMACT) ; Basket number (or no basket at all)
N XMREC
S XMREC=$G(^XMB(3.7,XMTO,16))
; If the message hasn't been sent to a specific basket for this user
; and the sender specified a delivery basket, and the recipient is
; OK with that, then use the delivery basket.
; Note: The IN basket is not considered a 'specific basket'.
I XMK<2,XMZBSKT'="","^^N^"'[(U_$P(XMREC,U,2)_U) S XMK=$$NAMEBSKT(XMTO,XMZBSKT,$P(XMREC,U,2)) Q:XMK
; If the message hasn't been sent to a specific basket for this user
; and active filters exist, and filtering is turned on,
; then filter the message.
I XMK<2,$D(^XMB(3.7,XMTO,15,"AF")),$P(XMREC,U,1)="Y" D FILTER^XMTDF(XMTO,XMZ,XMZSUBJ,XMZFROM,.XMK,"",.XMACT) Q
; The message was sent to a specific basket for this user.
I XMK Q:$D(^XMB(3.7,XMTO,2,XMK,0)) ; Quit if the basket XMK exists.
S XMK=1 ; Since the basket doesn't exist, force to the IN basket
Q:$D(^XMB(3.7,XMTO,2,XMK,0)) ; Quit if the IN basket exists.
D MAKEBSKT^XMXBSKT(XMTO,XMK,$$EZBLD^DIALOG(37005)) ; Create the "IN" basket
Q
NAMEBSKT(XMTO,XMKN,XMZBOK) ; Basket name (not number)
N XMK
S XMK=$O(^XMB(3.7,XMTO,2,"B",XMKN,0))
S:'XMK XMK=$$FIND1^DIC(3.701,","_XMTO_",","X",$$LOW^XLFSTR(XMKN))
I XMK D Q XMK
. Q:XMZBOK'="S" ; 'YES' or 'EXISTING ONLY'
. S:$P(^XMB(3.7,XMTO,2,XMK,0),U,3)'="Y" XMK=0 ; 'SELECTED ONLY'
; Basket not found
Q:XMZBOK'="Y" 0 ; quit if not 'YES'
I XMKN=$$EZBLD^DIALOG(37004) S XMK=.5 D MAKEBSKT^XMXBSKT(XMTO,XMK,XMKN) Q XMK ; "WASTE"
I XMKN=$$EZBLD^DIALOG(37005) S XMK=1 D MAKEBSKT^XMXBSKT(XMTO,XMK,XMKN) Q XMK ; "IN"
D MAKEBSKT^XMXBSKT(XMTO,.XMK,XMKN)
Q XMK
ADDNEW(XMFROM,XMTO,XMK,XMZ,XMDEL,XMACT,XMREPLY) ;
N XMFDA,XMIENS,XMIEN,XMTRIES
S XMIENS="+1,"_XMK_","_XMTO_","
S XMIEN(1)=XMZ
S XMFDA(3.702,XMIENS,.01)=XMZ
I XMK'=.5 D
. I XMFROM'=XMTO D
. . I $G(XMACT("NONEW")),'$$RESP^XMXUTIL2(XMZ),$$ZREAD^XMXUTIL2(XMTO,XMZ)="" Q
. . S XMFDA(3.702,XMIENS,3)=1 ; new flag
. . D INCRNEW^XMXUTIL(XMTO,XMK) ; New counts
. I $G(XMACT("VDAYS")) D Q
. . S XMFDA(3.702,XMIENS,5)=$$FMADD^XLFDT(DT,XMACT("VDAYS")) ; vapor date
. . S XMFDA(3.702,XMIENS,7)=0 ; vapor date set by user
. I XMDEL S XMFDA(3.702,XMIENS,5)=XMDEL ; vapor date
; Basket sequence number (XMKZ), and priority & new xrefs are handled by FM triggers.
ATRY D UPDATE^DIE("S","XMFDA","XMIEN")
I '$D(DIERR) D Q
. Q:'$D(XMACT("FWD"))
. I 'XMREPLY,XMFROM'=XMTO D FORWARD(XMTO,XMZ,XMACT("FWD"))
S XMTRIES=$G(XMTRIES)+1
I $D(^TMP("DIERR",$J,"E",110)) H 1 G ATRY ; Try again if can't lock
Q
MAKENEW(XMTO,XMK,XMZ) ;
; We ignore any "vapor" date here because this is an existing msg
N XMFDA,XMREC
S XMREC=$G(^XMB(3.7,XMTO,2,XMK,1,XMZ,0))
I XMREC="" D Q:XMREC=""
. ; Message entry should have been there, but it wasn't. Add it.
. D FIXBSKT(XMTO,XMK,XMZ)
. S XMREC=$G(^XMB(3.7,XMTO,2,XMK,1,XMZ,0)) Q:XMREC'=""
. D ADDNEW(0,XMTO,XMK,XMZ,0)
S XMFDA(3.702,XMZ_","_XMK_","_XMTO_",",3)=1 ; new flag
; Delete 'automatic delete date' if it was set by the system
; (during IN BASKET PURGE).
S:$P(XMREC,U,7) XMFDA(3.702,XMZ_","_XMK_","_XMTO_",",5)="@"
L +^XMB(3.7,XMTO,2,XMK,1,XMZ,0):1 ; Lock message
; Priority & new xrefs are handled by FM triggers.
D FILE^DIE("","XMFDA")
L -^XMB(3.7,XMTO,2,XMK,1,XMZ,0)
D INCRNEW^XMXUTIL(XMTO,XMK) ; New counts
Q
SECRET(XMDATE,XMZ) ;
; Don't need to check to see if the user already has the msg, because
; at this point, we already know that he doesn't.
N XMCRE8
S XMCRE8=$P($G(^XMB(3.9,XMZ,.6)),U)
Q $S('XMCRE8:0,XMDATE>XMCRE8:1,1:0) ; 1 means user may NOT see the msg.
MOVENEW(XMFROM,XMTO,XMK,XMZ,XMACT) ; Move msg from WASTE bskt and make new
N XMFDA,XMREC,XMIENS,XMIEN,XMTRIES
S XMREC=$G(^XMB(3.7,XMTO,2,.5,1,XMZ,0))
I XMREC="" D Q:XMREC=""
. ; Message entry should have been there, but it wasn't.
. D FIXBSKT(XMTO,.5,XMZ)
. S XMREC=$G(^XMB(3.7,XMTO,2,.5,1,XMZ,0)) Q:XMREC'=""
. D ADDNEW(XMFROM,XMTO,XMK,XMZ,0)
S XMIENS="+1,"_XMK_","_XMTO_","
S XMIEN(1)=XMZ
S XMFDA(3.702,XMIENS,.01)=XMZ
S:XMFROM'=XMTO XMFDA(3.702,XMIENS,3)=1 ; new flag
S:$P(XMREC,U,4) XMFDA(3.702,XMIENS,4)=$P(XMREC,U,4) ; date last accessed
;I '$P(XMREC,U,7),$P(XMREC,U,5)>DT S XMFDA(3.702,XMIENS,5)=$P(XMREC,U,5) ; vapor date set by user, not system
I $G(XMACT("VDAYS")) D
. S XMFDA(3.702,XMIENS,5)=$$FMADD^XLFDT(DT,XMACT("VDAYS")) ; vapor date
. S XMFDA(3.702,XMIENS,7)=0 ; vapor date set by user
MTRY D UPDATE^DIE("S","XMFDA","XMIEN")
I '$D(DIERR) D Q
. D:XMFROM'=XMTO INCRNEW^XMXUTIL(XMTO,XMK) ; Increment new counts
. N DA,DIK
. S DA(2)=XMTO,DA(1)=.5,DA=XMZ
. S DIK="^XMB(3.7,"_XMTO_",2,.5,1,"
. D ^DIK ; delete msg from waste bskt
S XMTRIES=$G(XMTRIES)+1
I $D(^TMP("DIERR",$J,"E",110)) H 1 G MTRY ; Try again if can't lock
Q
FIXBSKT(XMTO,XMK,XMZ) ; Basket integrity check
N XMERROR ; (set in ^XMUT4)
L +^XMB(3.7,XMTO,2,XMK):1
K ^XMB(3.7,"M",XMZ,XMTO,XMK) ; This xref is wrong.
D BSKT^XMUT4(XMTO,XMK)
L -^XMB(3.7,XMTO,2,XMK)
Q
FORWARD(XMTO,XMZ,XMFIEN) ;
; XMFIEN IEN of the filter which activated.
N XMUPTR
S XMUPTR=+$O(^XMB(3.9,XMZ,1,"C",XMTO,0))
Q:$P($G(^XMB(3.9,XMZ,1,XMUPTR,0)),U,13)'="" ; already forwarded once.
N XMFDA
S XMFDA(3.91,XMUPTR_","_XMZ_",",15)=XMFIEN
D FILE^DIE("","XMFDA")
Q
XMTDL2 ;ISC-SF/GMB-Deliver local mail to mailbox (cont.) ;04/17/2002 11:31
+1 ;;8.0;MailMan;;Jun 28, 2002
+2 ; Replaces ^XMADJF1B (ISC-WASH/CAP)
+3 ; XMTO Recipient DUZ
+4 ; XMZ Original XMZ
+5 ; XMZSUBJ Msg subject
+6 ; XMZFROM Who sent the original message
+7 ; XMFROM Who sent the msg or reply, or who forwarded the msg
+8 ; XMREPLY 0=msg is not a reply; 1=msg is a reply
+9 ; XMK Basket number (or name) to deliver to (as specified by sender XMFROM)
+10 ; XMDEL Delete Date (as specified by sender XMZFROM)
+11 ; XMKCURR Basket the msg is currently in
DELIVER(XMTO,XMZ,XMZSUBJ,XMZFROM,XMFROM,XMREPLY,XMK,XMDEL,XMZBSKT) ;
+1 NEW XMKCURR,XMACT
+2 ; Do not deliver if invalid mailbox
IF +XMTO'>0!'$DATA(^XMB(3.7,XMTO,2))
QUIT
+3 SET XMFROM=+$GET(XMFROM)
SET XMREPLY=+$GET(XMREPLY)
SET XMK=$GET(XMK)
SET XMDEL=+$GET(XMDEL)
SET XMZBSKT=$GET(XMZBSKT)
+4 ; Do not deliver response to Shared,Mail
IF XMTO=.6
IF XMREPLY
QUIT
+5 ; Get basket it is in
SET XMKCURR=$ORDER(^XMB(3.7,"M",XMZ,XMTO,0))
+6 ; Already in a basket (ignore any basket sender may have specified)
IF XMKCURR
Begin DoDot:1
+7 ; If this is a reply, continue, else it must be a forwarded msg, so quit.
IF 'XMREPLY
QUIT
+8 ; Msg is in waste basket
IF XMKCURR=.5
Begin DoDot:2
+9 ; Where should it go?
DO CHEKBSKT(XMTO,.XMK,XMZSUBJ,XMZFROM,XMZBSKT,.XMACT)
+10 IF XMK=.5
QUIT
+11 ; Move msg and make it new.
DO MOVENEW(XMFROM,XMTO,XMK,XMZ,.XMACT)
End DoDot:2
QUIT
+12 ; Msg is not in waste basket. Make the msg new.
+13 ; Already new.
IF $DATA(^XMB(3.7,XMTO,"N0",XMKCURR,XMZ))
QUIT
+14 IF XMFROM'=XMTO
DO MAKENEW(XMTO,XMKCURR,XMZ)
End DoDot:1
QUIT
+15 ; Not yet in a basket.
+16 ; Reinstated user may not see replies to old msgs which he doesn't already have.
+17 IF XMREPLY
IF $PIECE(^XMB(3.7,XMTO,0),U,7)
IF $$SECRET($PIECE(^(0),U,7),XMZ)
QUIT
+18 IF $GET(XMK)=""
SET XMK=0
+19 IF +XMK=XMK
Begin DoDot:1
+20 DO CHEKBSKT(XMTO,.XMK,XMZSUBJ,XMZFROM,XMZBSKT,.XMACT)
End DoDot:1
+21 IF '$TEST
Begin DoDot:1
+22 SET XMK=$$NAMEBSKT(XMTO,XMK,"Y")
End DoDot:1
+23 DO ADDNEW($SELECT(XMREPLY:XMFROM,1:XMZFROM),XMTO,XMK,XMZ,XMDEL,.XMACT,XMREPLY)
+24 QUIT
CHEKBSKT(XMTO,XMK,XMZSUBJ,XMZFROM,XMZBSKT,XMACT) ; Basket number (or no basket at all)
+1 NEW XMREC
+2 SET XMREC=$GET(^XMB(3.7,XMTO,16))
+3 ; If the message hasn't been sent to a specific basket for this user
+4 ; and the sender specified a delivery basket, and the recipient is
+5 ; OK with that, then use the delivery basket.
+6 ; Note: The IN basket is not considered a 'specific basket'.
+7 IF XMK<2
IF XMZBSKT'=""
IF "^^N^"'[(U_$PIECE(XMREC,U,2)_U)
SET XMK=$$NAMEBSKT(XMTO,XMZBSKT,$PIECE(XMREC,U,2))
IF XMK
QUIT
+8 ; If the message hasn't been sent to a specific basket for this user
+9 ; and active filters exist, and filtering is turned on,
+10 ; then filter the message.
+11 IF XMK<2
IF $DATA(^XMB(3.7,XMTO,15,"AF"))
IF $PIECE(XMREC,U,1)="Y"
DO FILTER^XMTDF(XMTO,XMZ,XMZSUBJ,XMZFROM,.XMK,"",.XMACT)
QUIT
+12 ; The message was sent to a specific basket for this user.
+13 ; Quit if the basket XMK exists.
IF XMK
IF $DATA(^XMB(3.7,XMTO,2,XMK,0))
QUIT
+14 ; Since the basket doesn't exist, force to the IN basket
SET XMK=1
+15 ; Quit if the IN basket exists.
IF $DATA(^XMB(3.7,XMTO,2,XMK,0))
QUIT
+16 ; Create the "IN" basket
DO MAKEBSKT^XMXBSKT(XMTO,XMK,$$EZBLD^DIALOG(37005))
+17 QUIT
NAMEBSKT(XMTO,XMKN,XMZBOK) ; Basket name (not number)
+1 NEW XMK
+2 SET XMK=$ORDER(^XMB(3.7,XMTO,2,"B",XMKN,0))
+3 IF 'XMK
SET XMK=$$FIND1^DIC(3.701,","_XMTO_",","X",$$LOW^XLFSTR(XMKN))
+4 IF XMK
Begin DoDot:1
+5 ; 'YES' or 'EXISTING ONLY'
IF XMZBOK'="S"
QUIT
+6 ; 'SELECTED ONLY'
IF $PIECE(^XMB(3.7,XMTO,2,XMK,0),U,3)'="Y"
SET XMK=0
End DoDot:1
QUIT XMK
+7 ; Basket not found
+8 ; quit if not 'YES'
IF XMZBOK'="Y"
QUIT 0
+9 ; "WASTE"
IF XMKN=$$EZBLD^DIALOG(37004)
SET XMK=.5
DO MAKEBSKT^XMXBSKT(XMTO,XMK,XMKN)
QUIT XMK
+10 ; "IN"
IF XMKN=$$EZBLD^DIALOG(37005)
SET XMK=1
DO MAKEBSKT^XMXBSKT(XMTO,XMK,XMKN)
QUIT XMK
+11 DO MAKEBSKT^XMXBSKT(XMTO,.XMK,XMKN)
+12 QUIT XMK
ADDNEW(XMFROM,XMTO,XMK,XMZ,XMDEL,XMACT,XMREPLY) ;
+1 NEW XMFDA,XMIENS,XMIEN,XMTRIES
+2 SET XMIENS="+1,"_XMK_","_XMTO_","
+3 SET XMIEN(1)=XMZ
+4 SET XMFDA(3.702,XMIENS,.01)=XMZ
+5 IF XMK'=.5
Begin DoDot:1
+6 IF XMFROM'=XMTO
Begin DoDot:2
+7 IF $GET(XMACT("NONEW"))
IF '$$RESP^XMXUTIL2(XMZ)
IF $$ZREAD^XMXUTIL2(XMTO,XMZ)=""
QUIT
+8 ; new flag
SET XMFDA(3.702,XMIENS,3)=1
+9 ; New counts
DO INCRNEW^XMXUTIL(XMTO,XMK)
End DoDot:2
+10 IF $GET(XMACT("VDAYS"))
Begin DoDot:2
+11 ; vapor date
SET XMFDA(3.702,XMIENS,5)=$$FMADD^XLFDT(DT,XMACT("VDAYS"))
+12 ; vapor date set by user
SET XMFDA(3.702,XMIENS,7)=0
End DoDot:2
QUIT
+13 ; vapor date
IF XMDEL
SET XMFDA(3.702,XMIENS,5)=XMDEL
End DoDot:1
+14 ; Basket sequence number (XMKZ), and priority & new xrefs are handled by FM triggers.
ATRY DO UPDATE^DIE("S","XMFDA","XMIEN")
+1 IF '$DATA(DIERR)
Begin DoDot:1
+2 IF '$DATA(XMACT("FWD"))
QUIT
+3 IF 'XMREPLY
IF XMFROM'=XMTO
DO FORWARD(XMTO,XMZ,XMACT("FWD"))
End DoDot:1
QUIT
+4 SET XMTRIES=$GET(XMTRIES)+1
+5 ; Try again if can't lock
IF $DATA(^TMP("DIERR",$JOB,"E",110))
HANG 1
GOTO ATRY
+6 QUIT
MAKENEW(XMTO,XMK,XMZ) ;
+1 ; We ignore any "vapor" date here because this is an existing msg
+2 NEW XMFDA,XMREC
+3 SET XMREC=$GET(^XMB(3.7,XMTO,2,XMK,1,XMZ,0))
+4 IF XMREC=""
Begin DoDot:1
+5 ; Message entry should have been there, but it wasn't. Add it.
+6 DO FIXBSKT(XMTO,XMK,XMZ)
+7 SET XMREC=$GET(^XMB(3.7,XMTO,2,XMK,1,XMZ,0))
IF XMREC'=""
QUIT
+8 DO ADDNEW(0,XMTO,XMK,XMZ,0)
End DoDot:1
IF XMREC=""
QUIT
+9 ; new flag
SET XMFDA(3.702,XMZ_","_XMK_","_XMTO_",",3)=1
+10 ; Delete 'automatic delete date' if it was set by the system
+11 ; (during IN BASKET PURGE).
+12 IF $PIECE(XMREC,U,7)
SET XMFDA(3.702,XMZ_","_XMK_","_XMTO_",",5)="@"
+13 ; Lock message
LOCK +^XMB(3.7,XMTO,2,XMK,1,XMZ,0):1
+14 ; Priority & new xrefs are handled by FM triggers.
+15 DO FILE^DIE("","XMFDA")
+16 LOCK -^XMB(3.7,XMTO,2,XMK,1,XMZ,0)
+17 ; New counts
DO INCRNEW^XMXUTIL(XMTO,XMK)
+18 QUIT
SECRET(XMDATE,XMZ) ;
+1 ; Don't need to check to see if the user already has the msg, because
+2 ; at this point, we already know that he doesn't.
+3 NEW XMCRE8
+4 SET XMCRE8=$PIECE($GET(^XMB(3.9,XMZ,.6)),U)
+5 ; 1 means user may NOT see the msg.
QUIT $SELECT('XMCRE8:0,XMDATE>XMCRE8:1,1:0)
MOVENEW(XMFROM,XMTO,XMK,XMZ,XMACT) ; Move msg from WASTE bskt and make new
+1 NEW XMFDA,XMREC,XMIENS,XMIEN,XMTRIES
+2 SET XMREC=$GET(^XMB(3.7,XMTO,2,.5,1,XMZ,0))
+3 IF XMREC=""
Begin DoDot:1
+4 ; Message entry should have been there, but it wasn't.
+5 DO FIXBSKT(XMTO,.5,XMZ)
+6 SET XMREC=$GET(^XMB(3.7,XMTO,2,.5,1,XMZ,0))
IF XMREC'=""
QUIT
+7 DO ADDNEW(XMFROM,XMTO,XMK,XMZ,0)
End DoDot:1
IF XMREC=""
QUIT
+8 SET XMIENS="+1,"_XMK_","_XMTO_","
+9 SET XMIEN(1)=XMZ
+10 SET XMFDA(3.702,XMIENS,.01)=XMZ
+11 ; new flag
IF XMFROM'=XMTO
SET XMFDA(3.702,XMIENS,3)=1
+12 ; date last accessed
IF $PIECE(XMREC,U,4)
SET XMFDA(3.702,XMIENS,4)=$PIECE(XMREC,U,4)
+13 ;I '$P(XMREC,U,7),$P(XMREC,U,5)>DT S XMFDA(3.702,XMIENS,5)=$P(XMREC,U,5) ; vapor date set by user, not system
+14 IF $GET(XMACT("VDAYS"))
Begin DoDot:1
+15 ; vapor date
SET XMFDA(3.702,XMIENS,5)=$$FMADD^XLFDT(DT,XMACT("VDAYS"))
+16 ; vapor date set by user
SET XMFDA(3.702,XMIENS,7)=0
End DoDot:1
MTRY DO UPDATE^DIE("S","XMFDA","XMIEN")
+1 IF '$DATA(DIERR)
Begin DoDot:1
+2 ; Increment new counts
IF XMFROM'=XMTO
DO INCRNEW^XMXUTIL(XMTO,XMK)
+3 NEW DA,DIK
+4 SET DA(2)=XMTO
SET DA(1)=.5
SET DA=XMZ
+5 SET DIK="^XMB(3.7,"_XMTO_",2,.5,1,"
+6 ; delete msg from waste bskt
DO ^DIK
End DoDot:1
QUIT
+7 SET XMTRIES=$GET(XMTRIES)+1
+8 ; Try again if can't lock
IF $DATA(^TMP("DIERR",$JOB,"E",110))
HANG 1
GOTO MTRY
+9 QUIT
FIXBSKT(XMTO,XMK,XMZ) ; Basket integrity check
+1 ; (set in ^XMUT4)
NEW XMERROR
+2 LOCK +^XMB(3.7,XMTO,2,XMK):1
+3 ; This xref is wrong.
KILL ^XMB(3.7,"M",XMZ,XMTO,XMK)
+4 DO BSKT^XMUT4(XMTO,XMK)
+5 LOCK -^XMB(3.7,XMTO,2,XMK)
+6 QUIT
FORWARD(XMTO,XMZ,XMFIEN) ;
+1 ; XMFIEN IEN of the filter which activated.
+2 NEW XMUPTR
+3 SET XMUPTR=+$ORDER(^XMB(3.9,XMZ,1,"C",XMTO,0))
+4 ; already forwarded once.
IF $PIECE($GET(^XMB(3.9,XMZ,1,XMUPTR,0)),U,13)'=""
QUIT
+5 NEW XMFDA
+6 SET XMFDA(3.91,XMUPTR_","_XMZ_",",15)=XMFIEN
+7 DO FILE^DIE("","XMFDA")
+8 QUIT