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

XTIDTERM.m

Go to the documentation of this file.
  1. XTIDTERM ;OAKCIOFO/JLG - TERM/CONCEPT index entry ;03/18/2005 15:12
  1. ;;7.3;TOOLKIT;**93**;Apr 25, 1995
  1. Q
  1. ; encapsulates a term/concept index entry for both
  1. ; "set of codes" and "table" indexes
  1. ; it interfaces through FileMan
  1. ; TERM is by reference and is in FDA format + CTX data
  1. ; only exceptions are $$GETSTAT and $$SETSTAT
  1. ; FDA format is left for convenience but future
  1. ; implementations might customize it.
  1. ; TERM is passed by ref in all calls
  1. GETVUID(TERM) ; return VUID value
  1. ;
  1. N FILE,IENS
  1. Q:'$D(TERM)
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S IENS=$O(TERM(FILE,""))
  1. Q $G(TERM(FILE,IENS,"VUID","I"))
  1. ;
  1. GETMASTR(TERM) ; return MASTER VUID value
  1. ;
  1. N FILE,IENS
  1. Q:'$D(TERM)
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S IENS=$O(TERM(FILE,""))
  1. Q $G(TERM(FILE,IENS,"MASTER ENTRY FOR VUID","I"))
  1. ;
  1. GETSTAT(TERM,DATE) ; return MASTER VUID value
  1. ;
  1. N FILE,SFILE,IENS,STATUS
  1. Q:'$D(TERM)
  1. S:'$G(DATE) DATE=$$NOW^XLFDT
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S SFILE=TERM("CTX","TERMSTATUS SUBFILE#")
  1. S IENS=","_$O(TERM(FILE,""))
  1. S STATUS=$$FINDSTAT(SFILE,IENS,DATE)
  1. ;I 'STATUS Q "^status not found for given date/time"
  1. Q $P(STATUS,"^",2,4)
  1. ;
  1. SETVUID(TERM,VUID) ; set new VUID to existing TERM
  1. ;
  1. N DIERR,FLAGS,FILE,IENS,MSG,MYFDA,SUCCESS
  1. S VUID=$G(VUID)
  1. Q:'$D(TERM)!('VUID) 0
  1. ; check constraints first
  1. Q:$$CNSTR1() 0
  1. S SUCCESS=0,FLAGS="KS"
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S IENS=$O(TERM(+FILE,""))
  1. Q:IENS']"" SUCCESS
  1. S MYFDA(FILE,IENS,99.99)=VUID
  1. D FILE^DIE(FLAGS,"MYFDA","MSG")
  1. I '$D(MSG("DIERR")) D
  1. . S SUCCESS=1
  1. . ; update the cached TERM array
  1. . S TERM(FILE,IENS,"VUID","I")=VUID
  1. ;
  1. Q SUCCESS
  1. ;
  1. SETMASTR(TERM,MVUID) ; set MASTER ENTRY flag to existing TERM
  1. ;
  1. N DIERR,FLAGS,FILE,IENS,MSG,MYFDA,SUCCESS
  1. S MVUID=+$G(MVUID)
  1. Q:'$D(TERM) 0
  1. ; check constraints first and override VUID flag
  1. I MVUID,$$CNSTR2() S MVUID=0
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S IENS=$O(TERM(+FILE,""))
  1. Q:IENS']"" 0
  1. S SUCCESS=0,FLAGS="KS"
  1. S MYFDA(FILE,IENS,99.98)=MVUID
  1. D FILE^DIE(FLAGS,"MYFDA","MSG")
  1. I '$D(MSG("DIERR")) D
  1. . S SUCCESS=1
  1. . ; update the cached TERM array
  1. . S TERM(FILE,IENS,"MASTER ENTRY FOR VUID","I")=MVUID
  1. ;
  1. Q SUCCESS
  1. ;
  1. SETSTAT(TERM,STATUS,DATE) ; set status
  1. ; set status and date for the given term
  1. N DIERR,FLAGS,FILE,SFILE,MYFDA,MSG,SUCCESS,IENS
  1. S STATUS=$G(STATUS),DATE=$G(DATE)
  1. Q:'$D(TERM)!(STATUS']"") 0
  1. S SUCCESS=0,FLAGS="KS"
  1. S STATUS=+$G(STATUS)
  1. S:'$G(DATE) DATE=$$NOW^XLFDT
  1. S FILE=TERM("CTX","SOURCE FILE#")
  1. S SFILE=TERM("CTX","TERMSTATUS SUBFILE#")
  1. S IENS="?+1,"_$O(TERM(FILE,""))
  1. S MYFDA(SFILE,IENS,.01)=DATE
  1. S MYFDA(SFILE,IENS,.02)=STATUS
  1. D UPDATE^DIE(FLAGS,"MYFDA","","MSG")
  1. S:'$D(MSG("DIERR")) SUCCESS=1
  1. Q SUCCESS
  1. ;
  1. FINDSTAT(FILE,IENS,DATE) ; find status info
  1. ; find status of term for given DATE
  1. ; D LIST^DIC(FILE,IENS,FIELDS,FLAGS,NUMBER,[.]FROM,[.]PART,INDEX,[.]SCREEN,IDENTIFIER,TARGET_ROOT,MSG_ROOT)
  1. N DIERR,FIELDS,FLAGS,FROM,MSG,MYSTAT,NUMBER,STATUS
  1. S STATUS="^^^"
  1. S:'$G(DATE) DATE=$$NOW^XLFDT
  1. S FROM=DATE+.000001
  1. S FIELDS="@;.01IE;.02IE",FLAGS="B",NUMBER=1
  1. D LIST^DIC(FILE,IENS,FIELDS,FLAGS,NUMBER,FROM,"","","","","MYSTAT","MSG")
  1. Q:$D(MSG("DIERR")) STATUS
  1. I $D(MYSTAT("DILIST","ID",1)) D
  1. . N ESTAT,IDATE,IENSTAT,ISTAT
  1. . S IENSTAT=$G(MYSTAT("DILIST",2,1))
  1. . S ISTAT=$G(MYSTAT("DILIST","ID",1,.02,"I"))
  1. . S ESTAT=$G(MYSTAT("DILIST","ID",1,.02,"E"))
  1. . S IDATE=$G(MYSTAT("DILIST","ID",1,.01,"I"))
  1. . S STATUS=IENSTAT_"^"_ISTAT_"^"_IDATE_"^"_ESTAT
  1. ;
  1. Q STATUS
  1. ;
  1. DUPLMSTR(FILE,FIELD,TVUID) ; check duplicates
  1. ; used to determine existence of duplicate
  1. ; entries with the same VUID and master flag
  1. ; can potentially use this from DD trigger
  1. N XTTARR,DUPL
  1. S DUPL=0
  1. D GETIREF^XTID(FILE,FIELD,TVUID,"XTTARR",1)
  1. I +$G(XTTARR) S DUPL=1
  1. Q DUPL
  1. ;
  1. CNSTR1() ; check constraints when setting VUID
  1. ; called from SETVUID()
  1. ; only one MASTER ENTRY FOR VUID can exist
  1. N CONSTR,DUPL,MFLAG,TFILE,TFIELD
  1. S CONSTR=1
  1. S MFLAG=$$GETMASTR(.TERM)
  1. Q:'MFLAG 'CONSTR ; no constraint
  1. S TFILE=TERM("CTX","TERM FILE#")
  1. S TFIELD=TERM("CTX","TERM FIELD#")
  1. S DUPL=$$DUPLMSTR(TFILE,TFIELD,VUID)
  1. Q:'DUPL 'CONSTR ; no constraint
  1. Q CONSTR ; constrained
  1. ;
  1. CNSTR2() ; check constraints when setting MASTER ENTRY flag
  1. ; called from SETMASTR()
  1. ; only one MASTER ENTRY FOR VUID can exist
  1. N CONSTR,DUPL,MFLAG,TFILE,TFIELD,TVUID
  1. S CONSTR=1
  1. S MFLAG=$$GETMASTR(.TERM)
  1. Q:MFLAG 'CONSTR ; TERM is already MASTER
  1. S TFILE=TERM("CTX","TERM FILE#")
  1. S TFIELD=TERM("CTX","TERM FIELD#")
  1. S TVUID=$$GETVUID(.TERM)
  1. S DUPL=$$DUPLMSTR(TFILE,TFIELD,TVUID)
  1. Q:'DUPL 'CONSTR ; no constraint
  1. Q CONSTR ; constrained
  1. ;