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

PRCHLO4A.m

Go to the documentation of this file.
  1. PRCHLO4A ;WOIFO/RLL/DAP-EXTRACT ROUTINE CLO REPORT SERVER ;12/30/10 14:58
  1. ;;5.1;IFCAP;**83,104,98,130,154,172**;Oct 20, 2000;Build 2
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ; Continuation of PRCHLO4
  1. ;
  1. ; PRCHLO4A routines are used to Write out the Header and data
  1. ;
  1. ;Patch PRC*5.1*172 are modifications to CLRS transmission processing
  1. ;to support those sites that have migrated to Full LINUX OS
  1. ;
  1. Q
  1. GETDIR ; Get directory from PRCPLO EXTRACT DIRECTORY system parameter for CLRS
  1. N FILEDIR,STID
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. ;
  1. Q
  1. ;
  1. CRTWIN ; Create CLRSxxxWFTP.TXT file to transfer file(s)
  1. ;*98 Modified to work with PRC CLRS ADDRESS parameter
  1. N FILEDIR,POP,STID,OUTFLL1,ADDR
  1. ; PRC*5.1*130 begin
  1. N PRCHUSN,PRCHPSW
  1. ; PRC*5.1*130 end
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. S POP="" ; POP is returned by OPEN^%ZISH
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. ; RLL/PRC*5.1*104 change logic to create separate FTP
  1. ; transfer files (1 for each file for Windows/Cache)
  1. S ADDR=$$GET^XPAR("SYS","PRC CLRS ADDRESS",1,"Q")
  1. I ADDR="" S PRCPMSG(1)="There is no address identified in the CLRS Adress Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. ; PRC*5.1*130 begin
  1. S PRCHUSN=$$GET^XPAR("SYS","PRCPLO USER NAME",1,"Q")
  1. I PRCHUSN="" S PRCPMSG(1)="There is no user name identified in the CLRS USER NAME Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. S PRCHUSN=$$DECRYP^XUSRB1(PRCHUSN)
  1. S PRCHPSW=$$GET^XPAR("SYS","PRCPLO PASSWORD",1,"Q")
  1. I PRCHPSW="" S PRCPMSG(1)="There is no password identified in the CLRS PASSWORD Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. S PRCHPSW=$$DECRYP^XUSRB1(PRCHPSW)
  1. ; PRC*5.1*130 end
  1. ;
  1. I CLRSERR'=3 D
  1. . N PONN ; File number for File type
  1. . S PONN=1
  1. . F PONN=1:1:27 D
  1. . . N FTY ; File type F=Po Activity , G=GIP
  1. . . ;
  1. . . S FTY="F"
  1. . . S OUTFLL1="CLRS"_STID_FTY_PONN_"WFTP.TXT"
  1. . . D OPEN^%ZISH("FILE1",FILEDIR,OUTFLL1,"W")
  1. . . I POP D
  1. . . . S CLRSERR=3
  1. . . . Q
  1. . . D USE^%ZISUTL("FILE1")
  1. . . D BLDF1
  1. . . D CLOSE^%ZISH("FILE1")
  1. . . Q
  1. . Q
  1. ;
  1. I CLRSERR'=3 D
  1. . ; RLL/PRC*5.1*104 change logic to create separate FTP
  1. . ; tranfer files (1 for each file for Windows/Cache)
  1. . N PONN ; File number for file type
  1. . S PONN=1
  1. . F PONN=1:1:2 D
  1. . . N FTY ; File type F=Po Activity , G=GIP
  1. . . S FTY="G"
  1. . . S OUTFLL1="CLRS"_STID_FTY_PONN_"WFTP.TXT"
  1. . . D OPEN^%ZISH("FILE1",FILEDIR,OUTFLL1,"W")
  1. . . I POP D
  1. . . . S CLRSERR=3
  1. . . . Q
  1. . . D USE^%ZISUTL("FILE1")
  1. . . D BLDF1
  1. . . D CLOSE^%ZISH("FILE1")
  1. . . Q
  1. . Q
  1. Q
  1. BLDF1 ; RLL/PRC*5.1*104 added logic to create separate FTP
  1. ; transfers (1 for each file)
  1. ;
  1. W "open "_ADDR,! ;Connect to the Report Server
  1. ; PRC*5.1*130 begin
  1. ; Enter user name for Report Server Login
  1. W PRCHUSN,!
  1. ; Enter P/W for Report Server Login
  1. W PRCHPSW,!
  1. ; PRC*5.1*130 end
  1. W "PUT "_FILEDIR_"IFCP"_STID_FTY_PONN_".TXT",!
  1. W "bye",! ; Exit FTP
  1. ;
  1. Q
  1. CKRPTSV ; Check for availability of report server
  1. ; Several steps need to be performed
  1. ; 1. Set up script to perform PING
  1. ; 2. Capture log file during PING
  1. ; 3. Read logfile into working global
  1. ; 4. Determine Success/Failure of PING to server
  1. ; 5. If successful, continue processing (CLRSERR=0)
  1. ; 6. If problem occurs, S CLRSERR=3 and generate message
  1. ;
  1. I CKOS["VMS" D VMSPING ; CKOS set in PRCHLO5
  1. I CKOS["NT" D WINPING ; CKOS set in PRCHLO5
  1. I CKOS["UNIX" D UNXPING ; added for UNIX LINUX PING ;PRC*5.1*172 added check for Full Linux
  1. Q
  1. VMSPING ; need to PING report server to make sure it is available
  1. ;
  1. ; 1. Create .COM file to execute
  1. ;*98 Modified to work with PRC CLRS ADDRESS parameter
  1. N FILEDIR,STID,OUTFLL2,ADDR
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S ADDR=$$GET^XPAR("SYS","PRC CLRS ADDRESS",1,"Q")
  1. I ADDR="" S PRCPMSG(1)="There is no address identified in the CLRS Address Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. ;
  1. S OUTFLL2="CLRS"_STID_"PING.COM"
  1. D OPEN^%ZISH("FILE1",FILEDIR,OUTFLL2,"W")
  1. D USE^%ZISUTL("FILE1")
  1. W "$ SET VERIFY=(PROCEDURE,IMAGE)",!
  1. W "$ SET DEFAULT "_FILEDIR,!
  1. W "$ TCPIP",!
  1. W "PING "_ADDR,!
  1. W "EXIT",!
  1. W "$ EXIT 3",!
  1. D CLOSE^%ZISH("FILE1")
  1. ;
  1. ; 2. Execute .COM file, create logfile
  1. S XPV1="S PV=$ZF(-1,""@"_FILEDIR_"CLRS"_STID_"PING.COM/OUTPUT="_FILEDIR_"CLRS"_STID_"PING.LOG"")"
  1. X XPV1 ; Run the .com file
  1. ;
  1. ; 3. Read Logfile into working global
  1. N FNAME,XLOG
  1. S FNAME="CLRS"_STID_"PING.LOG"
  1. S XLOG=$$FTG^%ZISH(FILEDIR,FNAME,$NAME(^TMP("PRCLRSLOG",$J,1)),3)
  1. ; Check global for %SYSTEM or 0 packets received
  1. N PNG,PNG1,PNG2,PNG3
  1. S PNG=0,PNG1=0,PNG2=0
  1. F S PNG=$O(^TMP("PRCLRSLOG",$J,PNG)) Q:PNG="" D
  1. . S PNG1=$G(^TMP("PRCLRSLOG",$J,PNG))
  1. . I PNG1["0 packets received" S CLRSERR=3
  1. . I PNG1["%SYSTEM" S CLRSERR=3
  1. . Q
  1. Q
  1. UNXPING ;PRC*5.1*172 added logic for Full Linux
  1. ; UNIX/LINUX PING
  1. ;
  1. ; PING report server to make sure it is available
  1. ;*98 Modified to work with PRC CLRS ADDRESS parameter
  1. N PV,XPV1,FILEDIR,STID,XLOG,ADDR
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S ADDR=$$GET^XPAR("SYS","PRC CLRS ADDRESS",1,"Q")
  1. I ADDR="" S PRCPMSG(1)="There is no address identified in the CLRS Adress Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. ;
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. S XPV1="S PV=$ZF(-1,""ping -c 3 "_ADDR_">"_FILEDIR_"CLRS"_STID_"PING.LOG"")"
  1. X XPV1
  1. S FNAME="CLRS"_STID_"PING.LOG"
  1. S XLOG=$$FTG^%ZISH(FILEDIR,FNAME,$NAME(^TMP("PRCLRSLOG",$J,1)),3)
  1. N PNG,PNG1,PNG2,PNG3
  1. S PNG=0,PNG1=0,PNG2=0
  1. F S PNG=$O(^TMP("PRCLRSLOG",$J,PNG)) Q:PNG="" D
  1. . S PNG1=$G(^TMP("PRCLRSLOG",$J,PNG))
  1. . I PNG1["0 received" S CLRSERR=3
  1. . Q
  1. Q
  1. ;
  1. WINPING ; PING report server to make sure it is available
  1. ;*98 Modified to work with PRC CLRS ADDRESS parameter
  1. N PV,XPV1,FILEDIR,STID,XLOG,ADDR
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S ADDR=$$GET^XPAR("SYS","PRC CLRS ADDRESS",1,"Q")
  1. I ADDR="" S PRCPMSG(1)="There is no address identified in the CLRS Adress Parameter.",PRCPMSG(2)="Please correct and retry." D MAILFTP S CLRSERR=1 Q
  1. ;
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. S XPV1="S PV=$ZF(-1,""PING "_ADDR_">"_FILEDIR_"CLRS"_STID_"PING.LOG"")"
  1. X XPV1
  1. S FNAME="CLRS"_STID_"PING.LOG"
  1. S XLOG=$$FTG^%ZISH(FILEDIR,FNAME,$NAME(^TMP("PRCLRSLOG",$J,1)),3)
  1. N PNG,PNG1,PNG2,PNG3
  1. S PNG=0,PNG1=0,PNG2=0
  1. F S PNG=$O(^TMP("PRCLRSLOG",$J,PNG)) Q:PNG="" D
  1. . S PNG1=$G(^TMP("PRCLRSLOG",$J,PNG))
  1. . I PNG1["Received = 0" S CLRSERR=3
  1. . Q
  1. Q
  1. ;
  1. LOG2FILE ; Set logfile to global, add to mail message
  1. ;
  1. ;
  1. N FILEDIR,STID,FNAME,XLOG
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. I CKOS["VMS" S FNAME="CLRS"_STID_"FTP1.LOG"
  1. I CKOS["NT" S FNAME="CLRS"_STID_"F1FTP1.LOG"
  1. I CKOS["UNIX" S FNAME="UNIXFTP.LOG" ;PRC*5.1*172 added check for Full Linux
  1. S XLOG=$$FTG^%ZISH(FILEDIR,FNAME,$NAME(^TMP("PRCHLOG",$J,1)),3)
  1. ; Log file is in the global ^TMP("PRCHLOG", lets put it in
  1. ; the message beginning at PRCPMSG(11)
  1. ;
  1. N LG1,LG2,LG3,LG4,LGCNT
  1. S LG1=0,LG2=0,LG3=0,LG4=0,LGCNT=11
  1. F S LG1=$O(^TMP("PRCHLOG",$J,LG1)) Q:LG1="" D
  1. . S LG3=$G(^TMP("PRCHLOG",$J,LG1))
  1. . S PRCPMSG(LGCNT)=LG3
  1. . S LGCNT=LGCNT+1
  1. . Q
  1. D MAILFTP
  1. Q
  1. FTPCOM ; Issue the FTP command after CLRSxxxWFTP.TXT file is built
  1. ; remain in CACHE during FTP Process using
  1. ; $ZF(-1) call
  1. ;
  1. ; rll/ 8/30/2006 Change logic to initiate transfer one file
  1. ; at a time to the report server for Windows/Cache stations
  1. ; This was done after a hang was observed between transfers.
  1. ;
  1. N LPP1,LPP2
  1. S LPP1=0,LPP2="F"
  1. F LPP1=1:1:27 D ; run the FTP command for the 27 PO files
  1. . D RUNFTPT
  1. . Q
  1. S LPP1=0,LPP2="G"
  1. F LPP1=1:1:2 D ; run the FTP command for the 2 GIP files
  1. . D RUNFTPT
  1. . Q
  1. Q
  1. ;
  1. RUNFTPT ; Run the FTP transfer for Windows
  1. N PV,XPV1,FILEDIR,STID
  1. ;
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. ; SACC Exception received for usage of $ZF(-1) in PRC*5.1*83
  1. ; See IFCAP Technical Manual
  1. S XPV1="S PV=$ZF(-1,""ftp -s:"_FILEDIR_"CLRS"_STID_LPP2_LPP1_"WFTP.TXT>"_FILEDIR_"CLRS"_STID_LPP2_LPP1_"FTP1.LOG"")"
  1. X XPV1 ; FTP the files, Comment out for testing
  1. ;
  1. ; error flag logic
  1. I PV=-1 D ; Note, this error is logged on system error during xfer
  1. . S CLRSERR=1
  1. . Q
  1. Q
  1. DELWIN ; Delete windows files
  1. ;
  1. ;
  1. I CKOS["NT" D
  1. . N LPP1,LPP2
  1. . S LPP1=0,LPP2="F"
  1. . F LPP1=1:1:27 D ; run the FTP command for the 27 PO files
  1. . . D DELFTPF
  1. . . Q
  1. . Q
  1. S LPP1=0,LPP2="G"
  1. F LPP1=1:1:2 D
  1. . D DELFTPF ; Delete the GIP files
  1. . Q
  1. Q
  1. DELUNX ;PRC*5.1*172 added logic for Full Linux
  1. ; Delete the FTP files, logs , and .TXT files
  1. ;
  1. S OUTFLL2="CLRSCLNUP.SH"
  1. N FILEDIR,STID,XPV
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. ; delete previous extract
  1. D OPEN^%ZISH("FILE1",FILEDIR,OUTFLL2,"W")
  1. D USE^%ZISUTL("FILE1")
  1. ; add syntax here to create shell script
  1. ;
  1. ;
  1. ;
  1. ; add Linux code below
  1. W "#!/bin/bash",!
  1. W !
  1. W "cd ",FILEDIR,!
  1. ; W !
  1. W "rm -f CLRS*.TXT",!
  1. W "rm -f IFCP*.TXT",!
  1. W "rm -f CLRS*UNX*",!
  1. W "rm -f CLRSCLNUP*",!
  1. W "exit 0",!
  1. D CLOSE^%ZISH("FILE1")
  1. ; get ready to delete files
  1. ;
  1. ; NOTE: This is a test entry point if problems occur with directory permissions
  1. ; if the directory is set up properly, the begin/end code in not needed
  1. ; this code was left in for troubleshooting via M/Cache
  1. ; begin troubleshooting code
  1. ; peform CHMOD on SHELL SCRIPT to make it executable
  1. ; S XPV1="S PV=$ZF(-1,""CHMOD 755 "_FILEDIR_"CLRS"_"CLNUP.SH"")"
  1. ; S XPV1="S PV=$ZF(-1,"""_FILEDIR_"CLRS"_"CLNUP.SH"")"
  1. ; X XPV1
  1. ; end troubleshooting code
  1. D DELUNX1
  1. Q
  1. ;
  1. ;
  1. ;
  1. DELUNX1 ;PRC*5.1*172 added logic for Full Linux
  1. ; Delete UNIX Files
  1. ;
  1. ; S XPV1="S PV=$ZF(-1,"""_FILEDIR_"CLRS"_STID_"UNX.SH"")"
  1. S XPV1="S PV=$ZF(-1,"""_FILEDIR_"CLRS"_"CLNUP.SH"")"
  1. X XPV1
  1. Q
  1. DELFTPF ; Delete the FTP files, logs , and .TXT files
  1. ;
  1. N FILEDIR,STID,XPV
  1. S FILEDIR=$$GET^XPAR("SYS","PRCPLO EXTRACT DIRECTORY",1,"Q")
  1. S STID=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
  1. ; delete previous extract
  1. S XPV="S PV=$ZF(-1,""DEL "_FILEDIR_"IFCP"_STID_LPP2_LPP1_".TXT"")"
  1. X XPV ; comment out for testing
  1. ; delete previous logfile
  1. ;
  1. S XPV="S PV=$ZF(-1,""DEL "_FILEDIR_"CLRS"_STID_LPP2_LPP1_"FTP1.LOG"")"
  1. X XPV ; comment out for testing
  1. ; delete previous ftp file for transfer
  1. ;
  1. S XPV="S PV=$ZF(-1,""DEL "_FILEDIR_"CLRS"_STID_LPP2_LPP1_"WFTP.TXT"")"
  1. X XPV
  1. Q
  1. ;
  1. MAIL ;Builds mail messages to a defined mail group to notify users of the
  1. ;success or failure of the TaskMan scheduling for the CLO Procurement
  1. ;Reports
  1. ;
  1. ;*98 Modified code to work with PRC CLRS OUTLOOK MAILGROUP parameter
  1. N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ,PRCPMG,PRCPMG2
  1. S XMSUB="CLO Procurement Report Status for "_$$HTE^XLFDT($H)
  1. S XMDUZ="Clinical Logistics Report Server"
  1. S XMTEXT="PRCPMSG("
  1. S XMY("G.PRCPLO CLRS NOTIFICATIONS")=""
  1. S PRCPMG=$$GET^XPAR("SYS","PRC CLRS OUTLOOK MAILGROUP",1,"Q")
  1. S:$G(PRCPMG)'="" PRCPMG2="S XMY("""_PRCPMG_""")=""""" X PRCPMG2
  1. ;
  1. D ^XMD
  1. Q
  1. ;
  1. MAILFTP ;Builds mail messages to a defined mail group to notify users of
  1. ;the success or failure of issues pertaining to FTP Transfer and
  1. ;file permissions/protections associated with VMS Directories
  1. ;
  1. ;*98 Modified code to work with PRC CLRS OUTLOOK MAILGROUP parameter
  1. N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ,PRCPMG,PRCPMG2
  1. S XMSUB="CLO Environment Check & Data Transfer for OS / FTP , "_$$HTE^XLFDT($H)
  1. S XMDUZ="Clinical Logistics Report Server"
  1. S XMTEXT="PRCPMSG("
  1. S XMY("G.PRCPLO CLRS NOTIFICATIONS")=""
  1. S PRCPMG=$$GET^XPAR("SYS","PRC CLRS OUTLOOK MAILGROUP",1,"Q")
  1. S:$G(PRCPMG)'="" PRCPMG2="S XMY("""_PRCPMG_""")=""""" X PRCPMG2
  1. ;
  1. D ^XMD
  1. Q