| 1 | PXRMEXPU ; SLC/PKR - Utilities for packing and unpacking repository entries. ;09/10/2007
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
 | 
|---|
| 3 |  ;==================================================
 | 
|---|
| 4 | BTTABLE(DIQOUT,IENROOT,TTABLE) ;Build the DIQOUT to FDA iens translation table.
 | 
|---|
| 5 |  N FILENUM,IENS,IENT,IND,UP
 | 
|---|
| 6 |  S FILENUM=$O(DIQOUT(""))
 | 
|---|
| 7 |  I FILENUM="" Q
 | 
|---|
| 8 |  ;DBIA #2631
 | 
|---|
| 9 |  S UP=$G(^DD(FILENUM,0,"UP"))
 | 
|---|
| 10 |  ;Top level file in DIQOUT should not have an up node.
 | 
|---|
| 11 |  I UP="" D
 | 
|---|
| 12 |  . S IENS=$O(DIQOUT(FILENUM,"")),IND=+IENS
 | 
|---|
| 13 |  . S TTABLE(FILENUM,IENS)="+"_IENS
 | 
|---|
| 14 |  E  D  Q
 | 
|---|
| 15 |  . W !,"BTTABLE^PXRMEXPU - DIQOUT problem, do not have correct top level"
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  F  S FILENUM=$O(DIQOUT(FILENUM)) Q:FILENUM=""  D
 | 
|---|
| 18 |  . S UP=$G(^DD(FILENUM,0,"UP"))
 | 
|---|
| 19 |  . S IENS=""
 | 
|---|
| 20 |  . F  S IENS=$O(DIQOUT(FILENUM,IENS)) Q:IENS=""  D
 | 
|---|
| 21 |  .. S IND=IND+1
 | 
|---|
| 22 |  .. S IENT=$P(IENS,",",2,99)
 | 
|---|
| 23 |  .. S TTABLE(FILENUM,IENS)="+"_IND_","_TTABLE(UP,IENT)
 | 
|---|
| 24 |  .. S IENROOT(IND)=$P(IENS,",",1)
 | 
|---|
| 25 |  Q
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;==================================================
 | 
|---|
| 28 | CLDIQOUT(DIQOUT) ;Clean up DIQOUT remove null entries and change .01's
 | 
|---|
| 29 |  ;to the resolved form.
 | 
|---|
| 30 |  N ABBR,IENS,INTERNAL,FIELD,FILENUM,LINE
 | 
|---|
| 31 |  N PTRTO,ROOT,TYPE,WPLCNT,VLIST,VPTRLIST
 | 
|---|
| 32 |  S FILENUM=""
 | 
|---|
| 33 |  F  S FILENUM=$O(DIQOUT(FILENUM)) Q:FILENUM=""  D
 | 
|---|
| 34 |  . K TYPE,VPTRLIST
 | 
|---|
| 35 |  . S IENS=""
 | 
|---|
| 36 |  . F  S IENS=$O(DIQOUT(FILENUM,IENS)) Q:IENS=""  D
 | 
|---|
| 37 |  .. S FIELD=""
 | 
|---|
| 38 |  .. F  S FIELD=$O(DIQOUT(FILENUM,IENS,FIELD)) Q:FIELD=""  D
 | 
|---|
| 39 |  ...;If there is no data then don't keep this entry.
 | 
|---|
| 40 |  ... I DIQOUT(FILENUM,IENS,FIELD)="" K DIQOUT(FILENUM,IENS,FIELD) Q
 | 
|---|
| 41 |  ...;Get the field type, if it is a variable-pointer then set up
 | 
|---|
| 42 |  ...;the resolved form.
 | 
|---|
| 43 |  ... I '$D(TYPE(FILENUM,FIELD)) S TYPE(FILENUM,FIELD)=$$GET1^DID(FILENUM,FIELD,"","TYPE")
 | 
|---|
| 44 |  ... S PTRTO=$S(TYPE(FILENUM,FIELD)="POINTER":$$GET1^DID(FILENUM,FIELD,"","POINTER"),1:"")
 | 
|---|
| 45 |  ... ;Remove pointers to file 200.
 | 
|---|
| 46 |  ... I PTRTO="VA(200," S DIQOUT(FILENUM,IENS,FIELD)="" Q
 | 
