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

MAGVAF03.m

Go to the documentation of this file.
  1. MAGVAF03 ;WOIFO/NST/BT - Utilities for RPC calls ; 15 May 2012 9:15 AM
  1. ;;3.0;IMAGING;**118**;Mar 19, 2002;Build 4525;May 01, 2013
  1. ;; Per VHA Directive 2004-038, this routine should not be modified.
  1. ;; +---------------------------------------------------------------+
  1. ;; | Property of the US Government. |
  1. ;; | No permission to copy or redistribute this software is given. |
  1. ;; | Use of unreleased versions of this software requires the user |
  1. ;; | to execute a written test agreement with the VistA Imaging |
  1. ;; | Development Office of the Department of Veterans Affairs, |
  1. ;; | telephone (301) 734-0100. |
  1. ;; | The Food and Drug Administration classifies this software as |
  1. ;; | a medical device. As such, it may not be changed in any way. |
  1. ;; | Modifications to this software may result in an adulterated |
  1. ;; | medical device under 21CFR820, the use of which is considered |
  1. ;; | to be a violation of US Federal Statutes. |
  1. ;; +---------------------------------------------------------------+
  1. ;;
  1. Q
  1. ;
  1. ;***** Returns all records for a file in list format
  1. ; Input Parameters
  1. ; ================
  1. ;
  1. ; FILE - FileMan file number ( example 2006.917)
  1. ; IENS - (Optional) Identify which records in a subfile to list. (example IENS = ",67,"
  1. ;
  1. ; Return values
  1. ; =============
  1. ;
  1. ; if error found during execution
  1. ; MAGRY(0) = Failure status ^ Error getting the list
  1. ; if success
  1. ; MAGRY(0) = "Success status ^^#CNT" - where #CNT is a number of records returned
  1. ; MAGRY(1) = "^" delimited string with all field names in FILE
  1. ; MAGRY(2..n) = "^" delimited string with values of fields listed in MAGRY(1)
  1. ;
  1. GALLLST(MAGRY,FILE,IENS) ;
  1. N OUT,ERR,MAGRESA
  1. N J,I,CNT,X,FIELDS,FLDSARR,FLDSARRW
  1. N RESDEL
  1. N IRECCNT ;Record count for internal values
  1. N ERECCNT ;Record count for external values
  1. K MAGRY
  1. S RESDEL=$$RESDEL^MAGVAF02() ; Result delimiter
  1. S FIELDS=$$GETFLDS^MAGVAF01(.FLDSARR,.FLDSARRW,FILE,"")
  1. ;
  1. ; Retrieve all external values to check for valid pointer or referential integrity problems
  1. D LIST^DIC(FILE,IENS,"@;"_FIELDS,"","","","","","","","OUT","ERR")
  1. I $D(ERR("DIERR")) D Q ; Error getting the list with external values
  1. . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting the list: "_MAGRESA(1)
  1. . Q
  1. S ERECCNT=$P($G(OUT("DILIST","0")),"^",1)
  1. ;
  1. ; Retrieve all Internal values to return to the caller
  1. K OUT,ERR
  1. D LIST^DIC(FILE,IENS,"@;"_FIELDS,"I","","","","","","","OUT","ERR")
  1. I $D(ERR("DIERR")) D Q ; Error getting the list with internal values
  1. . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting the list: "_MAGRESA(1)
  1. . Q
  1. S IRECCNT=$P($G(OUT("DILIST","0")),"^",1)
  1. ;
  1. I IRECCNT'=ERECCNT D Q
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting the list: File #"_FILE_" has cross reference problem" Q
  1. ;
  1. S CNT=1
  1. S I=""
  1. F S I=$O(OUT("DILIST","ID",I)) Q:I="" D
  1. . S CNT=CNT+1
  1. . S $P(MAGRY(CNT),"^",1)=OUT("DILIST",2,I)
  1. . F J=1:1:$L(FIELDS,";") D
  1. . . S X=OUT("DILIST","ID",I,$P(FIELDS,";",J))
  1. . . I $$ISFLDDT^MAGVAF01(FILE,$P(FIELDS,";",J)) S X=$$FM2IDF^MAGVAF01(X) ; the field is Date type - convert to IDF format
  1. . . S $P(MAGRY(CNT),RESDEL,J+1)=X
  1. . . Q
  1. . Q
  1. ;
  1. S MAGRY(0)=$$OK^MAGVAF02()_RESDEL_RESDEL_(CNT-1)
  1. S MAGRY(1)="IEN"
  1. S I=""
  1. F S I=$O(FLDSARR(I)) Q:I="" S MAGRY(1)=MAGRY(1)_RESDEL_FLDSARR(I)
  1. Q
  1. ;***** Returns all records for a file in XML format
  1. ; Input Parameters
  1. ; ================
  1. ;
  1. ; FILE - FileMan file number ( example 2006.917)
  1. ; IENS - (Optional) Identify which subfile to list. (example IENS = ",67,"
  1. ;
  1. ; if error found during execution
  1. ; MAGRY(0) = "Failure status ^Error getting the list"
  1. ; if success
  1. ; MAGRY(0) = Success status ^^Total of lines
  1. ; MAGRY(1) = <file name + "s">
  1. ; MAGRY(2) = <file name>
  1. ; MAGRY(2..m) = <field name=value>
  1. ; MAGRY(n+1) = </ file name >
  1. ; ...
  1. ; MAGRY(n+2) = </ file name + "s">
  1. ;
  1. GALLXML(MAGRY,FILE,IENS) ;
  1. N OUT,ERR,MAGRESA
  1. N I,J,L,CNT,X,Y,WP,WPTYPE,QT,RESDEL
  1. N FILENM,FIELDS,FLDSARR,FLDSARRW
  1. K MAGRY
  1. S QT=$C(34)
  1. S RESDEL=$$RESDEL^MAGVAF02()
  1. S FIELDS=$$GETFLDS^MAGVAF01(.FLDSARR,.FLDSARRW,FILE,"") ; Get fields
  1. D LIST^DIC(FILE,IENS,"@;"_FIELDS,"I","","","","","","","OUT","ERR")
  1. I $D(ERR("DIERR")) D Q
  1. . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting the list: "_MAGRESA(1) Q ; Error getting the list
  1. S FILENM=$TR($$GETFILNM^MAGVAF01(FILE)," ") ; file name without blanks
  1. S CNT=0
  1. S CNT=CNT+1,MAGRY(1)="<"_FILENM_"S>"
  1. S I=""
  1. F S I=$O(OUT("DILIST","ID",I)) Q:I="" D
  1. . S CNT=CNT+1,MAGRY(CNT)="<"_FILENM
  1. . S CNT=CNT+1,MAGRY(CNT)="PK="_QT_OUT("DILIST",2,I)_QT
  1. . S J=""
  1. . F S J=$O(OUT("DILIST","ID",I,J)) Q:J="" D
  1. . . S X=OUT("DILIST","ID",I,J)
  1. . . I $$ISFLDDT^MAGVAF01(FILE,J) S X=$$FM2IDF^MAGVAF01(X) ; the field is Date type - convert to IDF format
  1. . . S CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARR(J)," /\<>&%")_"="_QT_X_QT
  1. . ; Now get the Word-Processing fields
  1. . S J=""
  1. . K WP
  1. . F S J=$O(FLDSARRW(J)) Q:J="" D
  1. . . I $$ISFLDWP^MAGVAF01(.WPTYPE,FILE,J) D
  1. . . . S X=$$GET1^DIQ(FILE,OUT("DILIST",2,I),J,"","WP")
  1. . . . S:$D(WP) CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARRW(J)," /\<>&%")_"="_QT
  1. . . . S L=""
  1. . . . F S L=$O(WP(L)) Q:L="" D
  1. . . . . S CNT=CNT+1,MAGRY(CNT)=WP(L)
  1. . . . . Q
  1. . . . S MAGRY(CNT)=MAGRY(CNT)_QT
  1. . . . Q
  1. . . Q
  1. . S MAGRY(CNT)=MAGRY(CNT)_" >"
  1. . Q
  1. S CNT=CNT+1,MAGRY(CNT)="</"_FILENM_">"
  1. S CNT=CNT+1,MAGRY(CNT)="</"_FILENM_"S>"
  1. S MAGRY(0)=$$OK^MAGVAF02()_RESDEL_RESDEL_CNT
  1. Q
  1. ;
  1. ; **** Get a multiple values for a field and return the result in XML format
  1. ;
  1. ; Input parameters
  1. ; ================
  1. ;
  1. ; FILE = FileMan number of the file (e.g. 2006.913)
  1. ; IENS = IEN of the record (e.g. "1," where 1 is an IEN)
  1. ; MFIELDID = Field number of the multiple field (e.g. 2)
  1. ;
  1. ; Return Values
  1. ; =============
  1. ; if error found during execution
  1. ; MAGRY(0) = "Failure status ^Error getting values"
  1. ; if success
  1. ; MAGRY(0) = Success status ^^Total lines
  1. ; MAGRY (1.n) = values in format
  1. ;
  1. ; e.g
  1. ; <KEYS>
  1. ; <KEY VALUE="" LEVEL=""/>
  1. ; ...
  1. ; <KEY VALUE="" LEVEL=""/>
  1. ; </KEYS>
  1. ;
  1. ; where
  1. ; KEY = the name of multiple field
  1. ; VALUE and LEVEL = field names in sub-file
  1. ;
  1. GETMVAL(MAGRY,FILE,MFIELDID,IENS) ;
  1. N I,J,X
  1. N OUT,ERR,MAGRESA
  1. N FLDSARR,FLDSARRW,MFIELDNM,SUBFILE,FIELDS
  1. N CNT,QT,RESDEL
  1. S QT=$C(34)
  1. S RESDEL=$$RESDEL^MAGVAF02()
  1. S MFIELDNM=$$GETFLDNM^MAGVAF01(FILE,MFIELDID) ; name of multiple field
  1. S SUBFILE=$$GETSUBFL^MAGVAF01(FILE,MFIELDID) ; sub-file for the multiple fields
  1. S FIELDS=$$GETFLDS^MAGVAF01(.FLDSARR,.FLDSARRW,SUBFILE,"I") ; sub-file fields names
  1. S FIELDS=MFIELDID_"*"
  1. I IENS'="" D Q:$D(ERR("DIERR"))
  1. . D GETS^DIQ(FILE,IENS,FIELDS,"","OUT","ERR")
  1. . I $D(ERR("DIERR")) D
  1. . . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting values: "_MAGRESA(1) Q ; Error getting the list
  1. . . Q
  1. . Q
  1. ; Output the data
  1. S I="" ; IENs
  1. S J="" ; Fields in the sub-file
  1. S CNT=0
  1. S CNT=CNT+1,MAGRY(CNT)="<"_MFIELDNM_"S>"
  1. F S I=$O(OUT(SUBFILE,I)) Q:I="" D
  1. . S CNT=CNT+1,MAGRY(CNT)="<"_MFIELDNM
  1. . F S J=$O(OUT(SUBFILE,I,J)) Q:J="" D
  1. . . I $$ISFLDDT^MAGVAF01(SUBFILE,J) S X=$$FM2IDF^MAGVAF01(OUT(SUBFILE,I,J)) ; the field is Date type - convert to IDF format
  1. . . E S X=OUT(SUBFILE,I,J)
  1. . . S MAGRY(CNT)=MAGRY(CNT)_" "_$TR(FLDSARR(J)," /\<>&%")_"="_QT_X_QT
  1. . . Q
  1. . S MAGRY(CNT)=MAGRY(CNT)_" />"
  1. . Q
  1. . S CNT=CNT+1,MAGRY(CNT)="/>"
  1. S CNT=CNT+1,MAGRY(CNT)="</"_MFIELDNM_"S>"
  1. S MAGRY(0)=$$OK^MAGVAF02()_RESDEL_RESDEL_CNT
  1. Q
  1. ;
  1. ;
  1. ; **** Get a record from a file by "B" index value
  1. ; (in most of the cases it is value of .01 field) and return the result in XML format
  1. ;
  1. ; Input parameters
  1. ; ================
  1. ;
  1. ; FILE = FileMan number of the file (e.g. 2006.913)
  1. ; IENS = IEN in sub-file (e.g. "1," where 1 is an IEN)
  1. ; VAL = value in "B" index (in most of the cases it is value of .01 field)
  1. ; WPASLINE = 0 (WP value as it was stored) / 1 (WP value as a single line)
  1. ;
  1. ; Return Values
  1. ; =============
  1. ; if error found during execution
  1. ; MAGRY(0) = Failure status^Error getting values
  1. ; if success
  1. ; MAGRY(0) = Success status^^Total lines
  1. ; MAGRY (1.n) = values in XML format
  1. ;
  1. GXMLBYID(MAGRY,FILE,IENS,VAL,WPASLINE) ;
  1. N FIELDS,FLDSARR,FLDSARRW,FILENM
  1. N OUT,ERR,MAGRESA,WP,WPTYPE
  1. N I,J,L,X,CNT
  1. N QT,RESDEL
  1. K MAGRY
  1. S RESDEL=$$RESDEL^MAGVAF02()
  1. S QT=$C(34)
  1. S FILENM=$TR($$GETFILNM^MAGVAF01(FILE)," ") ; File name without blank
  1. S FIELDS=$$GETFLDS^MAGVAF01(.FLDSARR,.FLDSARRW,FILE,"I") ; file fields names
  1. D FIND^DIC(FILE,IENS,"@;"_FIELDS,"BQX",VAL,"","","","","OUT","ERR")
  1. I $D(ERR("DIERR")) D Q
  1. . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting values: "_MAGRESA(1) Q ; Error getting the list
  1. . Q
  1. ; Output the data
  1. S CNT=0
  1. S CNT=CNT+1,MAGRY(CNT)="<"_FILENM_"S>"
  1. S I="" ; IENs
  1. S J="" ; Fields in the file
  1. F S I=$O(OUT("DILIST","ID",I)) Q:I="" D
  1. . S CNT=CNT+1,MAGRY(CNT)="<"_FILENM
  1. . S CNT=CNT+1,MAGRY(CNT)="PK="_QT_OUT("DILIST",2,I)_QT
  1. . S J=""
  1. . F S J=$O(OUT("DILIST","ID",I,J)) Q:J="" D
  1. . . S X=OUT("DILIST","ID",I,J)
  1. . . I $$ISFLDDT^MAGVAF01(FILE,J) S X=$$FM2IDF^MAGVAF01(X) ; the field is Date type - convert to IDF format
  1. . . S CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARR(J)," /\<>&%")_"="_QT_X_QT
  1. . . Q
  1. . ; Now get the Word-Processing fields
  1. . S J=""
  1. . K WP
  1. . F S J=$O(FLDSARRW(J)) Q:J="" D
  1. . . I $$ISFLDWP^MAGVAF01(.WPTYPE,FILE,J) D Q
  1. . . . S X=$$GET1^DIQ(FILE,OUT("DILIST",2,I),J,"","WP")
  1. . . . I $D(WP) D
  1. . . . . S CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARRW(J)," /\<>&%")_"="_QT
  1. . . . . I WPASLINE S MAGRY(CNT)=MAGRY(CNT)_$$TRHTML^MAGVAF04($$STRWP^MAGVAF01(.WP)) ; Get as a single line
  1. . . . . E D ; Get WP value as it was stored
  1. . . . . . S L=""
  1. . . . . . F S L=$O(WP(L)) Q:L="" D
  1. . . . . . . S CNT=CNT+1,MAGRY(CNT)=$$TRHTML^MAGVAF04(WP(L))
  1. . . . . . . Q
  1. . . . . . Q
  1. . . . . S MAGRY(CNT)=MAGRY(CNT)_QT
  1. . . . . Q
  1. . . . Q
  1. . . Q
  1. . S MAGRY(CNT)=MAGRY(CNT)_" >"
  1. . S CNT=CNT+1,MAGRY(CNT)="</"_FILENM_" >"
  1. . Q
  1. S CNT=CNT+1,MAGRY(CNT)="</"_FILENM_"S>"
  1. S MAGRY(0)=$$OK^MAGVAF02()_RESDEL_RESDEL_CNT
  1. Q
  1. ;
  1. ; Input Parameters
  1. ; ================
  1. ; MAGRY
  1. ; MAGRY(0)=1^^CNT
  1. ; MAGRY(3)=<FILENAME
  1. ; ...
  1. ; MAGRY(n)=</FILENAME>
  1. ;
  1. ; Output Values
  1. ; =============
  1. ;
  1. ; MAGRY(0)=1^^(CNT+1)
  1. ; MAGRY(1)="<?xml version=""1.0"" encoding=""utf-8""?>"
  1. ; MAGRY(2)=<FILENAMES>
  1. ; ....
  1. ; MAGRY(n+1)=</FILENAMES>
  1. ;
  1. SETFTUCH(MAGRY) ; Set first two lines and the last one
  1. I '$$ISOK^MAGVAF02(MAGRY(0)) Q
  1. ; Add first lines
  1. N RES,I
  1. S MAGRY(1)=$$XML1LINE^MAGVAF02()
  1. S MAGRY(2)=MAGRY(3)_"S>"
  1. S I=$O(MAGRY(""),-1)+1
  1. S MAGRY(I)="</"_$P(MAGRY(3),"<",2,999)_"S>"
  1. S RES=MAGRY(0)
  1. D SETVAL^MAGVAF02(.RES,I)
  1. S MAGRY(0)=RES
  1. Q
  1. ;
  1. ;++++ Create an empty XML result by file number
  1. ; Input Parameters
  1. ; ================
  1. ; FILE - FileMan file number
  1. ;
  1. ; Return Values
  1. ; ==============
  1. ; MAGRY(0)=1^^3
  1. ; MAGRY(1)="<?xml version=""1.0"" encoding=""utf-8""?>"
  1. ; MAGRY(2)=<FILENAMES>
  1. ; MAGRY(3)=</FILENAMES>
  1. ;
  1. ; where FILENAME is the name of the file passed
  1. ;
  1. EMPTYXML(MAGRY,FILE) ; Create an empty XML result by file number
  1. N FILENM
  1. S FILENM=$TR($$GETFILNM^MAGVAF01(FILE)," ") ; File name without blank
  1. S CNT=0
  1. S MAGRY(0)=$$OK^MAGVAF02()_$$RESDEL^MAGVAF02()_$$RESDEL^MAGVAF02()_3
  1. S MAGRY(1)=$$XML1LINE^MAGVAF02()
  1. S MAGRY(2)="<"_FILENM_"S>"
  1. S MAGRY(3)="</"_FILENM_"S>"
  1. Q
  1. ;
  1. ; **** Get a record from a file by IEN
  1. ; and return the result in XML format
  1. ;
  1. ; Input parameters
  1. ; ================
  1. ;
  1. ; FILE = FileMan number of the file (e.g. 2006.913)
  1. ; PK = IEN in the file
  1. ; WPASLINE = 0 (WP value as it was stored) / 1 (WP value as a single line)
  1. ;
  1. ; Return Values
  1. ; =============
  1. ; if error found during execution
  1. ; MAGRY(0) = Failure status^Error getting values
  1. ; if success
  1. ; MAGRY(0) = Success status^^Total lines
  1. ; MAGRY (1.n) = values in XML format
  1. ;
  1. GXMLBYPK(MAGRY,FILE,PK,WPASLINE) ;
  1. N FIELDS,FLDSARR,FLDSARRW,FILENM
  1. N OUT,ERR,MAGRESA,WP,IENS
  1. N J,L,X,CNT,WPTYPE
  1. N QT,RESDEL
  1. K MAGRY
  1. S RESDEL=$$RESDEL^MAGVAF02()
  1. S QT=$C(34)
  1. S FILENM=$TR($$GETFILNM^MAGVAF01(FILE)," ") ; File name without blank
  1. S FIELDS=$$GETFLDS^MAGVAF01(.FLDSARR,.FLDSARRW,FILE,"") ; file fields names
  1. S IENS=PK_","
  1. D GETS^DIQ(FILE,PK_",",FIELDS,"I","OUT","ERR")
  1. I $D(ERR("DIERR")) D Q
  1. . D MSG^DIALOG("A",.MAGRESA,245,5,"ERR")
  1. . S MAGRY(0)=$$FAILED^MAGVAF02()_RESDEL_"Error getting values: "_MAGRESA(1) Q ; Error getting the list
  1. . Q
  1. ; Output the data
  1. S CNT=0
  1. S J="" ; Fields in the file
  1. S CNT=CNT+1,MAGRY(CNT)="<"_FILENM
  1. S CNT=CNT+1,MAGRY(CNT)="PK="_QT_PK_QT
  1. S J=""
  1. F S J=$O(OUT(FILE,IENS,J)) Q:J="" D
  1. . S X=OUT(FILE,IENS,J,"I")
  1. . I $$ISFLDDT^MAGVAF01(FILE,J) S X=$$FM2IDF^MAGVAF01(X) ; the field is Date type - convert to IDF format
  1. . S CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARR(J)," /\<>&%")_"="_QT_X_QT
  1. . Q
  1. ; Now get the Word-Processing fields
  1. S J=""
  1. K WP
  1. F S J=$O(FLDSARRW(J)) Q:J="" D
  1. . I $$ISFLDWP^MAGVAF01(.WPTYPE,FILE,J) D Q
  1. . . S X=$$GET1^DIQ(FILE,IENS,J,"","WP")
  1. . . I $D(WP) D
  1. . . . S CNT=CNT+1,MAGRY(CNT)=$TR(FLDSARRW(J)," /\<>&%")_"="_QT
  1. . . . I WPASLINE S MAGRY(CNT)=MAGRY(CNT)_$$TRHTML^MAGVAF04($$STRWP^MAGVAF01(.WP)) ; Get as a single line
  1. . . . E D ; Get WP value as it was stored
  1. . . . . S L=""
  1. . . . . F S L=$O(WP(L)) Q:L="" D
  1. . . . . . S CNT=CNT+1,MAGRY(CNT)=$$TRHTML^MAGVAF04(WP(L))
  1. . . . . . Q
  1. . . . . Q
  1. . . . S MAGRY(CNT)=MAGRY(CNT)_QT
  1. . . . Q
  1. . . Q
  1. . Q
  1. S MAGRY(CNT)=MAGRY(CNT)_" >"
  1. S CNT=CNT+1,MAGRY(CNT)="</"_FILENM_" >"
  1. S MAGRY(0)=$$OK^MAGVAF02()_RESDEL_RESDEL_CNT
  1. Q