| 1 | TIUSRVT3 ; SLC/PKS Remove a user's non-shared Templates. ; [6/26/01 9:17am] | 
|---|
| 2 | ;;1.0;TEXT INTEGRATION UTILITIES;**110**;Jun 20, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Variables used herein: | 
|---|
| 5 | ; | 
|---|
| 6 | ;    DIR     = FM call varible. | 
|---|
| 7 | ;    TIUARY  = Array holder. | 
|---|
| 8 | ;    TIUCNT  = Returned array counter. | 
|---|
| 9 | ;    TIUGET  = Holder for returned array $O command. | 
|---|
| 10 | ;    TIUIDX  = X-ref holder. | 
|---|
| 11 | ;    TIUIEN  = Template IEN holder. | 
|---|
| 12 | ;    TIUNM   = Holder variable for name of user. | 
|---|
| 13 | ;    TIUNUM  = Loop counter from this routine. | 
|---|
| 14 | ;    TIUPAR  = Current setting of auto-cleanup parameter. | 
|---|
| 15 | ;    TIURARY = Returned array; zero node will contain user's DUZ and | 
|---|
| 16 | ;              AROOT IEN (if any) or error message (RPC use only). | 
|---|
| 17 | ;    TIUSR   = DUZ of user to process. | 
|---|
| 18 | ;    TIUTMP  = Call return array values holder. | 
|---|
| 19 | ;    TIUTPLT = Template IEN. | 
|---|
| 20 | ;    X,Y     = Variables for FM call. | 
|---|
| 21 | ; | 
|---|
| 22 | Q | 
|---|
| 23 | ; | 
|---|
| 24 | SELUSR ; Call here for manual selection of TIUSR from NEW PERSON file. | 
|---|
| 25 | ; | 
|---|
| 26 | N DIR,TIUCNT,TIUGET,TIUIDX,TIUNM,TIUNUM,TIUTPLT,TIURARY,TIUSR,X,Y | 
|---|
| 27 | ; | 
|---|
| 28 | ; Get input for user: | 
|---|
| 29 | S TIUSR=""          ; Default. | 
|---|
| 30 | S DIR(0)="PAO^200,:AEMNQ" | 
|---|
| 31 | S DIR("A")="  Enter/select user for whom templates will be deleted: " | 
|---|
| 32 | S DIR("?")="Specify user for template cleanup." | 
|---|
| 33 | D ^DIR | 
|---|
| 34 | S TIUSR=Y | 
|---|
| 35 | K DIR,X,Y                             ; Clean up from FM call. | 
|---|
| 36 | I TIUSR<1 S TIUSR="" Q                ; No acceptable entry. | 
|---|
| 37 | S TIUSR=+TIUSR                        ; Selected user's DUZ. | 
|---|
| 38 | I TIUSR="" Q        ; Punt here if there's a problem. | 
|---|
| 39 | ; | 
|---|
| 40 | ; Confirm before deletion: | 
|---|
| 41 | S TIUNM=$P($G(^VA(200,TIUSR,0)),U,1) | 
|---|
| 42 | S DIR("T")=120  ; Two minute maximum timeout for response. | 
|---|
| 43 | S DIR("A")="   Delete all non-shared templates for user "_TIUNM_" (Y/N)" | 
|---|
| 44 | S DIR("?")="   Non-shared templates for this user will be permanently lost..." | 
|---|
| 45 | S DIR("B")="NO" ; Default. | 
|---|
| 46 | ; | 
|---|
| 47 | ; Define DIR input requirements: | 
|---|
| 48 | S DIR(0)="YO^1:2:0" | 
|---|
| 49 | ; | 
|---|
| 50 | ; Call DIR for user choice: | 
|---|
| 51 | W !! ; Spacing for screen display. | 
|---|
| 52 | D ^DIR | 
|---|
| 53 | ; | 
|---|
| 54 | ; Check user response: | 
|---|
| 55 | I '$L($G(Y)) Q                        ; Skip if Y isn't assigned. | 
|---|
| 56 | I Y="" Q                              ; Skip if Y is null. | 
|---|
| 57 | I Y="^" Q                             ; Skip if Y is "^" character. | 
|---|
| 58 | I Y<1 Q                               ; Skip if Y is less than one. | 
|---|
| 59 | I Y>2 Q                               ; "No" choice. | 
|---|
| 60 | K DIR,X,Y                             ; Clean up from FM call. | 
|---|
| 61 | ; | 
|---|
| 62 | ; Proceed with clean up: | 
|---|
| 63 | D CTRL | 
|---|
| 64 | K TIURARY           ; Array not returned under manual functionality. | 
|---|
| 65 | ; | 
|---|
| 66 | Q | 
|---|
| 67 | ; | 
|---|
| 68 | KUSER ; Get USER from Kernel - called by option: TIU TEMPLATE USER DELETE. | 
|---|
| 69 | ; | 
|---|
| 70 | ; See if this function is "active" by checking Parameter: | 
|---|
| 71 | ; | 
|---|
| 72 | N TIUCNT,TIUGET,TIUIDX,TIUNUM,TIUTPLT,TIUPAR,TIURARY,TIUSR | 
|---|
| 73 | S TIUPAR=$$GET^XPAR("DIV^SYS^PKG","TIU TEMPLATE USER AUTO DELETE",1,"E") | 
|---|
| 74 | I TIUPAR'="YES" Q | 
|---|
| 75 | I TIUPAR="" Q | 
|---|
| 76 | ; | 
|---|
| 77 | ; Parameter set to activate auto-cleanup - proceed: | 
|---|
| 78 | S TIUSR=$GET(XUIFN) ; Assign TIUSR variable. | 
|---|
| 79 | I TIUSR="" Q        ; Punt here if there's a problem. | 
|---|
| 80 | D CTRL | 
|---|
| 81 | K TIURARY           ; Array not returned when triggered by Kernel. | 
|---|
| 82 | ; | 
|---|
| 83 | Q | 
|---|
| 84 | ; | 
|---|
| 85 | CLEAN(TIUSR,TIURARY) ; Call here as an RPC: Dump templates for one user. | 
|---|
| 86 | ; | 
|---|
| 87 | N TIUCNT,TIUGET,TIUIDX,TIUNUM,TIUTPLT | 
|---|
| 88 | I 'TIUSR>0 S TIURARY(0)="No user DUZ passed." Q | 
|---|
| 89 | ; | 
|---|
| 90 | CTRL ; Main control code for actual cleanup process. | 
|---|
| 91 | ; | 
|---|
| 92 | S TIUCNT=0 | 
|---|
| 93 | ; | 
|---|
| 94 | ; See if there is an AROOT x-ref entry for this user: | 
|---|
| 95 | I '$D(^TIU(8927,"AROOT",TIUSR)) S TIURARY(0)="No AROOT record." Q | 
|---|
| 96 | ; | 
|---|
| 97 | ; Get parent record for user's templates: | 
|---|
| 98 | S TIUTPLT=0 | 
|---|
| 99 | F  D  Q:'TIUTPLT | 
|---|
| 100 | .S TIUTPLT=$O(^TIU(8927,"AROOT",TIUSR,TIUTPLT)) | 
|---|
| 101 | .I 'TIUTPLT Q | 
|---|
| 102 | .; | 
|---|
| 103 | .; Compile an array of applicable templates: | 
|---|
| 104 | .D DEL(TIUTPLT) | 
|---|
| 105 | ; | 
|---|
| 106 | Q | 
|---|
| 107 | ; | 
|---|
| 108 | DEL(TIUIEN) ; Pass root node of AROOT x-ref of <^TIU(8927,> file. | 
|---|
| 109 | ; | 
|---|
| 110 | N TIUARY,TIUTMP | 
|---|
| 111 | ; | 
|---|
| 112 | S TIURARY(TIUCNT)=TIUSR_U_TIUIEN ; 0-node: "UserDUZ^ARootIEN" format. | 
|---|
| 113 | D BLD(TIUIEN,.TIUARY)            ; Recursive array builder. | 
|---|
| 114 | ; | 
|---|
| 115 | ; Create or add to return array: | 
|---|
| 116 | S (TIUGET,TIUNUM)=0 | 
|---|
| 117 | F  D  Q:'TIUGET | 
|---|
| 118 | .S TIUNUM=TIUNUM+1 | 
|---|
| 119 | .S TIUGET=$G(TIUARY(TIUNUM)) | 
|---|
| 120 | .I 'TIUGET Q | 
|---|
| 121 | .S TIUCNT=TIUCNT+1 | 
|---|
| 122 | .S TIURARY(TIUCNT)=TIUGET | 
|---|
| 123 | ; | 
|---|
| 124 | ; Using the array of templates, make call that kills only orphans: | 
|---|
| 125 | D DELETE^TIUSRVT(.TIUTMP,.TIUARY) | 
|---|
| 126 | ; | 
|---|
| 127 | Q | 
|---|
| 128 | ; | 
|---|
| 129 | BLD(TIUIEN,TIUARY) ; Recursively build an array of templates. | 
|---|
| 130 | ; | 
|---|
| 131 | N TIUIDX | 
|---|
| 132 | ; | 
|---|
| 133 | S TIUIDX=$O(TIUARY(" "),-1)+1 | 
|---|
| 134 | S TIUARY(TIUIDX)=TIUIEN | 
|---|
| 135 | S TIUIDX=0 | 
|---|
| 136 | F  S TIUIDX=$O(^TIU(8927,TIUIEN,10,TIUIDX))  Q:'TIUIDX  D | 
|---|
| 137 | .D BLD($P(^TIU(8927,TIUIEN,10,TIUIDX,0),U,2),.TIUARY) | 
|---|
| 138 | ; | 
|---|
| 139 | Q | 
|---|
| 140 | ; | 
|---|