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

XULMUI.m

Go to the documentation of this file.
  1. XULMUI ;IRMFO-ALB/CJM/SWO/RGG - KERNEL LOCK MANAGER ;10/24/2012
  1. ;;8.0;KERNEL;**608**;JUL 10, 1995;Build 84
  1. ;;Per VA Directive 6402, this routine should not be modified
  1. ;
  1. ; ******************************************************************
  1. ; * *
  1. ; * The Kernel Lock Manager is based on the VistA Lock Manager *
  1. ; * developed by Tommy Martin. *
  1. ; * *
  1. ; ******************************************************************
  1. ;
  1. ;
  1. REFRESH ;
  1. K @LOCKS,@IDX
  1. Q:'$$GETLOCKS^XULM(.XUPARMS)
  1. I $D(XUPARMS("LAST ACTION")) D
  1. .D @XUPARMS("LAST ACTION")
  1. E D BYPAT
  1. Q
  1. BYLOCK ; display user locks sorted by lock
  1. N LOCK,XUTOPIC
  1. S XUTOPIC="LOCK"
  1. S XUPARMS("LAST ACTION")="BYLOCK^XULMUI"
  1. S VALMCNT=0
  1. D CLEAN^VALM10
  1. S VALMBG=1
  1. S VALMSG="User Locks Sorted by Lock ["_$S($L($G(XUPARMS("SELECTED NODE"))):$$LAST8(XUPARMS("SELECTED NODE")),1:"ALL NODES")_"]"
  1. D HDR("Lock",35,"Node",8,"User",13,"Patient",25)
  1. S LOCK=""
  1. F S LOCK=$O(@LOCKS@(LOCK)) Q:LOCK="" D
  1. .N NODE
  1. .S NODE=""
  1. .F S NODE=$O(@LOCKS@(LOCK,NODE)) Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) I '$G(@LOCKS@(LOCK,NODE,"SYSTEM")) D
  1. ..D NEWENTRY(LOCK,NODE,LOCK,35,$$LAST8(NODE),8,$P(@LOCKS@(LOCK,NODE,"OWNER"),"^",2),13,$$GETID(LOCK,NODE,2),25)
  1. ;
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. SYSTEM ; display system locks sorted by lock
  1. N LOCK
  1. I '$$KCHK^XUSRB("XULM SYSTEM LOCKS") D Q
  1. . W *7,!!!,?10,"***You are not authorized to view SYSTEM LOCKS***" H 5
  1. . S VALMBCK="R"
  1. S XUPARMS("LAST ACTION")="SYSTEM^XULMUI"
  1. S XUTOPIC="LOCK"
  1. S VALMCNT=0
  1. D CLEAN^VALM10
  1. S VALMBG=1
  1. S VALMSG="System Locks Sorted by Lock ["_$S($L($G(XUPARMS("SELECTED NODE"))):$$LAST8(XUPARMS("SELECTED NODE")),1:"ALL NODES")_"]"
  1. D HDR("Lock",50,"Node",8,"User",15)
  1. S LOCK=""
  1. F S LOCK=$O(@LOCKS@(LOCK)) Q:LOCK="" D
  1. .N NODE
  1. .S NODE=""
  1. .F S NODE=$O(@LOCKS@(LOCK,NODE)) Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) I $G(@LOCKS@(LOCK,NODE,"SYSTEM")) D
  1. ..D NEWENTRY(LOCK,NODE,LOCK,50,$$LAST8(NODE),8,$P(@LOCKS@(LOCK,NODE,"OWNER"),"^",2),15)
  1. ;
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. GOTO ;Jumps to a location on the screen
  1. S VALMBG=$$ASKWHERE(XUTOPIC)
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. BYUSER ; display list sorted by user
  1. N LOCK,USER
  1. S XUPARMS("LAST ACTION")="BYUSER^XULMUI"
  1. S XUTOPIC="USER"
  1. D HDR("User",14,"Lock",33,"Node",8,"Patient",25)
  1. S VALMCNT=0
  1. S VALMBG=1
  1. D CLEAN^VALM10
  1. S VALMSG="User Locks Sorted by User Name ["_$S($L($G(XUPARMS("SELECTED NODE"))):$$LAST8(XUPARMS("SELECTED NODE")),1:"ALL NODES")_"]"
  1. S USER=""
  1. ;
  1. F S USER=$O(@IDX@("OWNER",USER)) Q:USER="" D
  1. .S LOCK=""
  1. .F S LOCK=$O(@IDX@("OWNER",USER,LOCK)) Q:LOCK="" D
  1. ..N NODE
  1. ..S NODE=""
  1. ..F S NODE=$O(@IDX@("OWNER",USER,LOCK,NODE)) Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) Q:$G(@LOCKS@(LOCK,NODE,"SYSTEM")) D
  1. ...D NEWENTRY(LOCK,NODE,$P(@LOCKS@(LOCK,NODE,"OWNER"),"^",2),14,LOCK,33,$$LAST8(NODE),8,$$GETID(LOCK,NODE,2),25)
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. BYPAT ; display list sorted by Patient
  1. N LOCK,USER,PAT
  1. S XUPARMS("LAST ACTION")="BYPAT^XULMUI"
  1. S XUTOPIC="PATIENT"
  1. D HDR("Patient",15,"Lock",33,"Node",8,"User",15)
  1. S VALMCNT=0
  1. S VALMBG=1
  1. D CLEAN^VALM10
  1. K @IDX@("FILE/ID")
  1. S VALMSG="User Locks Sorted by Patient Name ["_$S($L($G(XUPARMS("SELECTED NODE"))):$$LAST8(XUPARMS("SELECTED NODE")),1:"ALL NODES")_"]"
  1. S LOCK=""
  1. F S LOCK=$O(@LOCKS@(LOCK)) Q:LOCK="" D
  1. .S NODE=""
  1. .F S NODE=$O(@LOCKS@(LOCK,NODE)) Q:NODE="" Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) I '$G(@LOCKS@(LOCK,NODE,"SYSTEM")) D
  1. ..S PAT=$$GETID(LOCK,NODE,2) S:PAT="" PAT="{?}"
  1. ..S @IDX@("FILE/ID",PAT,LOCK,NODE)=""
  1. S PAT=""
  1. F S PAT=$O(@IDX@("FILE/ID",PAT)) Q:PAT="" D
  1. .S LOCK=""
  1. .F S LOCK=$O(@IDX@("FILE/ID",PAT,LOCK)) Q:LOCK="" D
  1. ..N NODE
  1. ..S NODE=""
  1. ..F S NODE=$O(@IDX@("FILE/ID",PAT,LOCK,NODE)) Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) D
  1. ...D NEWENTRY(LOCK,NODE,PAT,15,LOCK,33,$$LAST8(NODE),8,$P(@LOCKS@(LOCK,NODE,"OWNER"),"^",2),25)
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. SLCTFILE() ;Select a file reference to screen locks by
  1. D FULL^VALM1
  1. W !
  1. N NAME,FILE,I,FILES
  1. S (FILE,I)=0
  1. F S FILE=$O(@IDX@("FILE",FILE)) Q:'FILE D
  1. .S NAME=$P($G(^DIC(FILE,0)),"^")
  1. .I $L(NAME) D
  1. ..S I=I+1
  1. ..S FILES(I)=FILE
  1. ..W !,$$LJ("("_I_")",8),NAME," File (#"_FILE_")"
  1. I 'I D PAUSE^XULMU("There are no file references available!") Q 0
  1. W !
  1. S DIR(0)="NO^"_1_":"_I_":0"
  1. S DIR("A")="Select a file from the list: "
  1. I I>0 S DIR("B")=1
  1. S DIR("?")="Enter the number of an entry on the screen to select a file."
  1. D ^DIR
  1. ;
  1. I +Y Q $G(FILES(+Y))
  1. Q 0
  1. ;
  1. BYFILE(FILE) ; Display locks that have a computable references to a particular file
  1. N LOCK,USER
  1. S XUPARMS("LAST ACTION")="BYFILE^XULMUI("_FILE_")"
  1. I FILE D
  1. .N FID
  1. .S XUTOPIC="PATIENT"
  1. .D CLEAN^VALM10
  1. .D HDR("Patient",15,"User",14,"Node",8,"LOCK",60)
  1. .S VALMSG="User Locks Related to the "_$P($G(^DIC(FILE,0)),"^")_" File"
  1. .K @IDX@("FILE/ID")
  1. .S VALMCNT=0
  1. .S VALMBG=1
  1. .S LOCK=""
  1. .F S LOCK=$O(@IDX@("FILE",FILE,LOCK)) Q:LOCK="" D
  1. ..N NODE S NODE=""
  1. ..F S NODE=$O(@IDX@("FILE",FILE,LOCK,NODE)) Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) S FID=$$GETID(LOCK,NODE,2) S:FID="" FID="?" S @IDX@("FILE/ID",FID,LOCK,NODE)=""
  1. .S FID=""
  1. .F S FID=$O(@IDX@("FILE/ID",FID)) Q:FID="" D
  1. ..S LOCK=""
  1. ..F S LOCK=$O(@IDX@("FILE/ID",FID,LOCK)) Q:LOCK="" D
  1. ...N NODE S NODE=""
  1. ...F S NODE=$O(@IDX@("FILE/ID",FID,LOCK,NODE)) Q:NODE="" Q:NODE="" Q:$D(XUPARMS("SELECTED NODE"))&'(NODE=$G(XUPARMS("SELECTED NODE"))) D
  1. ....D NEWENTRY(LOCK,NODE,FID,15,$P(@LOCKS@(LOCK,NODE,"OWNER"),"^",2),14,$$LAST8(NODE),8,LOCK,60)
  1. S VALMBCK="R"
  1. Q
  1. ASKWHERE(TOPIC) ;Asks the user where to jump to.
  1. N Y,DIR,DIRUT,RESPONSE,GOTO,WHERETO
  1. W !!,"Are you looking for a specific "_TOPIC_"?"
  1. W !,"If so, enter the "_TOPIC_", or the first few letters of "_TOPIC_"."
  1. S DIR("A")=TOPIC_": "
  1. S DIR(0)="FOA^1:45"
  1. D ^DIR
  1. I $D(DIRUT),(TOPIC'="LOCK")!(Y="^") Q VALMBG
  1. I TOPIC'="LOCK" S Y=$$UP^XLFSTR(Y)
  1. S WHERETO=Y
  1. I WHERETO="" Q 1
  1. S GOTO=$O(@VALMAR@("IDX1",WHERETO))
  1. I $E(GOTO,1,$L(WHERETO))'=WHERETO S GOTO=$O(@VALMAR@("IDX1",GOTO),-1)
  1. I $L(GOTO) D
  1. .S VALMBG=+$G(@VALMAR@("IDX1",GOTO))
  1. E S VALMBG=1
  1. Q VALMBG
  1. ;
  1. ;
  1. NEWENTRY(LOCK,NODE,COL1,W1,COL2,W2,COL3,W3,COL4,W4) ;
  1. N TEMP
  1. S:$G(COL1)="{?}" COL1=" "
  1. S:$G(COL2)="{?}" COL2=" "
  1. S:$G(COL3)="{?}" COL3=" "
  1. S:$G(COL4)="{?}" COL3=" "
  1. S @VALMAR@($$I,0)=$$RJ(VALMCNT,4)_" "_$$LJ($E(COL1,1,W1),W1)_" "_$$LJ($E($G(COL2),1,$G(W2)),$G(W2))_" "_$$LJ($E($G(COL3),1,$G(W3)),$G(W3))_" "_$$LJ($E($G(COL4),1,$G(W4)),$G(W4))
  1. D CNTRL^VALM10(VALMCNT,1,5,IOINHI,IOINORM)
  1. S TEMP=$G(@VALMAR@("IDX1",COL1))
  1. I ('TEMP)!(VALMCNT<TEMP) S @VALMAR@("IDX1",COL1)=VALMCNT
  1. S @VALMAR@("IDX2",VALMCNT)=NODE_"|XULM|"_LOCK
  1. Q
  1. ;
  1. GETID(LOCK,NODE,FILE) ;gets first ID for sorting purposes.
  1. ;
  1. N ID,TEMPLATE,VARS,FILES
  1. S TEMPLATE=$G(@LOCKS@(LOCK,NODE,"TEMPLATE"))
  1. Q:'TEMPLATE ""
  1. S FILES(FILE)=$G(@LOCKS@(LOCK,NODE,"FILES",FILE))
  1. Q:'FILES(FILE) ""
  1. M VARS=@LOCKS@(LOCK,NODE,"VARIABLES")
  1. D GETREFS^XULMLD(TEMPLATE,.FILES,.VARS)
  1. Q $S($D(FILES(FILE,1)):$P(FILES(FILE,1),":",2,5),1:"?")
  1. ;
  1. ADDLINE(LINE) ;
  1. N LIN
  1. S LIN=" "_LINE
  1. D ADD(LINE)
  1. Q
  1. ADD(LINE) ;
  1. S @VALMAR@($$I,0)=LINE
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. D CLEAN^VALM10
  1. D CLEAR^VALM1
  1. Q
  1. SELECT ;
  1. N START,END,DIR,XULMLOCK,Y,XULMNODE,XULMEXIT
  1. S START=$G(@VALMAR@("IDX1",VALMBG),1)
  1. I START,$G(@VALMAR@("IDX1",(VALMBG-1)))=START,(START+1)'>VALMCNT S START=START+1
  1. S END=$G(@VALMAR@("IDX1",VALMBG+17))
  1. I 'END S END=VALMCNT
  1. I START,START=END S Y=START
  1. E D
  1. .S DIR(0)="NO^"_START_":"_END_":0"
  1. .S DIR("A")="Select a lock: "
  1. .S DIR("?")="Enter the number of an entry on the screen to select a lock."
  1. .D ^DIR
  1. ;
  1. I +Y D
  1. .N X
  1. .S X=@VALMAR@("IDX2",+Y)
  1. .S XULMNODE=$P(X,"|XULM|")
  1. .S XULMLOCK=$P(X,"|XULM|",2)
  1. .S XUPARMS("KILL")=0
  1. .D EN^VALM("XULM DISPLAY SINGLE LOCK")
  1. .I $G(XUPARMS("KILL")),'$G(XULMEXIT) K XUPARMS("KILL") D REFRESH
  1. S VALMBCK=$S($G(XULMEXIT):"Q",1:"R")
  1. Q
  1. ;
  1. ;
  1. SLCTNODE ;
  1. N NODE,DIR
  1. S NODE(0)=1,NODE(1)="ALL NODES"
  1. S NODE=""
  1. F S NODE=$O(XUPARMS("REPORTING NODES",NODE)) Q:NODE="" S NODE(0)=NODE(0)+1,NODE(NODE(0))=NODE
  1. D FULL^VALM1
  1. W !!,"You can display locks from all the nodes or a single node."
  1. F I=1:1:NODE(0) S DIR("A",I)="["_I_"] "_NODE(I)
  1. S NODE(0)=NODE(0)+1
  1. S DIR("A",NODE(0))=" "
  1. S DIR(0)="NO^"_1_":"_NODE(0)_":0"
  1. S DIR("A")="Select a node"
  1. S DIR("?")="Enter a number to select a node."
  1. S DIR("B")=1
  1. D ^DIR
  1. I +Y D
  1. .I +Y=1 K XUPARMS("SELECTED NODE")
  1. .I +Y>1,+Y<NODE(0) S XUPARMS("SELECTED NODE")=$G(NODE(+Y))
  1. .D:$D(XUPARMS("LAST ACTION")) @XUPARMS("LAST ACTION")
  1. S VALMBCK="R"
  1. Q
  1. ;
  1. ;
  1. LJ(STRING,LEN) ;
  1. Q $$LJ^XLFSTR(STRING,LEN)
  1. RJ(STRING,LEN) ;
  1. Q $$RJ^XLFSTR(STRING,LEN)
  1. ;
  1. I() ;
  1. S VALMCNT=VALMCNT+1
  1. Q VALMCNT
  1. ;
  1. ;
  1. HELP ; -- help code
  1. N COUNT,LINE
  1. D CLEAR^VALM1
  1. F COUNT=1:1:19 S LINE=$T(HLPTEXT+COUNT) W !,$P(LINE,";",3,9)
  1. W !!!
  1. D:'$$PAUSE^XULMU
  1. .W @IOF
  1. .F COUNT=20:1:35 S LINE=$T(HLPTEXT+COUNT) W !,$P(LINE,";",3,9)
  1. .W !!!!!!
  1. .D PAUSE^XULMU
  1. D RE^VALM4
  1. Q
  1. ;
  1. HDR(COL1,W1,COL2,W2,COL3,W3,COL4,W4) ;
  1. S VALMCAP=" # "_$$LJ($G(COL1),W1)_" "_$$LJ($G(COL2),$G(W2))_" "_$$LJ($G(COL3),$G(W3))_" "_$$LJ($G(COL4),$G(W4))_" "
  1. Q
  1. ;
  1. OPTIONS ;Give options for how the lock list should be displayed.
  1. N DIR
  1. D FULL^VALM1
  1. S DIR(0)="S^1:Sort List by Patient Name;2:Sort List by User Name;3:Sort List by Lock;4:Screen List by File Reference"
  1. S DIR("A")="Select a display option: "
  1. ;S DIR("A",#)=""
  1. S DIR("B")=1
  1. S DIR("?",1)=" [1] - Sorts the list of user locks by patient name."
  1. S DIR("?",2)=""
  1. S DIR("?",3)=" [2] - Sorts the list of user locks by user name."
  1. S DIR("?",4)=""
  1. S DIR("?",5)=" [3] - Sorts the list of user locks by the lock string."
  1. S DIR("?",6)=""
  1. S DIR("?",7)=" [4] - Diplays only those user locks that reference the specific file"
  1. S DIR("?",8)=" that you select, sorted by patient name."
  1. S DIR("?",9)=" "
  1. S DIR("?")=" *System locks are not included in the display list."
  1. D ^DIR
  1. D
  1. .I Y=1 D BYPAT Q
  1. .I Y=2 D BYUSER Q
  1. .I Y=3 D BYLOCK Q
  1. .I Y=4 D Q
  1. ..N FILE
  1. ..S FILE=$$SLCTFILE
  1. ..I FILE D BYFILE(FILE)
  1. S VALMBCK="R"
  1. ;
  1. ;
  1. ;
  1. LAST8(STRING) ;
  1. I $L(STRING)>8,$L($G(XUPARMS("NODES",STRING,"SHORT NAME"))) Q $G(XUPARMS("NODES",STRING,"SHORT NAME"))
  1. N LEN
  1. S LEN=$L(STRING)
  1. Q $E(STRING,$S(LEN>8:LEN-7,1:1),LEN)
  1. ;
  1. ;;
  1. HLPTEXT ;;
  1. ;;Select an action from the bottom of the screen.
  1. ;;
  1. ;;Enter '??' to see additional actions that are available.
  1. ;;
  1. ;;SL - This action will prompt you to select a lock by its number on the list.
  1. ;; It will then display additional information about the lock and the
  1. ;; process that holds the lock.
  1. ;;
  1. ;;
  1. ;;GO -This action asks where you want to go to on the list and then shifts
  1. ;; the display to that location.
  1. ;;
  1. ;;
  1. ;;RL - This action will rebuild the list of locks displayed on the screen.
  1. ;; Active locks usually change from moment to moment, but users of the
  1. ;; Lock Manager are generally only interested in those locks that are
  1. ;; being improperly held for prolonged periods of time.
  1. ;;
  1. ;;
  1. ;;SYS - This action will display only system locks. System locks are
  1. ;; those locks set by the Kernel, HL7, and other infrastructure packages.
  1. ;;
  1. ;;
  1. ;;
  1. ;;SS - This action provides several options for how the list locks should be
  1. ;; displayed. The options include sorting the list by patient name, sorting
  1. ;; the list by the user name, sorting the list by the lock string, and
  1. ;; screening the entries by lock reference, which means that only locks
  1. ;; that relate to that specific file will be included in the display.
  1. ;;
  1. ;;
  1. ;;SN - This action allows the user to select either a single computer node or
  1. ;; all the computer nodes. If the user selects a single node then the display
  1. ;; of locks will include only locks placed by processess running on that node.
  1. ;;
  1. ;;
  1. ;;
  1. ;;
  1. ;;
  1. ENDHELP ;;END