Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BEEICTRL

BEEICTRL.m

Go to the documentation of this file.
BEEICTRL ; IHS/OIT/FJE - PROCESS INCOMING EIE MESSAGES ;
 ;;1.0;BEE;;Oct 19, 2009
 ;;
 Q
TSK ; entry point for background job
 D INIT
 S U="^"
 ;change to queue node
 S BEEIIEN=0 F  S BEEIIEN=$O(^HLB(BEEIIEN)) Q:+BEEIIEN=0  D
 .S BEEIX=$G(^HLB(BEEIIEN,0))
 .Q:$P(BEEIX,U,4)'="I"  ;If message is other than inbound
 .Q:$L($P(BEEIX,U,20))  ;If present then message previously processed
 .S BEEIMSH=$G(^HLB(BEEIIEN,1))_$G(^HLB(BEEIIEN,2))
 .S U1=$E(BEEIMSH,4,4)
 .S BEEISF=$P(BEEIMSH,U1,4) Q:'$L(BEEISF)
 .S BEEISA=$P(BEEIMSH,U1,3) Q:'$L(BEEISA)
 .Q:$P(BEEISF,U,1)'="Dental"
 .Q:BEEISA'="DENTRIX"
 .S BEEITYP=$P(BEEIMSH,U1,9)
 .S BEEITRG=$P(BEEITYP,U,2),BEEITYP=$P(BEEITYP,U,1)
 .Q:'$L(BEEITYP)
 .Q:'$L(BEEITRG)
 .Q:BEEITYP'="DFT"
 .Q:BEEITRG'="P03"
 .S:$P(^HLB(BEEIIEN,0),U,5)="" $P(^HLB(BEEIIEN,0),U,5)="HLO RPMS"
 .S:$P(^HLB(BEEIIEN,0),U,6)="" $P(^HLB(BEEIIEN,0),U,6)="CHARGE RPMS"
 .;D @BEEIRUN
 .S HLMSGIEN=BEEIIEN
 .D PROC^BADEHL3
 .S X="T+7" D ^%DT
 .S $P(^HLB(BEEIIEN,0),U,9)=+Y_".1201"
 .S $P(^HLB(BEEIIEN,0),U,20)="SU"
 .S BEEITDT=$P(^HLB(BEEIIEN,0),U,16)
 .I $L(BEEITDT) K ^HLB("QUEUE",BEEITDT,"RPMS-DEN",BEEITYP,BEEITRG,BEEIIEN)
 D EXIT
 Q
 ;future code
 ;L +^BEEICTRL:5 Q:'$T
 ;S BEEIQUET=0
 ;I '$D(^BEEICTRL("TASK RUNNING")) S ^BEEICTRL("TASK RUNNING")=$H
 ;S X1=$P($H,",",1)
 ;S Y1=$P($H,",",2)
 ;S X2=$P(^BEEICTRL("TASK RUNNING"),",",1)
 ;S Y2=$P(^BEEICTRL("TASK RUNNING"),",",2)
 ;I X1=X2&(Y1<(Y2+3600)) Q
 ;S ^BEEICTRL("TASK RUNNING")=$H
 ;D INIT    ;INITIALIZE VARS
 ;D CTRL    ;INITIALIZE ARRAY OF BEEI ENSEMBLE CONTROL FILE ENTRIES
 ;L -^BEEICTRL
 ;D SCAN    ;SCAN HLB GLOBAL FOR NEW INBOUND MESSAGES TO BE PROCESSED
 ;K ^BEEICTRL("TASK RUNNING")
 ;D EXIT    ;CLEAN UP AND QUIT
 ;Q
 ;
