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

DIEVK1.m

Go to the documentation of this file.
  1. DIEVK1 ;SFISC/MKO-KEY VALIDATION ;10:42 AM 30 Sep 1998
  1. ;;22.0;VA FileMan;;Mar 30, 1999
  1. ;Per VHA Directive 10-93-142, this routine should not be modified.
  1. ;
  1. BUILD(DIVKFDA,DIVKFLAG) ;Loop thru FDA and load key info
  1. N DIVKEYOK,DIVKFIL,DIVKFLD,DIVKIENS,DIVKQUIT
  1. ;
  1. S DIVKEYOK=1,DIVKFIL=0
  1. F S DIVKFIL=$O(@DIVKFDA@(DIVKFIL)) Q:'DIVKFIL D Q:$G(DIVKQUIT)
  1. . Q:'$D(^DD("KEY","F",DIVKFIL))
  1. . D:$G(DIVKFLAG)["K" GETPKEY(DIVKFIL)
  1. . S DIVKIENS=""
  1. . F S DIVKIENS=$O(@DIVKFDA@(DIVKFIL,DIVKIENS)) Q:DIVKIENS="" D Q:$G(DIVKQUIT)
  1. .. I $G(DIVKFLAG)["K",$E(DIVKIENS)="?",$E(DIVKIENS,2)'="+",'$$KFLD(DIVKFIL,DIVKIENS,DIVKFDA) S DIVKEYOK=0 I $G(DIVKFLAG)["Q" S DIVKQUIT=1 Q
  1. .. S DIVKFLD=0
  1. .. F S DIVKFLD=$O(@DIVKFDA@(DIVKFIL,DIVKIENS,DIVKFLD)) Q:'DIVKFLD D BLDFLD(DIVKFIL,DIVKIENS,DIVKFLD)
  1. Q DIVKEYOK
  1. ;
  1. BLDFLD(DIVKFIL,DIVKIENS,DIVKFLD) ;Build key/index info on a given field
  1. ; ^TMP("DIKK",$J,"L",key) = rfile^ui^priority
  1. ; ... ,file,iens) = ""
  1. ; ... ,"UIR") = uir
  1. ; ... ,"SS",n) = file^field^maxlen
  1. N DIVKEY,DIVKPRI,DIVKRFIL,DIVKSS,DIVKUI,DIVKUIR
  1. ;
  1. S DIVKEY=0
  1. F S DIVKEY=$O(^DD("KEY","F",DIVKFIL,DIVKFLD,DIVKEY)) Q:'DIVKEY D
  1. . Q:$D(^TMP("DIKK",$J,"L",DIVKEY,DIVKFIL,DIVKIENS))#2 S ^(DIVKIENS)=""
  1. . Q:$D(^TMP("DIKK",$J,"L",DIVKEY))#2
  1. . ;
  1. . D LOADKEY^DIKK1(DIVKEY)
  1. . S DIVKRFIL=$P($G(^DD("KEY",DIVKEY,0)),U),DIVKUI=$P($G(^(0)),U,4),DIVKPRI=$P($G(^(0)),U,3)
  1. . S ^TMP("DIKK",$J,"L",DIVKEY)=DIVKRFIL_U_DIVKUI_U_DIVKPRI
  1. . Q:'DIVKRFIL!'DIVKUI
  1. . D XRINFO^DIKCU2(DIVKUI,.DIVKUIR,"","","","",.DIVKSS)
  1. . S ^TMP("DIKK",$J,"L",DIVKEY,"UIR")=DIVKUIR
  1. . M ^TMP("DIKK",$J,"L",DIVKEY,"SS")=DIVKSS
  1. Q
  1. ;
  1. GETPKEY(KFIL) ;Get fields in primary key for file KFIL
  1. ; ^TMP("DIKK",$J,"P",kfile) = key^ui#^uifile^uiname
  1. ; ... ,file,field) = seq#
  1. ;
  1. N FIL,FLD,I,KEY,SEQ,UI
  1. S KEY=$O(^DD("KEY","AP",KFIL,"P",0)) Q:'KEY
  1. S I=0 F S I=$O(^DD("KEY",KEY,2,I)) Q:'I D
  1. . Q:$D(^DD("KEY",KEY,2,I,0))[0 S FLD=$P(^(0),U),FIL=$P(^(0),U,2),SEQ=$P(^(0),U,3)
  1. . Q:'FLD!'FIL!'SEQ
  1. . S ^TMP("DIKK",$J,"P",KFIL,FIL,FLD)=SEQ
  1. I $D(^TMP("DIKK",$J,"P",KFIL)) D
  1. . S UI=$P(^DD("KEY",KEY,0),U,4)
  1. . S ^TMP("DIKK",$J,"P",KFIL)=KEY_U_UI_U_$P($G(^DD("IX",+UI,0)),U,1,2)
  1. Q
  1. ;
  1. KFLD(KFIL,IENS,FDA) ;Check that at least one primary key field is in FDA
  1. N FIL,FLD,KEY,OK,SEQ
  1. S KEY=+$G(^TMP("DIKK",$J,"P",KFIL)) Q:'KEY 1
  1. S OK=0
  1. S FIL=0 F S FIL=$O(^TMP("DIKK",$J,"P",KFIL,FIL)) Q:'FIL D Q:OK
  1. . S FLD=0 F S FLD=$O(^TMP("DIKK",$J,"P",KFIL,FIL,FLD)) Q:'FLD D Q:OK
  1. .. S:"@"'[$G(@FDA@(FIL,IENS,FLD)) OK=1
  1. D:'OK ERR746(KFIL,KEY,IENS)
  1. Q OK
  1. ;
  1. FINDCONV(DIVKIENS,DIVKFIEN) ;Replace ?n in DIVKIENS with actual ien's
  1. N I,N,P
  1. F I=1:1:$L(DIVKIENS,",")-1 D
  1. . S P=$P(DIVKIENS,",",I) Q:P'["?"
  1. . S N=$G(@DIVKFIEN@($TR(P,"?+"))) Q:'N
  1. . S $P(DIVKIENS,",",I)=+$G(@DIVKFIEN@($TR(P,"?+")))
  1. Q DIVKIENS
  1. ;
  1. ERR740(FILE,KEY,IENS) ;New values are invalid because they create a duplicate
  1. ;Key '|1|' for the |2| file.
  1. N P,PEXT
  1. S P(1)=$P(^DD("KEY",KEY,0),U,2)
  1. S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
  1. S PEXT("FILE")=FILE,PEXT("KEY")=KEY,PEXT("IENS")=IENS
  1. D BLD^DIALOG(740,.P,.PEXT)
  1. Q
  1. ;
  1. ERR742(FILE,FIELD,KEY,IENS) ; The value of field |1| in the |2| file
  1. ;cannot be deleted because that field is part of the '|3|' key.
  1. N P,PEXT
  1. S P(1)=$$FLDNM^DIEFU(FILE,FIELD)
  1. S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
  1. S P(3)=$P(^DD("KEY",KEY,0),U,2)
  1. S PEXT("FILE")=FILE,PEXT("FIELD")=FIELD,PEXT("IENS")=IENS
  1. D BLD^DIALOG(742,.P,.PEXT)
  1. Q
  1. ;
  1. ERR744(FILE,FIELD,KEY,IENS) ;Field |1| is part of Key '|2|', but the
  1. ;field has not been assigned a value.
  1. N P,PEXT
  1. S P(1)=$$FLDNM^DIEFU(FILE,FIELD)
  1. S P(2)=$P(^DD("KEY",KEY,0),U,2)
  1. S PEXT("FILE")=FILE,PEXT("FIELD")=FIELD,PEXT("IENS")=IENS
  1. D BLD^DIALOG(744,.P,.PEXT)
  1. Q
  1. ;
  1. ERR746(FILE,KEY,IENS) ;At least one field in Primary Key '|1|' must be
  1. ;provided in the FDA to look up '|IENS|' in the |2| file.
  1. N P,PEXT
  1. S P(1)=$P(^DD("KEY",KEY,0),U,2)
  1. S P(2)=$O(^DD(FILE,0,"NM","")) S:P(2)?." " P(2)="#"_FILE
  1. S P("IENS")=IENS
  1. S PEXT("FILE")=FILE,PEXT("KEY")=KEY,PEXT("IENS")=IENS
  1. D BLD^DIALOG(746,.P,.PEXT)
  1. Q