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

XPDIJZ.m

Go to the documentation of this file.
  1. XPDIJ ;SFISC/RSD - Install Job ;08/17/98 13:34
  1. ;;8.0;KERNEL;**1005**;FEB 09, 1999
  1. ;;8.0;KERNEL;**2,21,28,41,44,68,81,95**;Jul 10, 1995
  1. EN ;install all packages
  1. ;XPDA=ien of first package
  1. ;this is needed to restore XPDIJ1
  1. I $D(^XTMP("XPDI",XPDA,"RTN","XPDIJ1")) D
  1. .N DIE,XCM,XCN,XCS,X
  1. .S DIE="^XTMP(""XPDI"",XPDA,""RTN"",""XPDIJ1"",",XCN=0,X="XPDIJ1"
  1. .X ^%ZOSF("SAVE")
  1. .S XCN=$$RTNUP^XPDUTL("XPDIJ1",2)
  1. N IEN,XPDI,XPD0,XPDSET,XPDABORT,XPDMENU,XPDQUIT,XPDVOL,X,Y,ZTRTN,ZTDTH,ZTIO,ZTDESC,ZTSK
  1. I $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D ERR^XPDIJ"
  1. E S X="ERR^XPDIJ",@^%ZOSF("TRAP")
  1. Q:'$D(^XPD(9.7,+$G(XPDA),0)) S XPD0=^(0)
  1. D INIT^XPDID
  1. ;disable options & protocols for setname, XPDSET=1/0^setname^out of order msg.
  1. S Y=$P(XPD0,U,8),XPDSET=+Y_U_$E(Y,2,99)_U_$S($L(Y):$P($G(^XTMP("XQOO",$E(Y,2,99),0)),U),1:"")
  1. ;hang the number of seconds given in 0;10
  1. I XPDSET D OFF^XQOO1($P(XPDSET,U,2)) I $P(XPD0,U,10) H ($P(XPD0,U,10)*60)
  1. ;XPDVOL is set only if they want to update other CPUs
  1. I $O(^XPD(9.7,XPDA,"VOL",0)) M XPDVOL=^XPD(9.7,XPDA,"VOL") D
  1. .S Y=0
  1. .F S Y=$O(XPDVOL(Y)) Q:'Y S $P(XPDVOL(Y,0),U,2,3)="^" K XPDVOL(Y,1)
  1. .;jobup RTN^XPDIJ(XPDA), to install routines on other CPU if Taskman is running
  1. .;check that taskman is running
  1. .D:$$TM^%ZTLOAD
  1. ..N XPDU,XPDY,XPDV,XPDV0,XPDVOL,ZTUCI,ZTCPU,ZTDESC,ZTRTN,ZTDTH,ZTIO,ZTSK
  1. ..X ^%ZOSF("UCI") S XPDU=$P(Y,","),XPDY=$P(Y,",",2),XPDV=0
  1. ..F S XPDV=$O(^XPD(9.7,XPDA,"VOL",XPDV)) Q:'XPDV S XPDV0=$P(^(XPDV,0),U) D:XPDV0'=XPDY
  1. ...S ZTUCI=XPDU,ZTDTH=$H,ZTIO="",ZTDESC="KIDS update CPUs "_XPDV0,ZTCPU=XPDV0,ZTRTN="EN^XPDCPU("_XPDA_","_XPDV_")"
  1. ...D ^%ZTLOAD
  1. ...;save task number under Volume set multiple
  1. ...Q:'$G(ZTSK) K XPD
  1. ...S XPD(9.703,XPDV_","_XPDA_",",3)=ZTSK D FILE^DIE("","XPD")
  1. S Y=0
  1. ;XPDABORT can be set in pre or post install to abort install
  1. F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S %=$O(^(Y,0)) D:% Q:$D(XPDABORT)
  1. .;build volume multiple for each package
  1. .I $D(XPDVOL),'$D(^XPD(9.7,%,"VOL")) M ^("VOL")=XPDVOL
  1. .N XPD,XPDA,XPDNM,XPDV,XPDV0,XPDVOL,XPDX,XPDY,Y
  1. .S XPDA=%,XPDNM=$P($G(^XPD(9.7,XPDA,0)),U) D IN^XPDIJ1 Q:$D(XPDABORT)
  1. .;check status of other cpu jobs, do if not this volume
  1. .X ^%ZOSF("UCI") S XPDY=$P(Y,",",2),XPDV=0
  1. .F S XPDV=$O(^XPD(9.7,XPDA,"VOL",XPDV)) Q:'XPDV S XPDV0=^(XPDV,0) D:$P(XPDV0,U)'=XPDY
  1. ..;if completed time,write message and quit
  1. ..I $P(XPDV0,U,2) D BMES^XPDUTL(" Job on VOLUME SET "_$P(XPDV0,U)_" Completed.") Q
  1. ..;if job had no start time, write message and quit
  1. ..I '$P(XPDV0,U,3) D I '$P(XPDV0,U,3) D VOLERR($P(XPDV0,U),1) Q
  1. ...D BMES^XPDUTL(" Waiting for job on VOLUME SET "_$P(XPDV0,U)_" to start.")
  1. ...;hang 1 minute, try 5 times
  1. ...F %=1:1:5 H 60 S XPDV0=^XPD(9.7,XPDA,"VOL",XPDV,0) Q:$P(XPDV0,U,3)
  1. ..D BMES^XPDUTL(" Waiting for job on VOLUME SET "_$P(XPDV0,U)_" to complete.")
  1. ..S XPD=0,XPDX=$G(^XPD(9.7,XPDA,"VOL",XPDV,1))
  1. ..;check the last update node
  1. ..F S Y=$P(^XPD(9.7,XPDA,"VOL",XPDV,0),U,2),X=$G(^(1)),XPD=XPD+1 Q:XPD>360!Y S:X'=XPDX XPD=0,XPDX=X H 10
  1. ..;quit if we have a complete time
  1. ..I Y D BMES^XPDUTL(" Job on VOLUME SET "_$P(XPDV0,U)_" Completed.") Q
  1. ..D VOLERR($P(XPDV0,U),0)
  1. ;ZTREQ tells taskman to delete task
  1. I $G(ZTSK) S ZTREQ="@" D
  1. .;remove task # from Install File
  1. .N XPD S XPD(9.7,XPDA_",",5)="@"
  1. .D FILE^DIE("","XPD")
  1. ;quit if install was aborted
  1. I $D(XPDABORT) D EXIT^XPDID("Install Aborted!!"),^%ZISC Q
  1. ;put option back in order
  1. I $P(XPDSET,U,2)]"" D ON^XQOO1($P(XPDSET,U,2)) K ^XTMP("XQOO",$P(XPDSET,U,2))
  1. ;check if menu rebuild is wanted (only if option has been added)
  1. S IEN=""
  1. S IEN=$O(^XPD(9.7,XPDA,"QUES","B","XPO1",IEN))
  1. D:IEN
  1. .I ^XPD(9.7,XPDA,"QUES",IEN,1) D
  1. ..D KIDS^XQ81
  1. ..;check if need to queue menu rebuild on other CPUs
  1. ..D:$O(^XPD(9.7,XPDA,"VOL",0))
  1. ...N XPDU,XPDY,XPDV,XPDV0,ZTUCI,ZTCPU
  1. ...X ^%ZOSF("UCI") S XPDU=$P(Y,","),XPDY=$P(Y,",",2),XPDV=0
  1. ...;loop thru VOLUMES SET and don't do current volume set
  1. ...F S XPDV=$O(^XPD(9.7,XPDA,"VOL",XPDV)) Q:'XPDV S XPDV0=$P(^(XPDV,0),U) D:XPDV0'=XPDY
  1. ....S ZTUCI=XPDU,ZTDTH=$H,ZTIO="",ZTDESC="Install Menu Rebuild",ZTCPU=XPDV0,ZTRTN="KIDS^XQ81" D ^%ZTLOAD
  1. ;
  1. ;clean up globals
  1. S Y=0
  1. F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S XPDI=$O(^(Y,0)) D:XPDI
  1. .N Y,XPD
  1. .;kill transport global
  1. .K ^XTMP("XPDI",XPDI)
  1. .;update the status field
  1. .S XPD(9.7,XPDI_",",.02)=3
  1. .D FILE^DIE("","XPD")
  1. D EXIT^XPDID("Install Completed"),^%ZISC
  1. Q
  1. ;
  1. SAVE(X) ;restore routine X
  1. N %,DIE,XCM,XCN,XCS
  1. S DIE="^XTMP(""XPDI"",XPDA,""RTN"",X,",XCN=0
  1. X ^%ZOSF("SAVE")
  1. Q
  1. RTN(XPDA) ;restore all routines for package XPDA
  1. ;^XPD("XPDI",XPDA,"RTN",routine name)=0-install, 1-delete, 2-skip^checksum
  1. Q:$G(XPDA)=""
  1. N X,XPDI,XPDJ S XPDI=""
  1. F S XPDI=$O(^XTMP("XPDI",XPDA,"RTN",XPDI)) Q:XPDI="" S XPDJ=^(XPDI) D
  1. .;if we are doing VT graphic display, set counter
  1. .I $D(XPDIDVT) S XPDIDCNT=XPDIDCNT+1 D:'(XPDIDCNT#XPDIDMOD) UPDATE^XPDID(XPDIDCNT)
  1. .I 'XPDJ D SAVE(XPDI) Q
  1. .;set checksum to null, since routine wasn't loaded
  1. .I $P(XPDJ,U,2) S $P(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"KRN",9.8,"NM",$P(XPDJ,U,2),0),U,4)=""
  1. .I $P(XPDJ,U)=1 S X=XPDI X ^%ZOSF("DEL")
  1. ;if graphic display, update full count
  1. I $D(XPDIDVT) D UPDATE^XPDID(XPDIDCNT)
  1. Q
  1. ;
  1. VOLERR(V,F) ;volume set not updated,V=volume set, F=flag
  1. N XQA,XQAMSG,XPDMES
  1. S XPDMES(1)=" ",XPDMES(2)=" ** Job on VOLUME SET "_V_$S(F:" never started **",1:" has been idle for an hour.")
  1. S XPDMES(3)=" ** "_V_" has NOT been updated! **"
  1. S XQA(DUZ)="",XQAMSG="VOLUME SET "_V_" NOT updated for Install "_$E($P($G(^XPD(9.7,+$G(XPDA),0)),"^"),1,30)
  1. D MES^XPDUTL(.XPDMES),SETUP^XQALERT
  1. Q
  1. ;come here on error, record error in Install file and cleanup var.
  1. ERR N XPDERROR,XQA,XQAMSG
  1. S XPDERROR=$$EC^%ZOSV
  1. ;record error, write message, reset terminal
  1. D ^%ZTER,BMES^XPDUTL(XPDERROR),EXIT^XPDID()
  1. S XQA(DUZ)="",XQAMSG="Install "_$E($P($G(^XPD(9.7,+$G(XPDA),0)),"^"),1,30)_" has encountered an Error."
  1. D SETUP^XQALERT G UNWIND^%ZTER