[613] | 1 | PXRMEXU1 ; SLC/PKR/PJH - Reminder exchange repository utilities, #1.;08/16/2007
|
---|
| 2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
| 3 | ;=====================================================
|
---|
| 4 | CLIST(IEN) ;Build the list of components for the repository
|
---|
| 5 | ;entry IEN. EXTYPE is the type of Exchange entry. The default is
|
---|
| 6 | ;reminder.
|
---|
| 7 | N COMIND,COMORDR,CSTART,CSUM,END,FILENAME,FILENUM
|
---|
| 8 | N IND,INDEXAT,JND,LINE,NCMPNT,NCTYPE,NITEMS,NLINES,NUMCMPNT
|
---|
| 9 | N PT01,START,TEMP,TAG,TYPE,UCOM,VERSN
|
---|
| 10 | S LINE=^PXD(811.8,IEN,100,1,0)
|
---|
| 11 | ;Make sure it is XML version 1.
|
---|
| 12 | I LINE'["<?xml version=""1.0""" D Q
|
---|
| 13 | . W !,"Exchange file entry not in proper format!"
|
---|
| 14 | . S IEN=-1
|
---|
| 15 | . H 2
|
---|
| 16 | S LINE=^PXD(811.8,IEN,100,2,0)
|
---|
| 17 | I LINE'="<REMINDER_EXCHANGE_FILE_ENTRY>" D Q
|
---|
| 18 | . W !,"Not an Exchange File entry!"
|
---|
| 19 | . S IEN=-1
|
---|
| 20 | . H 2
|
---|
| 21 | S LINE=^PXD(811.8,IEN,100,3,0)
|
---|
| 22 | S VERSN=$$GETTAGV^PXRMEXU3(LINE,"<PACKAGE_VERSION>")
|
---|
| 23 | S LINE=^PXD(811.8,IEN,100,4,0)
|
---|
| 24 | S INDEXAT=+$P(LINE,"<INDEX_AT>",2)
|
---|
| 25 | S LINE=^PXD(811.8,IEN,100,INDEXAT,0)
|
---|
| 26 | I LINE'="<INDEX>" D Q
|
---|
| 27 | . W !,"Index missing, cannot continue!"
|
---|
| 28 | . S IEN=-1
|
---|
| 29 | . H 2
|
---|
| 30 | S JND=INDEXAT+1
|
---|
| 31 | S LINE=^PXD(811.8,IEN,100,JND,0)
|
---|
| 32 | S NCMPNT=+$$GETTAGV^PXRMEXU3(LINE,"<NUMBER_OF_COMPONENTS>")
|
---|
| 33 | K ^TMP($J,"CMPNT")
|
---|
| 34 | F IND=1:1:NCMPNT D
|
---|
| 35 | . K END,START
|
---|
| 36 | . F S JND=JND+1,LINE=^PXD(811.8,IEN,100,JND,0) Q:LINE="</COMPONENT>" D
|
---|
| 37 | .. S TAG=$$GETTAG^PXRMEXU3(LINE)
|
---|
| 38 | .. I TAG["START" S START(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG)
|
---|
| 39 | .. I TAG["END" S END(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG)
|
---|
| 40 | . I $D(START("<M_ROUTINE_START>")) D
|
---|
| 41 | .. S CSTART=START("<M_ROUTINE_START>")
|
---|
| 42 | .. S ^TMP($J,"CMPNT",IND,"TYPE")="ROUTINE"
|
---|
| 43 | .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0)
|
---|
| 44 | .. S ^TMP($J,"CMPNT",IND,"NAME")=$$GETTAGV^PXRMEXU3(LINE,"<ROUTINE_NAME>")
|
---|
| 45 | .. S ^TMP($J,"CMPNT",IND,"FILENUM")=0
|
---|
| 46 | ..;Save the actual start and end of the code.
|
---|
| 47 | .. S ^TMP($J,"CMPNT",IND,"START")=START("<ROUTINE_CODE_START>")
|
---|
| 48 | .. S ^TMP($J,"CMPNT",IND,"END")=END("<ROUTINE_CODE_END>")
|
---|
| 49 | . I $D(START("<FILE_START>")) D
|
---|
| 50 | .. S CSTART=START("<FILE_START>")
|
---|
| 51 | .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0)
|
---|
| 52 | .. S (^TMP($J,"CMPNT",IND,"TYPE"),^TMP($J,"CMPNT",IND,"FILENAME"))=$$GETTAGV^PXRMEXU3(LINE,"<FILE_NAME>",1)
|
---|
| 53 | .. S LINE=^PXD(811.8,IEN,100,CSTART+2,0)
|
---|
| 54 | .. S ^TMP($J,"CMPNT",IND,"FILENUM")=$$GETTAGV^PXRMEXU3(LINE,"<FILE_NUMBER>")
|
---|
| 55 | .. S LINE=^PXD(811.8,IEN,100,CSTART+3,0)
|
---|
| 56 | .. S (^TMP($J,"CMPNT",IND,"NAME"),^TMP($J,"CMPNT",IND,"POINT_01"))=$$GETTAGV^PXRMEXU3(LINE,"<POINT_01>",1)
|
---|
| 57 | ..;Save the actual start and end of the FileMan FDA.
|
---|
| 58 | .. S ^TMP($J,"CMPNT",IND,"FDA_START")=START("<FDA_START>")
|
---|
| 59 | .. S ^TMP($J,"CMPNT",IND,"FDA_END")=END("<FDA_END>")
|
---|
| 60 | .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_START")=$G(START("<IEN_ROOT_START>"))
|
---|
| 61 | .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_END")=$G(END("<IEN_ROOT_END>"))
|
---|
| 62 | ;Build some indexes to order the component list.
|
---|
| 63 | F IND=1:1:NCMPNT D
|
---|
| 64 | . S TYPE=^TMP($J,"CMPNT",IND,"TYPE")
|
---|
| 65 | . S COMIND(TYPE,IND)=""
|
---|
| 66 | . S UCOM(TYPE)=""
|
---|
| 67 | ;Build the component order for display and install.
|
---|
| 68 | D CORDER^PXRMEXCO(IEN,.UCOM,.NUMCMPNT,.COMORDR)
|
---|
| 69 | ;Set the 0 node.
|
---|
| 70 | S ^PXD(811.8,IEN,120,0)=U_"811.802A"_U_NCMPNT_U_NCMPNT
|
---|
| 71 | S NCTYPE=0
|
---|
| 72 | S NITEMS=0
|
---|
| 73 | F NCTYPE=1:1:NUMCMPNT D
|
---|
| 74 | . S TYPE=$O(COMORDR(NCTYPE,""))
|
---|
| 75 | . S NITEMS=0
|
---|
| 76 | . S IND=""
|
---|
| 77 | . F S IND=$O(COMIND(TYPE,IND)) Q:IND="" D
|
---|
| 78 | .. S NITEMS=NITEMS+1
|
---|
| 79 | .. I NITEMS=1 S FILENUM=^TMP($J,"CMPNT",IND,"FILENUM")
|
---|
| 80 | .. I TYPE="ROUTINE" S TEMP=^TMP($J,"CMPNT",IND,"NAME")_U_^TMP($J,"CMPNT",IND,"START")_U_^TMP($J,"CMPNT",IND,"END")
|
---|
| 81 | .. E S TEMP=^TMP($J,"CMPNT",IND,"NAME")_U_^TMP($J,"CMPNT",IND,"FDA_START")_U_^TMP($J,"CMPNT",IND,"FDA_END")_U_$G(^TMP($J,"CMPNT",IND,"IEN_ROOT_START"))_U_$G(^TMP($J,"CMPNT",IND,"IEN_ROOT_END"))
|
---|
| 82 | .. S ^PXD(811.8,IEN,120,NCTYPE,1,NITEMS,0)=TEMP
|
---|
| 83 | . S ^PXD(811.8,IEN,120,NCTYPE,0)=TYPE_U_FILENUM_U_NITEMS
|
---|
| 84 | . S ^PXD(811.8,IEN,120,NCTYPE,1,0)=U_"811.8021A"_U_NITEMS_U_NITEMS
|
---|
| 85 | ;
|
---|
| 86 | ;Save the number of component types.
|
---|
| 87 | S ^PXD(811.8,IEN,119)=NCTYPE
|
---|
| 88 | K ^TMP($J,"CMPNT")
|
---|
| 89 | Q
|
---|
| 90 | ;
|
---|
| 91 | ;=====================================================
|
---|
| 92 | DELETE(LIST) ;Delete the repository entries in LIST.
|
---|
| 93 | N DA,DIK
|
---|
| 94 | S DIK="^PXD(811.8,"
|
---|
| 95 | S DA=""
|
---|
| 96 | F S DA=$O(LIST(DA)) Q:+DA=0 D ^DIK
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | ;=====================================================
|
---|
| 100 | DELHIST(RIEN,IHIEN) ;Delete install history IHIEN in repository entry RIEN.
|
---|
| 101 | N DA,DIK
|
---|
| 102 | S DA=IHIEN,DA(1)=RIEN
|
---|
| 103 | S DIK="^PXD(811.8,"_DA(1)_",130,"
|
---|
| 104 | D ^DIK
|
---|
| 105 | Q
|
---|
| 106 | ;
|
---|
| 107 | ;=====================================================
|
---|
| 108 | DESC(RIEN,DESL,DESC,KEYWORD) ;Build the description.
|
---|
| 109 | N JND,LC,NKEYW
|
---|
| 110 | S LC=1
|
---|
| 111 | S ^PXD(811.8,RIEN,110,LC,0)="Reminder: "_DESL("RNAME")
|
---|
| 112 | S LC=LC+1
|
---|
| 113 | S ^PXD(811.8,RIEN,110,LC,0)="Source: "_DESL("SOURCE")
|
---|
| 114 | S LC=LC+1
|
---|
| 115 | S ^PXD(811.8,RIEN,110,LC,0)="Date Packed: "_DESL("DATEP")
|
---|
| 116 | S LC=LC+1
|
---|
| 117 | S ^PXD(811.8,RIEN,110,LC,0)="Package Version: "_DESL("VRSN")
|
---|
| 118 | S LC=LC+1
|
---|
| 119 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
| 120 | ;Add the user's description.
|
---|
| 121 | S LC=LC+1
|
---|
| 122 | S ^PXD(811.8,RIEN,110,LC,0)="Description:"
|
---|
| 123 | F JND=1:1:+$P($G(@DESC@(1,0)),U,4) D
|
---|
| 124 | . S LC=LC+1
|
---|
| 125 | . S ^PXD(811.8,RIEN,110,LC,0)=@DESC@(1,JND,0)
|
---|
| 126 | S LC=LC+1
|
---|
| 127 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
| 128 | ;Add the keywords.
|
---|
| 129 | S LC=LC+1
|
---|
| 130 | S ^PXD(811.8,RIEN,110,LC,0)="Keywords:"
|
---|
| 131 | S NKEYW=+$P($G(@KEYWORD@(1,0)),U,4)
|
---|
| 132 | I NKEYW=0 D
|
---|
| 133 | . S LC=LC+1
|
---|
| 134 | . S ^PXD(811.8,RIEN,110,LC,0)="No keywords given"
|
---|
| 135 | F JND=1:1:NKEYW D
|
---|
| 136 | . S LC=LC+1
|
---|
| 137 | . S ^PXD(811.8,RIEN,110,LC,0)=@KEYWORD@(1,JND,0)
|
---|
| 138 | S LC=LC+1
|
---|
| 139 | S ^PXD(811.8,RIEN,110,LC,0)=""
|
---|
| 140 | S LC=LC+1
|
---|
| 141 | S ^PXD(811.8,RIEN,110,LC,0)="Components:"
|
---|
| 142 | S ^PXD(811.8,RIEN,110,0)=U_811.804_U_LC_U_LC
|
---|
| 143 | Q
|
---|
| 144 | ;
|
---|
| 145 | ;=====================================================
|
---|
| 146 | RIEN(LIEN) ;Given the list ien return the repository ien.
|
---|
| 147 | N RIEN
|
---|
| 148 | S RIEN=$G(^TMP("PXRMEXLR",$J,"SEL",LIEN))
|
---|
| 149 | Q RIEN
|
---|
| 150 | ;
|
---|
| 151 | ;=====================================================
|
---|
| 152 | SAVHIST ;Save the installation history in the repository.
|
---|
| 153 | N ACTION,DATE,CMPNT,FTYPE,IND,INDEX,ITEM,JND,NEWNAME
|
---|
| 154 | N SUB,TEMP,TOTAL,TYPE,USER
|
---|
| 155 | ;Find the first open spot in the Installation History node.
|
---|
| 156 | S (IND,JND)=0
|
---|
| 157 | F S IND=+$O(^PXD(811.8,PXRMRIEN,130,IND)) S JND=JND+1 Q:(IND=0)!(IND>JND)
|
---|
| 158 | S IND=JND
|
---|
| 159 | S JND=0
|
---|
| 160 | F SUB="PXRMEXIA","PXRMEXIAD" D
|
---|
| 161 | . S INDEX=0
|
---|
| 162 | . F S INDEX=$O(^TMP(SUB,$J,INDEX)) Q:+INDEX=0 D
|
---|
| 163 | .. S JND=JND+1
|
---|
| 164 | .. S CMPNT=$O(^TMP(SUB,$J,INDEX,""))
|
---|
| 165 | .. S ITEM=$O(^TMP(SUB,$J,INDEX,CMPNT,""))
|
---|
| 166 | .. S ACTION=$O(^TMP(SUB,$J,INDEX,CMPNT,ITEM,""))
|
---|
| 167 | .. S NEWNAME=$G(^TMP(SUB,$J,INDEX,CMPNT,ITEM,ACTION))
|
---|
| 168 | .. S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,0)=INDEX_U_CMPNT_U_ITEM_U_ACTION_U_NEWNAME
|
---|
| 169 | ..;Set the 0 node.
|
---|
| 170 | .. S ^PXD(811.8,PXRMRIEN,130,IND,1,0)=U_"811.8031A"_U_JND_U_JND
|
---|
| 171 | ..;Check for finding item changes and save them.
|
---|
| 172 | .. S FTYPE=""
|
---|
| 173 | .. I CMPNT["DEFINITION" S FTYPE="DEFF"
|
---|
| 174 | .. I CMPNT["DIALOG" S FTYPE="DIAF"
|
---|
| 175 | .. I CMPNT["TERM" S FTYPE="TRMF"
|
---|
| 176 | .. I (FTYPE'=""),($D(^TMP(SUB,$J,FTYPE))) D
|
---|
| 177 | ... N FI,FINDING,KND,OFINDING
|
---|
| 178 | ... S KND=2
|
---|
| 179 | ... S FI=""
|
---|
| 180 | ... F S FI=$O(^TMP(SUB,$J,FTYPE,FI)) Q:FI="" D
|
---|
| 181 | .... S OFINDING=$O(^TMP(SUB,$J,FTYPE,FI,""))
|
---|
| 182 | .... S FINDING=^TMP(SUB,$J,FTYPE,FI,OFINDING)
|
---|
| 183 | .... I OFINDING=FINDING Q
|
---|
| 184 | .... S KND=KND+1
|
---|
| 185 | .... S TEMP=$E(OFINDING,1,33)
|
---|
| 186 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_FINDING
|
---|
| 187 | ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND
|
---|
| 188 | ... I KND>2 D
|
---|
| 189 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" Finding Changes"
|
---|
| 190 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New"
|
---|
| 191 | ..;
|
---|
| 192 | ..;Check for TIU template replacements and save them.
|
---|
| 193 | .. I CMPNT["DIALOG" S FTYPE="DIATIU"
|
---|
| 194 | .. E S FTYPE=""
|
---|
| 195 | .. I (FTYPE'=""),($D(^TMP(SUB,$J,FTYPE))) D
|
---|
| 196 | ... N KND,OTIUT,TIUT,TYPE
|
---|
| 197 | ... S TYPE=""
|
---|
| 198 | ... S KND=2
|
---|
| 199 | ... F S TYPE=$O(^TMP(SUB,$J,FTYPE,TYPE)) Q:TYPE="" D
|
---|
| 200 | .... S OTIUT=""
|
---|
| 201 | .... F S OTIUT=$O(^TMP(SUB,$J,FTYPE,TYPE,OTIUT)) Q:OTIUT="" D
|
---|
| 202 | ..... S TIUT=$G(^TMP(SUB,$J,FTYPE,TYPE,OTIUT))
|
---|
| 203 | ..... I OTIUT=TIUT Q
|
---|
| 204 | ..... I '$D(^TMP(SUB,$J,FTYPE,TYPE,OTIUT,ITEM)) Q
|
---|
| 205 | ..... S KND=KND+1
|
---|
| 206 | ..... S TEMP=$E(OTIUT,1,33)
|
---|
| 207 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_TIUT
|
---|
| 208 | .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND
|
---|
| 209 | .... I KND>2 D
|
---|
| 210 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" "_TYPE
|
---|
| 211 | ..... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New"
|
---|
| 212 | ;If JND is still 0 then there was nothing to save.
|
---|
| 213 | I JND>0 D
|
---|
| 214 | .;Save the header information.
|
---|
| 215 | . S DATE=^TMP("PXRMEXIA",$J,"DT")
|
---|
| 216 | . S TYPE=^TMP("PXRMEXIA",$J,"TYPE")
|
---|
| 217 | . S USER=$$GET1^DIQ(200,DUZ,.01,"")
|
---|
| 218 | . S ^PXD(811.8,PXRMRIEN,130,IND,0)=DATE_U_USER_U_TYPE
|
---|
| 219 | . S ^PXD(811.8,PXRMRIEN,130,"B",DATE,IND)=""
|
---|
| 220 | .;Set the 0 node.
|
---|
| 221 | . S (KND,TOTAL)=0
|
---|
| 222 | . F S KND=+$O(^PXD(811.8,PXRMRIEN,130,KND)) Q:KND=0 S TOTAL=TOTAL+1
|
---|
| 223 | . S ^PXD(811.8,PXRMRIEN,130,0)=U_"811.803DA"_U_IND_U_TOTAL
|
---|
| 224 | K ^TMP("PXRMEXIA",$J)
|
---|
| 225 | K ^TMP("PXRMEXIAD",$J)
|
---|
| 226 | Q
|
---|
| 227 | ;
|
---|