[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 | ;
|
---|