[613] | 1 | MAGXIDXU ;WOIFO/JSL - MAG INDEX TERMS BUILD/UPDATE Utilities for Imaging Version 3.0
|
---|
| 2 | ;;3.0;IMAGING;**61**;Feb 07, 2006
|
---|
| 3 | ;; +---------------------------------------------------------------+
|
---|
| 4 | ;; | Property of the US Government. |
|
---|
| 5 | ;; | No permission to copy or redistribute this software is given. |
|
---|
| 6 | ;; | Use of unreleased versions of this software requires the user |
|
---|
| 7 | ;; | to execute a written test agreement with the VistA Imaging |
|
---|
| 8 | ;; | Development Office of the Department of Veterans Affairs, |
|
---|
| 9 | ;; | telephone (301) 734-0100. |
|
---|
| 10 | ;; | |
|
---|
| 11 | ;; | The Food and Drug Administration classifies this software as |
|
---|
| 12 | ;; | a medical device. As such, it may not be changed |
|
---|
| 13 | ;; | in any way. Modifications to this software may result in an |
|
---|
| 14 | ;; | adulterated medical device under 21CFR820, the use of which |
|
---|
| 15 | ;; | is considered to be a violation of US Federal Statutes. |
|
---|
| 16 | ;; +---------------------------------------------------------------+
|
---|
| 17 | Q
|
---|
| 18 | IDXUPDT ;API call - OPTION (MAG IMAGE INDEX TERMS UPDATE)
|
---|
| 19 | N DATE,IDA,SUB,XP,EOF,IN,MAGMSG,INXMB,LINE,LN,NEWSN,START,TKID,X,Y,XMZ,XMER,DIR
|
---|
| 20 | D GETENV^%ZOSV,KILL^XM
|
---|
| 21 | I '$D(^XUSEC("MAG SYSTEM",+$G(DUZ))) U IO(0) W !,"Calling user does not have security key MAG SYSTEM" Q
|
---|
| 22 | U IO(0) S DIR("A")="Update your local Index Terms with the latest Index Term Distribution (Y/N)",DIR("B")="Y",DIR(0)="Y" D ^DIR I '$G(Y) Q
|
---|
| 23 | S SUB="MAG INDEX TERMS UPDATE" K ^TMP(SUB,$J)
|
---|
| 24 | S TKID=$H*86400+$P($H,",",2)
|
---|
| 25 | S X="ERR^MAGXIDXU",@^%ZOSF("TRAP")
|
---|
| 26 | L +^XTMP(SUB):5 I '$T U IO(0) W !,"Some one is also updating Index Terms, ^XTMP("_SUB_") locked." H 5 Q
|
---|
| 27 | S INXMB=$$INXMB^MAGXIDX0 I 'INXMB U IO(0) W !,"No updated distribution." H 2 Q ;latest idx update
|
---|
| 28 | U IO(0) W !
|
---|
| 29 | ;;IA 1048 - $$READ^XMGAPI1 Get the next line of XMZ message text.
|
---|
| 30 | S XMZ=INXMB F LN=1:1:256 S LINE=$$READ^XMGAPI1() Q:XMER=-1 I LINE[SUB Q
|
---|
| 31 | S LINE=$$READ^XMGAPI1() Q:XMER=-1 Q:LINE="" S NEWSN=+$P(LINE,"SERIAL#",2) ;new serial#
|
---|
| 32 | I +$G(^MAG(2005.82,"SERIAL#"))'<NEWSN U IO(0) W !,"The version is up-to-date." Q
|
---|
| 33 | F LN=1:1 S LINE=$$READ^XMGAPI1() Q:XMER=-1 S ^TMP(SUB,$J,LN)=LINE
|
---|
| 34 | I +$G(^MAG(2005.82,"SERIAL#"))<NEWSN D:$$PRECHK()
|
---|
| 35 | . S START=$$NOW^XLFDT
|
---|
| 36 | . F IN=2005.82,2005.83,2005.84,2005.85 I $D(^MAG(IN)) D
|
---|
| 37 | . . M ^XTMP("MAG INDEX TERMS BACKUP",TKID,IN)=^MAG(IN)
|
---|
| 38 | . . Q
|
---|
| 39 | . D UPDATE I $G(EOF)'=1 D UFAIL U IO(0) D Q
|
---|
| 40 | . . W !,"The Update of Imaging Index Terms was Aborted.",!
|
---|
| 41 | . . W "The entire Distribution Mail Message was not received at this Site.",!
|
---|
| 42 | . . W "You need to call Imaging Support and have the Distribution Message Re-Sent to this site.",!
|
---|
| 43 | . . Q
|
---|
| 44 | . D INS("MAG INDEX TERMS UPDATE ",DUZ,START,""),MKBASE
|
---|
| 45 | . Q
|
---|
| 46 | L -^XTMP(SUB)
|
---|
| 47 | Q
|
---|
| 48 | ERR ;error handler
|
---|
| 49 | Q:'$G(DUZ)
|
---|
| 50 | I $G(TKID) I $D(^XTMP("MAG INDEX TERMS BACKUP",TKID)) D RECOVER
|
---|
| 51 | D @^%ZOSF("ERRTN")
|
---|
| 52 | Q
|
---|
| 53 | UPDATE ;called by IDXUPDT
|
---|
| 54 | NEW LN,MSG,Y,Y1,SCODE,SAVMAG,X,X1,X2
|
---|
| 55 | S LN=0 F S LN=$O(^TMP(SUB,$J,LN)) Q:'LN!$G(EOF) S Y=$G(^(LN)) DO
|
---|
| 56 | . I Y["Total Count:= " S EOF=1 U IO(0) W ! Q ;EOF mark
|
---|
| 57 | . I Y["INDEX TABLE GLOBAL"&(Y["MAG") D
|
---|
| 58 | . . S SCODE="S ^TMP("""_SUB_""","_$J_",0,"_$P(Y,"^MAG(",2)_"="
|
---|
| 59 | . . S LN=$O(^TMP(SUB,$J,LN)) Q:'LN S Y1=$G(^(LN))
|
---|
| 60 | . . S SCODE=SCODE_""""_Y1_""""
|
---|
| 61 | . . X SCODE U IO(0) W "*"
|
---|
| 62 | . . Q
|
---|
| 63 | . Q
|
---|
| 64 | I $G(EOF) U IO(0) W !,"Restore Code: "_TKID,! F IN=2005.82,2005.83,2005.84,2005.85 I $D(^TMP(SUB,$J,0,IN)) D
|
---|
| 65 | . W !,$P(^MAG(IN,0),"^"),"(#",IN,") ...updated.",!
|
---|
| 66 | . D CHKSTA
|
---|
| 67 | . K ^MAG(IN) M ^MAG(IN)=^TMP(SUB,$J,0,IN) ;set value
|
---|
| 68 | . S ^MAG(IN,"SERIAL#")=NEWSN
|
---|
| 69 | . Q
|
---|
| 70 | D NOW^%DTC S (Y,X1)=X,X2=7 D C^%DTC S ^XTMP("MAG INDEX TERMS BACKUP",0)=X_U_Y_U_SUB
|
---|
| 71 | Q
|
---|
| 72 | CHKSTA ;verify current status w/ National ^TMP
|
---|
| 73 | N IEN,STA,STO S IEN=0
|
---|
| 74 | I IN=2005.84 F S IEN=$O(^TMP(SUB,$J,0,IN,IEN)) Q:'IEN D
|
---|
| 75 | . S STA=$P(^TMP(SUB,$J,0,IN,IEN,0),U,4),STO=$P($G(^MAG(IN,IEN,0)),U,4)
|
---|
| 76 | . I STA="I" Q ;disable by national
|
---|
| 77 | . I STO="I" S $P(^TMP(SUB,$J,0,IN,IEN,0),U,4)=STO Q ;kp site
|
---|
| 78 | . Q
|
---|
| 79 | I IN=2005.85 F S IEN=$O(^TMP(SUB,$J,0,IN,IEN)) Q:'IEN D
|
---|
| 80 | . S STA=$P(^TMP(SUB,$J,0,IN,IEN,0),U,3),STO=$P($G(^MAG(IN,IEN,0)),U,3)
|
---|
| 81 | . I STA="I" Q ;disable by national
|
---|
| 82 | . I STO="I" S $P(^TMP(SUB,$J,0,IN,IEN,0),U,3)=STO Q ;kp site
|
---|
| 83 | . Q
|
---|
| 84 | Q
|
---|
| 85 | UFAIL ;UPDATE FAIL, no End Of File
|
---|
| 86 | N CT,CNT,COM,D,D0,D1,D2,DDATE,DG,DIC,DICR,DIW,MAGMSG,ST,XMID,XMY,XMSUB,XMERR
|
---|
| 87 | D GETENV^%ZOSV
|
---|
| 88 | S CNT=1,MAGMSG(CNT)="MAG INDEX TERMS UPDATE FAILED"
|
---|
| 89 | S CNT=CNT+1,MAGMSG(CNT)="SITE: "_$$KSP^XUPARAM("WHERE")
|
---|
| 90 | S CNT=CNT+1,MAGMSG(CNT)="PACKAGE: MAG INDEX TERMS UPDATE"
|
---|
| 91 | S CNT=CNT+1,MAGMSG(CNT)="Distribution: "_$G(NEWSN)
|
---|
| 92 | S CNT=CNT+1,MAGMSG(CNT)="Installed by: "_$$GET1^DIQ(200,DUZ,.01,"E")
|
---|
| 93 | S CNT=CNT+1,MAGMSG(CNT)="Did not receive whole package, there was no EOF mark"
|
---|
| 94 | S CNT=CNT+1,MAGMSG(CNT)="Please re-send new Index Terms message."
|
---|
| 95 | S XMSUB="MAG INDEX TERMS UPDATE #"_NEWSN_" Failed!"
|
---|
| 96 | S XMID=+$G(DUZ),XMY(XMID)=""
|
---|
| 97 | S XMY("G.MAG SERVER")=""
|
---|
| 98 | S:$G(MAGDUZ) XMY(MAGDUZ)=""
|
---|
| 99 | D SENDMSG^XMXAPI(XMID,XMSUB,"MAGMSG",.XMY,,.XMZ,)
|
---|
| 100 | D RECOVER
|
---|
| 101 | Q
|
---|
| 102 | INS(XP,DUZ,DATE,IDA) ;return msg
|
---|
| 103 | N CT,CNT,COM,D,D0,D1,D2,DDATE,DG,DIC,DICR,DIW,MAGMSG,ST,XMID,XMY,XMSUB,XMERR
|
---|
| 104 | D GETENV^%ZOSV
|
---|
| 105 | S CNT=1,MAGMSG(CNT)="MAG INDEX TERMS Update is completed"
|
---|
| 106 | S CNT=CNT+1,MAGMSG(CNT)="SITE: "_$$KSP^XUPARAM("WHERE")
|
---|
| 107 | S CNT=CNT+1,MAGMSG(CNT)="PACKAGE: "_XP
|
---|
| 108 | S CNT=CNT+1,MAGMSG(CNT)="Distribution: "_$G(NEWSN)
|
---|
| 109 | S CNT=CNT+1,MAGMSG(CNT)="Start time: "_$$FMTE^XLFDT(DATE)
|
---|
| 110 | S CT=$$NOW^XLFDT ;Time stamp
|
---|
| 111 | S CNT=CNT+1,MAGMSG(CNT)="Completion time: "_$$FMTE^XLFDT(CT)
|
---|
| 112 | S CNT=CNT+1,MAGMSG(CNT)="Run time: "_$$FMDIFF^XLFDT(CT,DATE,3)
|
---|
| 113 | S CNT=CNT+1,MAGMSG(CNT)="Environment: "_Y
|
---|
| 114 | S CNT=CNT+1,MAGMSG(CNT)="Restore Code: "_TKID
|
---|
| 115 | S CNT=CNT+1,MAGMSG(CNT)="DATE: "_$$FMTE^XLFDT(DATE)
|
---|
| 116 | S CNT=CNT+1,MAGMSG(CNT)="Installed by: "_$$GET1^DIQ(200,DUZ,.01,"E")
|
---|
| 117 | S CNT=CNT+1,MAGMSG(CNT)="Install Name: "_XP
|
---|
| 118 | S XMSUB=XP_"#"_NEWSN_" INSTALLATION"
|
---|
| 119 | S XMID=+$G(DUZ),XMY(XMID)=""
|
---|
| 120 | S XMY("G.MAG SERVER")=""
|
---|
| 121 | S:$G(MAGDUZ) XMY(MAGDUZ)=""
|
---|
| 122 | S XMSUB=$E(XMSUB,1,63)
|
---|
| 123 | D SENDMSG^XMXAPI(XMID,XMSUB,"MAGMSG",.XMY,,.XMZ,)
|
---|
| 124 | I $G(XMERR) M XMERR=^TMP("XMERR",$J) S $EC=",U13-Cannot send MailMan message,"
|
---|
| 125 | Q
|
---|
| 126 | RESTORE ;API call - MAG INDXE TERM RESTORE
|
---|
| 127 | N ANS,IN,TKID,DIR,Y
|
---|
| 128 | D GETENV^%ZOSV
|
---|
| 129 | I '$D(^XUSEC("MAG SYSTEM",+$G(DUZ))) U IO(0) W !,"Calling user does not have security key MAG SYSTEM" Q
|
---|
| 130 | F IN=1:1:5 U IO(0) D Q:$D(^XTMP("MAG INDEX TERMS BACKUP",+$G(TKID)))!($G(TKID)="^")
|
---|
| 131 | . W !,"To UnDo the Index Term updates and restore this site's Index Term files you need"
|
---|
| 132 | . W !,"the Restore Code that was included in the last INDEX TERMS UPDATE #",$G(^MAG(2005.82,"SERIAL#"))
|
---|
| 133 | . W !,"INSTALLATION message.",!
|
---|
| 134 | . W ! R "Enter Restore Code: ",TKID:360 I $G(TKID)["?" W " Restore Code please!",! S TKID=-1 Q
|
---|
| 135 | . W:'$D(^XTMP("MAG INDEX TERMS BACKUP",+$G(TKID))) !!,"Incorrect Restore Code, cannot restore the Index Term files."
|
---|
| 136 | . Q
|
---|
| 137 | Q:'$G(TKID)
|
---|
| 138 | S DIR("A")="Continue to restore Index Terms",DIR("B")="N",DIR(0)="Y" D ^DIR
|
---|
| 139 | I '$G(Y) U IO(0) W !,"Nothing done.",! Q
|
---|
| 140 | D RECOVER,MKBASE
|
---|
| 141 | U IO(0) W !,"Done.",!
|
---|
| 142 | Q
|
---|
| 143 | RECOVER ;Call by RESTORE
|
---|
| 144 | Q:$G(TKID)=""
|
---|
| 145 | F IN=2005.82,2005.83,2005.84,2005.85 D
|
---|
| 146 | . I $D(^MAG(IN))&$D(^XTMP("MAG INDEX TERMS BACKUP",TKID,IN)) D
|
---|
| 147 | . . K ^MAG(IN) M ^MAG(IN)=^XTMP("MAG INDEX TERMS BACKUP",TKID,IN) ;recoverd
|
---|
| 148 | . Q
|
---|
| 149 | Q
|
---|
| 150 | MKBASE ;make last known base
|
---|
| 151 | N IN,SUBJ,X,X0,X1,X2 S SUBJ="MAG INDEX TERMS UPDATE"
|
---|
| 152 | F IN=2005.82,2005.83,2005.84,2005.85 M ^XTMP(SUBJ,0,"BASE",IN)=^MAG(IN)
|
---|
| 153 | D NOW^%DTC S (X0,X1)=X,X2=180 D C^%DTC S ^XTMP(SUBJ,0)=X_U_X0_U_SUBJ
|
---|
| 154 | S ^XTMP(SUBJ,0,"BASE")=X0+17000000 ;yyyymmdd.hhmmss
|
---|
| 155 | Q
|
---|
| 156 | PRECHK() ;check to see if should overwrite old
|
---|
| 157 | N X,Y,DIFF,DCNT S (DIFF,DCNT)=0
|
---|
| 158 | I '$D(^XTMP(SUB,0,"BASE")) Q 1 ;no base to check
|
---|
| 159 | F IN="^MAG(2005.82","^MAG(2005.83" D ;compare contain
|
---|
| 160 | . S X=IN_")" F S X=$Q(@X) Q:X'[IN I X[",0)",$L(X,",")=3 D
|
---|
| 161 | . . S Y="^XTMP("""_SUB_""","_0_",""BASE"","_$P(X,"^MAG(",2)
|
---|
| 162 | . . I $G(@Y)="" S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Addition: "_X_" := "_@X Q
|
---|
| 163 | . . I $TR(@(X),U)'=$TR($G(@Y),U) D
|
---|
| 164 | . . . S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Changed : "_X_" := "_@X
|
---|
| 165 | . . . S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Expected value: "_$G(@Y)
|
---|
| 166 | . . Q
|
---|
| 167 | . Q
|
---|
| 168 | F IN="^MAG(2005.84","^MAG(2005.85" D ;compare contain but STATUS
|
---|
| 169 | . S X=IN_")" F S X=$Q(@X) Q:X'[IN I X[",0)",$L(X,",")=3 D
|
---|
| 170 | . . S Y="^XTMP("""_SUB_""","_0_",""BASE"","_$P(X,"^MAG(",2)
|
---|
| 171 | . . I $TR(@(X),U)=$TR($G(@Y),U) Q
|
---|
| 172 | . . I $G(@Y)="" S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Addition: "_X_" := "_@X Q
|
---|
| 173 | . . I IN["2005.84" I $TR($P(@X,U,1,3),U)=$TR($P($G(@Y),U,1,3),U) Q
|
---|
| 174 | . . I $TR($P(@X,U,1,2),U)=$TR($P($G(@Y),U,1,2),U) Q
|
---|
| 175 | . . S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Changed : "_X_" := "_@X
|
---|
| 176 | . . S DCNT=DCNT+1,DIFF=1,DIFF(DCNT)="Expected value: "_$G(@Y)
|
---|
| 177 | . . Q
|
---|
| 178 | . Q
|
---|
| 179 | I DIFF S (DCNT,CNT)=0 D ;find/report the difference
|
---|
| 180 | . S CNT=CNT+1,MAGMSG(CNT)="MAG INDEX TERMS UPDATE - PRE_CHECK FAILED"
|
---|
| 181 | . S CNT=CNT+1,MAGMSG(CNT)="SITE: "_$$KSP^XUPARAM("WHERE")
|
---|
| 182 | . S CNT=CNT+1,MAGMSG(CNT)="PACKAGE: MAG INDEX TERMS UPDATE"
|
---|
| 183 | . S CNT=CNT+1,MAGMSG(CNT)="Distribution: "_$G(NEWSN)
|
---|
| 184 | . S CNT=CNT+1,MAGMSG(CNT)="Changes have been made to the Index Term files at your site."
|
---|
| 185 | . S CNT=CNT+1,MAGMSG(CNT)="You must remove local Changes to these files before update can continue."
|
---|
| 186 | . S CNT=CNT+1,MAGMSG(CNT)=" - - - - - "
|
---|
| 187 | . S CNT=CNT+1,MAGMSG(CNT)="The Changes/Additions found were:"
|
---|
| 188 | . F CNT=CNT:1 S DCNT=$O(DIFF(DCNT)) Q:'DCNT S MAGMSG(CNT+1)=DIFF(DCNT)
|
---|
| 189 | . S CNT=CNT+2 S MAGMSG(CNT)=" - - - - - "
|
---|
| 190 | . S CNT=CNT+1 S MAGMSG(CNT)="Log a Remedy Ticket with VistA Imaging Support for help"
|
---|
| 191 | . S XMSUB="MAG INDEX TERMS UPDATE #"_$G(NEWSN)_" update has Failed!"
|
---|
| 192 | . S XMID=+$G(DUZ),XMY(XMID)=""
|
---|
| 193 | . S XMY("G.MAG SERVER")=""
|
---|
| 194 | . S:$G(MAGDUZ) XMY(MAGDUZ)=""
|
---|
| 195 | . D WARNMSG^MAGXIDX0 F IN=1:1:CNT U IO(0) W !,$G(MAGMSG(IN)),!
|
---|
| 196 | . D SENDMSG^XMXAPI(XMID,XMSUB,"MAGMSG",.XMY,,.XMZ,)
|
---|
| 197 | . Q
|
---|
| 198 | Q $S(DIFF:0,1:1)
|
---|