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

PRCOSRV.m

Go to the documentation of this file.
PRCOSRV ;WISC/RMP-Server interface to IFCAP from ISMS ;3/12/97  11:32
V ;;5.1;IFCAP;;Oct 20, 2000
 ;Per VHA Directive 10-93-142, this routine should not be modified.
 Q
SERVER ;
 N ACTION,MSG,PRCMG,PRCETIME,PRCRTN,CNT,TOTS,PRCKEY,PRCEND,PRCDA
 N PRCAH,PRCXM,S1,PRCOXMRG,PRCOSOP,PRCOMSG,PRCOSND,PRCOSUB
 F  D THDR,PERROR^PRCOSRV1:$D(PRCXM),TRETRY:$D(PRETRY) Q:XMER'=0  Q:$D(PRCEND)
 D DKILL
 S ZTREQ="@"
 Q
 ;
THDR ; Transaction header segment reader
 X XMREC
 Q:XMER'=0
 Q:"IFC,ISM"'[$P(XMRG,U)
 ;
 ; SOME VARIABLES TO DISPLAY IF THERE IS AN ERROR.
 S PRCOXMRG=XMRG ; THE LINE OF TEXT BEING EXAMINED.
 S PRCOSOP=XQSOP ; THE SERVER OPTION NAME.
 S PRCOMSG=XQMSG ; THE SERVER REQUEST MESSAGE NUMBER (MAILMAN NUMBER).
 S PRCOSND=XQSND ; NETWORK ADDRESS OF THE SENDER.
 S PRCOSUB=XQSUB ; SUBJECT HEADING OF THE SERVER REQUEST MESSAGE.
 ;
 I $P(XMRG,U,11)'="|" S XMRG=""
 S ACTION=$S(+$P(XMRG,U,9)>1:"MANY",+$P(XMRG,U,9)=1:"ONE",1:"ERR")
 I ACTION="ERR" S PRCXM(1)=$P($T(ERROR+4),";;",2) Q
 S PRCKEY=$P(XMRG,U,4,6)_U_$P(XMRG,U,9)
 S PRCKEY=$TR(PRCKEY,U,"-")
 S TOTS=+$P(XMRG,U,9)
 I $P(PRCKEY,"-")=""!($P(PRCKEY,"-",2)="")!($P(PRCKEY,"-",3)="")!($P(PRCKEY,"-",4)="") S PRCXM(1)=$P($T(ERROR+10),";;",2) Q
 S Y=$O(^PRCF(423.6,"B",PRCKEY,0))
 S PRCDA=+Y
 D LTC
 D @ACTION:'$D(PRCXM)
 Q
 ;
ONE ; Single Message Transaction process
 S PRCDA=0
 D TFILER^PRCOSRV1
 I S1'=1 D  Q
 . S PRCXM(1)=$P($T(ERROR+5),";;",2)
 . D TSKKILL
 . D PERROR^PRCOSRV1
 . D TRADEL(PRCDA)
 . K PRCXM
 . S PRCEND=""
 . Q
 D TRTN:'$D(PRCXM)
 Q
 ;
MANY ; Distributed transaction process
 D TFILER^PRCOSRV1
 I $P($G(^PRCF(423.6,PRCDA,0)),U,2)'>0 D TSKSET Q
 I '$$SEQ(PRCDA,TOTS) Q
 L +^PRCF(423.6,PRCDA):1
 Q:'$T
 S MSG=^PRCF(423.6,PRCDA,1,10000,0)
 I $P(MSG,U,9)'="001" D
 . S $P(MSG,U,8)="001"
 . S $P(MSG,U,9)="001"
 . S ^PRCF(423.6,PRCDA,1,10000,0)=MSG
 . D TSKKILL
 . D TRTN
 . Q
 L -^PRCF(423.6,PRCDA)
 Q
 ;
LTC ; Look up Transaction Code
 S PRCETIME=$P($G(^PRC(411,$P(XMRG,U,3),7)),U)
 S PRCETIME=$S(PRCETIME]"":PRCETIME,1:86400)
 N Y,X,X1
 S Y=$O(^PRCF(423.5,"B",$P(XMRG,U)_"-"_$P(XMRG,U,4),0))
 I +Y'>0 S PRCXM(1)=$P($T(ERROR+1),";;",2) Q
 S X1=$G(^PRCF(423.5,+Y,0))
 I X1="" S PRCXM(1)=$P($T(ERROR+9),";;",2)_" "_$P(XMRG,U)_"-"_$P(XMRG,U,4)_"." Q
 S PRCMG=$P(X1,U,2)
 I PRCMG'>0 S PRCXM(1)=$P($T(ERROR+6),";;",2)_" "_$P(XMRG,U)_"-"_$P(XMRG,U,4)_"." Q
 S PRCMG=$G(^XMB(3.8,$P(X1,U,2),0))
 I PRCMG="" S PRCXM(1)=$P($T(ERROR+7),";;",2)_" "_$P(XMRG,U)_"-"_$P(XMRG,U,4)_"." Q
 S PRCMG=$P(PRCMG,U)
 I PRCMG="" S PRCXM(1)=$P($T(ERROR+8),";;",2)_" "_$P(XMRG,U)_"-"_$P(XMRG,U,4)_"." Q
 S PRCRTN=$P(X1,U,3,4)
 S X=$P(X1,U,4)
 I X="" S PRCXM(1)=$P($T(ERROR+3),";;",2)_" is missing." Q
 X ^%ZOSF("TEST")
 S:'$T PRCXM(1)=$P($T(ERROR+3),";;",2)_" "_PRCRTN_" missing in RD."
 Q
 ;
