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

XBRXREF.m

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