Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMEXPU.m

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