| 1 | HLOUSR1 ;ALB/CJM -ListManager Screen for viewing messages;12 JUN 1997 10:00 am ;07/25/2007
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**126,134,137**;Oct 13, 1995;Build 21
 | 
|---|
| 3 |  ;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ;
 | 
|---|
| 6 |  N MSGIEN
 | 
|---|
| 7 |  S MSGIEN=$$PICKMSG
 | 
|---|
| 8 |  I 'MSGIEN S VALMBCK="R" Q
 | 
|---|
| 9 |  D EN^VALM("HLO SINGLE MESSAGE DISPLAY")
 | 
|---|
| 10 |  Q
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | HDR ;
 | 
|---|
| 13 |  Q
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | BLANK ;
 | 
|---|
| 16 |  S VALMCNT=0
 | 
|---|
| 17 |  D EXIT
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 | DISPLAY ;
 | 
|---|
| 20 |  K @VALMAR
 | 
|---|
| 21 |  S VALMBCK="R"
 | 
|---|
| 22 |  N MSG
 | 
|---|
| 23 |  S VALMBG=1
 | 
|---|
| 24 |  Q:'MSGIEN
 | 
|---|
| 25 |  D SHOWMSG($P(MSGIEN,"^"),$P(MSGIEN,"^",2))
 | 
|---|
| 26 |  Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | PICKMSG() ;
 | 
|---|
| 29 |  ;ask the user to select a message & return its ien
 | 
|---|
| 30 |  N MSGIEN,DIR,COUNT,LIST
 | 
|---|
| 31 |  D FULL^VALM1
 | 
|---|
| 32 |  S DIR(0)="F3:30"
 | 
|---|
| 33 |  S DIR("A")="Message ID"
 | 
|---|
| 34 |  S DIR("?")="Enter the full Message Control ID or Batch Control ID of the message, or '^' to exit."
 | 
|---|
| 35 | PICK D ^DIR
 | 
|---|
| 36 |  I $D(DIRUT)!(Y="") Q 0
 | 
|---|
| 37 |  I $G(@VALMAR@("INDEX",Y)) Q $G(@VALMAR@("INDEX",Y))
 | 
|---|
| 38 |  S COUNT=$$FINDMSG^HLOMSG1(Y,.LIST)
 | 
|---|
| 39 |  I COUNT="0" W !!,"That message can not be found! Try Again",! G PICK
 | 
|---|
| 40 |  I COUNT=1 Q LIST(1)
 | 
|---|
| 41 |  I COUNT>1 D
 | 
|---|
| 42 |  .N ITEM
 | 
|---|
| 43 |  .W !,"There is more than one message with that ID! You must choose one to display.",1
 | 
|---|
| 44 |  .S ITEM=0
 | 
|---|
| 45 |  .F  S ITEM=$O(LIST(ITEM)) Q:'ITEM  D
 | 
|---|
| 46 |  ..N MSG
 | 
|---|
| 47 |  ..Q:'$$GETMSG^HLOMSG(+LIST(ITEM),.MSG)
 | 
|---|
| 48 |  ..W !,"[",ITEM,"]","  DT/TM: ",$$FMTE^XLFDT(MSG("DT/TM CREATED"),2),"   STATUS: ",MSG("STATUS")
 | 
|---|
| 49 |  .S DIR(0)="NO^1:"_COUNT,DIR("A")="Choose",DIR("?")="Choose one message from the list"
 | 
|---|
| 50 |  .D ^DIR
 | 
|---|
| 51 |  .I Y S Y=LIST(Y)
 | 
|---|
| 52 |  Q Y
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | HELP ;Help code
 | 
|---|
| 55 |  S X="?" D DISP^XQORM1 W !!
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | EXIT ;Exit code
 | 
|---|
| 59 |  D CLEAN^VALM10
 | 
|---|
| 60 |  D CLEAR^VALM1
 | 
|---|
| 61 |  S VALMBCK="R"
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | EXPND ;Expand code
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 | CJ(STRING,LEN) ;
 | 
|---|
| 69 |  Q $$CJ^XLFSTR(STRING,LEN)
 | 
|---|
| 70 | LJ(STRING,LEN) ;
 | 
|---|
| 71 |  Q $$LJ^XLFSTR(STRING,LEN)
 | 
|---|
| 72 | SP(LEN,CHAR) ;
 | 
|---|
| 73 |  ;return padding - " " is the default pad character
 | 
|---|
| 74 |  N STR
 | 
