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

BUSAUTIL.m

Go to the documentation of this file.
  1. BUSAUTIL ;GDIT/HS/BEE-IHS USER SECURITY AUDIT Utility Program ; 31 Jan 2013 9:53 AM
  1. ;;1.0;IHS USER SECURITY AUDIT;;Nov 05, 2013;Build 65
  1. ;
  1. Q
  1. ;
  1. SINPUT(PARM) ;PEP - Return Single Input Parameter Value
  1. ;
  1. ;Required Application Variables
  1. ;BUSARPC - The name of the called RPC
  1. ;BUSABKR - The broker making the call
  1. ;
  1. ;Input variable
  1. ;PARM - The RPC input parameter piece to pull
  1. ;
  1. NEW OUT
  1. ;
  1. I +$G(PARM)<1 Q ""
  1. I $G(BUSABKR)="" Q ""
  1. I $G(BUSARPC)="" Q ""
  1. ;
  1. ;Retrieve information
  1. D VAL("I",PARM,BUSABKR,BUSARPC,.OUT)
  1. ;
  1. ;Return first record
  1. Q $G(OUT)
  1. ;
  1. SOUTPUT(PARM) ;PEP - Return Single Output Parameter Value
  1. ;
  1. ;Required Application Variables
  1. ;BUSARPC - The name of the called RPC
  1. ;BUSABKR - The broker making call
  1. ;
  1. ;Input variable
  1. ;PARM - The RPC input parameter piece to pull
  1. ;
  1. NEW OUT
  1. ;
  1. I +$G(PARM)<1 Q ""
  1. I $G(BUSABKR)="" Q ""
  1. I $G(BUSARPC)="" Q ""
  1. ;
  1. ;Retrieve information
  1. D VAL("R",PARM,BUSABKR,BUSARPC,.OUT)
  1. ;
  1. ;Return first record
  1. Q $G(OUT)
  1. ;
  1. VAL(TYPE,LOCATION,BROKER,RPC,RVAL) ;PEP - Return information located in specified location
  1. ;
  1. ;Input:
  1. ; TYPE - The area to look (I:Input Parameter, R:Results)
  1. ; LOCATION - The input parameter number, the return piece or column name
  1. ; BROKER - The broker making the call (B:BMXNet,C:CIA,W:XWB)
  1. ; RPC - The RPC name
  1. ; RVAL - The return value array
  1. ;
  1. S TYPE=$G(TYPE),LOCATION=$G(LOCATION),BROKER=$G(BROKER),RPC=$G(RPC)
  1. ;
  1. I TYPE'="I",TYPE'="R" Q "0^Invalid Type"
  1. I LOCATION="" Q "0^Missing Location"
  1. I BROKER'="B",BROKER'="C",BROKER'="W" Q "0^Invalid Broker"
  1. I RPC="" Q "0^Missing RPC Call"
  1. ;
  1. ;Process data in input parameters
  1. I TYPE="I" D G XVAL
  1. . I BROKER="B" D BINP(LOCATION,.RVAL) ;BMXNet
  1. . I BROKER="C" D CINP(LOCATION,.RVAL) ;CIA
  1. . I BROKER="W" D WINP(LOCATION,.RVAL) ;XWB
  1. ;
  1. ;Process data in results
  1. I TYPE="R" D G XVAL
  1. . I BROKER="B" D BRES(LOCATION,RPC,.RVAL) ;BMXNet
  1. . I BROKER="C" D CRES(LOCATION,RPC,.RVAL) ;CIA
  1. . I BROKER="W" D WRES(LOCATION,RPC,.RVAL) ;XWB
  1. XVAL Q 1
  1. ;
  1. BINP(LOC,RVAL) ;EP - Return BMXNet input parameter value
  1. S RVAL=$G(BUSAP(3,"P",LOC-1))
  1. Q
  1. ;
  1. WINP(LOC,RVAL) ;EP - Return XWB input parameter value
  1. S RVAL=$G(BUSAP(3,"P",LOC-1))
  1. Q
  1. ;
  1. CINP(LOC,RVAL) ;EP - Return CIA input parameter value
  1. S RVAL=$G(@("P"_LOC))
  1. Q
  1. ;
  1. BRES(LOC,RPC,RVAL) ;EP - Return BMXNet result value
  1. ;
  1. NEW RPCIEN,RTVAL
  1. S RPCIEN=$O(^XWB(8994,"B",RPC,0))
  1. ;
  1. ;Retrieve global return value
  1. S RTVAL=$$GET1^DIQ(8994,RPCIEN_",",.04,"I")
  1. ;
  1. ;Global Array
  1. I RTVAL=4 D BGARES(LOC,.RVAL)
  1. ;
  1. Q
  1. ;
  1. WRES(LOC,RPC,RVAL) ;EP - Return BMXNet result value
  1. ;
  1. NEW RPCIEN,RTVAL
  1. S RPCIEN=$O(^XWB(8994,"B",RPC,0))
  1. ;
  1. ;Retrieve global return value
  1. S RTVAL=$$GET1^DIQ(8994,RPCIEN_",",.04,"I")
  1. ;
  1. ;Global Array
  1. I RTVAL=4 D WGARES(LOC,.RVAL)
  1. ;
  1. Q
  1. ;
  1. CRES(LOC,RPC,RVAL) ;EP - Return CIA result value
  1. ;
  1. ;Handle single value returns
  1. I XWBPTYPE=1 D Q
  1. . S RVAL(1)=$P($G(CIAD),U,LOC)
  1. ;
  1. I XWBPTYPE=5 D Q
  1. . S RVAL(1)=$P($G(@CIAD),U,LOC)
  1. ;
  1. ;Handle Array, Word Processing, Global Array
  1. I XWBPTYPE=2 D CROUT("CIAD",LOC,.RVAL) Q
  1. I XWBPTYPE=3 D CROUT("CIAD",LOC,.RVAL) Q
  1. I XWBPTYPE=4 D CROUT(CIAD,LOC,.RVAL) Q
  1. Q
  1. ;
  1. ;Return result information
  1. CROUT(ARY,LOC,RVAL) ;
  1. N X,L,K,II
  1. S K=$E(ARY)'="~"
  1. S:'K ARY=$E(ARY,2,999)
  1. Q:'$L(ARY)
  1. S ARY=$NA(@ARY)
  1. S X=ARY,L=$QL(ARY)
  1. F S X=$Q(@X) Q:'$L(X) Q:$NA(@X,L)'=ARY S II=$G(II)+1,RVAL(II)=$P($G(@X),U,LOC)
  1. Q
  1. ;
  1. BGARES(LOC,RVAL) ;EP - Return BMXNet Global Array Value
  1. ;
  1. NEW BMXIEN,FCOL,COL,FHDR,BMXHDR
  1. ;
  1. ;Pull header row and locate column
  1. S BMXHDR=@BMXY@(0)
  1. S FCOL="" F COL=1:1:$L(BMXHDR,U) S FHDR=$TR($E($P(BMXHDR,U,COL),7,99),$C(30)) I FHDR=LOC S FCOL=COL
  1. ;
  1. ;Find the field
  1. I FCOL]"" S BMXIEN=0 F S BMXIEN=$O(@BMXY@(BMXIEN)) Q:BMXIEN="" D
  1. . ;
  1. . NEW VAL
  1. . ;
  1. . ;Quit on last record
  1. . I $TR(@BMXY@(BMXIEN),$C(31))="" Q
  1. . ;
  1. . ;Pull the column value if populated
  1. . S VAL=$P($G(@BMXY@(BMXIEN)),U,FCOL)
  1. . I VAL]"" S RVAL(BMXIEN)=$TR(VAL,$C(30))
  1. Q
  1. ;
  1. WGARES(LOC,RVAL) ;EP - Return XWB Global Array Value
  1. ;
  1. NEW XWBIEN,FCOL,COL,FHDR,XWBHDR
  1. ;
  1. ;Pull header row and locate column
  1. S XWBHDR=@XWBY@(0)
  1. S FCOL="" F COL=1:1:$L(XWBHDR,U) S FHDR=$TR($E($P(XWBHDR,U,COL),7,99),$C(30)) I FHDR=LOC S FCOL=COL
  1. ;
  1. ;Find the field
  1. I FCOL]"" S XWBIEN=0 F S XWBIEN=$O(@XWBY@(XWBIEN)) Q:XWBIEN="" D
  1. . ;
  1. . NEW VAL
  1. . ;
  1. . ;Quit on last record
  1. . I $TR(@XWBY@(XWBIEN),$C(31))="" Q
  1. . ;
  1. . ;Pull the column value if populated
  1. . S VAL=$P($G(@XWBY@(XWBIEN)),U,FCOL)
  1. . I VAL]"" S RVAL(XWBIEN)=$TR(VAL,$C(30))
  1. Q
  1. ;
  1. BFILE(BUSAOVAL,BUSADVAL,PIECE,EXE,MULT,MINP) ;EP - BMX: Format and file data detail array
  1. ;
  1. ;Result output filing
  1. I $G(MULT)=1 D Q
  1. . NEW BMXIEN
  1. . S BMXIEN=0 F S BMXIEN=$O(@BMXY@(BMXIEN)) Q:BMXIEN="" D
  1. .. NEW X,DFN,VIEN
  1. .. ;
  1. .. ;Pull DFN/VIEN so they can be used (if populated)
  1. .. S DFN=$P($G(BUSADVAL(BMXIEN)),U) I PIECE>2,DFN="" Q
  1. .. S VIEN=$P($G(BUSADVAL(BMXIEN)),U,2)
  1. .. ;
  1. .. ;Process desired piece
  1. .. S X=$G(BUSAOVAL) ;Look in variable first
  1. .. S:X="" X=$G(BUSAOVAL(BMXIEN)) ;Look in array second
  1. .. I $G(EXE)]"" X EXE
  1. .. I $G(X)]"" S $P(BUSADVAL(BMXIEN),U,PIECE)=X
  1. .. ;
  1. .. ;If VIEN piece - check if DFN needs filled in
  1. .. I PIECE'=2 Q
  1. .. ;
  1. .. ;Quit if already populated
  1. .. I DFN]"" Q
  1. .. ;
  1. .. ;Plug in DFN
  1. .. S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. .. I DFN]"" S $P(BUSADVAL(BMXIEN),U)=DFN
  1. ;
  1. ;Multiple input filing
  1. I $G(MINP)=1 D Q
  1. . ;
  1. . ;DFN/VIEN pieces already processed
  1. . I (PIECE=1)!(PIECE=2) Q
  1. . ;
  1. . NEW BMXIEN
  1. . ;
  1. . S BMXIEN=0 F S BMXIEN=$O(BUSADVAL(BMXIEN)) Q:BMXIEN="" D
  1. .. ;
  1. .. NEW X,DFN,VIEN
  1. .. ;
  1. .. ;Pull populated values
  1. .. S DFN=$P(BUSADVAL(BMXIEN),U) I PIECE>2,DFN="" Q
  1. .. S VIEN=$P(BUSADVAL(BMXIEN),U,2)
  1. .. ;
  1. .. ;Pull field value
  1. .. S X=$P(BUSADVAL(BMXIEN),U,PIECE)
  1. .. ;
  1. .. ;Call executable
  1. .. I $G(EXE)]"" X EXE
  1. .. ;
  1. .. ;Save value
  1. .. I $G(X)]"" S $P(BUSADVAL(BMXIEN),U,PIECE)=X
  1. ;
  1. ;Single record output
  1. ;
  1. NEW X,DFN,VIEN
  1. ;
  1. ;Pull DFN/VIEN so they can be used (if populated)
  1. S DFN=$P($G(BUSADVAL(1)),U) I PIECE>2,DFN="" Q
  1. S VIEN=$P($G(BUSADVAL(1)),U,2)
  1. ;
  1. ;Now populate correct piece
  1. S X=$G(BUSAOVAL) S:X="" X=$G(BUSAOVAL(1))
  1. I $G(EXE)]"" X EXE
  1. I $G(X)]"" S $P(BUSADVAL(1),U,PIECE)=X
  1. ;
  1. ;If VIEN piece - check if DFN needs filled in
  1. I PIECE'=2 Q
  1. ;
  1. ;Quit if already populated
  1. I DFN]"" Q
  1. ;
  1. ;Plug in DFN
  1. S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. I DFN]"" S $P(BUSADVAL(1),U)=DFN
  1. ;
  1. Q
  1. ;
  1. WFILE(BUSAOVAL,BUSADVAL,PIECE,EXE,MULT,MINP) ;EP - XWB: Format and file data detail array
  1. ;
  1. ;Result output filing
  1. I $G(MULT)=1 D Q
  1. . NEW XWBIEN
  1. . S XWBIEN=0 F S XWBIEN=$O(@BXWB@(XWBIEN)) Q:XWBIEN="" D
  1. .. NEW X,DFN,VIEN
  1. .. ;
  1. .. ;Pull DFN/VIEN so they can be used (if populated)
  1. .. S DFN=$P($G(BUSADVAL(XWBIEN)),U) I PIECE>2,DFN="" Q
  1. .. S VIEN=$P($G(BUSADVAL(XWBIEN)),U,2)
  1. .. ;
  1. .. ;Process desired piece
  1. .. S X=$G(BUSAOVAL) ;Look in variable first
  1. .. S:X="" X=$G(BUSAOVAL(XWBIEN)) ;Look in array second
  1. .. I $G(EXE)]"" X EXE
  1. .. I $G(X)]"" S $P(BUSADVAL(XWBIEN),U,PIECE)=X
  1. .. ;
  1. .. ;If VIEN piece - check if DFN needs filled in
  1. .. I PIECE'=2 Q
  1. .. ;
  1. .. ;Quit if already populated
  1. .. I DFN]"" Q
  1. .. ;
  1. .. ;Plug in DFN
  1. .. S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. .. I DFN]"" S $P(BUSADVAL(XWBIEN),U)=DFN
  1. ;
  1. ;Multiple input filing
  1. I $G(MINP)=1 D Q
  1. . ;
  1. . ;DFN/VIEN pieces already processed
  1. . I (PIECE=1)!(PIECE=2) Q
  1. . ;
  1. . NEW XWBIEN
  1. . ;
  1. . S XWBIEN=0 F S XWBIEN=$O(BUSADVAL(XWBIEN)) Q:XWBIEN="" D
  1. .. ;
  1. .. NEW X,DFN,VIEN
  1. .. ;
  1. .. ;Pull populated values
  1. .. S DFN=$P(BUSADVAL(XWBIEN),U) I PIECE>2,DFN="" Q
  1. .. S VIEN=$P(BUSADVAL(XWBIEN),U,2)
  1. .. ;
  1. .. ;Pull field value
  1. .. S X=$P(BUSADVAL(XWBIEN),U,PIECE)
  1. .. ;
  1. .. ;Call executable
  1. .. I $G(EXE)]"" X EXE
  1. .. ;
  1. .. ;Save value
  1. .. I $G(X)]"" S $P(BUSADVAL(XWBIEN),U,PIECE)=X
  1. ;
  1. ;Single record output
  1. ;
  1. NEW X,DFN,VIEN
  1. ;
  1. ;Pull DFN/VIEN so they can be used (if populated)
  1. S DFN=$P($G(BUSADVAL(1)),U) I PIECE>2,DFN="" Q
  1. S VIEN=$P($G(BUSADVAL(1)),U,2)
  1. ;
  1. ;Now populate correct piece
  1. S X=$G(BUSAOVAL) S:X="" X=$G(BUSAOVAL(1))
  1. I $G(EXE)]"" X EXE
  1. I $G(X)]"" S $P(BUSADVAL(1),U,PIECE)=X
  1. ;
  1. ;If VIEN piece - check if DFN needs filled in
  1. I PIECE'=2 Q
  1. ;
  1. ;Quit if already populated
  1. I DFN]"" Q
  1. ;
  1. ;Plug in DFN
  1. S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. I DFN]"" S $P(BUSADVAL(1),U)=DFN
  1. ;
  1. Q
  1. ;
  1. CFILE(BUSAOVAL,BUSADVAL,PIECE,EXE,MULT,MINP) ;EP - Format and file CIA data detail array
  1. ;
  1. ;Multiple input filing
  1. I $G(MINP)=1 D Q
  1. . ;
  1. . ;DFN/VIEN pieces already processed
  1. . I (PIECE=1)!(PIECE=2) Q
  1. . ;
  1. . NEW BMXIEN
  1. . ;
  1. . S BMXIEN=0 F S BMXIEN=$O(BUSADVAL(BMXIEN)) Q:BMXIEN="" D
  1. .. ;
  1. .. NEW X,DFN,VIEN
  1. .. ;
  1. .. ;Pull populated values
  1. .. S DFN=$P(BUSADVAL(BMXIEN),U) I PIECE>2,DFN="" Q
  1. .. S VIEN=$P(BUSADVAL(BMXIEN),U,2)
  1. .. ;
  1. .. ;Pull field value
  1. .. S X=$P(BUSADVAL(BMXIEN),U,PIECE)
  1. .. ;
  1. .. ;Call executable
  1. .. I $G(EXE)]"" X EXE
  1. .. ;
  1. .. ;Save value
  1. .. I $G(X)]"" S $P(BUSADVAL(BMXIEN),U,PIECE)=X
  1. ;
  1. ;Single return value
  1. ;
  1. I (XWBPTYPE=1)!(XWBPTYPE=5)!'MULT D Q
  1. . ;
  1. . NEW X,DFN,VIEN
  1. . ;
  1. . ;Pull DFN/VIEN so they can be used (if populated)
  1. . S DFN=$P($G(BUSADVAL(1)),U) I PIECE>2,DFN="" Q
  1. . S VIEN=$P($G(BUSADVAL(1)),U,2)
  1. . ;
  1. . ;Now populate correct piece
  1. . S X=$G(BUSAOVAL) S:X="" X=$G(BUSAOVAL(1))
  1. . I $G(EXE)]"" X EXE
  1. . I $G(X)]"" S $P(BUSADVAL(1),U,PIECE)=X
  1. . ;
  1. . ;If VIEN piece - check if DFN needs filled in
  1. . I PIECE'=2 Q
  1. . ;
  1. . ;Quite if already populated
  1. . I DFN]"" Q
  1. . ;
  1. . ;Plug in DFN
  1. . S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. . I DFN]"" S $P(BUSADVAL(1),U)=DFN
  1. ;
  1. ;Multiple return values
  1. ;Handle Array, Word Processing, Global Array Types
  1. I XWBPTYPE=2 D CLOOP("CIAD",.BUSAOVAL,.BUSADVAL)
  1. I XWBPTYPE=3 D CLOOP("CIAD",.BUSAOVAL,.BUSADVAL)
  1. I XWBPTYPE=4 D CLOOP(CIAD,.BUSAOVAL,.BUSADVAL)
  1. Q
  1. ;
  1. ;Loop through output and fill in piece
  1. CLOOP(ARY,BUSAOVAL,BUSADVAL) ;
  1. NEW CL,L,K,II
  1. S K=$E(ARY)'="~"
  1. S:'K ARY=$E(ARY,2,999)
  1. Q:'$L(ARY)
  1. S ARY=$NA(@ARY)
  1. S CL=ARY,L=$QL(ARY)
  1. F S CL=$Q(@CL) Q:'$L(CL) Q:$NA(@CL,L)'=ARY D
  1. . ;
  1. . NEW X,DFN,VIEN
  1. . S II=$G(II)+1
  1. . ;
  1. . ;Pull DFN/VIEN so they can be used (if populated)
  1. . S DFN=$P($G(BUSADVAL(II)),U) I PIECE>2,DFN="" Q
  1. . S VIEN=$P($G(BUSADVAL(II)),U,2)
  1. . ;
  1. . ;Pull field value
  1. . S X=$S($G(BUSAOVAL)]"":BUSAOVAL,1:$G(BUSAOVAL(II)))
  1. . ;
  1. . ;Call executable
  1. . I $G(EXE)]"" X EXE
  1. . ;
  1. . ;Save value
  1. . I $G(X)]"" S $P(BUSADVAL(II),U,PIECE)=X
  1. . ;
  1. . ;If VIEN piece - check if DFN needs filled in
  1. . I PIECE'=2 Q
  1. . ;
  1. . ;Quit if already populated
  1. . I DFN]"" Q
  1. . ;
  1. . ;Plug in DFN
  1. . S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. . I DFN]"" S $P(BUSADVAL(II),U)=DFN
  1. ;
  1. Q
  1. ;
  1. PNLNAME(USER,PIEN) ;EP - Return the iCare panel name
  1. ;
  1. NEW DA,IENS
  1. ;
  1. S USER=$G(USER),PIEN=$G(PIEN)
  1. ;
  1. I USER=""!(PIEN="") Q ""
  1. ;
  1. S DA(1)=USER,DA=PIEN,IENS=$$IENS^DILF(.DA)
  1. Q $$GET1^DIQ(90505.01,IENS,".01","I")
  1. ;
  1. VFETCH(X,DESC) ;EP - Return the visit information
  1. ;
  1. ;Fetch existing visit
  1. S X=$P(X,";",4) Q:X]"" X
  1. ;
  1. ;Visit stub
  1. S X=$$SOUTPUT^BUSAUTIL(6)
  1. I X="" S DESC="EHR: Created new visit stub" Q ""
  1. ;
  1. ;New visit
  1. S DESC="EHR: Created new visit"
  1. Q X
  1. ;
  1. WRAP(OUT,TEXT,RM,IND) ;EP - Wrap the text and insert in array
  1. ;
  1. NEW SP
  1. ;
  1. I $G(TEXT)="" S OUT(1)="" Q
  1. I $G(RM)="" Q
  1. I $G(IND)="" S IND=0
  1. S $P(SP," ",80)=" "
  1. ;
  1. ;Strip out $c(10)
  1. S TEXT=$TR(TEXT,$C(10))
  1. ;
  1. F I $L(TEXT)>0 D Q:$L(TEXT)=0
  1. . NEW PIECE,SPACE,LINE
  1. . S PIECE=$E(TEXT,1,RM)
  1. . ;
  1. . ;Check if line is less than right margin
  1. . I $L(PIECE)<RM S OUT=$G(OUT)+1,OUT(OUT)=PIECE,TEXT="" Q
  1. . ;
  1. . ;Locate last space in line and handle if no space
  1. . F SPACE=$L(PIECE):-1:(IND+1) I $E(PIECE,SPACE)=" " Q
  1. . I (SPACE=(IND+1)) D S:TEXT]"" TEXT=$E(SP,1,IND)_TEXT Q
  1. .. S LINE=PIECE,OUT=$G(OUT)+1,OUT(OUT)=LINE,TEXT=$$STZ($E(TEXT,RM+1,999999999))
  1. . ;
  1. . ;Handle line with space
  1. . S LINE=$E(PIECE,1,SPACE-1),OUT=$G(OUT)+1,OUT(OUT)=LINE,TEXT=$$STZ($E(TEXT,SPACE+1,999999999))
  1. . S:TEXT]"" TEXT=$E(SP,1,IND)_TEXT
  1. ;
  1. Q
  1. ;
  1. STZ(TEXT) ;EP - Strip Leading Spaces
  1. NEW START
  1. F START=1:1:$L(TEXT) I $E(TEXT,START)'=" " Q
  1. Q $E(TEXT,START,9999999999)
  1. ;
  1. SEND(BUSAIEN,BUSAXPDA) ;EP - Determine whether to include RPC in KIDS build
  1. ;
  1. ;This function is call by code placed in the 'Screen to Select Data' field
  1. ;in the KIDS File List/Data Export Option
  1. ;
  1. ;Check for needed values
  1. I '$G(BUSAIEN) Q 0
  1. I '$G(BUSAXPDA) Q 0
  1. ;
  1. NEW TIEN,BIEN
  1. ;
  1. ;First look for RPC in BUSA RPC TRANSPORT LIST
  1. S TIEN=$O(^BUSATR("B",BUSAIEN,"")) Q:TIEN="" 0
  1. ;
  1. ;Now see if in build
  1. S BIEN=$O(^BUSATR(TIEN,1,"B",BUSAXPDA,"")) Q:BIEN="" 0
  1. ;
  1. ;Send in build
  1. Q 1
  1. ;
  1. MINP(BUSALIST,BUSADLM,BUSATYPE,BUSAEXE,BUSADVAL) ;EP - Process Multiple input DFN/VIEN
  1. ;
  1. ;Updates the detail BUSADVAL array
  1. ;
  1. ;Input variables:
  1. ;BUSALIST - Variable containing list of DFNs/VIENs
  1. ;BUSADLM - The list delimiter, in quotes, ex. "^",";","$C(28)",use "U" for "^"
  1. ;BUSATYPE - "D" for DFN list, "V" for VIEN list
  1. ;BUSAEXE - Field executable code
  1. ;BUSADVAL - Array to update
  1. ;
  1. ;Input validation
  1. I $G(BUSALIST)="" Q
  1. I $G(BUSADLM)="" Q
  1. I $G(BUSATYPE)="" Q
  1. ;
  1. NEW PIECE,DETPC,DTCNT,DLM,X
  1. ;
  1. ;Format delimiter
  1. S DLM=$S(BUSADLM="U":"^",BUSADLM["$C(":$C($P($P(BUSADLM,"(",2),")")),1:BUSADLM)
  1. ;
  1. ;Determine piece to save
  1. S DETPC=$S(BUSATYPE="D":1,BUSATYPE="V":2,1:"") Q:DETPC=""
  1. ;
  1. ;Loop through list and save entry for each
  1. S DTCNT=0 F PIECE=1:1:$L(BUSALIST,DLM) S X=$P(BUSALIST,DLM,PIECE) D
  1. . NEW DFN
  1. . ;
  1. . ;Run executable code
  1. . I $G(BUSAEXE)]"" X BUSAEXE
  1. . ;
  1. . ;Quit if no value
  1. . I X="" Q
  1. . ;
  1. . ;Value defined - save entry
  1. . S DTCNT=DTCNT+1
  1. . S $P(BUSADVAL(DTCNT),U,DETPC)=X
  1. . ;
  1. . ;On type VIEN, check if DFN needed
  1. . Q:BUSATYPE="D"
  1. . ;
  1. . ;Quit if populated
  1. . I $P(BUSADVAL(DTCNT),U)]"" Q
  1. . ;
  1. . ;Plug in DFN
  1. . S DFN=$$GET1^DIQ(9000010,X_",",".05","I")
  1. . S $P(BUSADVAL(DTCNT),U)=DFN
  1. ;
  1. Q
  1. ;
  1. CHECKAV(BUSAAV) ;EP - Authenticate AC/VC and Return DUZ
  1. ;
  1. ; Input: BUSAAV - ACCESS CODE_";"_VERIFY CODE
  1. ; Output: DUZ value
  1. ;
  1. N BUSADUZ,XUF
  1. ;
  1. S:$G(U)="" U="^"
  1. S:$G(DT)="" DT=$$DT^XLFDT
  1. ;
  1. S XUF=0
  1. S BUSADUZ=$$CHECKAV^XUS(BUSAAV)
  1. I BUSADUZ=0 Q 0
  1. ;
  1. ;Return DUZ if user inactive
  1. I (+$P($G(^VA(200,BUSADUZ,0)),U,11)'>0)!(+$P($G(^VA(200,BUSADUZ,0)),U,11)'<DT) Q BUSADUZ
  1. Q 0
  1. ;
  1. AUTH(BUSADUZ) ;EP - Authenticate User for BUSA REPORT Access
  1. ;
  1. ; Input: BUSADUZ - User's DUZ value
  1. ; Output: 0 - No Authorized/1 - Authorized
  1. ;
  1. N BUSAKEY
  1. ;
  1. S:$G(U)="" U="^"
  1. ;
  1. I $G(BUSADUZ)<1 Q 0
  1. S BUSAKEY=$O(^DIC(19.1,"B","BUSAZRPT","")) I BUSAKEY="" Q 0
  1. I '$D(^VA(200,"AB",BUSAKEY,BUSADUZ,BUSAKEY)) Q 0
  1. Q 1