| 1 | TMGRPC3B ;TMG/kst/Support Functions for GUI_Config ;08/31/08 ; 5/29/10 6:40pm
 | 
|---|
| 2 |          ;;1.0;TMG-LIB;**1**;08/31/08
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;"TMG RPC FUNCTIONS for a GUI config program
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;"Kevin Toppenberg MD
 | 
|---|
| 7 |  ;"GNU Lessor General Public License (LGPL) applies
 | 
|---|
| 8 |  ;"7/20/08
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;"=======================================================================
 | 
|---|
| 11 |  ;" RPC -- Public Functions.
 | 
|---|
| 12 |  ;"=======================================================================
 | 
|---|
| 13 |  ;" <none>
 | 
|---|
| 14 |  ;"=======================================================================
 | 
|---|
| 15 |  ;"PRIVATE API FUNCTIONS
 | 
|---|
| 16 |  ;"=======================================================================
 | 
|---|
| 17 |  ;"GETUSRLT(TMGOUT,TMGPARAMS) -- fill list with users on the system.
 | 
|---|
| 18 |  ;"GETRECLT(TMGOUT,TMGPARAMS) -- fill list with records in file on the system
 | 
|---|
| 19 |  ;"GET1USER(TMGOUT,TMGIEN) -- Get one user's record
 | 
|---|
| 20 |  ;"GET1REC(TMGOUT,TMGPARAMS) -- get one record in file
 | 
|---|
| 21 |  ;"XTRCTFLD(TMGOUT,TMGARRAY,TMGFLAG) -- convert output from GETS^DIQ into another format
 | 
|---|
| 22 |  ;"GFLSUBST(TMGOUT,TMGPARAMS) -- return a subset of entries a file's .01 names
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ;"=======================================================================
 | 
|---|
| 25 |  ;"=======================================================================
 | 
|---|
| 26 |  ;"Dependencies:
 | 
|---|
| 27 |  ;"  TMGRPC3* only
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;"=======================================================================
 | 
|---|
| 30 |  ;"=======================================================================
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ;"=======================================================================
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | GETUSRLT(TMGOUT,TMGPARAMS) ;"GET USER LIST
 | 
|---|
| 35 |         ;"Purpose: to fill list with users on the system.
 | 
|---|
| 36 |         ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
 | 
|---|
| 37 |         ;"       TMGPARAMS -- either "" or "NODISUSER" if not to return DISUSER=YES users
 | 
|---|
| 38 |         ;"Output: TMGOUT is filled as follows:
 | 
|---|
| 39 |         ;"          TMGOUT(0)="1^Success" or "-1^Message"
 | 
|---|
| 40 |         ;"          TMGOUT(1)=Name^IEN^200^DISUSER  DISUSER will be 1 for "Y" or 0 for "N"
 | 
|---|
| 41 |         ;"          TMGOUT(2)=Name^IEN^200^DISUSER
 | 
|---|
| 42 |         ;"Results: none
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |         NEW TMGACTIVEONLY SET TMGACTIVEONLY=($GET(TMGPARAMS)="NODISUSER")
 | 
|---|
| 45 |         NEW TMGINDEX SET TMGINDEX=1
 | 
|---|
| 46 |         NEW TMGNAME SET TMGNAME=""
 | 
|---|
| 47 |         FOR  SET TMGNAME=$ORDER(^VA(200,"B",TMGNAME)) QUIT:(TMGNAME="")  DO
 | 
|---|
| 48 |         . NEW TMGIEN SET TMGIEN=""
 | 