|---|
| 47 |  ...;If the field's type is COMPUTED then don't transport it.
 | 
|---|
| 48 |  ... I TYPE(FILENUM,FIELD)="COMPUTED" K DIQOUT(FILENUM,IENS,FIELD) Q
 | 
|---|
| 49 |  ... I TYPE(FILENUM,FIELD)="VARIABLE-POINTER" D
 | 
|---|
| 50 |  .... I '$D(VPTRLIST(FILENUM,FIELD)) D
 | 
|---|
| 51 |  ..... K VLIST
 | 
|---|
| 52 |  ..... D BLDRLIST^PXRMVPTR(FILENUM,FIELD,.VLIST)
 | 
|---|
| 53 |  ..... M VPTRLIST(FILENUM,FIELD)=VLIST
 | 
|---|
| 54 |  .... S INTERNAL=$$GET1^DIQ(FILENUM,IENS,FIELD,"I")
 | 
|---|
| 55 |  .... S (PTRTO,ROOT)=$P(INTERNAL,";",2)
 | 
|---|
| 56 |  .... S ABBR=$P(VPTRLIST(FILENUM,FIELD,ROOT),U,4)
 | 
|---|
| 57 |  .... S DIQOUT(FILENUM,IENS,FIELD)=ABBR_"."_DIQOUT(FILENUM,IENS,FIELD)
 | 
|---|
| 58 |  ... I TYPE(FILENUM,FIELD)="WORD-PROCESSING" D
 | 
|---|
| 59 |  .... S (LINE,WPLCNT)=0
 | 
|---|
| 60 |  .... F  S LINE=$O(DIQOUT(FILENUM,IENS,FIELD,LINE)) Q:LINE=""  D
 | 
|---|
| 61 |  ..... S WPLCNT=WPLCNT+1
 | 
|---|
| 62 |  .... I WPLCNT>0 S DIQOUT(FILENUM,IENS,FIELD)="WP-start~"_WPLCNT
 | 
|---|
| 63 |  .... E  K DIQOUT(FILENUM,IENS,FIELD)
 | 
|---|
| 64 |  ...;For fields that point to files 80 and 80.1 we have to append a space
 | 
|---|
| 65 |  ...;so FileMan can resolve the pointers when installing a component.
 | 
