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

BUSAMAG1.m

Go to the documentation of this file.
  1. BUSAMAG1 ;ISI/HS/MLS-SPECIAL CODE FOR VISTA IMAGING AUDITING ; 31 Jan 2013 9:53 AM
  1. ;;1.0;IHS USER SECURITY AUDIT;;Nov 05, 2013;Build 65
  1. Q
  1. ;
  1. ; Find value located inside RPC parameter INPUT list
  1. ;
  1. ; INPUT: RPARAM = RPC Param
  1. ; MATCH = String to look for
  1. ; DELIM = If value needs to be parsed, provide delimeter
  1. ; PC = If value needs to be parsed, provide $P #
  1. ; LEAD = if EQ is null then use "[" contain match, if EQ=1 use leading char match
  1. ; OUTPUT: located input value, returned via "OUT" variable
  1. ;
  1. ; EXAMPLE: S X=$$ARRAY~BUSAMAG1(4,"IDFN",U,3)
  1. ARRAY(RPARAM,MATCH,DELIM,PC,LEAD) ;EP
  1. N $ETRAP,$ESTACK S $ETRAP="D ERR^BUSAMAG1"
  1. N Y,Z,EXIT,OUT,ARRAY,INDIR
  1. K ARRAY S (OUT,EXIT)=0
  1. I $G(RPARAM)="" S OUT=-1 Q OUT
  1. S LEAD=+$G(LEAD)
  1. I $G(XWB(5,"P",RPARAM))="" S OUT=-1 Q OUT
  1. S INDIR=$G(XWB(5,"P",RPARAM)),INDIR=$TR(INDIR,".","")
  1. M ARRAY=@INDIR
  1. I $G(MATCH)="" S OUT=-1 Q OUT
  1. S DELIM=$G(DELIM)
  1. S PC=$G(PC) I +PC="" S PC=1
  1. S Y="" F S Y=$O(ARRAY(Y)) Q:(Y=""!(EXIT)) D
  1. . I ARRAY(Y)[MATCH D
  1. . . I LEAD D Q
  1. . . . N CHECK
  1. . . . S CHECK="1"""_MATCH_""".E"
  1. . . . I $G(ARRAY(Y))'?@CHECK Q ; looks for leading char matches
  1. . . . S Z=$G(ARRAY(Y)) S OUT=Z
  1. . . . I DELIM'="" S OUT=$P(Z,DELIM,PC)
  1. . . . S EXIT=1
  1. . . . Q
  1. . . S Z=$G(ARRAY(Y)) S OUT=Z
  1. . . I DELIM'="" S OUT=$P(Z,DELIM,PC)
  1. . . S EXIT=1
  1. . . Q
  1. . Q
  1. Q OUT
  1. ;
  1. ; Find value located inside RPC RETURN value list
  1. ;
  1. ; INPUT: LOC = $P location of match token
  1. ; DELIM1 = delimiter used to find match token
  1. ; MATCH = value of match token to look for (identifying string)
  1. ; DELIM2 = If return value needs to be parsed, provide delimeter
  1. ; PC = If return value needs to be parsed, provide $P location (place of value returned)
  1. ; OUTPUT: located output value, returned via "OUT" variable
  1. ;
  1. ; EXAMPLE: S X=$$RLIST~BUSAMAG1(1,"|","STUDY_PAT","|",2)
  1. ; Where 1 (LOC) is the "|" (DELIM1) deliminated location to find the id/token string of "STUDY PAT" (MATCH)
  1. ; and the value to be returned is stored in the 2nd "|" delimited piece.
  1. ;
  1. RLIST(LOC,DELIM1,MATCH,DELIM2,PC) ;EP
  1. N $ETRAP,$ESTACK S $ETRAP="D ERR^BUSAMAG1"
  1. N Y,Z,EXIT,OUT
  1. S (OUT,EXIT)=0
  1. I '$D(XWBY) S OUT=-1 Q OUT
  1. I $G(LOC)="" S LOC=0
  1. I $G(MATCH)="" S OUT=-1 Q OUT
  1. S DELIM1=$G(DELIM1)
  1. S DELIM2=$G(DELIM2)
  1. S PC=$G(PC) I +PC="" S PC=1
  1. S Y="" F S Y=$O(XWBY(Y)) Q:(Y=""!(EXIT)) D
  1. . S Z=$G(XWBY(Y))
  1. . I Z'[MATCH Q
  1. . S OUT=Z
  1. . I LOC D Q ;check return string to see if specific piece matches search string
  1. . . I $P(Z,DELIM1,LOC)=MATCH D
  1. . . . I DELIM2'="" S OUT=$P(Z,DELIM2,PC)
  1. . . . S EXIT=1
  1. . . . Q
  1. . I DELIM2'="" S OUT=$P(Z,DELIM,PC)
  1. . S EXIT=1
  1. . Q
  1. Q OUT
  1. ;
  1. ; Check for redundant rpc/dfn/act calls
  1. ; INPUT: RPC = RPC NAME (#8994)
  1. ; DFN = PNT IEN (#2)
  1. ; ACT = ACTION value (#9002319.03,.03)
  1. ; OUTPUT: 0 - don't record
  1. ; 1 - record
  1. ; -1 - error
  1. ;
  1. ; EXAMPLE: S SKIP=$S($$REDUNCHK~BUSAMAG1("MAGG PAT INFO",+$G(XWB(5,"P",0)),"Q")=1:0,1:1)
  1. ;
  1. REDUNCHK(RPC,DFN,ACT) ;EP
  1. N OUT,SESSIEN S OUT=0
  1. Q:$G(RPC)="" OUT
  1. Q:$G(ACT)="" OUT
  1. Q:$G(DFN)="" OUT
  1. ; Check for MAG Session ID
  1. S SESSIEN=$S($G(MAGSESS):MAGSESS,$D(MAGJOB("SESSION")):MAGJOB("SESSION"),$G(TRKID)'="":$O(^MAG(2006.82,"E",TRKID,""),-1),1:0)
  1. ; Check Set top level XTMP node
  1. I '$D(^XTMP("BUSAMAG"_$J,0)) D
  1. . S ^XTMP("BUSAMAG"_$J,0)=(DT+1)_U_DT_U_"REDUNCHK~BUSAMAG1: Prevent redundant logging of RPC calls"
  1. . Q
  1. I $D(^XTMP("BUSAMAG"_$J,RPC,DFN,ACT)) D
  1. . I SESSIEN,$G(^XTMP("BUSAMAG"_$J,RPC,DFN,ACT))'=SESSIEN S ^XTMP("BUSAMAG"_$J,RPC,DFN,ACT)=SESSIEN,OUT=1 Q ;different seession id: Record
  1. . S OUT=0 ;Don't record
  1. . Q
  1. I '$D(^XTMP("BUSAMAG"_$J,RPC,DFN,ACT)) S ^XTMP("BUSAMAG"_$J,RPC,DFN,ACT)=SESSIEN,OUT=1 ;Record
  1. Q OUT
  1. ;
  1. ERR ;
  1. S OUT="-1^ERROR "_$$EC^%ZOSV
  1. D @^%ZOSF("ERRTN")
  1. Q:$Q 1
  1. Q