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

AURXREF.m

Go to the documentation of this file.
  1. AURXREF ; RE-XREF SELECTED XREFS [ 10/27/87 8:31 AM ]
  1. ; EDE/10-12-87
  1. ;
  1. ; This routine re-xrefs selected cross references for
  1. ; a file. The xrefs are killed at the highest level and
  1. ; then reset. This is very different from what FileMan does when
  1. ; you RE-INDEX a field. FileMan does a logical kill and then sets
  1. ; the new xrefs. The reason for this is multiple fields may set the
  1. ; same xref so you would want to kill only the ones set by the
  1. ; field being RE-INDEXed.
  1. ;
  1. ; You must re-xref all fields that set any one of the xrefs being
  1. ; killed and reset, unless the xref is set the same from multiple
  1. ; fields. Very hard to explain. If you do not understand the
  1. ; problem, you probably shouldn't be running this routine.
  1. ;
  1. ; This routine executes an entry point in ^DIK to build the xref
  1. ; logic for all xrefs on the file. It then deletes the logic
  1. ; for all xrefs not selected, and executes another entry point
  1. ; in ^DIK to actually xref the file.
  1. ;
  1. ; TRIGGERS are very complex animals, which do not have a xref to kill
  1. ; plus may be conditional and may have no affect on the SET side
  1. ; at all. Because of the uncertainties here this routine will not
  1. ; do TRIGGERS.
  1. ;
  1. ; Xrefs at the multiple level would require a $O through the data
  1. ; global to kill, therefore, sub-file xrefs are not selectable
  1. ; unless they are cross-referenced to the whole file.
  1. ;
  1. START ;
  1. D INIT^AURXREF2 ; Do initialization
  1. D GETFILE^AURXREF2 ; Get file to be RE-XREFed
  1. I AURXREF("QFLG") D EOJ Q
  1. D BLDXRT^AURXREF2 ; Build xref table
  1. I AURXREF("QFLG") D EOJ Q
  1. D CONFIRM^AURXREF2 ; Get confirmation from user
  1. I AURXREF("QFLG") D EOJ Q
  1. D SETUP ; Set up xrefs for ^DIK
  1. D KILL ; Kill xrefs
  1. D XREF ; For each entry, set xrefs
  1. D EOJ ; Clean up
  1. Q
  1. ;
  1. SETUP ; SETUP XREFS FOR ^DIK
  1. S DIK=AURXREF("GBL"),X=1 D DD^DIK
  1. S AURXREF("DIK FILE")="" F AURXREF("L")=0:0 S AURXREF("DIK FILE")=$O(^UTILITY("DIK",$J,AURXREF("DIK FILE"))) Q:AURXREF("DIK FILE")="" D SETUPB
  1. Q
  1. ;
  1. SETUPB ; KILL OFF DIK FILE/SUB-FILES NOT NEEDED
  1. I '$D(^UTILITY("AURXREF",$J,AURXREF("DIK FILE"))) K ^UTILITY("DIK",$J,AURXREF("DIK FILE")) Q
  1. S AURXREF("DIK FIELD")="" F AURXREF("L")=0:0 S AURXREF("DIK FIELD")=$O(^UTILITY("DIK",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD"))) Q:AURXREF("DIK FIELD")="" D SETUPC
  1. Q
  1. ;
  1. SETUPC ; KILL OFF DIK FIELDS NOT NEEDED
  1. I '$D(^UTILITY("AURXREF",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD"))) K ^UTILITY("DIK",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD")) Q
  1. S AURXREF("DIK XREF")=0 F AURXREF("L")=0:0 S AURXREF("DIK XREF")=$O(^UTILITY("DIK",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD"),AURXREF("DIK XREF"))) Q:AURXREF("DIK XREF")="" D SETUPD
  1. Q
  1. ;
  1. SETUPD ; KILL OFF DIK XREFS NOT NEEDED
  1. I '$D(^UTILITY("AURXREF",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD"),AURXREF("DIK XREF"))) K ^UTILITY("DIK",$J,AURXREF("DIK FILE"),AURXREF("DIK FIELD"),AURXREF("DIK XREF")) Q
  1. Q
  1. ;
  1. KILL ; KILL XREFS
  1. S AURXREF("FILE")="" F AURXREF("L")=0:0 S AURXREF("FILE")=$O(^UTILITY("AURXREF",$J,AURXREF("FILE"))) Q:AURXREF("FILE")="" D KILL2
  1. Q
  1. ;
  1. KILL2 ;
  1. S AURXREF("FIELD")="" F AURXREF("L")=0:0 S AURXREF("FIELD")=$O(^UTILITY("AURXREF",$J,AURXREF("FILE"),AURXREF("FIELD"))) Q:AURXREF("FIELD")="" D KILL3
  1. Q
  1. KILL3 ;
  1. S AURXREF("XREF")="" F AURXREF("L")=0:0 S AURXREF("XREF")=$O(^UTILITY("AURXREF",$J,AURXREF("FILE"),AURXREF("FIELD"),AURXREF("XREF"))) Q:AURXREF("XREF")="" D KILL4
  1. Q
  1. ;
  1. KILL4 ;
  1. S X=^(AURXREF("XREF"))
  1. W !,"Killing ",X K @(AURXREF("GBL")_"X)")
  1. Q
  1. ;
  1. XREF ; SET XREFS FOR ALL ENTRIES
  1. D NOW^%DTC S Y=% X ^DD("DD") W !!,"Beginning run at ",$P(Y,"@",2)," <WAIT>"
  1. S (DA,DCNT)=0 D CNT^DIK1
  1. Q
  1. ;
  1. EOJ ; EOJ HOUSEKEEPING
  1. I 'AURXREF("QFLG") D NOW^%DTC S Y=% X ^DD("DD") W !!,"Finished run at ",$P(Y,"@",2)
  1. K AURXREF
  1. K %,%H,%I,DA,DIC,DIK,X,Y
  1. K ^UTILITY("AURXREF",$J),^UTILITY("DIK",$J)
  1. Q