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

PRCOSRV2.m

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