| [613] | 1 | QACI3 ; OAKOIFO/TKW - DATA MIGRATION - VISTALINK RPC CODE ;7/27/05  16:18
 | 
|---|
 | 2 |  ;;2.0;Patient Representative;**19**;07/25/1995;Build 55
 | 
|---|
 | 3 | EN(PATSBY,PATSNO,PATSLIST,PATSFLAG,PATSFRST) ;
 | 
|---|
 | 4 |  ; Read list of migrated reference table entries in PATSLIST, put into
 | 
|---|
 | 5 |  ;   ^XTMP. Then return the next PATSNO entries into global PATSBY,
 | 
|---|
 | 6 |  ;   from the table referrenced by PATSFLAG.
 | 
|---|
 | 7 |  ; PATSBY = the name of the output global
 | 
|---|
 | 8 |  ; PATSNO = the number of records to return
 | 
|---|
 | 9 |  ; PATSLIST = If defined, contains a list of ^ delimited strings
 | 
|---|
 | 10 |  ;     0 node set to a flag indicating which file these came from.
 | 
|---|
 | 11 |  ;     The other entries contain two pieces:
 | 
|---|
 | 12 |  ;     1)ien or primary key of the entry on the M VistA side
 | 
|---|
 | 13 |  ;     2)primary key of the entry in the Oracle table (usually id).
 | 
|---|
 | 14 |  ; PATSFLAG="H" (hospital location), "U" (user), "P" (patient),
 | 
|---|
 | 15 |  ;  "C" (congressional contact), "E" (employee involved),
 | 
|---|
 | 16 |  ;  "F" (facility service or section)
 | 
|---|
 | 17 |  ; PATSFRST = 1 on the first call to this routine, 0 on subsequent calls.
 | 
|---|
 | 18 |  ;
 | 
|---|
 | 19 |  ; Process incoming list
 | 
|---|
 | 20 |  N FLAG,TYPE,UNAME,DONENAME
 | 
|---|
 | 21 |  S PATSNO=+$G(PATSNO),PATSFRST=+$G(PATSFRST)
 | 
|---|
 | 22 |  ; For the incoming list, find the file type on the first array entry.
 | 
|---|
 | 23 |  S FLAG=$P($G(PATSLIST(0)),"^"),TYPE=""
 | 
|---|
 | 24 |  I FLAG]"" S TYPE=$S(FLAG="H":"HL",FLAG="U":"USER",FLAG="P":"PT",FLAG="C":"CC",FLAG="E":"EMPINV",FLAG="F":"FSOS",1:"")
 | 
|---|
 | 25 |  ; Move list of migrated entries to ^XTMP("QACMIGR",file_type,"D").
 | 
|---|
 | 26 |  ;  at the same time, delete them from the list of entries still to be
 | 
|---|
 | 27 |  ;  migrated, ^XTMP("QACMIGR",file_type,"U").
 | 
|---|
 | 28 |  I TYPE]"" D
 | 
|---|
 | 29 |  . S UNAME=$NA(^XTMP("QACMIGR",TYPE,"U"))
 | 
|---|
 | 30 |  . S DONENAME=$NA(^XTMP("QACMIGR",TYPE,"D"))
 | 
|---|
 | 31 |  . D LISTIN Q
 | 
|---|
 | 32 |  ; Now get the next set of entries to be migrated, for the table
 | 
|---|
 | 33 |  ;  referenced by the PATSFLAG input parameter.
 | 
|---|
 | 34 |  S FLAG=$G(PATSFLAG)
 | 
|---|
 | 35 |  S TYPE=$S(FLAG="H":"HL",FLAG="U":"USER",FLAG="P":"PT",FLAG="C":"CC",FLAG="E":"EMPINV",FLAG="F":"FSOS",1:"")
 | 
|---|
 | 36 |  Q:TYPE=""
 | 
|---|
 | 37 |  S UNAME=$NA(^XTMP("QACMIGR",TYPE,"U"))
 | 
|---|
 | 38 |  S PATSBY=$NA(^TMP(TYPE,$J))
 | 
|---|
 | 39 |  ; Build the next list of entries to be migrated.
 | 
|---|
 | 40 |  D LISTOUT
 | 
|---|
 | 41 |  Q
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 | LISTIN ; Move Ids of migrated data entries into ^XTMP
 | 
