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

GMPLCOPY.m

Go to the documentation of this file.
  1. GMPLCOPY ;ISP/TC - Copy Problem Selection Lists/Categories ;09/21/16 09:03
  1. ;;2.0;Problem List;**49**;Aug 25, 1994;Build 43
  1. ;
  1. ;=====================================================
  1. SETCLDLM(GMPFLNM,GMPIEN,GMPCLASS) ;Set the class field to GMPCLASS and update Date Last Modified
  1. N GMPIENS,GMPFDA,GMPMSG,GMPFLD
  1. S GMPIENS=GMPIEN_","
  1. S GMPFLD=$S(GMPFLNM="125":".04",GMPFLNM="125.11":".03")
  1. S GMPFDA(GMPFLNM,GMPIENS,GMPFLD)=GMPCLASS
  1. S GMPFDA(GMPFLNM,GMPIENS,.02)=$$DT^XLFDT
  1. D FILE^DIE("K","GMPFDA","GMPMSG")
  1. I $D(GMPMSG) D AWRITE("GMPMSG")
  1. Q
  1. ;
  1. ;=====================================================
  1. COPY(GMPPRMPT,GMPROOT,GMPWHAT,GMPVAL) ;Copy an entry of GMPROOT into a new entry.
  1. N DIROUT,DTOUT,DUOUT
  1. F D GETORIG Q:$D(DIROUT) Q:$D(DTOUT)
  1. Q
  1. ;
  1. ;=====================================================
  1. COPYCAT(GMPVAL) ;Copy a selection list category.
  1. N GMPPRMPT,GMPROOT,GMPWHAT
  1. S GMPWHAT="category"
  1. S GMPROOT="^GMPL(125.11,"
  1. S GMPPRMPT="Select the category to copy: "
  1. D COPY(GMPPRMPT,GMPROOT,GMPWHAT,.GMPVAL)
  1. Q
  1. ;
  1. ;=====================================================
  1. COPYLIST ;Copy a selection list.
  1. N GMPPRMPT,GMPROOT,GMPWHAT
  1. S GMPWHAT="selection list"
  1. S GMPROOT="^GMPL(125,"
  1. S GMPPRMPT="Select the list to copy: "
  1. D COPY(GMPPRMPT,GMPROOT,GMPWHAT)
  1. Q
  1. ;
  1. ;=====================================================
  1. DELETE(DIK,DA) ;Delete the entry just added.
  1. D ^DIK
  1. W !!,"New entry not created due to invalid name!",!
  1. Q
  1. ;
  1. ;=====================================================
  1. GETFOIEN(GMPROOT) ;Return the first open IEN in GMPROOT. This should be called
  1. ;after a call to SETSTART.
  1. N GMPENTRY,GMPNIEN,GMPOIEN
  1. S GMPENTRY=GMPROOT_0_")"
  1. S GMPOIEN=+$P(@GMPENTRY,U,3)
  1. S GMPENTRY=GMPROOT_GMPOIEN_")"
  1. F S GMPNIEN=$O(@GMPENTRY) Q:+(GMPNIEN-GMPOIEN)>1 Q:+GMPNIEN'>0 S GMPOIEN=GMPNIEN,GMPENTRY=GMPROOT_GMPNIEN_")"
  1. Q GMPOIEN+1
  1. ;
  1. ;=====================================================
  1. GETORIG ;Look-up logic to get and copy source entry to destination.
  1. N DIC,GMPIENN,GMPIENO,Y
  1. S DIC=GMPROOT,DIC(0)="AEMQ",DIC("A")=GMPPRMPT
  1. W !
  1. D ^DIC
  1. I $D(DUOUT)!$D(DTOUT) S DIROUT="" Q
  1. S GMPIENO=$P(Y,U,1)
  1. I GMPIENO=-1 S DIROUT="" Q
  1. D GETORIGC(GMPIENO,.GMPIENN,GMPROOT,GMPWHAT,.GMPVAL)
  1. Q
  1. ;
  1. GETORIGC(GMPIENO,GMPIENN,GMPROOT,GMPWHAT,GMPVAL) ;
  1. N DA,DIC,DIE,DIK,DIR,DIRUT,GMPFDA,GMPFLDLN,GMPFILE
  1. N GMPIENS,GMPMSG,GMPNAME,GMPORGNM,X,Y,GMPL0
  1. S DIC=GMPROOT
  1. ;Set the starting place for additions.
  1. D SETSTART(DIC)
  1. S GMPIENN=$$GETFOIEN(GMPROOT)
  1. D MERGE(GMPIENN,GMPIENO,GMPROOT)
  1. ;
  1. ;Get the new name.
  1. S GMPORGNM=$P(@(GMPROOT_GMPIENO_",0)"),U,1)
  1. S GMPFILE=+$P(@(GMPROOT_"0)"),U,2)
  1. S GMPFLDLN=$$GET1^DID(GMPFILE,.01,"","FIELD LENGTH")
  1. S DIR(0)="F"_U_"3:"_GMPFLDLN_U_"K:(X?.N)!'(X'?1P.E) X"
  1. S DIR("A")="PLEASE ENTER A UNIQUE NAME"
  1. GETNAM D ^DIR
  1. I $D(DIRUT) D DELETE(GMPROOT,GMPIENN) Q
  1. S GMPNAME=Y
  1. ;
  1. ;Make sure the new name is valid.
  1. I '$$VNAME^GMPLINTR(GMPNAME) G GETNAM
  1. ;
  1. ;Change to the new name.
  1. S GMPIENS=GMPIENN_","
  1. S GMPFDA(GMPFILE,GMPIENS,.01)=GMPNAME
  1. K GMPMSG
  1. D FILE^DIE("","GMPFDA","GMPMSG")
  1. ;Check to make sure the name was not a duplicate.
  1. I $G(GMPMSG("DIERR",1))=740 D G GETNAM
  1. . W !,GMPNAME," is not a unique name!"
  1. ;Change the class to local and update Date Last Modified.
  1. D SETCLDLM(GMPFILE,GMPIENN,"L")
  1. ;
  1. ;Reindex the cross-references.
  1. S DIK=GMPROOT,DA=GMPIENN
  1. D IX^DIK
  1. ;
  1. S GMPL0=$G(@(GMPROOT_GMPIENN_",0)"))
  1. S GMPVAL=GMPIENN_U_GMPL0
  1. W !!,"The original "_GMPWHAT_" "_GMPORGNM_" has been copied into "_GMPNAME_"." H 1
  1. Q
  1. ;
  1. ;=====================================================
  1. MERGE(GMPIENN,GMPIENO,GMPROOT) ;Use MERGE to copy GMPROOT(GMPIENO into GMPROOT(GMPIENN.
  1. N GMPDEST,GMPSRCE
  1. S GMPDEST=GMPROOT_GMPIENN_")"
  1. ;Lock the file before merging.
  1. L +@GMPDEST:DILOCKTM
  1. S GMPSRCE=GMPROOT_GMPIENO_")"
  1. M @GMPDEST=@GMPSRCE
  1. ;Unlock the file
  1. L -@GMPDEST
  1. Q
  1. ;
  1. ;=====================================================
  1. SETSTART(GMPROOT) ;Set the starting value to add new entries. Start
  1. ;at the begining so empty spaces are filled in.
  1. N GMPCUR,GMPENTRY
  1. S GMPENTRY=GMPROOT_"0)"
  1. S $P(@GMPENTRY,U,3)=1
  1. Q
  1. ;
  1. ;=================================
  1. AWRITE(GMPREF) ;Write all the descendants of the array reference, including the
  1. ;array. REF is the starting array reference, for example A or
  1. ;^TMP("PXRM",$J).
  1. N GMPDONE,GMPIND,GMPLEN,GMPLN,GMPPRT,GMPROOT,GMPSTRT,GMPTMP,GMPTXT
  1. I GMPREF="" Q
  1. S GMPLN=0
  1. S GMPPRT=$P(GMPREF,")",1)
  1. ;Build the root so we can tell when we are done.
  1. S GMPTMP=$NA(@GMPREF)
  1. S GMPROOT=$P(GMPTMP,")",1)
  1. S GMPREF=$Q(@GMPREF)
  1. I GMPREF'[GMPROOT Q
  1. S GMPDONE=0
  1. F Q:(GMPREF="")!(GMPDONE) D
  1. . S GMPSTRT=$F(GMPREF,GMPROOT)
  1. . S GMPLEN=$L(GMPREF)
  1. . S GMPIND=$E(GMPREF,GMPSTRT,GMPLEN)
  1. . S GMPLN=GMPLN+1,GMPTXT(GMPLN)=GMPPRT_GMPIND_"="_@GMPREF
  1. . S GMPREF=$Q(@GMPREF)
  1. . I GMPREF'[GMPROOT S GMPDONE=1
  1. D MES^XPDUTL(.GMPTXT)
  1. Q
  1. ;