|---|
| 49 |         . FOR  SET TMGIEN=$ORDER(^VA(200,"B",TMGNAME,TMGIEN)) QUIT:(+TMGIEN'>0)  DO
 | 
|---|
| 50 |         . . NEW TMGDISUSER SET TMGDISUSER=$PIECE($GET(^VA(200,TMGIEN,0)),"^",7)
 | 
|---|
| 51 |         . . IF (TMGACTIVEONLY)&(TMGDISUSER) QUIT
 | 
|---|
| 52 |         . . NEW TMGNAME SET TMGNAME=$PIECE($GET(^VA(200,TMGIEN,0)),"^",1)
 | 
|---|
| 53 |         . . SET TMGOUT(TMGINDEX)=TMGNAME_"^"_TMGIEN_"^200^"_TMGDISUSER
 | 
|---|
| 54 |         . . SET TMGINDEX=TMGINDEX+1
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |         SET TMGOUT(0)="1^Success"
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |         QUIT
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | GETRECLT(TMGOUT,TMGPARAMS) ;"GET RECS LIST
 | 
|---|
| 61 |         ;"Purpose: to fill list with records in file on the system.
 | 
|---|
| 62 |         ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
 | 
|---|
| 63 |         ;"       TMGPARAMS -- Filenumber
 | 
|---|
| 64 |         ;"Output: TMGOUT is filled as follows:
 | 
|---|
| 65 |         ;"          TMGOUT(0)="1^Success" or "-1^Message"
 | 
|---|
| 66 |         ;"          TMGOUT(1)=.01Value^IEN^FileNum
 | 
|---|
| 67 |         ;"          TMGOUT(2)=.01Value^IEN^FileNum
 | 
|---|
| 68 |         ;"Results: none
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |         NEW TMGINDEX SET TMGINDEX=1
 | 
|---|
| 71 |         NEW TMGNAME SET TMGNAME=""
 | 
|---|
| 72 |         NEW TMGFNUM SET TMGFNUM=+$GET(TMGPARAMS)
 | 
|---|
| 73 |         IF TMGFNUM'>0 DO  GOTO GRLDONE
 | 
|---|
| 74 |         . SET TMGOUT(0)="-1^Valid file number not found"
 | 
|---|
| 75 |         NEW TMGREF SET TMGREF=$GET(^DIC(TMGFNUM,0,"GL"))
 | 
|---|
| 76 |         SET TMGREF=$$CREF^DILF(TMGREF)
 | 
|---|
| 77 |         IF TMGREF="" DO  GOTO GRLDONE
 | 
|---|
| 78 |         . SET TMGOUT(0)="-1^Unable to find global reference for file: "_TMGFNUM
 | 
|---|
| 79 |         NEW TMGLOC,TMGPIECE
 | 
|---|
| 80 |         SET TMGLOC=$PIECE(^DD(TMGFNUM,.01,0),"^",4)
 | 
|---|
| 81 |         SET TMGPIECE=$PIECE(TMGLOC,";",2)
 | 
|---|
| 82 |         SET TMGLOC=$PIECE(TMGLOC,";",1)
 | 
|---|
| 83 |         FOR  SET TMGNAME=$ORDER(@TMGREF@("B",TMGNAME)) QUIT:(TMGNAME="")  DO
 | 
|---|
| 84 |         . NEW TMGIEN SET TMGIEN=""
 | 
|---|
| 85 |         . FOR  SET TMGIEN=$ORDER(@TMGREF@("B",TMGNAME,TMGIEN)) QUIT:(+TMGIEN'>0)  DO
 | 
|---|
| 86 |         . . NEW TMGNAME SET TMGNAME=$PIECE($GET(@TMGREF@(TMGIEN,TMGLOC)),"^",TMGPIECE)
 | 
|---|
| 87 |         . . SET TMGOUT(TMGINDEX)=TMGNAME_"^"_TMGIEN_"^"_TMGFNUM
 | 
|---|
| 88 |         . . SET TMGINDEX=TMGINDEX+1
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |         SET TMGOUT(0)="1^Success"
 | 
|---|
| 91 | GRLDONE ;
 | 
|---|
| 92 |         QUIT
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | GET1USER(TMGOUT,TMGIEN) ;"GET ONE USER
 | 
|---|
| 95 |         ;"Purpose: to get record of one user
 | 
|---|
| 96 |         ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
 | 
|---|
| 97 |         ;"       TMGIEN -- the IEN in file 200 to get
 | 
|---|
| 98 |         ;"Output: TMGOUT is filled as follows:
 | 
|---|
| 99 |         ;"          TMGOUT(0)="1^Success" or "-1^Message"
 | 
|---|
| 100 |         ;"          TMGOUT(1)=File^IENS^FieldNum^ExternalValue^DDInfo...
 | 
|---|
| 101 |         ;"          TMGOUT(2)=File^IENS^FieldNum^ExternalValue^DDInfo...
 | 
|---|
| 102 |         ;"Note: the fields to return are decided HERE
 | 
|---|
| 103 |         ;"Results: none
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |         NEW TMGIENS SET TMGIENS=+$GET(TMGIEN)_","
 | 
|---|
| 106 |         DO GET1REC(.TMGOUT,"200^"_TMGIENS)
 | 
|---|
| 107 |         QUIT
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 | GET1REC(TMGOUT,TMGPARAMS) ;
 | 
|---|
| 111 |         ;"Purpose: to get one record in file
 | 
|---|
| 112 |         ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
 | 
|---|
| 113 |         ;"       TMGPARAMS: File^IENS
 | 
|---|
| 114 |         ;"         File -- the file or subfile to retrieve from
 | 
|---|
| 115 |         ;"         IENS -- if File is a subfile, then IENS should be full IENS to get (e.g. '2,103,')
 | 
|---|
| 116 |         ;"                 if File is not a subfile, then IENS can be just IEN or IEN_","
 | 
|---|
| 117 |         ;"Output: TMGOUT is filled as follows:
 | 
|---|
| 118 |         ;"          TMGOUT(0)="1^Success" or "-1^Message"
 | 
|---|
| 119 |         ;"          TMGOUT(1)=File^IENS^FieldNum^ExternalValue^DDInfo...
 | 
|---|
| 120 |         ;"          TMGOUT(2)=File^IENS^FieldNum^ExternalValue^DDInfo...
 | 
|---|
| 121 |         ;"Note: the fields to return are decided HERE
 | 
|---|
| 122 |         ;"Results: none
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |         SET TMGOUT(0)="1^Success"  ;"default to success
 | 
|---|
| 125 |         NEW TMGARRAY,TMGMSG
 | 
|---|
| 126 |         NEW TMGREF SET TMGREF="TMGARRAY"
 | 
|---|
| 127 |         SET TMGPARAMS=$GET(TMGPARAMS)
 | 
|---|
| 128 |         SET ^TMG("TMP","RPC","GET1REC")=TMGPARAMS
 | 
|---|
| 129 |         NEW TMGFILE SET TMGFILE=$PIECE(TMGPARAMS,"^",1)
 | 
|---|
| 130 |         IF +TMGFILE'>0 DO  GOTO GORDONE
 | 
|---|
| 131 |         . SET TMGOUT(0)="-1^No file number supplied"
 | 
|---|
| 132 |         NEW TMGIENS SET TMGIENS=$PIECE(TMGPARAMS,"^",2)
 | 
|---|
| 133 |         IF TMGIENS="" DO  GOTO GORDONE
 | 
|---|
| 134 |         . SET TMGOUT(0)="-1^No IENS supplied"
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |         DO GETS^DIQ(TMGFILE,TMGIENS,"**","IE",TMGREF,"TMGMSG")
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |         IF $DATA(TMGMSG("DIERR")) DO  GOTO GORDONE
 | 
|---|
| 139 |         . SET TMGOUT(0)="-1^See Fileman message"
 | 
|---|
| 140 |         . SET TMGOUT(1)=$$GETERSTR^TMGRPC3G(.TMGMSG)
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |         DO XTRCTFLD(.TMGOUT,.TMGARRAY,"E")
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 | GORDONE ;
 | 
|---|
| 145 |         QUIT
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | XTRCTFLD(TMGOUT,TMGARRAY,TMGFLAG) ;"EXTRACT FIELDS
 | 
|---|
| 149 |         ;"Purpose: convert output from GETS^DIQ into another format
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |         NEW TMGINDEX SET TMGINDEX=1
 | 
|---|
| 152 |         NEW TMGFILE,TMGFIELD,TMGIENS
 | 
|---|
| 153 |         SET TMGFILE=""
 | 
|---|
| 154 |         FOR  SET TMGFILE=$ORDER(TMGARRAY(TMGFILE)) QUIT:(TMGFILE="")  DO
 | 
|---|
| 155 |         . SET TMGIENS=""
 | 
|---|
| 156 |         . FOR  SET TMGIENS=$ORDER(TMGARRAY(TMGFILE,TMGIENS)) QUIT:(TMGIENS="")  DO
 | 
|---|
| 157 |         . . SET TMGFIELD=0
 | 
|---|
| 158 |         . . FOR  SET TMGFIELD=$ORDER(^DD(TMGFILE,TMGFIELD)) QUIT:(+TMGFIELD'>0)  DO
 | 
|---|
| 159 |         . . . IF $GET(TMGARRAY(TMGFILE,TMGIENS,TMGFIELD,TMGFLAG))="" DO
 | 
|---|
| 160 |         . . . . SET TMGARRAY(TMGFILE,TMGIENS,TMGFIELD,TMGFLAG)=""
 | 
|---|
| 161 |         . . SET TMGFIELD=""
 | 
|---|
| 162 |         . . FOR  SET TMGFIELD=$ORDER(TMGARRAY(TMGFILE,TMGIENS,TMGFIELD)) QUIT:(TMGFIELD="")  DO
 | 
|---|
| 163 |         . . . NEW TMGVALUE SET TMGVALUE=$GET(TMGARRAY(TMGFILE,TMGIENS,TMGFIELD,TMGFLAG))
 | 
|---|
| 164 |         . . . NEW TMGDDINFO SET TMGDDINFO=$PIECE($GET(^DD(TMGFILE,TMGFIELD,0)),"^",1,4)
 | 
|---|
| 165 |         . . . IF $PIECE(TMGDDINFO,"^",2)["D" DO  ;"convert data format to one Delphi can use
 | 
|---|
| 166 |         . . . . IF TMGFLAG="I" QUIT
 | 
|---|
| 167 |         . . . . NEW X SET X=$GET(TMGARRAY(TMGFILE,TMGIENS,TMGFIELD,"I"))
 | 
|---|
| 168 |         . . . . SET TMGVALUE=$$FMTE^XLFDT(X,5)
 | 
|---|
| 169 |         . . . SET TMGOUT(TMGINDEX)=TMGFILE_"^"_TMGIENS_"^"_TMGFIELD_"^"_TMGVALUE
 | 
|---|
| 170 |         . . . SET TMGOUT(TMGINDEX)=TMGOUT(TMGINDEX)_"^"_TMGDDINFO
 | 
|---|
| 171 |         . . . SET TMGINDEX=TMGINDEX+1
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |         QUIT
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | GFLSUBST(TMGOUT,TMGPARAMS) ;"GET FILE SUBSET
 | 
|---|
| 176 |         ;"Purpose: to return a subset of entries a file's .01 names
 | 
|---|
| 177 |         ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
 | 
|---|
| 178 |         ;"       TMGPARAMS -- FileNum^StartFrom^Direction^maxCount
 | 
|---|
| 179 |         ;"              TMGFNUM - filename file to traverse
 | 
|---|
| 180 |         ;"              StartFrom -- text to $ORDER() from  -- OPTIONAL
 | 
|---|
| 181 |         ;"              Direction -- $ORDER(xx,Direction) direction (should be 1 or -1) -- OPTIONAL
 | 
|---|
| 182 |         ;"              maxCt -- OPTIONAL -- the max number of entries to return.
 | 
|---|
| 183 |         ;"Output: TMGOUT is filled as follows:
 | 
|---|
| 184 |         ;"          TMGOUT(0)="1^Success" or "-1^Message"
 | 
|---|
| 185 |         ;"          TMGOUT(1)=IEN^Value
 | 
|---|
| 186 |         ;"          TMGOUT(2)=IEN^Value
 | 
|---|
| 187 |         ;"          ...
 | 
|---|
| 188 |         ;"Results: none
 | 
|---|
| 189 |         ;"NOTE: does NOT work with sub files.
 | 
|---|
| 190 |  ;
 | 
|---|
| 191 |         NEW TMGFILE SET TMGFILE=+$PIECE(TMGPARAMS,"^",1)
 | 
|---|
| 192 |         IF TMGFILE'>0 DO  GOTO GFSDONE
 | 
|---|
| 193 |         . SET TMGOUT(0)="-1^No file number supplied"
 | 
|---|
| 194 |         NEW TMGFROM SET TMGFROM=$PIECE(TMGPARAMS,"^",2)
 | 
|---|
| 195 |         NEW TMGDIR SET TMGDIR=$PIECE(TMGPARAMS,"^",3)
 | 
|---|
| 196 |         IF TMGDIR'=-1 SET TMGDIR=1
 | 
|---|
| 197 |         NEW TMGMAXCT SET TMGMAXCT=+$PIECE(TMGPARAMS,"^",4)
 | 
|---|
| 198 |         IF TMGMAXCT=0 SET TMGMAXCT=44
 | 
|---|
| 199 |         NEW TMGISPTR SET TMGISPTR=($PIECE($GET(^DD(TMGFILE,.01,0)),"^",2)["P")
 | 
|---|
| 200 |         NEW TMGSTARTIEN SET TMGSTARTIEN=""
 | 
|---|
| 201 |         IF TMGISPTR DO
 | 
|---|
| 202 |         . IF $LENGTH(TMGFROM,";")>2 SET TMGSTARTIEN=+$PIECE(TMGFROM,";",2)
 | 
|---|
| 203 |         . IF TMGFROM?1.N1";".E SET TMGFROM=+TMGFROM
 | 
|---|
| 204 |  ;
 | 
|---|
| 205 |         NEW TMGI SET TMGI=0
 | 
|---|
| 206 |         ;"NEW TMGLAST SET TMGLAST=""
 | 
|---|
| 207 |         ;"NEW prev SET prev=""
 | 
|---|
| 208 |         NEW TMGREF SET TMGREF=$GET(^DIC(TMGFILE,0,"GL"))
 | 
|---|
| 209 |         SET TMGREF=$$CREF^DILF(TMGREF)  ;"convert open --> closed reference
 | 
|---|
| 210 |         IF TMGREF="" DO  GOTO GFSDONE
 | 
|---|
| 211 |         . SET TMGOUT(0)="-1^Unable to obtain global ref for file #"_TMGFILE
 | 
|---|
| 212 |  ;
 | 
|---|
| 213 |         FOR  SET TMGFROM=$ORDER(@TMGREF@("B",TMGFROM),TMGDIR) QUIT:(TMGFROM="")!(TMGI'<TMGMAXCT)  DO
 | 
|---|
| 214 |         . NEW TMGIEN SET TMGIEN=TMGSTARTIEN
 | 
|---|
| 215 |         . FOR  SET TMGIEN=$ORDER(@TMGREF@("B",TMGFROM,TMGIEN),TMGDIR) QUIT:(+TMGIEN'>0)!(TMGI'<TMGMAXCT)  DO
 | 
|---|
| 216 |         . . SET TMGI=TMGI+1
 | 
|---|
| 217 |         . . SET TMGOUT(TMGI)=TMGIEN_"^"
 | 
|---|
| 218 |         . . IF TMGISPTR SET TMGOUT(TMGI)=TMGOUT(TMGI)_TMGFROM_";"_TMGIEN_";"
 | 
|---|
| 219 |         . . SET TMGOUT(TMGI)=TMGOUT(TMGI)_$$GET1^DIQ(TMGFILE,TMGIEN_",",.01)
 | 
|---|
| 220 |         . . ;"SET TMGOUT(TMGI)=$$GET1^DIQ(TMGFILE,IEN_",",.01)
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 |         SET TMGOUT(0)="1^Success"
 | 
|---|
| 223 | GFSDONE ;
 | 
|---|
| 224 |         QUIT
 | 
|---|
| 225 |  ;
 | 
|---|
| 226 |  ;
 | 
|---|