SINGLE ;
 R !,"ENTER HLB IEN TO TEST:  ",BEEIIEN:$G(DTIME)
 Q:'+BEEIIEN
 Q:'$D(^HLB(BEEIIEN,0))
 Q:'$D(^HLB(BEEIIEN,1))
 Q:'$D(^HLB(BEEIIEN,2))
 D INIT
 S U="^"
 D
 .S BEEIX=$G(^HLB(BEEIIEN,0))
 .Q:$P(BEEIX,U,4)'="I"  ;If message is other than inbound
 .Q:$L($P(BEEIX,U,20))  ;If present then message previously processed
 .S BEEIMSH=$G(^HLB(BEEIIEN,1))_$G(^HLB(BEEIIEN,2))
 .S U1=$E(BEEIMSH,4,4)
 .S BEEISF=$P(BEEIMSH,U1,4) Q:'$L(BEEISF)
 .S BEEISA=$P(BEEIMSH,U1,3) Q:'$L(BEEISA)
 .Q:BEEISF'="Dental"
 .Q:BEEISA'="DENTRIX"
 .S BEEITYP=$P(BEEIMSH,U1,9)
 .S BEEITRG=$P(BEEITYP,U,2),BEEITYP=$P(BEEITYP,U,1)
 .Q:'$L(BEEITYP)
 .Q:'$L(BEEITRG)
 .Q:BEEITYP'="DFT"
 .Q:BEEITRG'="P03"
 .S:$P(^HLB(BEEIIEN,0),U,5)="" $P(^HLB(BEEIIEN,0),U,5)="HLO RPMS"
 .S:$P(^HLB(BEEIIEN,0),U,6)="" $P(^HLB(BEEIIEN,0),U,6)="CHARGE RPMS"
 .;D @BEEIRUN
 .S HLMSGIEN=BEEIIEN
 .D PROC^BADEHL3
 .S X="T+7" D ^%DT
 .S $P(^HLB(BEEIIEN,0),U,9)=+Y_".1201"
 .S $P(^HLB(BEEIIEN,0),U,20)="SU"
 .S BEEITDT=$P(^HLB(BEEIIEN,0),U,16)
 .I $L(BEEITDT) K ^HLB("QUEUE",BEEITDT,"RPMS-DEN",BEEITYP,BEEITRG,BEEIIEN)
 D EXIT
 Q
 ;D INIT
 D CTRL
 S U="^"
 S BEEIQUET=0
 S HLMSGIEN=BEEIIEN
 W !,"HLB LOOP  ",BEEIIEN
 S BEEIX=$G(^HLB(BEEIIEN,0))
 Q:$P(BEEIX,U,4)'="I"  ;If message is other than inbound
 Q:+$P(BEEIX,U,20)  ;If DATETIME present then message previously processed
 I $G(BEEIQUET)'=1 W !,"Inbound Message:  ",BEEIIEN
 S BEEIMSH=$G(^HLB(BEEIIEN,1))_$G(^HLB(BEEIIEN,2))
 S U1=$E(BEEIMSH,4,4)
 S BEEIRF=$P(BEEIMSH,U1,5) Q:'$L(BEEIRF)  Q:'$D(BEEITMP(BEEIRF))
 S BEEISF=$P(BEEIMSH,U1,4) Q:'$L(BEEISF)  Q:'$D(BEEITMP(BEEIRF,BEEISF))
 S BEEISA=$P(BEEIMSH,U1,3) Q:'$L(BEEISA)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA))
 S BEEITYP=$P(BEEIMSH,U1,9)
 S BEEITRG=$P(BEEITYP,U,2),BEEITYP=$P(BEEITYP,U,1)
 Q:'$L(BEEITYP)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP))
 Q:'$L(BEEITRG)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG))
 S BEEIY=0,BEEIY=$O(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG,BEEIY)) Q:+BEEIY=0  D
 .S BEEIRUN=BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG,BEEIY)
 .Q:$P(BEEIRUN,U,1)=""
 .Q:$P(BEEIRUN,U,2)=""
 .I $G(BEEIQUET)'=1 W !,BEEIRF_U1_BEEISF_U1_BEEISA_U1_BEEITYP_U1_BEEITRG_U1_BEEIY_U1_BEEIRUN,!!
 .S:$P(^HLB(BEEIIEN,0),U,5)="" $P(^HLB(BEEIIEN,0),U,5)=BEEICLNK
 .S:$P(^HLB(BEEIIEN,0),U,6)="" $P(^HLB(BEEIIEN,0),U,6)=BEEICQUE
 .;S:$P(^HLB(BEEIIEN,0),U,7)="" $P(^HLB(BEEIIEN,0),U,7)=$P(BEEIRUN,U,1)
 .;S:$P(^HLB(BEEIIEN,0),U,8)="" $P(^HLB(BEEIIEN,0),U,8)=$P(BEEIRUN,U,2)
 .;S Y=$$REPR OC^HLOAPI3(BEEIIEN,.ERROR)
 .D @BEEIRUN
 .;I $G(BEEIQUET)'=1 W:Y=1 !,"Message processed successfully" H 2
 .;I $G(BEEIQUET)'=1 W:Y=0 !,ERROR H 2
 Q
 ;
INIT  ;EP initialize variables
 D ^XBKVAR
 Q
 ;
