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

CIANBUTL.m

Go to the documentation of this file.
  1. CIANBUTL ;MSC/IND/DKM/PLS - MSC RPC Broker Utilities ;15-Oct-2015 08:51;PLS
  1. ;;1.1;CIA NETWORK COMPONENTS;**001007,001011,001012**;Sep 18, 2007
  1. ;;Copyright 2000-2015, Medsphere Systems Corporation
  1. ;=================================================================
  1. ; Cleanup stray global nodes
  1. CLEANUP ;EP
  1. N UID
  1. F Q:'$$NXTUID(.UID,0) K ^XTMP("CIA",UID)
  1. Q
  1. ; Force RPC context tables to be rebuilt for all active sessions
  1. REBLDCTX ;EP
  1. N UID,CTX
  1. F Q:'$$NXTUID(.UID) D
  1. .F CTX=0:0 S CTX=$O(^XTMP("CIA",UID,"C",CTX)) Q:'CTX S ^(CTX)=0
  1. Q
  1. ; Get globally unique instance ID
  1. UID() N UID,FLG
  1. L +^XTMP("CIA",0):5
  1. E Q "-3^Cannot initialize environment"
  1. S FLG=0
  1. F UID=$P($G(^XTMP("CIA",0)),U,3)+1:1 D Q:(UID<1)!(FLG=2)
  1. .I (UID<1)!(UID>999999) D Q:UID<1
  1. ..S UID=$S('FLG:1,1:"-4^Lock table is full"),FLG=1
  1. .S:'$$ISACTIVE(UID,1) FLG=2
  1. S:UID>0 ^XTMP("CIA",0)=(DT+10000)_U_DT_U_UID
  1. L -^XTMP("CIA",0)
  1. Q UID
  1. ; Verifies that a session is truly active
  1. ; UID = Unique id of session
  1. ; LCK = If nonzero, leave lock active (defaults to 0)
  1. ; TMO = Optional lock timeout (defaults to 0)
  1. ISACTIVE(UID,LCK,TMO) ;EP
  1. Q:'$G(UID) 0
  1. Q:UID=$G(CIA("UID")) 1
  1. L +^XTMP("CIA",UID,0):+$G(TMO)
  1. E Q 1
  1. L:'$G(LCK) -^XTMP("CIA",UID,0)
  1. Q 0
  1. ; Gets the session ID associated with this process
  1. ; If not in session context, attempt answerback from client
  1. GETUID() ;EP
  1. I '$D(CIA("UID")) D
  1. .S CIA("UID")=""
  1. .Q:$D(ZTQUEUED)
  1. .N X,UID,I
  1. .S I=$I,UID=""
  1. .U $S($D(IO(0)):IO(0),1:$P) ; Use home device
  1. .X ^%ZOSF("EOFF") ; Suppress echo
  1. .F R X#1:0 Q:'$T ; Flush keyboard buffer
  1. .W $C(5) ; Send answerback request
  1. .F R X:4 Q:'$T&'$L(X) S UID=UID_X ; Listen for response
  1. .S UID=$P(UID,"CIA#",2)
  1. .X ^%ZOSF("EON") ; Restore echo
  1. .U I ; Restore previous device
  1. .I $$ISACTIVE(UID),$$GETVAR("DUZ",,,UID)=DUZ S CIA("UID")=UID
  1. .E S CIA("UID")=""
  1. Q:$Q CIA("UID")
  1. Q
  1. ; Retrieve next session ID from list
  1. ; UID passed as last ID processed, returned as next ID or null
  1. ; FLT = <0=all; 0=inactive only; >0=active only (default)
  1. ; AID = Application ID (optional)
  1. ; Return value is true if ID found
  1. NXTUID(UID,FLT,AID) ;EP
  1. N PFX,FND,ALL,ACT
  1. S FLT=+$G(FLT,1),FND=0,ALL=FLT<0,ACT=FLT>0,AID=$$OPTLKP(.AID),UID=+$G(UID)
  1. I $L(AID) F S UID=$O(^XTMP("CIA",UID)) Q:'UID D Q:FND
  1. .I AID,$$GETVAR("AID0",,,UID)'=AID Q
  1. .I 'ALL,$$ISACTIVE(UID)'=ACT Q
  1. .S FND=1
  1. S:'FND UID=""
  1. Q:$Q FND
  1. Q
  1. ; Retrieve a package parameter value
  1. PARAM(PAR,MIN,MAX) ;EP
  1. S VAL=+$$GET^XPAR("ALL",PAR)
  1. S:VAL<MIN VAL=MIN
  1. S:VAL>MAX VAL=MAX
  1. Q VAL
  1. ; Return free resource device
  1. RESDEV() ;EP
  1. N RD,MX,SL,UID,X,C
  1. S MX=$$PARAM("CIANB RESOURCE DEVICE COUNT",1,40)
  1. S SL=$$PARAM("CIANB RESOURCE DEVICE SLOTS",1,40)
  1. F Q:'$$NXTUID(.UID) D
  1. .S RD=$$GETVAR("RDEV",,,UID)
  1. .S:RD RD(RD)=$G(RD(RD))+1
  1. S RD=1,C=999999
  1. F X=1:1:MX S:+$G(RD(X))<C RD=X,C=+$G(RD(X))
  1. S X=$$RES^XUDHSET("CIANB THREAD RESOURCE #"_RD,,SL,"CIA Broker Asynchronous Callbacks")
  1. Q RD
  1. ; Set maximum slots for resource devices
  1. SETSLOTS(CNT) ;EP
  1. N RES,IEN,FDA,X,Y
  1. Q:CNT<2!(CNT>40)
  1. D FIND^DIC(3.5,,"@","UP","CIANB THREAD RESOURCE #",,"B")
  1. F RES=0:0 S RES=$O(^TMP("DILIST",$J,RES)) Q:'RES S IEN=+$G(^(RES,0)) D:IEN
  1. .S FDA(3.5,IEN_",",35)=CNT
  1. D FILE^DIE("K","FDA")
  1. K ^TMP("DILIST",$J),^TMP("DIERR",$J)
  1. Q
  1. ; Return info for session
  1. SESSION(UID,VAR) ;EP
  1. N X,Y,Z
  1. S (X,Y)=""
  1. S:'$L($G(VAR)) VAR="UID^WID^AID^DUZ^USER^LDT^JOB"
  1. F Z=1:1:$L(VAR,U) S X=X_Y_$$GETVAR($P(VAR,U,Z),,,.UID),Y=U
  1. Q X
  1. ; Show active sessions
  1. ; AID = optional application id
  1. ; FLT = <0=all; 0=inactive only; >0=active only (default)
  1. SHOWSESS(AID,FLT) ;EP
  1. N C,X,Z
  1. F C=0:1 Q:'$$NXTUID(.X,.FLT,.AID) D
  1. .W "#",X,?10,$$HTE^XLFDT($$GETVAR("LDT",,,X)),?40,$$GETVAR("WID",,,X),?60,$$GETVAR("USER",,,X),!
  1. W !,$S('C:"No sessions are",C=1:"One session is",1:C_" sessions are")," ",$S(FLT>0:"active",FLT<0:"present",1:"inactive"),".",!
  1. Q:$Q C
  1. Q
  1. ; Fetch an environment variable
  1. ; NAME = Variable name
  1. ; DFLT = Optional default value
  1. ; NMSP = Optional namespace (defaults to global)
  1. ; UID = Optional session id (default to current)
  1. GETVAR(NAME,DFLT,NMSP,UID) ;EP
  1. D FMTVAR(.UID,.NMSP,.NAME)
  1. Q $S('UID:"",1:$G(^XTMP("CIA",UID,"V",NMSP,NAME),$G(DFLT)))
  1. ; Save an environment variable
  1. ; NAME = Variable name
  1. ; VALUE = Value to be assigned (if not specified, entry is deleted)
  1. ; NMSP = Optional namespace (defaults to global)
  1. SETVAR(NAME,VALUE,NMSP,UID) ;EP
  1. N $ET
  1. S $ET="S $EC="""" G ERRVAR^CIANBUTL"
  1. D FMTVAR(.UID,.NMSP,.NAME)
  1. I 'UID Q:$Q 0 Q
  1. L +^XTMP("CIA",UID,"V",NMSP,NAME):1
  1. ;E Q:$Q 0 Q
  1. I $D(VALUE) S:NMSP=-1 @NAME=VALUE S ^XTMP("CIA",UID,"V",NMSP,NAME)=VALUE
  1. E K:NMSP=-1 @NAME K ^XTMP("CIA",UID,"V",NMSP,NAME)
  1. L -^XTMP("CIA",UID,"V",NMSP,NAME)
  1. Q:$Q 1
  1. Q
  1. ; Clear all variables in a namespace
  1. CLRVAR(NMSP,UID) ;EP
  1. N NAME,RES
  1. D FMTVAR(.UID,.NMSP)
  1. L +^XTMP("CIA",UID,"V",NMSP):1
  1. ;E Q:$Q 0 Q
  1. S NAME="",RES=1
  1. F S NAME=$O(^XTMP("CIA",UID,"V",NMSP,NAME)) Q:'$L(NAME) S RES=RES&$$SETVAR(NAME,,NMSP,UID)
  1. L -^XTMP("CIA",UID,"V",NMSP)
  1. Q:$Q RES
  1. Q
  1. ; Restore variables from local variable namespace
  1. RESVAR N NAME,UID
  1. D FMTVAR(.UID)
  1. S NAME=""
  1. F S NAME=$O(^XTMP("CIA",UID,"V",-1,NAME)) Q:'$L(NAME) S @NAME=^(NAME)
  1. Q
  1. ; Error handler for var calls
  1. ERRVAR L -^XTMP("CIA",UID,"V",NMSP,NAME)
  1. Q:$Q 0
  1. Q
  1. ; Format arguments for var calls
  1. FMTVAR(UID,NMSP,NAME) ;
  1. S UID=$G(UID,$G(CIA("UID")))
  1. S NMSP=$$UP^XLFSTR($G(NMSP,0))
  1. S NAME=$$UP^XLFSTR($G(NAME))
  1. S:NMSP=-1&$L(NAME) NAME=$NA(@NAME)
  1. Q
  1. ; Retrieve dialog text
  1. ; NUM = Dialog number (relative or absolute)
  1. ; .DLG = Array to receive text
  1. ; Pn = Optional parameters (up to 3)
  1. GETDLG(NUM,DLG,P1,P2,P3) ;
  1. N PAR
  1. K DLG
  1. S:NUM<10000 NUM=NUM+199412000
  1. S PAR(1)=$G(P1,$G(CIA("RPC"))),PAR(2)=$G(P2),PAR(3)=$G(P3)
  1. D BLD^DIALOG(NUM,.PAR,,"DLG")
  1. Q:$Q $G(DLG(1))
  1. Q
  1. ; Lookup option, returning IEN
  1. OPTLKP(OPT) ;EP
  1. Q $S('$L($G(OPT)):0,OPT=+OPT:OPT,1:$O(^DIC(19,"B",OPT,0)))
  1. ; Get/set out-of-order message for option
  1. ; MSG = New message (if passed, a set is performed, otherwise a get)
  1. ; Returns current message text
  1. OPTMSG(OPT,MSG) ;EP
  1. S OPT=+$$OPTLKP(.OPT)
  1. I OPT,$D(^DIC(19,OPT,0)) D ; Sets naked ref
  1. .I $D(MSG) S $P(^(0),U,3)=MSG
  1. .E S MSG=$P(^(0),U,3)
  1. E S MSG=""
  1. Q:$Q MSG
  1. Q
  1. ; Check option for valid access
  1. ; OPT=Option IEN or name
  1. ; TYP=Optional option type to check
  1. ; Returns 0 if OK, <err code>^<err param> otherwise
  1. OPTCHK(OPT,TYP) ;EP
  1. N XQY,X,Y,Z
  1. S XQY=$S(OPT=+OPT:OPT,1:$$OPTLKP(OPT))
  1. Q:XQY'>0 "2^"_OPT
  1. S X=$G(^DIC(19,XQY,0)),Y=$P($G(^(3)),U),Z=$P(X,U,3)
  1. Q:$L(Z) "19^"_Z
  1. I $L($G(TYP)),$P(X,U,4)'=TYP Q "20^"_OPT_U_TYP
  1. I $P(X,U,16),$L(Y),$$KCHK^XUSRB(Y) Q "21^"_OPT_U_Y
  1. S Y=$P(X,U,6)
  1. I $L(Y),'$$KCHK^XUSRB(Y) Q "22^"_OPT_U_Y
  1. S X=$$NOW^XLFDT
  1. D ENTRY^XQ92
  1. Q:'X "23^"_OPT
  1. Q 0
  1. ; Nightly task to perform various cleanup procedures.
  1. NIGHTLY ;EP
  1. D CLEANUP
  1. D DOPURGE^CIANBEVT(1)
  1. D DOPURGE^CIANBLOG
  1. Q