|---|
| 75 |  S:$G(CHAR)="" CHAR=" "
 | 
|---|
| 76 |  S $P(STR,CHAR,LEN)=CHAR
 | 
|---|
| 77 |  Q STR
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | SHOWMSG(MSGIEN,SUBIEN) ;
 | 
|---|
| 80 |  ;Description:
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ;Input:
 | 
|---|
| 83 |  ;Output:
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  N MSG,I,TEMP,LINE
 | 
|---|
| 86 |  S VALMCNT=0
 | 
|---|
| 87 |  S SUBIEN=+$G(SUBIEN)
 | 
|---|
| 88 |  I '$$GETMSG^HLOMSG(MSGIEN,.MSG) W !,"UNABLE TO DISPLAY THE MESSAGE",!! Q
 | 
|---|
| 89 |  I SUBIEN D GETMSGB^HLOMSG1(.MSG,SUBIEN,.MSG)
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  S I=0
 | 
|---|
| 92 |  ;** administrative information **
 | 
|---|
| 93 |  S @VALMAR@($$I,0)=$$CJ("Administrative Information",80)
 | 
|---|
| 94 |  D CNTRL^VALM10(VALMCNT,26,30,IORVON,IORVOFF)
 | 
|---|
| 95 |  S LINE="MsgID: "_$$LJ(MSG("ID"),18)
 | 
|---|
| 96 |  S LINE=LINE_"Status: "_$$LJ(MSG("STATUS"),5)
 | 
|---|
| 97 |  S:MSG("ACK TO")]"" LINE=LINE_$$LJ(" Ack To:",14)_MSG("ACK TO")
 | 
|---|
| 98 |  S:MSG("ACK BY")]"" LINE=LINE_$$LJ(" Ack'd By:",14)_MSG("ACK BY")
 | 
|---|
| 99 |  S @VALMAR@($$I,0)=LINE
 | 
|---|
| 100 |  I MSG("STATUS","ERROR TEXT")]"" S @VALMAR@($$I,0)="Error: "_"** "_MSG("STATUS","ERROR TEXT")_" **"
 | 
|---|
| 101 |  S @VALMAR@($$I,0)="Dir:   "_$$LJ($S(MSG("DIRECTION")="IN":"INCOMING",1:"OUTGOING"),10)_$$LJ("  Trans Dt/Tm: ",12)_$$FMTE^XLFDT(MSG("DT/TM"),2)_$$LJ("  Purge DT/TM: ",8)_$$FMTE^XLFDT(MSG("STATUS","PURGE"),2)
 | 
|---|
| 102 |  S @VALMAR@($$I,0)="Link:  "_$$LJ(MSG("STATUS","LINK NAME"),29)_"   "_$$LJ("Queue: ",13)_MSG("STATUS","QUEUE")
 | 
|---|
| 103 |  I $L($G(MSG("STATUS","SEQUENCE QUEUE"))) D
 | 
|---|
| 104 |  .S @VALMAR@($$I,0)="Sequence Queue: "_MSG("STATUS","SEQUENCE QUEUE")_"    Moved: "_$S(MSG("STATUS","MOVED TO OUT QUEUE"):"YES",1:"NO")
 | 
|---|
| 105 |  I MSG("STATUS","ACCEPT ACK'D") D
 | 
|---|
| 106 |  .S @VALMAR@($$I,0)="Accept Ack: "_$$LJ(MSG("STATUS","ACCEPT ACK ID"),26)_$$LJ(" DT/TM Ack'd: ",14)_$$FMTE^XLFDT(MSG("STATUS","ACCEPT ACK DT/TM"),2)
 | 
|---|
| 107 |  .S @VALMAR@($$I,0)="   "_MSG("STATUS","ACCEPT ACK MSA")
 | 
|---|
| 108 |  I MSG("DIRECTION")="IN" D
 | 
|---|
| 109 |  .S LINE="App Response Rtn: "
 | 
|---|
| 110 |  .I $L($G(MSG("STATUS","APP ACK RESPONSE"))) S LINE=$$LJ(LINE_MSG("STATUS","APP ACK RESPONSE"),38)_" Executed: "_$S(MSG("STATUS","APP HANDOFF"):"   YES",1:"   NO")
 | 
|---|
| 111 |  .S @VALMAR@($$I,0)=LINE
 | 
|---|
| 112 |  I MSG("DIRECTION")="OUT",(MSG("STATUS","APP ACK'D")!MSG("STATUS","ACCEPT ACK'D")) D
 | 
