PXRMEXU1 ; SLC/PKR/PJH - Reminder exchange repository utilities, #1. ;09/20/2004 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005 ;===================================================== CLIST(IEN) ;Build the list of components for the repository ;entry IEN. EXTYPE is the type of Exchange entry. The default is ;reminder. N COMIND,COMORDR,CSTART,CSUM,END,FILENAME,FILENUM N IND,INDEXAT,JND,LINE,NCMPNT,NCTYPE,NITEMS,NLINES,NUMCMPNT N PT01,START,TEMP,TAG,TYPE,UCOM,VERSN S LINE=^PXD(811.8,IEN,100,1,0) ;Make sure it is XML version 1. I LINE'["" D Q . W !,"Not an Exchange File entry!" . S IEN=-1 . H 2 S LINE=^PXD(811.8,IEN,100,3,0) S VERSN=$$GETTAGV^PXRMEXU3(LINE,"") S LINE=^PXD(811.8,IEN,100,4,0) S INDEXAT=+$P(LINE,"",2) S LINE=^PXD(811.8,IEN,100,INDEXAT,0) I LINE'="" D Q . W !,"Index missing, cannot continue!" . S IEN=-1 . H 2 S JND=INDEXAT+1 S LINE=^PXD(811.8,IEN,100,JND,0) S NCMPNT=+$$GETTAGV^PXRMEXU3(LINE,"") K ^TMP($J,"CMPNT") F IND=1:1:NCMPNT D . K END,START . F S JND=JND+1,LINE=^PXD(811.8,IEN,100,JND,0) Q:LINE="" D .. S TAG=$$GETTAG^PXRMEXU3(LINE) .. I TAG["START" S START(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG) .. I TAG["END" S END(TAG)=+$$GETTAGV^PXRMEXU3(LINE,TAG) . I $D(START("")) D .. S CSTART=START("") .. S ^TMP($J,"CMPNT",IND,"TYPE")="ROUTINE" .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0) .. S ^TMP($J,"CMPNT",IND,"NAME")=$$GETTAGV^PXRMEXU3(LINE,"") .. S ^TMP($J,"CMPNT",IND,"FILENUM")=0 ..;Save the actual start and end of the code. .. S ^TMP($J,"CMPNT",IND,"START")=START("") .. S ^TMP($J,"CMPNT",IND,"END")=END("") . I $D(START("")) D .. S CSTART=START("") .. S LINE=^PXD(811.8,IEN,100,CSTART+1,0) .. S (^TMP($J,"CMPNT",IND,"TYPE"),^TMP($J,"CMPNT",IND,"FILENAME"))=$$GETTAGV^PXRMEXU3(LINE,"",1) .. S LINE=^PXD(811.8,IEN,100,CSTART+2,0) .. S ^TMP($J,"CMPNT",IND,"FILENUM")=$$GETTAGV^PXRMEXU3(LINE,"") .. S LINE=^PXD(811.8,IEN,100,CSTART+3,0) .. S (^TMP($J,"CMPNT",IND,"NAME"),^TMP($J,"CMPNT",IND,"POINT_01"))=$$GETTAGV^PXRMEXU3(LINE,"",1) ..;Save the actual start and end of the FileMan FDA. .. S ^TMP($J,"CMPNT",IND,"FDA_START")=START("") .. S ^TMP($J,"CMPNT",IND,"FDA_END")=END("") .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_START")=$G(START("")) .. S ^TMP($J,"CMPNT",IND,"IEN_ROOT_END")=$G(END("")) ;Build some indexes to order the component list. F IND=1:1:NCMPNT D . S TYPE=^TMP($J,"CMPNT",IND,"TYPE") . S COMIND(TYPE,IND)="" . S UCOM(TYPE)="" ;Build the component order for display and install. D CORDER^PXRMEXCO(IEN,.UCOM,.NUMCMPNT,.COMORDR) ;Set the 0 node. S ^PXD(811.8,IEN,120,0)=U_"811.802A"_U_NCMPNT_U_NCMPNT S NCTYPE=0 S NITEMS=0 F NCTYPE=1:1:NUMCMPNT D . S TYPE=$O(COMORDR(NCTYPE,"")) . S NITEMS=0 . S IND="" . F S IND=$O(COMIND(TYPE,IND)) Q:IND="" D .. S NITEMS=NITEMS+1 .. I NITEMS=1 S FILENUM=^TMP($J,"CMPNT",IND,"FILENUM") .. I TYPE="ROUTINE" S TEMP=^TMP($J,"CMPNT",IND,"NAME")_U_^TMP($J,"CMPNT",IND,"START")_U_^TMP($J,"CMPNT",IND,"END") .. 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")) .. S ^PXD(811.8,IEN,120,NCTYPE,1,NITEMS,0)=TEMP . S ^PXD(811.8,IEN,120,NCTYPE,0)=TYPE_U_FILENUM_U_NITEMS . S ^PXD(811.8,IEN,120,NCTYPE,1,0)=U_"811.8021A"_U_NITEMS_U_NITEMS ; ;Save the number of component types. S ^PXD(811.8,IEN,119)=NCTYPE K ^TMP($J,"CMPNT") Q ; ;===================================================== DELETE(LIST) ;Delete the repository entries in LIST. N DA,DIK S DIK="^PXD(811.8," S DA="" F S DA=$O(LIST(DA)) Q:+DA=0 D ^DIK Q ; ;===================================================== DELHIST(RIEN,IHIND) ;Delete install history IHIND in repository entry RIEN. N DATE S DATE=$P(^PXD(811.8,RIEN,130,IHIND,0),U) K ^PXD(811.8,RIEN,130,IHIND) K ^PXD(811.8,RIEN,130,"B",DATE) Q ; ;===================================================== DESC(RIEN,DESL,DESC,KEYWORD) ;Build the description. N JND,LC,NKEYW S LC=1 S ^PXD(811.8,RIEN,110,LC,0)="Reminder: "_DESL("RNAME") S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Source: "_DESL("SOURCE") S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Date Packed: "_DESL("DATEP") S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Package Version: "_DESL("VRSN") S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="" ;Add the user's description. S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Description:" F JND=1:1:+$P($G(@DESC@(1,0)),U,4) D . S LC=LC+1 . S ^PXD(811.8,RIEN,110,LC,0)=@DESC@(1,JND,0) S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="" ;Add the keywords. S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Keywords:" S NKEYW=+$P($G(@KEYWORD@(1,0)),U,4) I NKEYW=0 D . S LC=LC+1 . S ^PXD(811.8,RIEN,110,LC,0)="No keywords given" F JND=1:1:NKEYW D . S LC=LC+1 . S ^PXD(811.8,RIEN,110,LC,0)=@KEYWORD@(1,JND,0) S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="" S LC=LC+1 S ^PXD(811.8,RIEN,110,LC,0)="Components:" S ^PXD(811.8,RIEN,110,0)=U_811.804_U_LC_U_LC Q ; ;===================================================== RIEN(LIEN) ;Given the list ien return the repository ien. N RIEN S RIEN=$G(^TMP("PXRMEXLR",$J,"IDX",LIEN,LIEN)) Q RIEN ; ;===================================================== SAVHIST ;Save the installation history in the repository. N ACTION,DATE,CMPNT,FTYPE,IND,INDEX,ITEM,JND,NEWNAME,TEMP,USER ;Find the first open spot in the Installation History node. S (IND,JND)=0 F S IND=+$O(^PXD(811.8,PXRMRIEN,130,IND)) S JND=JND+1 Q:(IND=0)!(JND>IND) ;Set the 0 node. S ^PXD(811.8,PXRMRIEN,130,0)=U_"811.803DA"_U_JND_U_JND S IND=JND S DATE=^TMP("PXRMEXIA",$J,"DT") S USER=$$GET1^DIQ(200,DUZ,.01,"") S ^PXD(811.8,PXRMRIEN,130,IND,0)=DATE_U_USER S ^PXD(811.8,PXRMRIEN,130,"B",DATE,IND)="" S (INDEX,JND)=0 F S INDEX=$O(^TMP("PXRMEXIA",$J,INDEX)) Q:+INDEX=0 D . S JND=JND+1 . S CMPNT=$O(^TMP("PXRMEXIA",$J,INDEX,"")) . S ITEM=$O(^TMP("PXRMEXIA",$J,INDEX,CMPNT,"")) . S ACTION=$O(^TMP("PXRMEXIA",$J,INDEX,CMPNT,ITEM,"")) . S NEWNAME=$G(^TMP("PXRMEXIA",$J,INDEX,CMPNT,ITEM,ACTION)) . S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,0)=INDEX_U_CMPNT_U_ITEM_U_ACTION_U_NEWNAME .;Set the 0 node. . S ^PXD(811.8,PXRMRIEN,130,IND,1,0)=U_"811.8031A"_U_JND_U_JND .;Check for finding item changes and save them. . S FTYPE="" . I CMPNT["DEFINITION" S FTYPE="DEFF" . I CMPNT["DIALOG" S FTYPE="DIAF" . I CMPNT["TERM" S FTYPE="TRMF" . I (FTYPE'=""),($D(^TMP("PXRMEXIA",$J,FTYPE))) D .. N FI,FINDING,KND,OFINDING .. S KND=2 .. S FI="" .. F S FI=$O(^TMP("PXRMEXIA",$J,FTYPE,FI)) Q:FI="" D ... S OFINDING=$O(^TMP("PXRMEXIA",$J,FTYPE,FI,"")) ... S FINDING=^TMP("PXRMEXIA",$J,FTYPE,FI,OFINDING) ... I OFINDING=FINDING Q ... S KND=KND+1 ... S TEMP=$E(OFINDING,1,33) ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_FINDING .. S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND .. I KND>2 D ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" Finding Changes" ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New" .; .;Check for TIU template replacements and save them. . I CMPNT["DIALOG" S FTYPE="DIATIU" . E S FTYPE="" . I (FTYPE'=""),($D(^TMP("PXRMEXIA",$J,FTYPE))) D .. N KND,OTIUT,TIUT,TYPE .. S TYPE="" .. S KND=2 .. F S TYPE=$O(^TMP("PXRMEXIA",$J,FTYPE,TYPE)) Q:TYPE="" D ... S OTIUT="" ... F S OTIUT=$O(^TMP("PXRMEXIA",$J,FTYPE,TYPE,OTIUT)) Q:OTIUT="" D .... S TIUT=$G(^TMP("PXRMEXIA",$J,FTYPE,TYPE,OTIUT)) .... I OTIUT=TIUT Q .... I '$D(^TMP("PXRMEXIA",$J,FTYPE,TYPE,OTIUT,ITEM)) Q .... S KND=KND+1 .... S TEMP=$E(OTIUT,1,33) .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,KND,0)=" "_TEMP_$$INSCHR^PXRMEXLC((35-$L(TEMP))," ")_TIUT ... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,0)=U_"811.80315A"_U_KND_U_KND ... I KND>2 D .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,1,0)=" "_TYPE .... S ^PXD(811.8,PXRMRIEN,130,IND,1,JND,1,2,0)=" Original"_$$INSCHR^PXRMEXLC(27," ")_"New" K ^TMP("PXRMEXIA",$J) Q ;