|---|
| 66 |  ... I PTRTO["ICD" S DIQOUT(FILENUM,IENS,FIELD)=DIQOUT(FILENUM,IENS,FIELD)_" "
 | 
|---|
| 67 |  Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;==================================================
 | 
|---|
| 70 | CONTOFDA(DIQOUT,IENROOT) ;Convert the iens from the form
 | 
|---|
| 71 |  ;returned by GETS^DIQ to the FDA laygo form used by UPDATE^DIE.
 | 
|---|
| 72 |  ;DIQOUT contains the GETS^DIQ output. If any of the fields are
 | 
|---|
| 73 |  ;variable pointers change them to the resolved form.
 | 
|---|
| 74 |  N IENS,IENSA,FIELD,FILENUM,TTABLE,TYPE
 | 
|---|
| 75 |  ;Clean up DIQOUT remove null entries and change .01's to the resolved
 | 
|---|
| 76 |  ;form.
 | 
|---|
| 77 |  D CLDIQOUT(.DIQOUT)
 | 
|---|
| 78 |  ;Convert the iens to the adding FDA form .
 | 
|---|
| 79 |  D BTTABLE(.DIQOUT,.IENROOT,.TTABLE)
 | 
|---|
| 80 |  S FILENUM=""
 | 
|---|
| 81 |  F  S FILENUM=$O(DIQOUT(FILENUM)) Q:FILENUM=""  D
 | 
|---|
| 82 |  . S IENS=""
 | 
|---|
| 83 |  . F  S IENS=$O(DIQOUT(FILENUM,IENS)) Q:IENS=""  D
 | 
|---|
| 84 |  .. S IENSA=TTABLE(FILENUM,IENS)
 | 
|---|
| 85 |  .. S FIELD=""
 | 
|---|
| 86 |  .. F  S FIELD=$O(DIQOUT(FILENUM,IENS,FIELD)) Q:FIELD=""  D
 | 
|---|
| 87 |  ... M DIQOUT(FILENUM,IENSA,FIELD)=DIQOUT(FILENUM,IENS,FIELD)
 | 
|---|
| 88 |  .. K DIQOUT(FILENUM,IENS)
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ;==================================================
 | 
|---|
| 92 | GDIQF(LIST,NUM,TMPIND,SERROR) ;Save file entries into ^TMP(TMPIND,$J).
 | 
|---|
| 93 |  N CSUM,DIQOUT,IENROOT,IND,FIELD,FILENAME,IENS,MSG,PT01,TEMP
 | 
|---|
| 94 |  S ^TMP(TMPIND,$J,"NUMF")=NUM
 | 
|---|
| 95 |  F IND=1:1:NUM D
 | 
|---|
| 96 |  . S TEMP=LIST(IND)
 | 
|---|
| 97 |  . S FILENAME=$P(TEMP,U,1)
 | 
|---|
| 98 |  . S FILENUM=$P(TEMP,U,2)
 | 
|---|
| 99 |  . S IEN=$P(TEMP,U,3)
 | 
|---|
| 100 |  . K DIQOUT,IENROOT
 | 
|---|
| 101 |  .;If the file entry is ok to install then get the entire entry,
 | 
|---|
| 102 |  .;otherwise just get the .01.
 | 
|---|
| 103 |  . I $$FOKTI^PXRMEXFI(FILENUM) S FIELD="**"
 | 
|---|
| 104 |  . E  S FIELD=.01
 | 
|---|
| 105 |  . D GETS^DIQ(FILENUM,IEN,FIELD,"N","DIQOUT","MSG")
 | 
|---|
| 106 |  . I $D(MSG) D  Q
 | 
|---|
| 107 |  .. S SERROR=1,IND=NUM
 | 
|---|
| 108 |  .. N ETEXT
 | 
|---|
| 109 |  .. S ETEXT="GETS^DIQ failed for "_FILENAME_", ien="_IEN_";"
 | 
|---|
| 110 |  .. W !,ETEXT
 | 
|---|
| 111 |  .. W !,"it returned the following error:"
 | 
|---|
| 112 |  .. D AWRITE^PXRMUTIL("MSG")
 | 
|---|
| 113 |  .. H 2
 | 
|---|
| 114 |  .. K MSG
 | 
|---|
| 115 |  .;Remove edit history from all reminder files.
 | 
|---|
| 116 |  . D RMEH(FILENUM,.DIQOUT)
 | 
|---|
| 117 |  .;Convert the iens to the FDA adding form.
 | 
|---|
| 118 |  . D CONTOFDA(.DIQOUT,.IENROOT)
 | 
|---|
| 119 |  . S CSUM=$$DIQOUTCS^PXRMEXCS(.DIQOUT)
 | 
|---|
| 120 |  . S ^TMP("PXRMEXCS",$J,IND,FILENAME)=CSUM
 | 
|---|
| 121 |  .;Load the converted DIQOUT into TMP.
 | 
|---|
| 122 |  . M ^TMP(TMPIND,$J,IND,FILENAME)=DIQOUT
 | 
|---|
| 123 |  . M ^TMP(TMPIND,$J,IND,FILENAME_"_IENROOT")=IENROOT
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ;==================================================
 | 
|---|
| 127 | GETREM(ACTION) ;Get the reminder to save.
 | 
|---|
| 128 |  N DIC,DUOUT,X,Y
 | 
|---|
| 129 |  S DIC="^PXD(811.9,"
 | 
|---|
| 130 |  S DIC(0)="AEMQ"
 | 
|---|
| 131 |  S DIC("A")="Select Reminder Definition to "_ACTION_": "
 | 
|---|
| 132 |  D ^DIC
 | 
|---|
| 133 |  Q Y
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  ;==================================================
 | 
|---|
| 136 | GRTN(LIST,NUM,TMPIND,SERROR) ;Save routines into ^TMP(TMPIND,$J).
 | 
|---|
| 137 |  N DIF,IEN,IND,RA,TEMP,X,XCNP
 | 
|---|
| 138 |  S ^TMP(TMPIND,$J,"NUMR")=NUM
 | 
|---|
| 139 |  S X=""
 | 
|---|
| 140 |  F IND=1:1:NUM D
 | 
|---|
| 141 |  .;Make sure the routine exists.
 | 
|---|
| 142 |  . S X=LIST(IND)
 | 
|---|
| 143 |  . X ^%ZOSF("TEST")
 | 
|---|
| 144 |  . I $T D
 | 
|---|
| 145 |  .. K RA
 | 
|---|
| 146 |  .. S DIF="RA("
 | 
|---|
| 147 |  .. S XCNP=0
 | 
|---|
| 148 |  .. X ^%ZOSF("LOAD")
 | 
|---|
| 149 |  .. S ^TMP("PXRMEXCS",$J,"ROUTINE",X)=$$ROUTINE^PXRMEXCS(.RA)
 | 
|---|
| 150 |  .. M ^TMP(TMPIND,$J,"ROUTINE",X)=RA
 | 
|---|
| 151 |  . E  D
 | 
|---|
| 152 |  .. S SERROR=1
 | 
|---|
| 153 |  .. W !,"Warning could not find routine ",X
 | 
|---|
| 154 |  .. H 2
 | 
|---|
| 155 |  Q
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ;==================================================
 | 
|---|
| 158 | RMEH(FILENUM,DIQOUT,NOSTUB) ;Clear the edit history from all reminder files.
 | 
|---|
| 159 |  ;Leave a stub so it can be filled in when the file is installed.
 | 
|---|
| 160 |  I (FILENUM<800)!(FILENUM>811.9) Q
 | 
|---|
| 161 |  N IENS,SFN,TARGET
 | 
|---|
| 162 |  ;Edit History is stored in node 110 for all files, get the
 | 
|---|
| 163 |  ;subfile number.
 | 
|---|
| 164 |  D FIELD^DID(FILENUM,110,"","SPECIFIER","TARGET")
 | 
|---|
| 165 |  S SFN=+$G(TARGET("SPECIFIER"))
 | 
|---|
| 166 |  I SFN=0 Q
 | 
|---|
| 167 |  ;Clean out the history.
 | 
|---|
| 168 |  S IENS=""
 | 
|---|
| 169 |  F  S IENS=$O(DIQOUT(SFN,IENS)) Q:IENS=""  K DIQOUT(SFN,IENS)
 | 
|---|
| 170 |  ;Create a stub for the install.
 | 
|---|
| 171 |  I $G(NOSTUB) Q
 | 
|---|
| 172 |  S IENS="1,"_$O(DIQOUT(FILENUM,""))
 | 
|---|
| 173 |  S DIQOUT(SFN,IENS,.01)=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
 | 
|---|
| 174 |  S DIQOUT(SFN,IENS,1)=$$GET1^DIQ(200,DUZ,.01)
 | 
|---|
| 175 |  S DIQOUT(SFN,IENS,2)="DIQOUT("_SFN_","_IENS_"2)"
 | 
|---|
| 176 |  S DIQOUT(SFN,IENS,2,1)="Exchange Stub"
 | 
|---|
| 177 |  Q
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 |  ;==================================================
 | 
|---|
| 180 | UPDATE(SUCCESS,FDA,FDAIEN) ;Call to add new entries to the repository.
 | 
|---|
| 181 |  N MSG
 | 
|---|
| 182 |  ;Try to eliminate gaps in the repository.
 | 
|---|
| 183 |  S $P(^PXD(811.8,0),U,3)=0
 | 
|---|
| 184 |  D UPDATE^DIE("E","FDA","FDAIEN","MSG")
 | 
|---|
| 185 |  I $D(MSG) D
 | 
|---|
| 186 |  . N DATE,RNAME
 | 
|---|
| 187 |  . S SUCCESS=0
 | 
|---|
| 188 |  . W !,"The update failed, UPDATE^DIE returned the following error message:"
 | 
|---|
| 189 |  . D AWRITE^PXRMUTIL("MSG")
 | 
|---|
| 190 |  . S RNAME=FDA(811.8,"+1,",.01)
 | 
|---|
| 191 |  . S DATE=FDA(811.8,"+1,",.03)
 | 
|---|
| 192 |  . W !!,"Exchange File entry ",RNAME," date packed ",DATE," did not get stored!"
 | 
|---|
| 193 |  . W !,"Examine the above error message for the reason.",!
 | 
|---|
| 194 |  . H 2
 | 
|---|
| 195 |  E  S SUCCESS=1
 | 
|---|
| 196 |  Q
 | 
|---|
| 197 |  ;
 | 
|---|