|---|
| 113 |  .S LINE=""
 | 
|---|
| 114 |  .I MSG("STATUS","ACCEPT ACK'D") D
 | 
|---|
| 115 |  ..I MSG("STATUS","ACCEPT ACK RESPONSE")="" S MSG("STATUS","ACCEPT ACK RESPONSE")="n/a"
 | 
|---|
| 116 |  ..S LINE="Accept Ack Rtn: "_MSG("STATUS","ACCEPT ACK RESPONSE")
 | 
|---|
| 117 |  .S LINE=$$LJ(LINE,39)
 | 
|---|
| 118 |  .I MSG("STATUS","APP ACK'D") D
 | 
|---|
| 119 |  ..I MSG("STATUS","APP ACK RESPONSE")="" S MSG("STATUS","APP ACK RESPONSE")="n/a"
 | 
|---|
| 120 |  ..S LINE=LINE_"App Ack Rtn: "_MSG("STATUS","APP ACK RESPONSE")
 | 
|---|
| 121 |  .S @VALMAR@($$I,0)=LINE
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 |  ;** the message text **
 | 
|---|
| 124 |  S @VALMAR@($$I,0)=""
 | 
|---|
| 125 |  I '$G(SUBIEN) D
 | 
|---|
| 126 |  .S @VALMAR@($$I,0)=$$CJ("Message Text",80)
 | 
|---|
| 127 |  .D CNTRL^VALM10(VALMCNT,33,16,IORVON,IORVOFF)
 | 
|---|
| 128 |  E  D
 | 
|---|
| 129 |  .S @VALMAR@($$I,0)=$$CJ("Individual Message Text (Batched)",80)
 | 
|---|
| 130 |  .D CNTRL^VALM10(VALMCNT,23,35,IORVON,IORVOFF)
 | 
|---|
| 131 |  D SHOWBODY(.MSG,$G(SUBIEN))
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  ;** display its application acknowledgment **
 | 
|---|
| 134 |  I MSG("ACK BY")]"",$$FINDMSG^HLOMSG1(MSG("ACK BY"),.TEMP)=1 S MSGIEN=TEMP(1) D
 | 
|---|
| 135 |  .N MSG
 | 
|---|
| 136 |  .Q:'$$GETMSG^HLOMSG(+MSGIEN,.MSG)
 | 
|---|
| 137 |  .I $P(MSGIEN,"^",2) D GETMSGB^HLOMSG1(.MSG,$P(MSGIEN,"^",2),.MSG)
 | 
|---|
| 138 |  .S @VALMAR@($$I,0)=""
 | 
|---|
| 139 |  .S @VALMAR@($$I,0)=$$CJ("Application Acknowledgment",80)
 | 
|---|
| 140 |  .D CNTRL^VALM10(VALMCNT,26,30,IORVON,IORVOFF)
 | 
|---|
| 141 |  .D SHOWBODY(.MSG,$P(MSGIEN,"^",2))
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ;** display the original message **
 | 
|---|
| 144 |  I MSG("ACK TO")]"",$$FINDMSG^HLOMSG1(MSG("ACK TO"),.TEMP)=1 S MSGIEN=TEMP(1) D
 | 
|---|
| 145 |  .N MSG
 | 
|---|
| 146 |  .Q:'$$GETMSG^HLOMSG(+MSGIEN,.MSG)
 | 
|---|
| 147 |  .I $P(MSGIEN,"^",2) D GETMSGB^HLOMSG1(.MSG,$P(MSGIEN,"^",2),.MSG)
 | 
|---|
| 148 |  .S @VALMAR@($$I,0)=""
 | 
|---|
| 149 |  .S @VALMAR@($$I,0)=$$CJ("Original Message",80)
 | 
|---|
| 150 |  .D CNTRL^VALM10(VALMCNT,26,30,IORVON,IORVOFF)
 | 
|---|
| 151 |  .D SHOWBODY(.MSG,$P(MSGIEN,"^",2))
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | SHOWBODY(MSG,SUBIEN) ;
 | 
|---|
| 155 |  N NODE,I,SEG,QUIT
 | 
|---|
| 156 |  S QUIT=0
 | 
|---|
| 157 |  M SEG=MSG("HDR")
 | 
|---|
| 158 |  D ADD(.SEG)
 | 
|---|
| 159 |  S MSG("BATCH","CURRENT MESSAGE")=0
 | 
|---|
| 160 |  I MSG("BATCH") D
 | 