CTRL  ;EP create control array  
  S X=0 F  S X=$O(^BEEICTRL(X)) Q:+X=0  D
 .S BEEICACT=$P($G(^BEEICTRL(X,0)),U,2)
 .S BEEICRF=$P($G(^BEEICTRL(X,0)),U,9)
 .S BEEICSA=$P($G(^BEEICTRL(X,0)),U,4)
 .S BEEICSF=$P($G(^BEEICTRL(X,0)),U,3)
 .S BEEICTYP=$P($G(^BEEICTRL(X,0)),U,5)
 .S BEEICTRG=$P($G(^BEEICTRL(X,0)),U,6)
 .S BEEICTAG=$P($G(^BEEICTRL(X,0)),U,7)
 .S BEEICRTN=$P($G(^BEEICTRL(X,0)),U,8)
 .S BEEICLNK=$P($G(^BEEICTRL(X,0)),U,10)
 .S BEEICQUE=$P($G(^BEEICTRL(X,2)),U,1)
 .Q:BEEICACT'=1
 .I (BEEICRF="")!(BEEICSA="")!(BEEICSF="")!(BEEICTYP="")!(BEEICTRG="") Q
 .I (BEEICTAG="")!(BEEICRTN="")!(BEEICLNK="")!(BEEICQUE="") Q
 .I '$D(BEEITMP(BEEICRF,BEEICSF,BEEICSA,BEEICTYP,BEEICTRG,X)) D
 ..S BEEITMP(BEEICRF,BEEICSF,BEEICSA,BEEICTYP,BEEICTRG,X)=BEEICTAG_"^"_BEEICRTN
 ..I $G(BEEIQUET)'=1 W !,BEEITMP(BEEICRF,BEEICSF,BEEICSA,BEEICTYP,BEEICTRG,X)
 Q
 ;
SCAN  ;EP scan HLB global for new incoming messages
 S U="^"
 ;change to queue node
 S BEEIIEN=0 F  S BEEIIEN=$O(^HLB(BEEIIEN)) Q:+BEEIIEN=0  D
 .S BEEIX=$G(^HLB(BEEIIEN,0))
 .Q:$P(BEEIX,U,4)'="I"  ;If message is other than inbound
 .Q:+$P(BEEIX,U,20)  ;If DATETIME present then message previously processed
 .I $G(BEEIQUET)'=1 W !,"Inbound Message:  ",BEEIIEN
 .S BEEIMSH=$G(^HLB(BEEIIEN,1))_$G(^HLB(BEEIIEN,2))
 .S U1=$E(BEEIMSH,4,4)
 .S BEEIRF=$P(BEEIMSH,U1,5) Q:'$L(BEEIRF)  Q:'$D(BEEITMP(BEEIRF))
 .S BEEISF=$P(BEEIMSH,U1,4) Q:'$L(BEEISF)  Q:'$D(BEEITMP(BEEIRF,BEEISF))
 .S BEEISA=$P(BEEIMSH,U1,3) Q:'$L(BEEISA)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA))
 .S BEEITYP=$P(BEEIMSH,U1,9)
 .S BEEITRG=$P(BEEITYP,U,2),BEEITYP=$P(BEEITYP,U,1)
 .Q:'$L(BEEITYP)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP))
 .Q:'$L(BEEITRG)  Q:'$D(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG))
 .S BEEIY=0,BEEIY=$O(BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG,BEEIY)) Q:+BEEIY=0  D
 ..S BEEIRUN=BEEITMP(BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG,BEEIY)
 ..Q:$P(BEEIRUN,U,1)=""
 ..Q:$P(BEEIRUN,U,2)=""
 ..I $G(BEEIQUET)'=1 W !,BEEIRF_U1_BEEISF_U1_BEEISA_U1_BEEITYP_U1_BEEITRG_U1_BEEIY_U1_BEEIRUN
 ..S:$P(^HLB(BEEIIEN,0),U,5)="" $P(^HLB(BEEIIEN,0),U,5)=BEEICLNK
 ..S:$P(^HLB(BEEIIEN,0),U,6)="" $P(^HLB(BEEIIEN,0),U,6)=BEEICQUE
 ..;S:$P(^HLB(BEEIIEN,0),U,7)="" $P(^HLB(BEEIIEN,0),U,7)=$P(BEEIRUN,U,1)
 ..;S:$P(^HLB(BEEIIEN,0),U,8)="" $P(^HLB(BEEIIEN,0),U,8)=$P(BEEIRUN,U,2)
 ...D @BEEIRUN
 ..;I $G(BEEIQUET)'=1 W:Y=1 !,"Message processed successfully" H 2
 ..;I $G(BEEIQUET)'=1 W:Y=0 !,ERROR H 2
 Q
 ;
EXIT  ;EP clean up
 D ^XBKVAR
 K BEEITMP,BEEIX,BEEIY,BEEIRUN,BEEIRF,BEEISF,BEEISA,BEEITYP,BEEITRG
 K BEEICRF,BEEICSF,BEEICSA,BEEICTYP,BEEICTRG
 K ^BEEICTRL("TASK RUNNING")
 Q
 ;