|---|
 | 44 |  N I,X,CNT S CNT=0
 | 
|---|
 | 45 |  F I=0:0 S I=$O(PATSLIST(I)) Q:'I  S X=PATSLIST(I) D
 | 
|---|
 | 46 |  . S Y=$P(X,"^"),X=$P(X,"^",2)
 | 
|---|
 | 47 |  . ; If entry not added to Oracle table, quit
 | 
|---|
 | 48 |  . Q:X=""
 | 
|---|
 | 49 |  . ; Else, kill 'unmigrated' entry, set 'migrated' entry
 | 
|---|
 | 50 |  . K @UNAME@(Y)
 | 
|---|
 | 51 |  . S @DONENAME@(Y)=X
 | 
|---|
 | 52 |  . S CNT=CNT+1 Q
 | 
|---|
 | 53 |  ; If no data left in table of entries to be migrated, kill it.
 | 
|---|
 | 54 |  I '$O(@UNAME@(0)) K @UNAME
 | 
|---|
 | 55 |  I CNT>0 D
 | 
|---|
 | 56 |  . ; Increment count of migrated entries
 | 
|---|
 | 57 |  . S @DONENAME=$G(@DONENAME)+CNT
 | 
|---|
 | 58 |  . Q:'$O(@UNAME@(0))
 | 
|---|
 | 59 |  . ; Decrement count of entries to be migrated.
 | 
|---|
 | 60 |  . S @UNAME=$G(@UNAME)-CNT
 | 
|---|
 | 61 |  . Q
 | 
|---|
 | 62 |  Q
 | 
|---|
 | 63 |  ;
 | 
|---|
 | 64 | LISTOUT ; Build next set of data to be migrated into ^TMP global
 | 
|---|
 | 65 |  K @PATSBY
 | 
|---|
 | 66 |  N CNT,I,X,XOUT
 | 
|---|
 | 67 |  ; On the first time calling this routine, check.
 | 
|---|
 | 68 |  S XOUT=0 I PATSFRST=1 D  Q:XOUT
 | 
|---|
 | 69 |  . ; If no data in staging area, return 0 in 0th node
 | 
|---|
 | 70 |  . S CNT=0 F I="ROC","HL","USER","PT","CC","EMPINV","FSOS" D
 | 
|---|
 | 71 |  .. S CNT=CNT+$G(^XTMP("QACMIGR",I,"U")) Q
 | 
|---|
 | 72 |  . I CNT=0 S @PATSBY@(0)=0,XOUT=1
 | 
|---|
 | 73 |  . Q
 | 
|---|
 | 74 |  ; If no data to migrate in the current table, return nothing
 | 
|---|
 | 75 |  ;  in the output array.
 | 
|---|
 | 76 |  Q:'$O(@UNAME@(0))
 | 
|---|
 | 77 |  S CNT=0
 | 
|---|
 | 78 |  ; For Facility Service or Section, set VISN name into first entry of output array.
 | 
|---|
 | 79 |  ; For Users or Employees Involved, put station number for server into first entry of output array.
 | 
|---|
 | 80 |  I "F^U^E"[FLAG,$O(@UNAME@(0)) D
 | 
|---|
 | 81 |  . S CNT=1,PATSNO=PATSNO+1
 | 
|---|
 | 82 |  . S @PATSBY@(1)=$G(^XTMP("QACMIGR",TYPE,"U",0))
 | 
|---|
 | 83 |  . Q
 | 
|---|
 | 84 |  ; Move data to be migrated into output global.
 | 
|---|
 | 85 |  F I=0:0 S I=$O(@UNAME@(I)) Q:'I  Q:PATSNO&(CNT=PATSNO)  S X=^(I) D
 | 
|---|
 | 86 |  . S CNT=CNT+1
 | 
|---|
 | 87 |  . S @PATSBY@(CNT)=X
 | 
|---|
 | 88 |  . Q:FLAG'="P"
 | 
|---|
 | 89 |  . ; Load continuation patient data
 | 
|---|
 | 90 |  . S CNT=CNT+1
 | 
|---|
 | 91 |  . S @PATSBY@(CNT)=@UNAME@(I,"cont")
 | 
|---|
 | 92 |  . Q
 | 
|---|
 | 93 |  Q
 | 
|---|
 | 94 |  ;
 | 
|---|
 | 95 |  ;
 | 
|---|