[613] | 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 | ;
|
---|