MAGVAKL1 ;WOIFO/NST - Key List File Utilities ; 20 Feb 2012 3:56 PM
;;3.0;IMAGING;**118**;Mar 19, 2002;Build 4525;May 01, 2013
;; Per VHA Directive 2004-038, this routine should not be modified.
;; +---------------------------------------------------------------+
;; | Property of the US Government. |
;; | No permission to copy or redistribute this software is given. |
;; | Use of unreleased versions of this software requires the user |
;; | to execute a written test agreement with the VistA Imaging |
;; | Development Office of the Department of Veterans Affairs, |
;; | telephone (301) 734-0100. |
;; | The Food and Drug Administration classifies this software as |
;; | a medical device. As such, it may not be changed in any way. |
;; | Modifications to this software may result in an adulterated |
;; | medical device under 21CFR820, the use of which is considered |
;; | to be a violation of US Federal Statutes. |
;; +---------------------------------------------------------------+
;;
Q
;
;***** Return a KEY IEN that meets the keys provided
;
; Input parameters
; ================
; KLIST(1) = First level Key
; KLIST(2) = Second level Key
; ...
; KLIST(N) = N-th level Key
; The assumption is that we will get the full keys list
; so we should find only one KEY IEN or we will not find any
;
; Return Value
; ============
;
; if no key list IEN found returns 0
; if key list found returns IEN of the ARTIFACT KEYLIST file (#2006.913) record
;
GETKLIEN(KLIST) ;
N RES
D FINDKEYS^MAGVAKL1(.RES,.KLIST)
I '$$ISOK^MAGVAF02(RES(0)) Q 0 ; Error found
Q $O(RES(0)) ; get the IEN. It should be only one IEN
;
;***** Return a key list IEN that meet the keys provided
; It creates a new record in ARTIFACT KEYLIST file (#2006.913) if the key list is not found
;
; Input parameters
; ================
; KLIST(1) = First level Key
; KLIST(2) = Second level Key
; ...
; KLIST(N) = N-th level Key
; The assumption is that we will get the full keys list
; so we should find only one KEY IEN or we will not find any
;
; Return Values
; =============
;
; if error MAGRY = Failure status^Error message
; if success MAGRY = Success status^^IEN of the record in ARTIFACT KEYLIST file (#2006.913)
;
GETKLFK(MAGRY,KLIST) ;
; if KLIST is empty just return success and set the IEN to ""
; Key list is optional in ARTIFACT file (#2006.916) that's why empty key list is OK
; ADDKL^MAGVAKL1 reports error if KLIST is empty
K MAGRY
I $O(KLIST(""))="" S MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_"" Q
; try to find or create a new key list record
D ADDKL^MAGVAKL1(.MAGRY,.KLIST)
Q
;
;***** Return a list with all keys IENS in ARTIFACT KEYLIST file (#2006.913)
; that meet the keys provided
;
; RPC: MAGVA FIND KEYLIST
;
; Input Parameters
; ===============
; KLIST(1) = First Key
; KLIST(2) = Second Key
; ...
; KLIST(N) = N-th Key
;
; Return Values
; =============
; if error MAGRY(0) = Failure status ^ Error message^
; if success MAGRY(0) = Success status
; MAGRY(n) = IEN of the record in ARTIFACT KEYLIST file (#2006.913) that matches the request
; n same as IEN
;
FINDKEYS(MAGRY,KLIST) ; RPC [MAGVA FIND KEYLIST]
N KEY,KEYSIEN,COUNT,LEVEL,FOUND
K MAGRY
; Search for keys using IDXKEYS index by DEPTH and KEY.
; Store the KEYIEN into array and count the number
; of hits by KEYSIEN
S COUNT=0 ; How many individual KEYS are requested
S LEVEL=""
F S LEVEL=$O(KLIST(LEVEL)) Q:LEVEL="" D
. S KEY=KLIST(LEVEL)
. S COUNT=COUNT+1
. S KEYSIEN=""
. F S KEYSIEN=$O(^MAGV(2006.913,"IDXKEYS",LEVEL,KEY,KEYSIEN)) Q:KEYSIEN="" D
. . S FOUND(KEYSIEN)=$G(FOUND(KEYSIEN))+1
. . Q
. Q
; Check for any KEYSIEN that has as many hits as requested number of keys
S KEYSIEN=""
F S KEYSIEN=$O(FOUND(KEYSIEN)) Q:KEYSIEN="" D
. I FOUND(KEYSIEN)=COUNT S MAGRY(KEYSIEN)=KEYSIEN
. Q
S MAGRY(0)=$$OK^MAGVAF02()
Q
;
;***** Add new KEY PAIRS to ARTIFACT KEYLIST file (#2006.913)
; RPC: MAGVA ADD KEYLIST
;
; Input Parameters
; ================
; KLIST(1) = First level Key
; KLIST(2) = Second level Key
; ...
; KLIST(N) = N-th level Key
;
; Return Values
; =============
; if error MAGRY = Failure status^Error
; if success MAGRY = Success status^^IEN - IEN of the added record
;
ADDKL(MAGRY,KLIST) ; RPC [MAGVA ADD KEYLIST]
;
K MAGRY
; Quit error if key list is empty
I $O(KLIST(""))="" S MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"KEYLIST is empty" Q
;
N DEPTH,I,IENS,IEN,MAGDA,MAGNFDA,MAGNIEN,MAGNXE,ERR
S IEN=+$$GETKLIEN^MAGVAKL1(.KLIST)
I IEN S MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_IEN Q ; The Key list is already on file
; The Key List is not found. Add a new record to save all values
S I=""
S DEPTH=0
F S I=$O(KLIST(I)) Q:I="" S DEPTH=DEPTH+1
;
S MAGNFDA(2006.913,"+1,",.01)=DEPTH
D UPDATE^DIE("","MAGNFDA","MAGNIEN","MAGNXE")
I $D(MAGNXE("DIERR","E")) S MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error adding a key list" Q
;
S MAGDA=MAGNIEN(1)
S IENS="+1,"_MAGDA_","
S ERR=0
S I=""
F S I=$O(KLIST(I)) Q:I="" D Q:ERR
. K MAGNFDA,MAGNIEN,MAGNXE
. S MAGNFDA(2006.9132,IENS,.01)=KLIST(I)
. S MAGNFDA(2006.9132,IENS,2)=I
. D UPDATE^DIE("","MAGNFDA","MAGNIEN","MAGNXE")
. I $D(MAGNXE("DIERR","E")) D
. . N DIK,DA
. . S ERR=1
. . S MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error adding a new key pair."
. . ; clean up data
. . S DA=MAGDA
. . S DIK=$$GETFILGL^MAGVAF01(2006.913)
. . D ^DIK
. . Q
. Q
I ERR Q ; Exit the routine. MAGRY is set already
S MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_MAGDA
Q
;
;***** Returns a key list by IEN in ARTIFACT KEYLIST file (#2006.913)
; RPC: MAGVA GET KEYLIST
;
; Input Parameters
; ================
; MAGDA = IEN in ARTIFACT KEYLIST file (#2006.913)
;
; Return Values
; =============
; if error MAGRY(0) = Failure status^Error message
; if success
; MAGRY(0) = Success status^^Number of key list depth
; MAGRY(1) = Level one Key
; MAGRY(2) = Level two Key
; ...
; MAGRY(N) = Level N-th Key
;
GETKL(MAGRY,MAGDA) ; RPC [MAGVA GET KEYLIST]
N OUT,ERR,MAGRESA
N I,CNT,X
K MAGRY
; --- .01 KLEVEL; 2 KVALUE
D LIST^DIC(2006.9132,","_MAGDA_",","@;.01;2","P","","","","","","","OUT","ERR")
I $D(ERR("DIERR")) D Q
. D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
. S MAGRY(0)=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error getting the list: "_MAGRESA(1) Q ; Error getting the list
S I=0
S CNT=0
F S I=$O(OUT("DILIST",I)) Q:'+I D
. S X=OUT("DILIST",I,0)
. S CNT=CNT+1
. S MAGRY($P(X,"^",3))=$P(X,"^",2)
. Q
S MAGRY(0)=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_CNT
Q
;
;***** Delete a record in ARTIFACT KEYLIST file (#2006.913) by IEN
; RPC: MAGVA DELETE KEYLIST
;
; Input Parameters
; ================
; MAGDA = IEN in ARTIFACT KEYLIST file (#2006.913)
;
; Return Values
; =============
; if error MAGRY = Failure status ^ Error message^
; if success MAGRY = Success status
;
DELKL(MAGRY,MAGDA) ; RPC [MAGVA DELETE KEYLIST]
N DIK,DA
S DA=MAGDA
S DIK=$$GETFILGL^MAGVAF01(2006.913)
D ^DIK
S MAGRY=$$OK^MAGVAF02()
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGVAKL1 7559 printed Oct 16, 2024@18:10:07 Page 2
MAGVAKL1 ;WOIFO/NST - Key List File Utilities ; 20 Feb 2012 3:56 PM
+1 ;;3.0;IMAGING;**118**;Mar 19, 2002;Build 4525;May 01, 2013
+2 ;; Per VHA Directive 2004-038, this routine should not be modified.
+3 ;; +---------------------------------------------------------------+
+4 ;; | Property of the US Government. |
+5 ;; | No permission to copy or redistribute this software is given. |
+6 ;; | Use of unreleased versions of this software requires the user |
+7 ;; | to execute a written test agreement with the VistA Imaging |
+8 ;; | Development Office of the Department of Veterans Affairs, |
+9 ;; | telephone (301) 734-0100. |
+10 ;; | The Food and Drug Administration classifies this software as |
+11 ;; | a medical device. As such, it may not be changed in any way. |
+12 ;; | Modifications to this software may result in an adulterated |
+13 ;; | medical device under 21CFR820, the use of which is considered |
+14 ;; | to be a violation of US Federal Statutes. |
+15 ;; +---------------------------------------------------------------+
+16 ;;
+17 QUIT
+18 ;
+19 ;***** Return a KEY IEN that meets the keys provided
+20 ;
+21 ; Input parameters
+22 ; ================
+23 ; KLIST(1) = First level Key
+24 ; KLIST(2) = Second level Key
+25 ; ...
+26 ; KLIST(N) = N-th level Key
+27 ; The assumption is that we will get the full keys list
+28 ; so we should find only one KEY IEN or we will not find any
+29 ;
+30 ; Return Value
+31 ; ============
+32 ;
+33 ; if no key list IEN found returns 0
+34 ; if key list found returns IEN of the ARTIFACT KEYLIST file (#2006.913) record
+35 ;
GETKLIEN(KLIST) ;
+1 NEW RES
+2 DO FINDKEYS^MAGVAKL1(.RES,.KLIST)
+3 ; Error found
IF '$$ISOK^MAGVAF02(RES(0))
QUIT 0
+4 ; get the IEN. It should be only one IEN
QUIT $ORDER(RES(0))
+5 ;
+6 ;***** Return a key list IEN that meet the keys provided
+7 ; It creates a new record in ARTIFACT KEYLIST file (#2006.913) if the key list is not found
+8 ;
+9 ; Input parameters
+10 ; ================
+11 ; KLIST(1) = First level Key
+12 ; KLIST(2) = Second level Key
+13 ; ...
+14 ; KLIST(N) = N-th level Key
+15 ; The assumption is that we will get the full keys list
+16 ; so we should find only one KEY IEN or we will not find any
+17 ;
+18 ; Return Values
+19 ; =============
+20 ;
+21 ; if error MAGRY = Failure status^Error message
+22 ; if success MAGRY = Success status^^IEN of the record in ARTIFACT KEYLIST file (#2006.913)
+23 ;
GETKLFK(MAGRY,KLIST) ;
+1 ; if KLIST is empty just return success and set the IEN to ""
+2 ; Key list is optional in ARTIFACT file (#2006.916) that's why empty key list is OK
+3 ; ADDKL^MAGVAKL1 reports error if KLIST is empty
+4 KILL MAGRY
+5 IF $ORDER(KLIST(""))=""
SET MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_""
QUIT
+6 ; try to find or create a new key list record
+7 DO ADDKL^MAGVAKL1(.MAGRY,.KLIST)
+8 QUIT
+9 ;
+10 ;***** Return a list with all keys IENS in ARTIFACT KEYLIST file (#2006.913)
+11 ; that meet the keys provided
+12 ;
+13 ; RPC: MAGVA FIND KEYLIST
+14 ;
+15 ; Input Parameters
+16 ; ===============
+17 ; KLIST(1) = First Key
+18 ; KLIST(2) = Second Key
+19 ; ...
+20 ; KLIST(N) = N-th Key
+21 ;
+22 ; Return Values
+23 ; =============
+24 ; if error MAGRY(0) = Failure status ^ Error message^
+25 ; if success MAGRY(0) = Success status
+26 ; MAGRY(n) = IEN of the record in ARTIFACT KEYLIST file (#2006.913) that matches the request
+27 ; n same as IEN
+28 ;
FINDKEYS(MAGRY,KLIST) ; RPC [MAGVA FIND KEYLIST]
+1 NEW KEY,KEYSIEN,COUNT,LEVEL,FOUND
+2 KILL MAGRY
+3 ; Search for keys using IDXKEYS index by DEPTH and KEY.
+4 ; Store the KEYIEN into array and count the number
+5 ; of hits by KEYSIEN
+6 ; How many individual KEYS are requested
SET COUNT=0
+7 SET LEVEL=""
+8 FOR
SET LEVEL=$ORDER(KLIST(LEVEL))
if LEVEL=""
QUIT
Begin DoDot:1
+9 SET KEY=KLIST(LEVEL)
+10 SET COUNT=COUNT+1
+11 SET KEYSIEN=""
+12 FOR
SET KEYSIEN=$ORDER(^MAGV(2006.913,"IDXKEYS",LEVEL,KEY,KEYSIEN))
if KEYSIEN=""
QUIT
Begin DoDot:2
+13 SET FOUND(KEYSIEN)=$GET(FOUND(KEYSIEN))+1
+14 QUIT
End DoDot:2
+15 QUIT
End DoDot:1
+16 ; Check for any KEYSIEN that has as many hits as requested number of keys
+17 SET KEYSIEN=""
+18 FOR
SET KEYSIEN=$ORDER(FOUND(KEYSIEN))
if KEYSIEN=""
QUIT
Begin DoDot:1
+19 IF FOUND(KEYSIEN)=COUNT
SET MAGRY(KEYSIEN)=KEYSIEN
+20 QUIT
End DoDot:1
+21 SET MAGRY(0)=$$OK^MAGVAF02()
+22 QUIT
+23 ;
+24 ;***** Add new KEY PAIRS to ARTIFACT KEYLIST file (#2006.913)
+25 ; RPC: MAGVA ADD KEYLIST
+26 ;
+27 ; Input Parameters
+28 ; ================
+29 ; KLIST(1) = First level Key
+30 ; KLIST(2) = Second level Key
+31 ; ...
+32 ; KLIST(N) = N-th level Key
+33 ;
+34 ; Return Values
+35 ; =============
+36 ; if error MAGRY = Failure status^Error
+37 ; if success MAGRY = Success status^^IEN - IEN of the added record
+38 ;
ADDKL(MAGRY,KLIST) ; RPC [MAGVA ADD KEYLIST]
+1 ;
+2 KILL MAGRY
+3 ; Quit error if key list is empty
+4 IF $ORDER(KLIST(""))=""
SET MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"KEYLIST is empty"
QUIT
+5 ;
+6 NEW DEPTH,I,IENS,IEN,MAGDA,MAGNFDA,MAGNIEN,MAGNXE,ERR
+7 SET IEN=+$$GETKLIEN^MAGVAKL1(.KLIST)
+8 ; The Key list is already on file
IF IEN
SET MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_IEN
QUIT
+9 ; The Key List is not found. Add a new record to save all values
+10 SET I=""
+11 SET DEPTH=0
+12 FOR
SET I=$ORDER(KLIST(I))
if I=""
QUIT
SET DEPTH=DEPTH+1
+13 ;
+14 SET MAGNFDA(2006.913,"+1,",.01)=DEPTH
+15 DO UPDATE^DIE("","MAGNFDA","MAGNIEN","MAGNXE")
+16 IF $DATA(MAGNXE("DIERR","E"))
SET MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error adding a key list"
QUIT
+17 ;
+18 SET MAGDA=MAGNIEN(1)
+19 SET IENS="+1,"_MAGDA_","
+20 SET ERR=0
+21 SET I=""
+22 FOR
SET I=$ORDER(KLIST(I))
if I=""
QUIT
Begin DoDot:1
+23 KILL MAGNFDA,MAGNIEN,MAGNXE
+24 SET MAGNFDA(2006.9132,IENS,.01)=KLIST(I)
+25 SET MAGNFDA(2006.9132,IENS,2)=I
+26 DO UPDATE^DIE("","MAGNFDA","MAGNIEN","MAGNXE")
+27 IF $DATA(MAGNXE("DIERR","E"))
Begin DoDot:2
+28 NEW DIK,DA
+29 SET ERR=1
+30 SET MAGRY=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error adding a new key pair."
+31 ; clean up data
+32 SET DA=MAGDA
+33 SET DIK=$$GETFILGL^MAGVAF01(2006.913)
+34 DO ^DIK
+35 QUIT
End DoDot:2
+36 QUIT
End DoDot:1
if ERR
QUIT
+37 ; Exit the routine. MAGRY is set already
IF ERR
QUIT
+38 SET MAGRY=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_MAGDA
+39 QUIT
+40 ;
+41 ;***** Returns a key list by IEN in ARTIFACT KEYLIST file (#2006.913)
+42 ; RPC: MAGVA GET KEYLIST
+43 ;
+44 ; Input Parameters
+45 ; ================
+46 ; MAGDA = IEN in ARTIFACT KEYLIST file (#2006.913)
+47 ;
+48 ; Return Values
+49 ; =============
+50 ; if error MAGRY(0) = Failure status^Error message
+51 ; if success
+52 ; MAGRY(0) = Success status^^Number of key list depth
+53 ; MAGRY(1) = Level one Key
+54 ; MAGRY(2) = Level two Key
+55 ; ...
+56 ; MAGRY(N) = Level N-th Key
+57 ;
GETKL(MAGRY,MAGDA) ; RPC [MAGVA GET KEYLIST]
+1 NEW OUT,ERR,MAGRESA
+2 NEW I,CNT,X
+3 KILL MAGRY
+4 ; --- .01 KLEVEL; 2 KVALUE
+5 DO LIST^DIC(2006.9132,","_MAGDA_",","@;.01;2","P","","","","","","","OUT","ERR")
+6 IF $DATA(ERR("DIERR"))
Begin DoDot:1
+7 DO MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
+8 ; Error getting the list
SET MAGRY(0)=$$FAILED^MAGVAF02()_$$RESDEL^MAGVAF02()_"Error getting the list: "_MAGRESA(1)
QUIT
End DoDot:1
QUIT
+9 SET I=0
+10 SET CNT=0
+11 FOR
SET I=$ORDER(OUT("DILIST",I))
if '+I
QUIT
Begin DoDot:1
+12 SET X=OUT("DILIST",I,0)
+13 SET CNT=CNT+1
+14 SET MAGRY($PIECE(X,"^",3))=$PIECE(X,"^",2)
+15 QUIT
End DoDot:1
+16 SET MAGRY(0)=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_CNT
+17 QUIT
+18 ;
+19 ;***** Delete a record in ARTIFACT KEYLIST file (#2006.913) by IEN
+20 ; RPC: MAGVA DELETE KEYLIST
+21 ;
+22 ; Input Parameters
+23 ; ================
+24 ; MAGDA = IEN in ARTIFACT KEYLIST file (#2006.913)
+25 ;
+26 ; Return Values
+27 ; =============
+28 ; if error MAGRY = Failure status ^ Error message^
+29 ; if success MAGRY = Success status
+30 ;
DELKL(MAGRY,MAGDA) ; RPC [MAGVA DELETE KEYLIST]
+1 NEW DIK,DA
+2 SET DA=MAGDA
+3 SET DIK=$$GETFILGL^MAGVAF01(2006.913)
+4 DO ^DIK
+5 SET MAGRY=$$OK^MAGVAF02()
+6 QUIT