| 1 | PXRMEXMM ; SLC/PKR - Routines to select and deal with MailMan messages ;12/22/2004
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
 | 
|---|
| 3 |  ;=============================================================
 | 
|---|
| 4 | CMM(SUCCESS,LIST) ;Create a MailMan message containing the repository
 | 
|---|
| 5 |  ;entries in LIST.
 | 
|---|
| 6 |  ;Get a new MailMan message number.
 | 
|---|
| 7 |  N IC,IND,LC,LIEN,RIEN,TEMP,TLC,XMSUB
 | 
|---|
| 8 |  S TEMP=$$GETSUB
 | 
|---|
| 9 |  I (TEMP["^")!(TEMP="") Q
 | 
|---|
| 10 |  S XMSUB="CREX: "_TEMP
 | 
|---|
| 11 |  S TEMP=$$SUBCHK^XMGAPI0(XMSUB,0)
 | 
|---|
| 12 |  I $P(TEMP,U,1)'="" S XMSUB=$E(XMSUB,1,65)
 | 
|---|
| 13 | RETRY ;
 | 
|---|
| 14 |  D XMZ^XMA2
 | 
|---|
| 15 |  I XMZ<1 G RETRY
 | 
|---|
| 16 |  S SUCCESS("XMZ")=XMZ
 | 
|---|
| 17 |  S SUCCESS("SUB")=XMSUB
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  S (IC,TLC)=0
 | 
|---|
| 20 |  S LIEN=""
 | 
|---|
| 21 |  F  S LIEN=$O(LIST(LIEN)) Q:+LIEN=0  D
 | 
|---|
| 22 |  . S RIEN=$$RIEN^PXRMEXU1(LIEN)
 | 
|---|
| 23 |  . S LC=$O(^PXD(811.8,RIEN,100,""),-1)
 | 
|---|
| 24 |  . S TLC=TLC+LC
 | 
|---|
| 25 |  . F IND=1:1:LC D
 | 
|---|
| 26 |  .. S IC=IC+1
 | 
|---|
| 27 |  .. S ^XMB(3.9,XMZ,2,IC,0)=^PXD(811.8,RIEN,100,IND,0)
 | 
|---|
| 28 |  S ^XMB(3.9,XMZ,2,0)="^3.92^"_TLC_"^"_TLC_"^"_DT
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ;Make the message information only.
 | 
|---|
| 31 |  S $P(^XMB(3.9,XMZ,0),U,12)="Y"
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ;Get a list of who to send it to and send it.
 | 
|---|
| 34 |  D ENT2^XMD
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  ;=============================================================
 | 
|---|
| 38 | GETMESSN() ;Get the message number.
 | 
|---|
| 39 |  N BSKT,DIC,DIROUT,DIRUT,DTOUT,DUOUT,X,Y,ZN
 | 
|---|
| 40 |  S DIC("A")="Select a MailMan message: "
 | 
|---|
| 41 |  S DIC=3.9
 | 
|---|
| 42 |  S DIC(0)="EQV"
 | 
|---|
| 43 |  ;Look for messages that start with "C" for either CREX or Copy of.
 | 
|---|
| 44 |  S X="CREX:"
 | 
|---|
| 45 |  ;DBIA #2736 for XMXUTIL2
 | 
|---|
| 46 |  S DIC("S")="S BSKT=$$BSKT^XMXUTIL2(DUZ,+Y) I BSKT>0,BSKT'=.5"
 | 
|---|
| 47 |  S DIC("W")="S ZN=$$ZNODE^XMXUTIL2(+Y) W !,""         "",$$FROM^XMXUTIL2(ZN),"" "",$$DATE^XMXUTIL2(ZN),!"
 | 
|---|
| 48 |  W !
 | 
|---|
| 49 |  D ^DIC K DIC
 | 
|---|
| 50 |  I X=(U_U) S DTOUT=1
 | 
|---|
| 51 |  I $D(DIROUT)!$D(DIRUT) Q ""
 | 
|---|
| 52 |  I $D(DTOUT)!$D(DUOUT) Q ""
 | 
|---|
| 53 |  I +Y'=-1 Q $P(Y,U,1)
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  S DIC("A")="Select a MailMan message: "
 | 
|---|
| 56 |  S DIC=3.9
 | 
|---|
| 57 |  S DIC(0)="EQV"
 | 
|---|
| 58 |  S X="Copy of: CREX:"
 | 
|---|
| 59 |  ;DBIA #2736 for XMXUTIL2
 | 
|---|
| 60 |  S DIC("S")="S BSKT=$$BSKT^XMXUTIL2(DUZ,+Y) I BSKT>0,BSKT'=.5"
 | 
|---|
| 61 |  S DIC("W")="S ZN=$$ZNODE^XMXUTIL2(+Y) W !,""         "",$$FROM^XMXUTIL2(ZN),"" "",$$DATE^XMXUTIL2(ZN),!"
 | 
|---|
| 62 |  W !
 | 
|---|
| 63 |  D ^DIC K DIC
 | 
|---|
| 64 |  I X=(U_U) S DTOUT=1
 | 
|---|
| 65 |  I $D(DIROUT)!$D(DIRUT) Q ""
 | 
|---|
| 66 |  I $D(DTOUT)!$D(DUOUT) Q ""
 | 
|---|
| 67 |  Q $P(Y,U,1)
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;=============================================================
 | 
|---|
| 70 | GETSUB() ;Prompt the user for a subject.
 | 
|---|
| 71 |  N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 72 |  S DIR(0)="FAU"_U_"1:59"
 | 
|---|
| 73 |  S DIR("A")="Enter a subject: "
 | 
|---|
| 74 |  D ^DIR
 | 
|---|
| 75 |  I $D(DIROUT)!$D(DIRUT) Q ""
 | 
|---|
| 76 |  I $D(DTOUT)!$D(DUOUT) Q ""
 | 
|---|
| 77 |  Q Y
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ;=============================================================
 | 
|---|
| 80 | LMM(SUCCESS,XMZ) ;Load repository entries from a MailMan message.
 | 
|---|
| 81 |  N CSUM,DATEP,EXTYPE,FDA,FDAIEN,IENROOT,IND,LINE,MSG,NENTRY,NLINES,RETMP
 | 
|---|
| 82 |  N RNAME,SITE,SOURCE,SSOURCE,TEMP,US,USER,VRSN,XMER,XMPOS,XMRG,XMVAR
 | 
|---|
| 83 |  ;Get the message information
 | 
|---|
| 84 |  ;DBIA #1144
 | 
|---|
| 85 |  S TEMP=$$HDR^XMGAPI2(XMZ,.XMVAR,0)
 | 
|---|
| 86 |  I TEMP'=0 D  Q
 | 
|---|
| 87 |  . W !,"This MailMan message has a corrupted header."
 | 
|---|
| 88 |  . S SUCCESS=0
 | 
|---|
| 89 |  . H 2
 | 
|---|
| 90 |  ;Load the message
 | 
|---|
| 91 |  W !,"Loading MailMan message number ",XMZ
 | 
|---|
| 92 |  K ^TMP("PXRMEXLMM",$J)
 | 
|---|
| 93 |  S RETMP="^TMP(""PXRMEXLMM"",$J)"
 | 
|---|
| 94 |  S (NENTRY,NLINES,SSOURCE)=0
 | 
|---|
| 95 |  S XMPOS=$$STARTPOS(XMZ)
 | 
|---|
| 96 |  F  D REC^XMS3 Q:+$G(XMER)=-1  D
 | 
|---|
| 97 |  . S NLINES=NLINES+1
 | 
|---|
| 98 |  . S ^TMP("PXRMEXLMM",$J,NLINES,0)=XMRG
 | 
|---|
| 99 |  . I XMRG["<PACKAGE_VERSION>" S VRSN=$$GETTAGV^PXRMEXU3(XMRG,"<PACKAGE_VERSION>")
 | 
|---|
| 100 |  . I XMRG["<EXCHANGE_TYPE>" S EXTYPE=$$GETTAGV^PXRMEXU3(XMRG,"<EXCHANGE_TYPE>",1)
 | 
|---|
| 101 |  . I XMRG="<SOURCE>" S SSOURCE=1
 | 
|---|
| 102 |  . I SSOURCE D
 | 
|---|
| 103 |  .. I XMRG["<NAME>" S RNAME=$$GETTAGV^PXRMEXU3(XMRG,"<NAME>",1)
 | 
|---|
| 104 |  .. I XMRG["<USER>" S USER=$$GETTAGV^PXRMEXU3(XMRG,"<USER>",1)
 | 
|---|
| 105 |  .. I XMRG["<SITE>" S SITE=$$GETTAGV^PXRMEXU3(XMRG,"<SITE>",1)
 | 
|---|
| 106 |  .. I XMRG["<DATE_PACKED>" S DATEP=$$GETTAGV^PXRMEXU3(XMRG,"<DATE_PACKED>")
 | 
|---|
| 107 |  . I XMRG="</SOURCE>" D
 | 
|---|
| 108 |  .. S SSOURCE=0
 | 
|---|
| 109 |  .. S SOURCE=USER_" at "_SITE
 | 
|---|
| 110 |  .;See if the entry is loaded into the temporary storage.
 | 
|---|
| 111 |  . I XMRG="</REMINDER_EXCHANGE_FILE_ENTRY>" D
 | 
|---|
| 112 |  .. S NLINES=0
 | 
|---|
| 113 |  .. S NENTRY=NENTRY+1
 | 
|---|
| 114 |  ..;Make sure it has the correct format.
 | 
|---|
| 115 |  .. I (^TMP("PXRMEXLMM",$J,1,0)'["xml")!(^TMP("PXRMEXLMM",$J,2,0)'="<REMINDER_EXCHANGE_FILE_ENTRY>") D  Q
 | 
|---|
| 116 |  ... W !,"There is a problem reading this MailMan message for entry ",NENTRY,", try it again."
 | 
|---|
| 117 |  ... W !,"If it fails twice it is not in the proper reminder exchange format."
 | 
|---|
| 118 |  ... S SUCCESS=0
 | 
|---|
| 119 |  ... H 2
 | 
|---|
| 120 |  ... S XMER=-1
 | 
|---|
| 121 |  ..;Make sure this entry does not already exist.
 | 
|---|
| 122 |  .. I $$REXISTS^PXRMEXIU(RNAME,DATEP) D
 | 
|---|
| 123 |  ... W !,RNAME," with a date packed of ",DATEP
 | 
|---|
| 124 |  ... W !,"is already in the Exchange File, it will not be added again."
 | 
|---|
| 125 |  ... S SUCCESS(NENTRY)=0
 | 
|---|
| 126 |  ... H 2
 | 
|---|
| 127 |  .. E  D
 | 
|---|
| 128 |  ... K FDA,IENROOT
 | 
|---|
| 129 |  ... S FDA(811.8,"+1,",.01)=RNAME
 | 
|---|
| 130 |  ... S FDA(811.8,"+1,",.02)=SOURCE
 | 
|---|
| 131 |  ... S FDA(811.8,"+1,",.03)=DATEP
 | 
|---|
| 132 |  ... S FDA(811.8,"+1,",115)=$S($G(EXTYPE)="":"REMINDER",1:EXTYPE)
 | 
|---|
| 133 |  ... D UPDATE^PXRMEXPU(.US,.FDA,.IENROOT)
 | 
|---|
| 134 |  ... S SUCCESS(NENTRY)=US
 | 
|---|
| 135 |  ...;Create the description and save the data.
 | 
|---|
| 136 |  ... N DESL,DESCT,KEYWORDT
 | 
|---|
| 137 |  ... D DESC^PXRMEXU3(RETMP,.DESCT)
 | 
|---|
| 138 |  ... D KEYWORD^PXRMEXU3(RETMP,.KEYWORDT)
 | 
|---|
| 139 |  ... S DESL("RNAME")=RNAME,DESL("SOURCE")=SOURCE,DESL("DATEP")=DATEP
 | 
|---|
| 140 |  ... S DESL("VRSN")=VRSN
 | 
|---|
| 141 |  ... D DESC^PXRMEXU1(IENROOT(1),.DESL,"DESCT","KEYWORDT")
 | 
|---|
| 142 |  ... M ^PXD(811.8,IENROOT(1),100)=^TMP("PXRMEXLMM",$J)
 | 
|---|
| 143 |  ... W !,"Added Exchange entry ",RNAME H 2
 | 
|---|
| 144 |  .. K ^TMP("PXRMEXLMM",$J)
 | 
|---|
| 145 |  ;Check the success of the entry installs.
 | 
|---|
| 146 |  S SUCCESS=1
 | 
|---|
| 147 |  S IND=""
 | 
|---|
| 148 |  F  S IND=$O(SUCCESS(IND)) Q:+IND=0  D
 | 
|---|
| 149 |  . I 'SUCCESS(IND) S SUCCESS=0 Q
 | 
|---|
| 150 |  Q
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  ;=============================================================
 | 
|---|
| 153 | STARTPOS(XMZ) ;Find the starting position by looking for the xml header.
 | 
|---|
| 154 |  ;This will skip over extra header information created by things like
 | 
|---|
| 155 |  ;copying or using p-message.
 | 
|---|
| 156 |  N XMPOS,XMER,XMRG
 | 
|---|
| 157 |  S XMPOS=.99
 | 
|---|
| 158 |  F  D REC^XMS3 Q:(XMRG="<?xml version=""1.0"" standalone=""yes""?>")!(+$G(XMER)=-1)
 | 
|---|
| 159 |  S XMPOS=$S($G(XMER)=-1:-1,1:XMPOS-1)
 | 
|---|
| 160 |  Q XMPOS
 | 
|---|
| 161 |  ;
 | 
|---|