- DICA ;SEA/TOAD-VA FileMan, Updater, Engine ;1:33 PM 18 Nov 1999 [ 04/02/2003 8:25 AM ]
- ;;22.0;VA FileMan;**1001**;APR 1, 2003
- ;;22.0;VA FileMan;**1,4,17**;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- ;
- ADD(DIFLAGS,DIFDA,DIEN,DIMSGA) ;
- ;
- ADDX ; Branch in from UPDATE^DIE
- ; ENTRY POINT--add a new entry to a file
- ; subroutine, DIEN passed by reference
- I '$D(DIQUIET) N DIQUIET S DIQUIET=1
- I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
- N DICLERR S DICLERR=$G(DIERR) K DIERR
- INPUT ;
- ; initialize input parameters & check
- N DIRULE S DIRULE=$$GETTMP^DIKC1("DICA")
- N DIFDAO
- S DIFLAGS=$G(DIFLAGS)
- I $TR(DIFLAGS,"EKSUY")'="" D Q
- . D ERR^DICA3(301,"","","",DIFLAGS),CLOSE
- S DIFDA=$G(DIFDA) I $D(@DIFDA)<10 D Q
- . D ERR^DICA3(202,"","","","FDA"),CLOSE
- S DIFDAO=DIFDA
- S DIEN=$G(DIEN) I DIEN="" S DIEN="DIDUMMY" N DIDUMMY
- PRE ;
- N DIOK S DIOK=1 D CHECK^DICA1(DIFLAGS,.DIFDA,DIEN,DIRULE,.DIOK)
- I $G(DIERR) D CLOSE Q
- I 'DIOK D ERR^DICA3(202,"","","","FDA"),CLOSE Q
- SEQ ;
- N DICHECK,DIENTRY,DIFILE,DIOUT1,DINEXT
- S (DIOUT1,DINEXT)="" F D Q:DIOUT1
- . S DINEXT=$O(@DIRULE@("NEXT",DINEXT)) I DINEXT="" S DIOUT1=1 Q
- . X @DIRULE@("NEXT",DINEXT)
- FILES . ;
- . I $P($G(^DD($$FNO^DILIBF(DIFILE),0,"DI")),U,2)["Y" D Q:DIOUT1
- . . S DIOUT1=DIFLAGS'["Y"&'$D(DIOVRD)
- . . I DIOUT1 D ERR^DICA3(405,DIFILE,"","",DIFILE)
- ENTRIES . ;
- . N DIDA,DIENP,DIOP,DIROOT,DISEQ
- . S DIDA=$P(DIENTRY,",") I +DIDA=DIDA Q
- . S DIENP=$$IEN(DIENTRY,"",DIRULE)
- . S DIOP=$E(DIDA,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
- . S DISEQ=$P(DIDA,DIOP,2)
- FINDING . ;
- . ; Finding (?) or LAYGO/FInding (?+) nodes
- . I DIOP["?" D Q
- . . I DIOP="?+",DIENP[",," S @DIRULE@("NEXTADD",DINEXT)=@DIRULE@("NEXT",DINEXT) Q
- . . N DIFIND,DIFORMAT,DIGET,DIINDEX,DIVALUE
- . . S DIFORMAT="B"_$S(DIFLAGS["E":"",1:"Q")_$S(DIOP="?+":"X",1:"")
- . . S DIGET=DIFDA
- . . I DIFLAGS["E",DIOP["?" S DIGET=DIFDAO
- . . I DIFLAGS["K",$D(^TMP("DIKK",$J,"P",DIFILE))#2 D
- . . . D GETKVALS(.DIVALUE,.DIINDEX)
- . . E S DIVALUE=$G(@DIGET@(DIFILE,DIENTRY,.01))
- . . S DIFIND=$$FIND1^DIC(DIFILE,DIENP,DIFORMAT,.DIVALUE,$G(DIINDEX))
- . . I $G(DIERR) S DIOUT1=1 Q
- . . I DIOP="?+",'DIFIND S @DIRULE@("NEXTADD",DINEXT)=@DIRULE@("NEXT",DINEXT) Q
- . . I 'DIFIND S DIOUT1=1 D Q
- . . . I $D(DIVALUE)=10 N I,Q S DIVALUE="",(I,Q)=0 F S I=$O(DIVALUE(I)) Q:'I D Q:Q
- . . . . Q:DIVALUE(I)=""
- . . . . S:DIVALUE]"" DIVALUE=DIVALUE_";"
- . . . . I $L(DIVALUE)+$L(DIVALUE(I))>252 D
- . . . . . S DIVALUE=$E(DIVALUE,1,252)_$E(DIVALUE(I),1,252-$L(DIVALUE))_"..."
- . . . . . S Q=1
- . . . . E S DIVALUE=$G(DIVALUE)_$E(DIVALUE(I),1,251)
- . . . D ERR^DICA3(703,DIFILE,DIENTRY,"",DIVALUE)
- . . S @DIEN@(DISEQ)=DIFIND
- . . I DIOP="?+" S @DIEN@(DISEQ,0)="?"
- . . S @DIRULE@("IEN",DISEQ)=DIFIND
- . . I DIFLAGS["K",$D(^TMP("DIKK",$J,"P",DIFILE)) D SAVEK Q
- . . D SAVE
- . ; Adding (+) nodes
- . I '$G(DICHECK) S DICHECK=1 D ADDLF S:DIENP[",," DIENP=$$IEN(DIENTRY,"",DIRULE) I $G(DIERR) S DIOUT1=1 Q
- . D ADDING
- ;
- FILER ; file the data for the new records
- I '$G(DIERR),$D(@DIFDA) D
- . I '$G(DICHECK) D ADDLF Q:$G(DIERR)!'$D(@DIFDA)
- . D FILE^DIEF($E("S",DIFLAGS["S")_"U",DIFDA,"",DIEN)
- I '$G(DIERR),DIFLAGS'["S" K @DIFDAO
- I $G(DIERR)!(DIFLAGS["S"),DIFLAGS'["E" D
- . M @DIFDA=@DIRULE@("SAVE")
- D CLOSE
- Q
- ;
- ADDING ;
- N DIENEW,DIKEY
- I $L(DIENP,",")>2 S DIOK=$$VMINUS9^DIEFU(DIFILE,DIENP) I 'DIOK D Q
- . S DIOUT1=1
- . D ERR^DICA3(602,DIFILE,$P(DIENP,",",$L(DIENP,",")-1))
- S DIROOT=$$ROOT^DIQGU(DIFILE,DIENP)
- D DA^DILF(DIENTRY,.DIENEW)
- A1 S DIENEW=$$IEN(DIENTRY,$G(@DIEN@(DISEQ)),DIRULE)
- S DIKEY=$G(@DIFDA@(DIFILE,DIENTRY,.01)) I DIKEY="" D Q
- . S DIOUT1=1 D ERR^DICA3(202,"","","","FDA")
- S DIOK=$$LAYGO(DIFILE,.DIENEW,DIKEY)
- I 'DIOK S DIOUT1=1 D Q
- . I '$G(DIERR) D ERR^DICA3(405,DIFILE,"","",DIFILE) Q
- . N DIENS S DIENS="New entry"
- . I $L(DIENEW,",")>2 S DIENS=DIENS_" under record: "_DIENEW
- . N DI1 S DI1="LAYGO Node on the new value '"_DIKEY_"'"
- . D ERR^DICA3(120,DIFILE,DIENS,.01,DI1)
- D CREATE^DICA3(DIFILE,.DIENEW,DIROOT,DIKEY)
- S DIENEW=+DIENEW
- I 'DIENEW S DIOUT1=1 Q
- L -@(DIROOT_"DIENEW)")
- S @DIEN@(DISEQ)=DIENEW
- I DIOP="?+" S @DIEN@(DISEQ,0)="+"
- S @DIRULE@("IEN",DISEQ)=DIENEW
- D SAVE
- Q
- ;
- LAYGO(DIFILE,DIEN,DIKEY) ;
- ; ADDING--return if LAYGO permitted
- ; function, all by value
- N DA,DIOK,DINODE,DIOUTS,X,Y,Y1
- S DIOK=1,DINODE="",DIOUTS=0 F D I DIOUTS!'DIOK Q
- . S DINODE=$O(^DD(DIFILE,.01,"LAYGO",DINODE))
- . I DINODE'>0 S DIOUTS=1 Q
- . I $D(^DD(DIFILE,.01,"LAYGO",DINODE,0))[0 Q
- . S X=DIKEY M DA=DIEN S Y=$P(DA,","),Y1=DA,DA=$P(DA,",")
- . I 1 X ^DD(DIFILE,.01,"LAYGO",DINODE,0) S DIOK=$T&'$G(DIERR)
- Q DIOK
- ;
- SAVE I DIFLAGS'["E" D
- . S @DIRULE@("SAVE",DIFILE,DIENTRY,.01)=@DIFDA@(DIFILE,DIENTRY,.01)
- K @DIFDA@(DIFILE,DIENTRY,.01)
- Q
- ;
- SAVEK ; Remove primary key field from FDA; save in ^TMP first if necessary
- N DIFLD
- S DIFLD=0
- F S DIFLD=$O(^TMP("DIKK",$J,"P",DIFILE,DIFILE,DIFLD)) Q:'DIFLD D
- . Q:'^TMP("DIKK",$J,"P",DIFILE,DIFILE,DIFLD)
- . Q:$D(@DIGET@(DIFILE,DIENTRY,DIFLD))[0
- . S:DIFLAGS'["E" @DIRULE@("SAVE",DIFILE,DIENTRY,DIFLD)=@DIFDA@(DIFILE,DIENTRY,DIFLD)
- . K @DIFDA@(DIFILE,DIENTRY,DIFLD)
- Q
- ;
- IEN(DIENTRY,DIENF,DIRULE) ;
- ; ADDING/FINDING--return translated IEN String
- ; function, DIENTRY passed by value
- N DIC,DIENEW,DIOP,DIP,DIPNEW,DISEQ
- S DIENEW=""
- S DIENF=$G(DIENF)
- S DIP="" F DIC=1:1 D I DIP="" Q
- . S DIP=$P(DIENTRY,",",DIC) I DIP="" Q
- . D
- . . I +DIP=DIP S DIPNEW=DIP Q
- IEN1 . . I DIC=1 S DIPNEW=DIENF Q
- . . S DIOP=$E(DIP,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
- . . S DISEQ=$P(DIP,DIOP,2,9999)
- . . S DIPNEW=$G(@DIRULE@("IEN",DISEQ))
- . S $P(DIENEW,",",DIC)=DIPNEW
- I DIENEW'="" S DIENEW=DIENEW_","
- Q DIENEW
- ;
- CLOSE I DICLERR'=""!$G(DIERR) D
- . S DIERR=$G(DIERR)+DICLERR_U_($P($G(DIERR),U,2)+$P(DICLERR,U,2))
- I $G(DIMSGA)'="" D CALLOUT^DIEFU(DIMSGA)
- K @DIRULE,^TMP("DIKK",$J)
- Q
- ;
- GETKVALS(DIVALUE,DIINDEX) ; Get primary key values and uniq index
- N DIFLD,DIKEY,DISQ
- K DIVALUE
- S DIKEY=$P(^TMP("DIKK",$J,"P",DIFILE),U),DIINDEX=$P(^(DIFILE),U,4)
- Q:DIINDEX=""!'DIKEY
- ;
- S DIFLD=0
- F S DIFLD=$O(^TMP("DIKK",$J,"P",DIFILE,DIFILE,DIFLD)) Q:'DIFLD D
- . S DISQ=^TMP("DIKK",$J,"P",DIFILE,DIFILE,DIFLD) Q:'DISQ
- . Q:$D(@DIGET@(DIFILE,DIENTRY,DIFLD))[0
- . S DIVALUE(DISQ)=@DIGET@(DIFILE,DIENTRY,DIFLD)
- Q
- ;
- ADDLF ; Check key integrity
- I $D(^TMP("DIKK",$J,"L")),'$$CHECK^DIEVK(DIFDA,DIFLAGS,DIEN) Q
- ;
- ; Add records for LAYGO/Finding nodes which were not found
- N DINEXT
- S (DINEXT,DIOUT1)=""
- F S DINEXT=$O(@DIRULE@("NEXTADD",DINEXT)) Q:DINEXT="" D Q:DIOUT1
- . N DIENP,DIFILE,DIENTRY,DIOP,DIROOT,DISEQ
- . X @DIRULE@("NEXTADD",DINEXT)
- . S DIENP=$$IEN(DIENTRY,"",DIRULE)
- . S DIOP="?+"
- . S DISEQ=$P($P(DIENTRY,","),DIOP,2)
- . D ADDING
- Q
- DICA ;SEA/TOAD-VA FileMan, Updater, Engine ;1:33 PM 18 Nov 1999 [ 04/02/2003 8:25 AM ]
- +1 ;;22.0;VA FileMan;**1001**;APR 1, 2003
- +2 ;;22.0;VA FileMan;**1,4,17**;Mar 30, 1999
- +3 ;Per VHA Directive 10-93-142, this routine should not be modified.
- +4 ;
- ADD(DIFLAGS,DIFDA,DIEN,DIMSGA) ;
- +1 ;
- ADDX ; Branch in from UPDATE^DIE
- +1 ; ENTRY POINT--add a new entry to a file
- +2 ; subroutine, DIEN passed by reference
- +3 IF '$DATA(DIQUIET)
- NEW DIQUIET
- SET DIQUIET=1
- +4 IF '$DATA(DIFM)
- NEW DIFM
- SET DIFM=1
- DO INIZE^DIEFU
- +5 NEW DICLERR
- SET DICLERR=$GET(DIERR)
- KILL DIERR
- INPUT ;
- +1 ; initialize input parameters & check
- +2 NEW DIRULE
- SET DIRULE=$$GETTMP^DIKC1("DICA")
- +3 NEW DIFDAO
- +4 SET DIFLAGS=$GET(DIFLAGS)
- +5 IF $TRANSLATE(DIFLAGS,"EKSUY")'=""
- Begin DoDot:1
- +6 DO ERR^DICA3(301,"","","",DIFLAGS)
- DO CLOSE
- End DoDot:1
- QUIT
- +7 SET DIFDA=$GET(DIFDA)
- IF $DATA(@DIFDA)<10
- Begin DoDot:1
- +8 DO ERR^DICA3(202,"","","","FDA")
- DO CLOSE
- End DoDot:1
- QUIT
- +9 SET DIFDAO=DIFDA
- +10 SET DIEN=$GET(DIEN)
- IF DIEN=""
- SET DIEN="DIDUMMY"
- NEW DIDUMMY
- PRE ;
- +1 NEW DIOK
- SET DIOK=1
- DO CHECK^DICA1(DIFLAGS,.DIFDA,DIEN,DIRULE,.DIOK)
- +2 IF $GET(DIERR)
- DO CLOSE
- QUIT
- +3 IF 'DIOK
- DO ERR^DICA3(202,"","","","FDA")
- DO CLOSE
- QUIT
- SEQ ;
- +1 NEW DICHECK,DIENTRY,DIFILE,DIOUT1,DINEXT
- +2 SET (DIOUT1,DINEXT)=""
- FOR
- Begin DoDot:1
- +3 SET DINEXT=$ORDER(@DIRULE@("NEXT",DINEXT))
- IF DINEXT=""
- SET DIOUT1=1
- QUIT
- +4 XECUTE @DIRULE@("NEXT",DINEXT)
- FILES ;
- +1 IF $PIECE($GET(^DD($$FNO^DILIBF(DIFILE),0,"DI")),U,2)["Y"
- Begin DoDot:2
- +2 SET DIOUT1=DIFLAGS'["Y"&'$DATA(DIOVRD)
- +3 IF DIOUT1
- DO ERR^DICA3(405,DIFILE,"","",DIFILE)
- End DoDot:2
- IF DIOUT1
- QUIT
- ENTRIES ;
- +1 NEW DIDA,DIENP,DIOP,DIROOT,DISEQ
- +2 SET DIDA=$PIECE(DIENTRY,",")
- IF +DIDA=DIDA
- QUIT
- +3 SET DIENP=$$IEN(DIENTRY,"",DIRULE)
- +4 SET DIOP=$EXTRACT(DIDA,1,2)
- IF DIOP'="?+"
- SET DIOP=$EXTRACT(DIOP)
- +5 SET DISEQ=$PIECE(DIDA,DIOP,2)
- FINDING ;
- +1 ; Finding (?) or LAYGO/FInding (?+) nodes
- +2 IF DIOP["?"
- Begin DoDot:2
- +3 IF DIOP="?+"
- IF DIENP[",,"
- SET @DIRULE@("NEXTADD",DINEXT)=@DIRULE@("NEXT",DINEXT)
- QUIT
- +4 NEW DIFIND,DIFORMAT,DIGET,DIINDEX,DIVALUE
- +5 SET DIFORMAT="B"_$SELECT(DIFLAGS["E":"",1:"Q")_$SELECT(DIOP="?+":"X",1:"")
- +6 SET DIGET=DIFDA
- +7 IF DIFLAGS["E"
- IF DIOP["?"
- SET DIGET=DIFDAO
- +8 IF DIFLAGS["K"
- IF $DATA(^TMP("DIKK",$JOB,"P",DIFILE))#2
- Begin DoDot:3
- +9 DO GETKVALS(.DIVALUE,.DIINDEX)
- End DoDot:3
- +10 IF '$TEST
- SET DIVALUE=$GET(@DIGET@(DIFILE,DIENTRY,.01))
- +11 SET DIFIND=$$FIND1^DIC(DIFILE,DIENP,DIFORMAT,.DIVALUE,$GET(DIINDEX))
- +12 IF $GET(DIERR)
- SET DIOUT1=1
- QUIT
- +13 IF DIOP="?+"
- IF 'DIFIND
- SET @DIRULE@("NEXTADD",DINEXT)=@DIRULE@("NEXT",DINEXT)
- QUIT
- +14 IF 'DIFIND
- SET DIOUT1=1
- Begin DoDot:3
- +15 IF $DATA(DIVALUE)=10
- NEW I,Q
- SET DIVALUE=""
- SET (I,Q)=0
- FOR
- SET I=$ORDER(DIVALUE(I))
- IF 'I
- QUIT
- Begin DoDot:4
- +16 IF DIVALUE(I)=""
- QUIT
- +17 IF DIVALUE]""
- SET DIVALUE=DIVALUE_";"
- +18 IF $LENGTH(DIVALUE)+$LENGTH(DIVALUE(I))>252
- Begin DoDot:5
- +19 SET DIVALUE=$EXTRACT(DIVALUE,1,252)_$EXTRACT(DIVALUE(I),1,252-$LENGTH(DIVALUE))_"..."
- +20 SET Q=1
- End DoDot:5
- +21 IF '$TEST
- SET DIVALUE=$GET(DIVALUE)_$EXTRACT(DIVALUE(I),1,251)
- End DoDot:4
- IF Q
- QUIT
- +22 DO ERR^DICA3(703,DIFILE,DIENTRY,"",DIVALUE)
- End DoDot:3
- QUIT
- +23 SET @DIEN@(DISEQ)=DIFIND
- +24 IF DIOP="?+"
- SET @DIEN@(DISEQ,0)="?"
- +25 SET @DIRULE@("IEN",DISEQ)=DIFIND
- +26 IF DIFLAGS["K"
- IF $DATA(^TMP("DIKK",$JOB,"P",DIFILE))
- DO SAVEK
- QUIT
- +27 DO SAVE
- End DoDot:2
- QUIT
- +28 ; Adding (+) nodes
- +29 IF '$GET(DICHECK)
- SET DICHECK=1
- DO ADDLF
- IF DIENP[",,"
- SET DIENP=$$IEN(DIENTRY,"",DIRULE)
- IF $GET(DIERR)
- SET DIOUT1=1
- QUIT
- +30 DO ADDING
- End DoDot:1
- IF DIOUT1
- QUIT
- +31 ;
- FILER ; file the data for the new records
- +1 IF '$GET(DIERR)
- IF $DATA(@DIFDA)
- Begin DoDot:1
- +2 IF '$GET(DICHECK)
- DO ADDLF
- IF $GET(DIERR)!'$DATA(@DIFDA)
- QUIT
- +3 DO FILE^DIEF($EXTRACT("S",DIFLAGS["S")_"U",DIFDA,"",DIEN)
- End DoDot:1
- +4 IF '$GET(DIERR)
- IF DIFLAGS'["S"
- KILL @DIFDAO
- +5 IF $GET(DIERR)!(DIFLAGS["S")
- IF DIFLAGS'["E"
- Begin DoDot:1
- +6 MERGE @DIFDA=@DIRULE@("SAVE")
- End DoDot:1
- +7 DO CLOSE
- +8 QUIT
- +9 ;
- ADDING ;
- +1 NEW DIENEW,DIKEY
- +2 IF $LENGTH(DIENP,",")>2
- SET DIOK=$$VMINUS9^DIEFU(DIFILE,DIENP)
- IF 'DIOK
- Begin DoDot:1
- +3 SET DIOUT1=1
- +4 DO ERR^DICA3(602,DIFILE,$PIECE(DIENP,",",$LENGTH(DIENP,",")-1))
- End DoDot:1
- QUIT
- +5 SET DIROOT=$$ROOT^DIQGU(DIFILE,DIENP)
- +6 DO DA^DILF(DIENTRY,.DIENEW)
- A1 SET DIENEW=$$IEN(DIENTRY,$GET(@DIEN@(DISEQ)),DIRULE)
- +1 SET DIKEY=$GET(@DIFDA@(DIFILE,DIENTRY,.01))
- IF DIKEY=""
- Begin DoDot:1
- +2 SET DIOUT1=1
- DO ERR^DICA3(202,"","","","FDA")
- End DoDot:1
- QUIT
- +3 SET DIOK=$$LAYGO(DIFILE,.DIENEW,DIKEY)
- +4 IF 'DIOK
- SET DIOUT1=1
- Begin DoDot:1
- +5 IF '$GET(DIERR)
- DO ERR^DICA3(405,DIFILE,"","",DIFILE)
- QUIT
- +6 NEW DIENS
- SET DIENS="New entry"
- +7 IF $LENGTH(DIENEW,",")>2
- SET DIENS=DIENS_" under record: "_DIENEW
- +8 NEW DI1
- SET DI1="LAYGO Node on the new value '"_DIKEY_"'"
- +9 DO ERR^DICA3(120,DIFILE,DIENS,.01,DI1)
- End DoDot:1
- QUIT
- +10 DO CREATE^DICA3(DIFILE,.DIENEW,DIROOT,DIKEY)
- +11 SET DIENEW=+DIENEW
- +12 IF 'DIENEW
- SET DIOUT1=1
- QUIT
- +13 LOCK -@(DIROOT_"DIENEW)")
- +14 SET @DIEN@(DISEQ)=DIENEW
- +15 IF DIOP="?+"
- SET @DIEN@(DISEQ,0)="+"
- +16 SET @DIRULE@("IEN",DISEQ)=DIENEW
- +17 DO SAVE
- +18 QUIT
- +19 ;
- LAYGO(DIFILE,DIEN,DIKEY) ;
- +1 ; ADDING--return if LAYGO permitted
- +2 ; function, all by value
- +3 NEW DA,DIOK,DINODE,DIOUTS,X,Y,Y1
- +4 SET DIOK=1
- SET DINODE=""
- SET DIOUTS=0
- FOR
- Begin DoDot:1
- +5 SET DINODE=$ORDER(^DD(DIFILE,.01,"LAYGO",DINODE))
- +6 IF DINODE'>0
- SET DIOUTS=1
- QUIT
- +7 IF $DATA(^DD(DIFILE,.01,"LAYGO",DINODE,0))[0
- QUIT
- +8 SET X=DIKEY
- MERGE DA=DIEN
- SET Y=$PIECE(DA,",")
- SET Y1=DA
- SET DA=$PIECE(DA,",")
- +9 IF 1
- XECUTE ^DD(DIFILE,.01,"LAYGO",DINODE,0)
- SET DIOK=$TEST&'$GET(DIERR)
- End DoDot:1
- IF DIOUTS!'DIOK
- QUIT
- +10 QUIT DIOK
- +11 ;
- SAVE IF DIFLAGS'["E"
- Begin DoDot:1
- +1 SET @DIRULE@("SAVE",DIFILE,DIENTRY,.01)=@DIFDA@(DIFILE,DIENTRY,.01)
- End DoDot:1
- +2 KILL @DIFDA@(DIFILE,DIENTRY,.01)
- +3 QUIT
- +4 ;
- SAVEK ; Remove primary key field from FDA; save in ^TMP first if necessary
- +1 NEW DIFLD
- +2 SET DIFLD=0
- +3 FOR
- SET DIFLD=$ORDER(^TMP("DIKK",$JOB,"P",DIFILE,DIFILE,DIFLD))
- IF 'DIFLD
- QUIT
- Begin DoDot:1
- +4 IF '^TMP("DIKK",$JOB,"P",DIFILE,DIFILE,DIFLD)
- QUIT
- +5 IF $DATA(@DIGET@(DIFILE,DIENTRY,DIFLD))[0
- QUIT
- +6 IF DIFLAGS'["E"
- SET @DIRULE@("SAVE",DIFILE,DIENTRY,DIFLD)=@DIFDA@(DIFILE,DIENTRY,DIFLD)
- +7 KILL @DIFDA@(DIFILE,DIENTRY,DIFLD)
- End DoDot:1
- +8 QUIT
- +9 ;
- IEN(DIENTRY,DIENF,DIRULE) ;
- +1 ; ADDING/FINDING--return translated IEN String
- +2 ; function, DIENTRY passed by value
- +3 NEW DIC,DIENEW,DIOP,DIP,DIPNEW,DISEQ
- +4 SET DIENEW=""
- +5 SET DIENF=$GET(DIENF)
- +6 SET DIP=""
- FOR DIC=1:1
- Begin DoDot:1
- +7 SET DIP=$PIECE(DIENTRY,",",DIC)
- IF DIP=""
- QUIT
- +8 Begin DoDot:2
- +9 IF +DIP=DIP
- SET DIPNEW=DIP
- QUIT
- IEN1 IF DIC=1
- SET DIPNEW=DIENF
- QUIT
- +1 SET DIOP=$EXTRACT(DIP,1,2)
- IF DIOP'="?+"
- SET DIOP=$EXTRACT(DIOP)
- +2 SET DISEQ=$PIECE(DIP,DIOP,2,9999)
- +3 SET DIPNEW=$GET(@DIRULE@("IEN",DISEQ))
- End DoDot:2
- +4 SET $PIECE(DIENEW,",",DIC)=DIPNEW
- End DoDot:1
- IF DIP=""
- QUIT
- +5 IF DIENEW'=""
- SET DIENEW=DIENEW_","
- +6 QUIT DIENEW
- +7 ;
- CLOSE IF DICLERR'=""!$GET(DIERR)
- Begin DoDot:1
- +1 SET DIERR=$GET(DIERR)+DICLERR_U_($PIECE($GET(DIERR),U,2)+$PIECE(DICLERR,U,2))
- End DoDot:1
- +2 IF $GET(DIMSGA)'=""
- DO CALLOUT^DIEFU(DIMSGA)
- +3 KILL @DIRULE,^TMP("DIKK",$JOB)
- +4 QUIT
- +5 ;
- GETKVALS(DIVALUE,DIINDEX) ; Get primary key values and uniq index
- +1 NEW DIFLD,DIKEY,DISQ
- +2 KILL DIVALUE
- +3 SET DIKEY=$PIECE(^TMP("DIKK",$JOB,"P",DIFILE),U)
- SET DIINDEX=$PIECE(^(DIFILE),U,4)
- +4 IF DIINDEX=""!'DIKEY
- QUIT
- +5 ;
- +6 SET DIFLD=0
- +7 FOR
- SET DIFLD=$ORDER(^TMP("DIKK",$JOB,"P",DIFILE,DIFILE,DIFLD))
- IF 'DIFLD
- QUIT
- Begin DoDot:1
- +8 SET DISQ=^TMP("DIKK",$JOB,"P",DIFILE,DIFILE,DIFLD)
- IF 'DISQ
- QUIT
- +9 IF $DATA(@DIGET@(DIFILE,DIENTRY,DIFLD))[0
- QUIT
- +10 SET DIVALUE(DISQ)=@DIGET@(DIFILE,DIENTRY,DIFLD)
- End DoDot:1
- +11 QUIT
- +12 ;
- ADDLF ; Check key integrity
- +1 IF $DATA(^TMP("DIKK",$JOB,"L"))
- IF '$$CHECK^DIEVK(DIFDA,DIFLAGS,DIEN)
- QUIT
- +2 ;
- +3 ; Add records for LAYGO/Finding nodes which were not found
- +4 NEW DINEXT
- +5 SET (DINEXT,DIOUT1)=""
- +6 FOR
- SET DINEXT=$ORDER(@DIRULE@("NEXTADD",DINEXT))
- IF DINEXT=""
- QUIT
- Begin DoDot:1
- +7 NEW DIENP,DIFILE,DIENTRY,DIOP,DIROOT,DISEQ
- +8 XECUTE @DIRULE@("NEXTADD",DINEXT)
- +9 SET DIENP=$$IEN(DIENTRY,"",DIRULE)
- +10 SET DIOP="?+"
- +11 SET DISEQ=$PIECE($PIECE(DIENTRY,","),DIOP,2)
- +12 DO ADDING
- End DoDot:1
- IF DIOUT1
- QUIT
- +13 QUIT