|---|
| 161 |  .I $G(SUBIEN) D  Q
 | 
|---|
| 162 |  ..S MSG("BATCH","CURRENT MESSAGE")=SUBIEN
 | 
|---|
| 163 |  ..F  Q:'$$HLNEXT^HLOMSG(.MSG,.SEG)  D ADD(.SEG)
 | 
|---|
| 164 |  .S MSG("BATCH","CURRENT MESSAGE")=0
 | 
|---|
| 165 |  .N LAST S LAST=0
 | 
|---|
| 166 |  .F  Q:'$$NEXTMSG^HLOMSG(.MSG,.SEG)  D  Q:QUIT
 | 
|---|
| 167 |  ..D ADD(.SEG)
 | 
|---|
| 168 |  ..S LAST=MSG("BATCH","CURRENT MESSAGE")
 | 
|---|
| 169 |  ..F  Q:'$$HLNEXT^HLOMSG(.MSG,.SEG)  D ADD(.SEG)
 | 
|---|
| 170 |  .I MSG("DIRECTION")="OUT" K SEG S SEG(1)="BTS"_$E($G(NODE(1)),4)_LAST D ADD(.SEG)
 | 
|---|
| 171 |  E  D
 | 
|---|
| 172 |  .F  Q:'$$HLNEXT^HLOMSG(.MSG,.SEG)  D  Q:QUIT
 | 
|---|
| 173 |  ..D ADD(.SEG)
 | 
|---|
| 174 |  Q
 | 
|---|
| 175 | I() ;
 | 
|---|
| 176 |  S VALMCNT=VALMCNT+1
 | 
|---|
| 177 |  Q VALMCNT
 | 
|---|
| 178 | ADD(SEG) ;
 | 
|---|
| 179 |  N QUIT,I,J,LINE
 | 
|---|
| 180 |  S QUIT=0
 | 
|---|
| 181 |  S (I,J)=1
 | 
|---|
| 182 |  S LINE(1)=$E(SEG(1),1,80),SEG(1)=$E(SEG(1),81,9999)
 | 
|---|
| 183 |  I SEG(1)="" K SEG(1)
 | 
|---|
| 184 |  D SHIFT(.I,.J)
 | 
|---|
| 185 |  S @VALMAR@($$I,0)=LINE(1)
 | 
|---|
| 186 |  S I=1
 | 
|---|
| 187 |  F  S I=$O(LINE(I)) Q:'I  D
 | 
|---|
| 188 |  .S @VALMAR@($$I,0)=LINE(I)
 | 
|---|
| 189 |  .D CNTRL^VALM10(VALMCNT,1,1,IORVON,IORVOFF)
 | 
|---|
| 190 |  Q
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 | SHIFT(I,J) ;
 | 
|---|
| 193 |  I '$D(SEG(I)) S I=$O(SEG(0)) Q:'I
 | 
|---|
| 194 |  I $L(LINE(J))<80 D
 | 
|---|
| 195 |  .N LEN
 | 
|---|
| 196 |  .S LEN=$L(LINE(J))
 | 
|---|
| 197 |  .S LINE(J)=LINE(J)_$E(SEG(I),1,80-LEN)
 | 
|---|
| 198 |  .S SEG(I)=$E(SEG(I),81-LEN,9999)
 | 
|---|
| 199 |  .I SEG(I)="" K SEG(I)
 | 
|---|
| 200 |  E  D
 | 
|---|
| 201 |  .S J=J+1
 | 
|---|
| 202 |  .S LINE(J)="-"
 | 
|---|
| 203 |  D SHIFT(.I,.J)
 | 
|---|
| 204 |  Q
 | 
|---|
| 205 |  ;
 | 
|---|
| 206 | SCRLMODE ;scroll mode
 | 
|---|
| 207 |  Q:'$L(HLRFRSH)
 | 
|---|
| 208 |  N QUIT,IOTM,IOBM,DX,DY,LINE,IOTM,IOBM
 | 
|---|
| 209 |  W !!,IOINHI,"Hit any key to escape scroll mode...",IOINORM
 | 
|---|
| 210 |  S IOTM=3,IOBM=23
 | 
|---|
| 211 |  S QUIT=0
 | 
|---|
| 212 |  S LINE=$S(VALMCNT<17:1,1:17)
 | 
|---|
| 213 |  W @IOSTBM
 | 
|---|
| 214 |  S DX=1,DY=$S(VALMCNT<17:VALMCNT+1,1:17) X IOXY
 | 
