[613] | 1 | TIUFLF7 ; SLC/MAM - Library; File 8925.1: POSSTYPE(PFILEDA),TYPELIST(NAME,FILEDA,PFILEDA,TYPEMSG,TYPELIST),EDTYPE(FILEDA,NODE0,PFILEDA,XFLG,USED),DUPNAME(NAME,FILEDA),DUPITEM(NAME,PFILEDA,FILEDA),DDEFIEN(TIUDEFNM,etc) ;5/2/05
|
---|
| 2 | ;;1.0;TEXT INTEGRATION UTILITIES;**2,17,90,184**;Jun 20, 1997
|
---|
| 3 | ;
|
---|
| 4 | POSSTYPE(PFILEDA) ; Function returns possible Types an Entry may have to
|
---|
| 5 | ;be consistent with its parent, e.g. ^CL^DC^
|
---|
| 6 | ; If parent has bad type or no type, Returns POSSTYPE="".
|
---|
| 7 | ; If PFILEDA = 0, Returns all Types including Object.
|
---|
| 8 | ; Requires PFILEDA = 8925.1 IFN of parent of Entry;
|
---|
| 9 | ; = 0 if Entry has no parent, actual or prospective.
|
---|
| 10 | ; Shared CO can have more than 1 parent. But any parent will determine the type of the Child to be a CO, so OK to check only 1 parent.
|
---|
| 11 | N PNODE0,POSSTYPE,PTYPE
|
---|
| 12 | S POSSTYPE=""
|
---|
| 13 | I 'PFILEDA S POSSTYPE="^CL^DC^DOC^CO^O^" G POSTX
|
---|
| 14 | S PNODE0=$G(^TIU(8925.1,PFILEDA,0)) I '$D(PNODE0) W !!," File entry "_PFILEDA_" does not exist in File; See IRM",! D PAUSE^TIUFXHLX G POSTX
|
---|
| 15 | S PTYPE=$P(PNODE0,U,4)
|
---|
| 16 | S POSSTYPE=$S(PTYPE="CL":"^CL^DC^",PTYPE="DC":"^DOC^",PTYPE="CO"!(PTYPE="DOC"):"^CO^",1:"")
|
---|
| 17 | POSTX Q POSSTYPE
|
---|
| 18 | ;
|
---|
| 19 | TYPELIST(NAME,FILEDA,PFILEDA,TYPEMSG,TYPELIST) ; Module sets list of possible types, sets msg array TYPEMSG explaining nonparent limits on type.
|
---|
| 20 | ; Requires NAME of entry being checked
|
---|
| 21 | ; Requires PFILEDA=IFN of parent if entry has actual or prospective parent (as in Create, Add Items)
|
---|
| 22 | ; Requires FILEDA if entry already exists in the file
|
---|
| 23 | ; Optional TYPEMSG
|
---|
| 24 | ; Optional TYPELIST: Returns TYPELIST = subset of CL,DC,DOC,CO,O
|
---|
| 25 | ;representing permitted Types. Example: ^CL^DOC^
|
---|
| 26 | ;If has parent, parent already has item w same name, then TYPELIST=""
|
---|
| 27 | N DUPNAME,POSSTYPE,TYPE,REST,FDATYPE
|
---|
| 28 | S FILEDA=+$G(FILEDA),PFILEDA=+$G(PFILEDA),TYPELIST=""
|
---|
| 29 | S FDATYPE=$S(FILEDA:$P(^TIU(8925.1,FILEDA,0),U,4),1:"")
|
---|
| 30 | I (FDATYPE'="CL")&(FDATYPE'="DC")&(FDATYPE'="DOC")&(FDATYPE'="CO")&(FDATYPE'="O") S FDATYPE=""
|
---|
| 31 | S DUPNAME=$$DUPNAME(NAME,FILEDA)
|
---|
| 32 | S POSSTYPE=$$POSSTYPE(PFILEDA) G:$D(DTOUT) TYPEX
|
---|
| 33 | I POSSTYPE="" S TYPEMSG("T")="Parent has No Type/Wrong Type" G TYPEX
|
---|
| 34 | I FDATYPE="O"!(TIUFTMPL="J") S TYPELIST="^O^" G TYPEX
|
---|
| 35 | S REST="" F TYPE="CL","DC","DOC","CO","O" I POSSTYPE[(U_TYPE_U) D
|
---|
| 36 | . I DUPNAME[(U_TYPE_U) S:TYPE'="DOC" REST=$S(REST'="":REST_" or "_TYPE,1:TYPE) S:TYPE="DOC" REST=$S(REST'="":REST_" or TL",1:"TL") Q
|
---|
| 37 | . I TYPE="O" D Q
|
---|
| 38 | . . I FDATYPE'="" Q
|
---|
| 39 | . . I '$$BADNAP^TIUFLF1(NAME,FILEDA,1) S TYPELIST=TYPELIST_U_TYPE Q
|
---|
| 40 | . . S TYPEMSG("O")=" Type cannot be Object; Object would be ambiguous"
|
---|
| 41 | . S TYPELIST=TYPELIST_U_TYPE
|
---|
| 42 | I TYPELIST'="" S TYPELIST=TYPELIST_U
|
---|
| 43 | I REST'="" S TYPEMSG("R")=" Type cannot be "_REST_"; File already has",TYPEMSG("R1")="an entry of that Type with the same Name" Q
|
---|
| 44 | TYPEX Q
|
---|
| 45 | ;
|
---|
| 46 | DUPNAME(NAME,FILEDA) ; Function returns 1 if NAME already
|
---|
| 47 | ;exists in file for entry OTHER THAN FILEDA, else 0. If 1, returns
|
---|
| 48 | ;1^Type^Type^ etc., for example, 1^DOC^CO^ means: file has a duplicate
|
---|
| 49 | ;name of Type DOC other than FILEDA and a duplicate name of Type CO
|
---|
| 50 | ;other than FILEDA.
|
---|
| 51 | N XDUPANS,XDUPDA,TYPE
|
---|
| 52 | S FILEDA=+$G(FILEDA)
|
---|
| 53 | S (XDUPDA,XDUPANS)=0
|
---|
| 54 | F S XDUPDA=$O(^TIU(8925.1,"B",$E(NAME,1,60),XDUPDA)) Q:'XDUPDA D ;TIU*1*90 change to 60 chars
|
---|
| 55 | . I NAME=$P(^TIU(8925.1,XDUPDA,0),U),XDUPDA'=FILEDA S:'XDUPANS XDUPANS="1^" S TYPE=$P(^TIU(8925.1,XDUPDA,0),U,4) I TYPE'="" S:XDUPANS'[(U_TYPE_U) XDUPANS=XDUPANS_TYPE_U
|
---|
| 56 | Q XDUPANS
|
---|
| 57 | ;
|
---|
| 58 | DUPITEM(NAME,PFILEDA,FILEDA) ; Function returns 1 if PFILEDA already has item
|
---|
| 59 | ;(other than FILEDA) named NAME.
|
---|
| 60 | ; Requires NAME, PFILEDA
|
---|
| 61 | ; Requires FILEDA if FILEDA should be excluded from items checked for
|
---|
| 62 | ;duplicate names
|
---|
| 63 | N ITEMANS,XDUPDA
|
---|
| 64 | S (XDUPDA,ITEMANS)=0,FILEDA=+$G(FILEDA)
|
---|
| 65 | F S XDUPDA=$O(^TIU(8925.1,"B",$E(NAME,1,60),XDUPDA)) Q:'XDUPDA D Q:ITEMANS ; TIU*1*90 change to 60 chars
|
---|
| 66 | . I NAME=$P(^TIU(8925.1,XDUPDA,0),U),$D(^TIU(8925.1,"AD",XDUPDA,PFILEDA)),XDUPDA'=FILEDA S ITEMANS=1
|
---|
| 67 | I ITEMANS S TIUFIMSG=" Please enter a different Name; Parent already has Item with that Name"
|
---|
| 68 | DUPIX Q ITEMANS
|
---|
| 69 | ;
|
---|
| 70 | DUP(NAME,PFILEDA,FILEDA) ; Function returns 1 if PFILEDA already has item
|
---|
| 71 | ;(possibly FILEDA itself if FILEDA is Shared) named NAME.
|
---|
| 72 | ; Requires NAME, PFILEDA, FILEDA; Used in NAMSCRN^TIUFLF2
|
---|
| 73 | ; FILEDA is potential, not actual item of PFILEDA.
|
---|
| 74 | N DUPANS S DUPANS=0
|
---|
| 75 | ;Patch 13: Set TIUFIMSG here so NAMSCRN (which calls DUP) always sets
|
---|
| 76 | ;it:
|
---|
| 77 | I $D(^TIU(8925.1,PFILEDA,10,"B",FILEDA)) S DUPANS=1,TIUFIMSG=" Please enter a different Name; Parent already has Item with that Name" G DUPX
|
---|
| 78 | S DUPANS=$$DUPITEM(NAME,PFILEDA,FILEDA)
|
---|
| 79 | DUPX Q DUPANS
|
---|
| 80 | ;
|
---|
| 81 | EDTYPE(FILEDA,NODE0,PFILEDA,XFLG,USED) ; User edit FILEDA Type.
|
---|
| 82 | ; Requires FILEDA, NODE0.
|
---|
| 83 | ; Requires PFILEDA if DA has an actual/prospective parent. Need PFILEDA
|
---|
| 84 | ;for add items/Create DDEF - they're not in AD xref because not items
|
---|
| 85 | ;yet.
|
---|
| 86 | ; Updates NODE0 (not the array, just the node).
|
---|
| 87 | ; Returns XFLG=1 if user ^exited or timed out, else as received.
|
---|
| 88 | ; Requires USED =1 for object or $$DDEFUSED^TIUFLF
|
---|
| 89 | N TYPE,X,Y,NAME,TIUFTMSG,TIUFTLST,DEFLT,DIE,DR
|
---|
| 90 | K DIRUT,DUOUT,DIROUT
|
---|
| 91 | I $P(NODE0,U,4)="O" W !!,"TYPE: Object. Can't edit Type",! G EDTYX
|
---|
| 92 | I USED="YES"!(USED="ERROR") W !!,"TYPE: Entry In Use by Documents; Can't edit Type",! G EDTYX
|
---|
| 93 | S PFILEDA=+$G(PFILEDA),NAME=$P(NODE0,U)
|
---|
| 94 | D TYPELIST(NAME,FILEDA,PFILEDA,.TIUFTMSG,.TIUFTLST) G:$D(DTOUT) EDTYX
|
---|
| 95 | I $D(TIUFTMSG("T")) W !!,TIUFTMSG("T"),!,"Can't edit Type" S XFLG=1 D PAUSE^TIUFXHLX G EDTYX
|
---|
| 96 | I $D(TIUFTMSG("R")),$D(TIUFTMSG("R1")) W !!,TIUFTMSG("R"),!,TIUFTMSG("R1"),!
|
---|
| 97 | I $D(TIUFTMSG("O")) W:'$D(TIUFTMSG("R")) ! W TIUFTMSG("O"),!
|
---|
| 98 | I TIUFTLST="" W !!,"TYPE: ",$S($D(TIUFTMSG):TIUFTMSG(1),1:" Faulty entry; File has entries of every permitted Type with the same Name"),! D PAUSE^TIUFXHLX S XFLG=1 G EDTYX
|
---|
| 99 | S DEFLT=$P(NODE0,U,4) S:$L(TIUFTLST,U)=3 DEFLT=$P(TIUFTLST,U,2) S:DEFLT="DOC" DEFLT="TL"
|
---|
| 100 | READTYP K DUOUT S TYPE=$S(DEFLT'="":$$SELTYPE^TIUFLF8(FILEDA,DEFLT),1:$$SELTYPE^TIUFLF8(FILEDA))
|
---|
| 101 | I $D(DUOUT)!$D(DTOUT) G EDTYX
|
---|
| 102 | I TYPE="" W " ?? Enter appropriate Type or '^' to exit",! H 2 G READTYP
|
---|
| 103 | S:TYPE="TL" TYPE="DOC" S DIE=8925.1,DR=".04////"_TYPE D ^DIE
|
---|
| 104 | S NODE0=^TIU(8925.1,FILEDA,0)
|
---|
| 105 | EDTYX S:$D(DUOUT)!$D(DTOUT) XFLG=1
|
---|
| 106 | Q
|
---|
| 107 | ;
|
---|
| 108 | DDEFIEN(TIUDEFNM,TIUTYPE) ; Function gets IEN (and more) of Doc Def
|
---|
| 109 | ;Requires TIUDEFNM - .01 name of Title, Docmt Class or Class in
|
---|
| 110 | ; the Document Definition file #8925.1
|
---|
| 111 | ;Requires TIUTYPE - Expected type of DDEF: TL or DC or CL
|
---|
| 112 | ;Returns IEN^STATUS^NATL if exactly one DDEF of type TIUTYPE
|
---|
| 113 | ; is found
|
---|
| 114 | ; or 0^ErrMsg
|
---|
| 115 | ; NOTE: Only ONE DDEF of a given type is allowed in 8925.1.
|
---|
| 116 | ; If DDEFs are created using TIU DDEF options, that is enforced.
|
---|
| 117 | ; If DDEFs are created in a patch, the patch MUST
|
---|
| 118 | ; enforce it.
|
---|
| 119 | ;As a precaution, this module returns 0^ErrMsg if duplicates are found.
|
---|
| 120 | ;However, TIU code ASSUMES there are no duplicates within a type.
|
---|
| 121 | N TIUDEFDA,GOTIT,ERRMSG,TIUNODE0
|
---|
| 122 | S TIUTYPE=$G(TIUTYPE)
|
---|
| 123 | I TIUTYPE'="TL",TIUTYPE'="DC",TIUTYPE'="CL" Q "0^Type Required"
|
---|
| 124 | I TIUTYPE="TL" S TIUTYPE="DOC"
|
---|
| 125 | S TIUDEFDA=0
|
---|
| 126 | ; -- Not in B xref:
|
---|
| 127 | I '$O(^TIU(8925.1,"B",TIUDEFNM,0)) S ERRMSG="0^Entry not found" Q ERRMSG
|
---|
| 128 | F S TIUDEFDA=+$O(^TIU(8925.1,"B",TIUDEFNM,TIUDEFDA)) Q:TIUDEFDA'>0 D Q:$D(ERRMSG)
|
---|
| 129 | . S TIUNODE0=$G(^TIU(8925.1,TIUDEFDA,0))
|
---|
| 130 | . ; -- Not in file or not right type:
|
---|
| 131 | . I $P(TIUNODE0,U,4)'=TIUTYPE Q
|
---|
| 132 | . ; -- Second good one:
|
---|
| 133 | . I $D(GOTIT) S ERRMSG="0^Duplicates found" Q
|
---|
| 134 | . ; -- First good one; set GOTIT=IEN^STATUS^NATL:
|
---|
| 135 | . S GOTIT=TIUDEFDA_U_$P(TIUNODE0,U,7)_U_$P(TIUNODE0,U,13)
|
---|
| 136 | ; -- Not in B xref, or dups:
|
---|
| 137 | I $D(ERRMSG) Q ERRMSG
|
---|
| 138 | ; Good one w/o dups:
|
---|
| 139 | I $D(GOTIT) Q GOTIT
|
---|
| 140 | ; In B xref but not in file, or bad type:
|
---|
| 141 | Q "0^Entry not found"
|
---|
| 142 | ;
|
---|