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

DIKCUTL.m

Go to the documentation of this file.
  1. DIKCUTL ;SFISC/MKO-UTILITY OPTION TO MODIFY INDEX ;2:57 PM 25 Apr 2002 [ 12/09/2003 4:10 PM ]
  1. ;;22.0;VA FileMan;**68,108,1002**;Mar 30, 1999
  1. ;Per VHA Directive 10-93-142, this routine should not be modified.
  1. ;
  1. MOD ;Utility option to modify an index
  1. N DIKCCNT,DIKCFILE,DIKCQUIT,DIKCROOT,DIKCTOP,DIXR
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. ;
  1. ;Prompt for file
  1. D SELFILE^DIKCU(.DIKCROOT,.DIKCTOP,.DIKCFILE)
  1. Q:$G(DIKCROOT)="" Q:'$G(DIKCTOP)
  1. S:'$G(DIKCFILE) DIKCFILE=DIKCTOP
  1. ;
  1. REMOD ;Get and list indexes
  1. I $G(DIKCQUIT) W ! Q
  1. D GETXR^DIKCUTL2(DIKCFILE,.DIKCCNT)
  1. W ! D LIST^DIKCUTL2(.DIKCCNT)
  1. ;
  1. ;Prompt for action
  1. I 'DIKCCNT S Y="C"
  1. E D RD^DICD I $D(DIRUT) W ! Q
  1. ;
  1. ;Delete
  1. I Y="D" D G REMOD
  1. . S DIXR=$$CHOOSE^DIKCUTL2(.DIKCCNT,"delete") Q:'DIXR
  1. . I $D(^DD("KEY","AU",DIXR)) W ! D PRTMSG^DIKCUTL2(DIXR) Q
  1. . S DIR(0)="Y"
  1. . S DIR("A")="Are you sure you want to delete the index definition"
  1. . S DIR("B")="NO"
  1. . D ^DIR K DIR Q:$D(DIRUT)!'Y
  1. . D DELETE(DIXR,DIKCTOP,DIKCFILE)
  1. ;
  1. ;Edit
  1. I Y="E" D G REMOD
  1. . S DIXR=$$CHOOSE^DIKCUTL2(.DIKCCNT,"edit") Q:'DIXR
  1. . D EDIT(DIXR,DIKCTOP,DIKCFILE)
  1. ;
  1. ;Create
  1. I Y="C" D G REMOD
  1. . S DIR(0)="Y",DIR("B")="No"
  1. . S DIR("A")="Want to create a new index for this file"
  1. . D ^DIR K DIR I $D(DIRUT)!'Y S:'DIKCCNT DIKCQUIT=1 Q
  1. . D CREATE^DIKCUTL1(DIKCTOP,DIKCFILE)
  1. Q
  1. ;
  1. DELETE(DIXR,DIKCTOP,DIKCFILE) ;Delete an index
  1. N DA,DIK,DIKCFLIS,DIKCOLD
  1. D GETFLIST(DIXR,.DIKCFLIS)
  1. D LOADXREF^DIKC1(DIKCFILE,"","K",DIXR,"","DIKCOLD")
  1. ;
  1. ;Delete the index
  1. S DIK="^DD(""IX"",",DA=DIXR D ^DIK K DIK,DA
  1. W !!," Index definition deleted."
  1. ;
  1. ;Run kill logic, recompile
  1. D KSC^DIKCUTL3(DIKCTOP,.DIKCOLD,"",.DIKCFLIS)
  1. Q
  1. ;
  1. EDIT(DIXR,DIKCTOP,DIKCFILE) ;Edit an index
  1. N DA,DDSCHANG,DDSFILE,DDSPARM,DR
  1. N DIKCFLIS,DIKCNEW,DIKCOLD,DIKCREB
  1. ;
  1. ;Save original fields list and logic
  1. D GETFLIST(DIXR,.DIKCFLIS)
  1. D LOADXREF^DIKC1(DIKCFILE,"","KS",DIXR,"","DIKCOLD")
  1. ;
  1. ;Invoke form to edit, quit if there were no changes
  1. S DDSFILE=.11,DA=DIXR,DDSPARM="C"
  1. S DR="[DIKC EDIT"_$S($D(^DD("KEY","AU",DIXR)):" UI]",1:"]")
  1. D ^DDS Q:'$G(DDSCHANG) K DDSFILE,DA,DDSPARM,DR
  1. ;
  1. ;If index was deleted, run kill logic, recompile and quit
  1. I $D(^DD("IX",DIXR,0))[0 D Q
  1. . K DIKCOLD(DIKCFILE,DIXR,"S"),DIKCOLD(DIKCFILE,DIXR,"SC")
  1. . D KSC^DIKCUTL3(DIKCTOP,.DIKCOLD,"",.DIKCFLIS)
  1. ;
  1. ;Rebuild the set/kill logic if a crv was deleted,
  1. ;but form was not saved.
  1. ;Deleting a crv sets DIKCREB; saving the form, kills it.
  1. D:$G(DIKCREB) BLDLOG^DIKCUTL2(DIXR)
  1. ;
  1. ;Load new logic; quit if equal to old logic
  1. D LOADXREF^DIKC1(DIKCFILE,"","KS",DIXR,"","DIKCNEW")
  1. Q:$$GCMP^DIKCU2("DIKCOLD","DIKCNEW")
  1. ;
  1. ;Run old kill logic and new set logic.
  1. ;Add new fields to list, and recompile input templates and xrefs.
  1. D GETFLIST(DIXR,.DIKCFLIS)
  1. K DIKCOLD(DIKCFILE,DIXR,"S"),DIKCOLD(DIKCFILE,DIXR,"SC")
  1. D KSC^DIKCUTL3(DIKCTOP,.DIKCOLD,.DIKCNEW,.DIKCFLIS)
  1. Q
  1. ;
  1. ;============================
  1. ;GETFLIST(index#,.fieldList)
  1. ;============================
  1. ;Loop through Cross Reference Values multiple and
  1. ;build list of fields used in Index XR. (Existing items in fieldList
  1. ;array are NOT deleted.)
  1. ;In:
  1. ; XR = Index ien
  1. ;Out:
  1. ; FLIST(file#,field#) = ""
  1. ;
  1. GETFLIST(XR,FLIST) ;
  1. N FIL,FLD,I
  1. S I=0 F S I=$O(^DD("IX",XR,11.1,I)) Q:'I D
  1. . Q:$P($G(^DD("IX",XR,11.1,I,0)),U,2)'="F"
  1. . S FIL=$P(^DD("IX",XR,11.1,I,0),U,3),FLD=$P(^(0),U,4) Q:'FIL Q:'FLD
  1. . S FLIST(FIL,FLD)=""
  1. Q