TRTN ; Task transaction process
 N ZTSK,ZTDTH,ZTUCI,ZTSAVE,ZTIO,ZTDESC,ZTRTN
 S (ZTSAVE("PRCDA"),ZTSAVE("DT"),ZTSAVE("U"),ZTSAVE("DUZ"))=""
 S ZTSAVE("ZTREQ")="@"
 S ZTRTN=PRCRTN
 S ZTDTH=$H
 S ZTIO=""
 D ^%ZTLOAD
 L +^PRCF(423.6,PRCDA):1
 S $P(^PRCF(423.6,PRCDA,0),U,2)=ZTSK
 L -^PRCF(423.6,PRCDA)
 Q
 ;
TRADEL(X)  ; Process to delete transaction from transaction file
 ;N DIK,DA,Y S DIK="^PRCF(423.6,",DA=X D ^DIK
 Q
 ;
TRAPRGE ; Purge old, incomplete, sequenced transactions
 D TRADEL(PRCDA)
 S PRCXM(1)=$P($T(ERROR+2),";;",2)
 D PERROR^PRCOSRV1
 Q
 ;
TSKKILL ; KILL Tasked PURGE process
 N ZTSK,ZTDTH,ZTUCI,ZTSAVE,ZTIO,ZTDESC,ZTRTN
 S ZTSK=+$P(^PRCF(423.6,PRCDA,0),U,2)
 D KILL^%ZTLOAD
 Q
 ;
TSKSET ; TASKs a PURGE transaction process
 N ZTSK,ZTDTH,ZTUCI,ZTSAVE,ZTIO,ZTDESC,ZTRTN
 ;IF THERE IS ALREADY A TASK SET IN THE RECORD DON'T START ANOTHER ONE
 Q:$P($G(^PRCF(423.6,PRCDA,0)),U,2)>0
 S (ZTSAVE("XMFROM"),ZTSAVE("PRCDA"),ZTSAVE("DUZ"),ZTSAVE("XMDUZ"),ZTSAVE("XMZ"))=""
 S (ZTSAVE("PRCOXMRG"),ZTSAVE("PRCOSOP"),ZTSAVE("PRCOMSG"),ZTSAVE("PRCOSND"),ZTSAVE("PRCOSUB"))=""
 S ZTSAVE("ZTREQ")="@"
 S ZTRTN="TRAPRGE^PRCOSRV"
 S ZTDTH=$$DTC(PRCETIME)
 S ZTIO=""
 D ^%ZTLOAD
 S $P(^PRCF(423.6,PRCDA,0),U,2)=ZTSK
 Q
 ;
TRETRY ; Task to reprocess transaction
 K PRETRY,PRCEND
 D TFILER^PRCOSRV1
 N ZTSK,ZTDTH,ZTUCI,ZTSAVE,ZTIO,ZTDESC,ZTRTN
 S (ZTSAVE("XMFROM"),ZTSAVE("PRCDA"),ZTSAVE("DUZ"),ZTSAVE("DUN"),ZTSAVE("XMSUB"),ZTSAVE("XMY("))=""
 S ZTSAVE("ZTREQ")="@"
 S ZTRTN="TRETRY1^PRCOSRV"
 S ZTDTH=$$DTC(PRCETIME)
 S ZTIO=""
 D ^%ZTLOAD
 Q
 ;
TRETRY1 ; Resend transaction in a new message
 S XMTEXT="^PRCF(423.6,"_PRCDA_",1,"
 D ^XMD
 Q
 ;
SEQ(X,Y) ;
 N CNT,Z
 S CNT=0
 F Z=10000:10000:Y*10000 S:$D(^PRCF(423.6,X,1,Z,0)) CNT=CNT+1
 Q $S(CNT=Y:1,1:0)
 ;
DTC(SEC) ; Adds seconds to $H
 N TIME,%H
 D NOW^%DTC
 S TIME=$P(%H,",")+(SEC+$P(%H,",",2)\86400)_","_(SEC+$P(%H,",",2)#86400)
 Q TIME
 ;
DKILL ; Delete mail message from postmaster mailbox
 N XMZ
 S XMSER="S."_XQSOP
 S XMZ=XQMSG
 D REMSBMSG^XMA1C
 Q
 ;
ERROR ;
 ;;Transaction code does not exist in PRC IFCAP MESSAGE ROUTER file (423.5) "B" x-ref.
 ;;All parts of this multipart message did not arrive.
 ;;Routine to process this transaction does not exist, routine
 ;;Can not figure out if this is a single or multipart transaction.
 ;;This transaction has no ending $.
 ;;There is no mail group pointer from file 423.5 entry
 ;;There is no mail group entry in file 3.8 for the pointer from file 423.5 entry
 ;;There is no mail group name in file 3.8 from file 423.5 entry
 ;;There is a "B" x-ref but no record in file 423.5 for entry
 ;;One or more parts of this transaction's key is missing.