[641] | 1 | XBRXREF ; IHS/ADC/GTH - RE-XREF SELECTED XREFS ; [ 02/07/97 3:02 PM ]
|
---|
| 2 | ;;4.0;XB;;Jul 20, 2009;Build 2
|
---|
| 3 | ;
|
---|
| 4 | ; This routine re-xrefs selected cross references for a file.
|
---|
| 5 | ; The xrefs are killed at the highest level and then reset.
|
---|
| 6 | ; This is very different from what FileMan does when you
|
---|
| 7 | ; RE-INDEX a field. FileMan does a logical kill and then
|
---|
| 8 | ; sets the new xrefs. The reason for this is multiple fields
|
---|
| 9 | ; may set the same xref so you would want to kill only the
|
---|
| 10 | ; ones set by the field being RE-INDEXed.
|
---|
| 11 | ;
|
---|
| 12 | ; You must re-xref all fields that set any one of the xrefs
|
---|
| 13 | ; being killed and reset, unless the xref is set the same
|
---|
| 14 | ; from multiple fields. Very hard to explain. If you do
|
---|
| 15 | ; not understand the problem, you probably shouldn't be
|
---|
| 16 | ; running this routine.
|
---|
| 17 | ;
|
---|
| 18 | ; This routine executes an entry point in ^DIK to build the
|
---|
| 19 | ; xref logic for all xrefs on the file. It then deletes the
|
---|
| 20 | ; logic for all xrefs not selected, and executes another
|
---|
| 21 | ; entry point in ^DIK to actually xref the file.
|
---|
| 22 | ;
|
---|
| 23 | ; TRIGGERS are very complex animals, which do not have a
|
---|
| 24 | ; xref to kill plus may be conditional and may have no affect
|
---|
| 25 | ; on the SET side at all. Because of the uncertainties here
|
---|
| 26 | ; this routine will not do TRIGGERS.
|
---|
| 27 | ;
|
---|
| 28 | ; Xrefs at the multiple level would require a $O through the
|
---|
| 29 | ; data global to kill, therefore, sub-file xrefs are not
|
---|
| 30 | ; selectable unless they are cross-referenced to the whole
|
---|
| 31 | ; file.
|
---|
| 32 | ;
|
---|
| 33 | START ;
|
---|
| 34 | D INIT^XBRXREF2 ; Do initialization
|
---|
| 35 | D GETFILE^XBRXREF2 ; Get file to be RE-XREFed
|
---|
| 36 | I XBRXREF("QFLG") D EOJ Q
|
---|
| 37 | D BLDXRT^XBRXREF2 ; Build xref table
|
---|
| 38 | I XBRXREF("QFLG") D EOJ Q
|
---|
| 39 | D CONFIRM^XBRXREF2 ; Get confirmation from user
|
---|
| 40 | I XBRXREF("QFLG") D EOJ Q
|
---|
| 41 | EN ; EXTERNAL ENTRY POINT
|
---|
| 42 | D SETUP ; Set up xrefs for ^DIK
|
---|
| 43 | D KILL ; Kill xrefs
|
---|
| 44 | D XREF ; For each entry, set xrefs
|
---|
| 45 | D EOJ ; Clean up
|
---|
| 46 | Q
|
---|
| 47 | ;
|
---|
| 48 | SETUP ; SETUP XREFS FOR ^DIK
|
---|
| 49 | S DIK=XBRXREF("GBL"),X=1
|
---|
| 50 | D DD^DIK
|
---|
| 51 | S XBRXREF("DIK FILE")=""
|
---|
| 52 | F XBRXREF("L")=0:0 S XBRXREF("DIK FILE")=$O(^UTILITY("DIK",$J,XBRXREF("DIK FILE"))) Q:XBRXREF("DIK FILE")="" D SETUPB
|
---|
| 53 | Q
|
---|
| 54 | ;
|
---|
| 55 | SETUPB ; KILL OFF DIK FILE/SUB-FILES NOT NEEDED
|
---|
| 56 | I '$D(^TMP("XBRXREF",$J,XBRXREF("DIK FILE"))) KILL ^UTILITY("DIK",$J,XBRXREF("DIK FILE")) Q
|
---|
| 57 | S XBRXREF("DIK FIELD")=""
|
---|
| 58 | F XBRXREF("L")=0:0 S XBRXREF("DIK FIELD")=$O(^UTILITY("DIK",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD"))) Q:XBRXREF("DIK FIELD")="" D SETUPC
|
---|
| 59 | Q
|
---|
| 60 | ;
|
---|
| 61 | SETUPC ; KILL OFF DIK FIELDS NOT NEEDED
|
---|
| 62 | I '$D(^TMP("XBRXREF",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD"))) KILL ^UTILITY("DIK",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD")) Q
|
---|
| 63 | S XBRXREF("DIK XREF")=0
|
---|
| 64 | F XBRXREF("L")=0:0 S XBRXREF("DIK XREF")=$O(^UTILITY("DIK",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD"),XBRXREF("DIK XREF"))) Q:XBRXREF("DIK XREF")="" D SETUPD
|
---|
| 65 | Q
|
---|
| 66 | ;
|
---|
| 67 | SETUPD ; KILL OFF DIK XREFS NOT NEEDED
|
---|
| 68 | I '$D(^TMP("XBRXREF",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD"),XBRXREF("DIK XREF"))) KILL ^UTILITY("DIK",$J,XBRXREF("DIK FILE"),XBRXREF("DIK FIELD"),XBRXREF("DIK XREF")) Q
|
---|
| 69 | Q
|
---|
| 70 | ;
|
---|
| 71 | KILL ; KILL XREFS
|
---|
| 72 | S XBRXREF("FILE")=""
|
---|
| 73 | F XBRXREF("L")=0:0 S XBRXREF("FILE")=$O(^TMP("XBRXREF",$J,XBRXREF("FILE"))) Q:XBRXREF("FILE")="" D KILL2
|
---|
| 74 | Q
|
---|
| 75 | ;
|
---|
| 76 | KILL2 ;
|
---|
| 77 | S XBRXREF("FIELD")=""
|
---|
| 78 | F XBRXREF("L")=0:0 S XBRXREF("FIELD")=$O(^TMP("XBRXREF",$J,XBRXREF("FILE"),XBRXREF("FIELD"))) Q:XBRXREF("FIELD")="" D KILL3
|
---|
| 79 | Q
|
---|
| 80 | KILL3 ;
|
---|
| 81 | S XBRXREF("XREF")=""
|
---|
| 82 | F XBRXREF("L")=0:0 S XBRXREF("XREF")=$O(^TMP("XBRXREF",$J,XBRXREF("FILE"),XBRXREF("FIELD"),XBRXREF("XREF"))) Q:XBRXREF("XREF")="" S X=^(XBRXREF("XREF")) W !,"Killing ",X KILL @(XBRXREF("GBL")_"X)")
|
---|
| 83 | Q
|
---|
| 84 | ;
|
---|
| 85 | XREF ; SET XREFS FOR ALL ENTRIES
|
---|
| 86 | D NOW^%DTC
|
---|
| 87 | S Y=%
|
---|
| 88 | X ^DD("DD")
|
---|
| 89 | W !!,"Beginning run at ",$P(Y,"@",2)," <WAIT>"
|
---|
| 90 | S (DA,DCNT)=0
|
---|
| 91 | D CNT^DIK1
|
---|
| 92 | Q
|
---|
| 93 | ;
|
---|
| 94 | EOJ ; EOJ HOUSEKEEPING
|
---|
| 95 | I 'XBRXREF("QFLG") D NOW^%DTC S Y=% X ^DD("DD") W !!,"Finished run at ",$P(Y,"@",2)
|
---|
| 96 | KILL XBRXREF,%,%H,%I,DA,DCNT,DIC,DIK,X,Y,^TMP("XBRXREF",$J),^UTILITY("DIK",$J)
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|