|---|
| 215 |  F I=1:1 D  Q:QUIT
 | 
|---|
| 216 |  .;every 10 seconds refresh the data
 | 
|---|
| 217 |  .I I>42 D @HLRFRSH S I=0
 | 
|---|
| 218 |  .I LINE+1>VALMCNT D
 | 
|---|
| 219 |  ..S TEMP=$G(@VALMAR@(LINE,0))
 | 
|---|
| 220 |  ..W !,IOUON,TEMP_$$SP(80-$L(TEMP)),IOUOFF
 | 
|---|
| 221 |  .E  W !,$G(@VALMAR@(LINE,0))
 | 
|---|
| 222 |  .S LINE=LINE+1
 | 
|---|
| 223 |  .I LINE>VALMCNT S LINE=1
 | 
|---|
| 224 |  .I (I=22)!(I=43) R *C:5 I $T S QUIT=1 Q
 | 
|---|
| 225 |  S VALMBG=LINE-23 I VALMBG<0 S VALMBG=1
 | 
|---|
| 226 |  S VALMBCK="R"
 | 
|---|
| 227 |  Q
 | 
|---|
| 228 | HLP ;
 | 
|---|
| 229 |  Q
 | 
|---|
| 230 |  ;
 | 
|---|
| 231 | IFOPEN(LINK) ;
 | 
|---|
| 232 |  ;returns 1 if the link can be opened, otherwise 0
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 |  ;Inputs:
 | 
|---|
| 235 |  ;  LINK - name of the link (required), optionally post-fixed with ":"_<port #>, will default to that defined for link
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  N LINKNAME,LINKARY,POP,IO,IOF,IOST,OPEN,PORT
 | 
|---|
| 238 |  S OPEN=0
 | 
|---|
| 239 |  S LINKNAME=$P(LINK,":")
 | 
|---|
| 240 |  S PORT=$P(LINK,":",2)
 | 
|---|
| 241 |  Q:LINKNAME="" 0
 | 
|---|
| 242 |  Q:'$$GETLINK^HLOTLNK(LINKNAME,.LINKARY) 0
 | 
|---|
| 243 |  S:PORT LINKARY("PORT")=PORT
 | 
|---|
| 244 |  Q:'$G(LINKARY("PORT")) 0
 | 
|---|
| 245 |  I LINKARY("IP")="",LINKARY("DOMAIN")="",LINKARY("LLP")="TCP",LINKARY("SERVER") D
 | 
|---|
| 246 |  .N DATA
 | 
|---|
| 247 |  .S LINKARY("DOMAIN")=$P($G(^HLD(779.1,1,0)),"^")
 | 
|---|
| 248 |  .Q:LINKARY("DOMAIN")=""
 | 
|---|
| 249 |  .S DATA(.08)=LINKARY("DOMAIN")
 | 
|---|
| 250 |  .Q:$$UPD^HLOASUB1(870,LINKARY("IEN"),.DATA)
 | 
|---|
| 251 |  D:$G(LINKARY("IP"))'=""
 | 
|---|
| 252 |  .D CALL^%ZISTCP(LINKARY("IP"),LINKARY("PORT"),15)
 | 
|---|
| 253 |  .S OPEN='POP
 | 
|---|
| 254 |  I 'OPEN,LINKARY("DOMAIN")'="",$G(^HLTMP("DNS LAST",LINKARY("IEN")))<$$DT^XLFDT D
 | 
|---|
| 255 |  .N IP
 | 
|---|
| 256 |  .S ^HLTMP("DNS LAST",LINKARY("IEN"))=$$DT^XLFDT
 | 
|---|
| 257 |  .S IP=$$DNS^HLOTCP(LINKARY("DOMAIN"))
 | 
|---|
| 258 |  .I IP'="",IP'=LINKARY("IP") D
 | 
|---|
| 259 |  ..N DATA
 | 
|---|
| 260 |  ..S DATA(400.01)=IP,LINKARY("IP")=IP
 | 
|---|
| 261 |  ..Q:$$UPD^HLOASUB1(870,LINKARY("IEN"),.DATA)
 | 
|---|
| 262 |  ..D CALL^%ZISTCP(LINKARY("IP"),LINKARY("PORT"),15)
 | 
|---|
| 263 |  ..S OPEN='POP
 | 
|---|
| 264 |  C:OPEN IO
 | 
|---|
| 265 |  ;D CLOSE^%ZISTCP
 | 
|---|
| 266 |  Q OPEN
 | 
|---|