[613] | 1 | DICU1 ;SEA/TOAD,SF/TKW-VA FileMan: Lookup Tools, Get IDs & Index ;9/9/98 09:02
|
---|
| 2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | IDENTS(DIFLAGS,DIFILE,DIDS,DIWRITE,DIDENT,DINDEX) ;
|
---|
| 6 | ; get definition of fields to return with each entry
|
---|
| 7 | ;
|
---|
| 8 | ID1 ; prepare to build output processor:
|
---|
| 9 | ;
|
---|
| 10 | S DIDS=";"_DIDS_";"
|
---|
| 11 | I DIDS[";@;" S DIDS("@")=""
|
---|
| 12 | E S:DIDS'[";-WID;" DIDS("WID")="" S:DIDS=";;" DIDS("FID")=""
|
---|
| 13 | N DICRSR,DICOUNT S (DICRSR,DICOUNT)=0
|
---|
| 14 | I DIFLAGS["P" S DICRSR=1,DIDENT(-3)="IEN"
|
---|
| 15 | N DIFORMAT,DIDEFALT S DIDEFALT=$S(DIFLAGS["I":"I",1:"E")
|
---|
| 16 | ;
|
---|
| 17 | ID1A ; for Lister: add indexed fields to DIDENT array (to build 1 nodes)
|
---|
| 18 | ;
|
---|
| 19 | I DIFLAGS[3,DIFLAGS'["S",DIDS'[";-IX",'$D(DIDS("@")) D
|
---|
| 20 | . S DIDENT=-2,DIDENT(-2)=1
|
---|
| 21 | . D THROW^DICU11(DIFLAGS,.DIDENT,.DIDS,.DICRSR,.DICOUNT,DIDEFALT,.DINDEX)
|
---|
| 22 | . S DIDENT=0
|
---|
| 23 | ;
|
---|
| 24 | ID2 ; decide whether to auto-include the .01 in the field list
|
---|
| 25 | ; will come out in 1 node for Lister, in "ID" nodes for Finder
|
---|
| 26 | ;
|
---|
| 27 | N DIUSEKEY S (DIUSEKEY,DIDENT)=0
|
---|
| 28 | I '$D(DIDS("@")),DIDS'[";-.01;",DIFLAGS'["S" D
|
---|
| 29 | . I DIFLAGS[4 S DIUSEKEY="1F" Q
|
---|
| 30 | . I DIDS[";.01;"!(DIDS[";.01E") Q
|
---|
| 31 | . S DIUSEKEY=1 N DISUB F DISUB=1:1:DINDEX("#") D Q:'DIUSEKEY
|
---|
| 32 | . . Q:DINDEX(DISUB,"FIELD")'=.01
|
---|
| 33 | . . S DIUSEKEY=DINDEX(DISUB,"FILE")'=DIFILE
|
---|
| 34 | . Q
|
---|
| 35 | I DIUSEKEY S DIDENT(-2)=1,DIDENT=.01
|
---|
| 36 | N DICODE,DIDEF,DIEFROM,DIETO,DINODE,DIPIECE,DISTORE,DITYPE,DIFRMAT2
|
---|
| 37 | N DILENGTH,DIOUTI S DILENGTH=$L(DIDS,";"),DIOUTI=0
|
---|
| 38 | ;
|
---|
| 39 | ID3 ; Process auto-included .01 field (if included) on first pass,
|
---|
| 40 | ; Start loop to process each field from DIFIELDS parameter
|
---|
| 41 | ; and Identifiers.
|
---|
| 42 | ;
|
---|
| 43 | F D Q:$G(DIERR)!DIOUTI
|
---|
| 44 | . S DIFORMAT=""
|
---|
| 45 | . I DIUSEKEY D Q
|
---|
| 46 | . . D BLD S DIUSEKEY=$S(DIUSEKEY="1F":"F",1:0)
|
---|
| 47 | . . S:DIDENT=-2 DIDENT=.01 Q
|
---|
| 48 | . D Q:'DIDENT
|
---|
| 49 | . . S DIUSEKEY=0
|
---|
| 50 | . . ; Find next Identifier
|
---|
| 51 | . . I $D(DIDS("FID")) D Q
|
---|
| 52 | . . . S DIDENT=$O(^DD(DIFILE,0,"ID",DIDENT))
|
---|
| 53 | . . . I 'DIDENT K DIFRMAT2
|
---|
| 54 | . . . I DIDENT="" S:DIDS=";;" DIOUTI=1 K DIDS("FID")
|
---|
| 55 | . .
|
---|
| 56 | ID4 . . ; Find next field in DIFIELDS input parameter.
|
---|
| 57 | . .
|
---|
| 58 | . . S DICOUNT=DICOUNT+1
|
---|
| 59 | . . S DIDENT=$P(DIDS,";",DICOUNT)
|
---|
| 60 | . . I DIDENT="",DICOUNT'<DILENGTH S DIOUTI=1
|
---|
| 61 | . .
|
---|
| 62 | ID4A . . ; process IX specifier
|
---|
| 63 | . .
|
---|
| 64 | . . I DIDENT["IX" D Q
|
---|
| 65 | . . . I $$BADIX(DIDENT) D ERR202 Q
|
---|
| 66 | . . . Q:DIDS[";-IX;"
|
---|
| 67 | . . . D THROW^DICU11(DIFLAGS,.DIDENT,.DIDS,.DICRSR,.DICOUNT,DIDEFALT,.DINDEX)
|
---|
| 68 | . .
|
---|
| 69 | ID4B . . ; process FID, WID, and @ specifiers
|
---|
| 70 | . .
|
---|
| 71 | . . I DIDENT["FID" D S DIDENT="" Q
|
---|
| 72 | . . . Q:DIDENT="-FID"!(DIDS[";-FID;")
|
---|
| 73 | . . . D GETFORM^DICU11(.DIDENT,.DIFRMAT2,.DIDS,.DICOUNT)
|
---|
| 74 | . . . S DIDS("FID")=1 Q
|
---|
| 75 | . . I DIDENT["WID" D S DIDENT="" Q
|
---|
| 76 | . . . I DIDENT'="WID",DIDENT'="-WID" D ERR202 Q
|
---|
| 77 | . . . Q:DIDENT="-WID"!(DIDS[";-WID;")
|
---|
| 78 | . . . D WRITEID^DICU11(DIFILE,.DIDENT,.DICRSR) K DIDS("WID") Q
|
---|
| 79 | . . I DIDENT["@" D:DIDENT'="@" ERR202 Q
|
---|
| 80 | . . I 'DIDENT D:DIDENT'="" ERR202 Q
|
---|
| 81 | . .
|
---|
| 82 | ID4C . . ; process field # specifiers from DIFIELDS parameter
|
---|
| 83 | . .
|
---|
| 84 | . . D GETFORM^DICU11(.DIDENT,.DIFORMAT,.DIDS,.DICOUNT)
|
---|
| 85 | .
|
---|
| 86 | . ; Here we quit if field is already in the DIDENT array.
|
---|
| 87 | . I DIDS=";;",DIFLAGS[4,DIUSEKEY'="F",DIDENT=.01 Q
|
---|
| 88 | . I DIDS=";;",DIFLAGS[3,DINDEX("FLIST")[("^"_DIDENT_"^") Q
|
---|
| 89 | .
|
---|
| 90 | ID5 . ; for file IDs, we skip non-display IDs
|
---|
| 91 | .
|
---|
| 92 | . N DIPLUS S DIPLUS=+DIDENT
|
---|
| 93 | . N DILAST S DILAST=$P(DIDENT,DIPLUS,2,999)
|
---|
| 94 | . I DIDENT["-" D Q
|
---|
| 95 | . . I DILAST'="" D ERR202 Q
|
---|
| 96 | . . I '$D(^DD(DIFILE,-DIPLUS)) D ERR(501,DIFILE,"","",-DIPLUS) Q
|
---|
| 97 | . E I (DILAST'?.1"E".1"I")&(DILAST'?.1"I".1"E") D ERR202 Q
|
---|
| 98 | . Q:DIDS[(";-"_DIDENT_";")
|
---|
| 99 | . I $D(DIDS("FID")) D I DINODE="W """"" Q
|
---|
| 100 | . . S DINODE=$G(^DD(DIFILE,0,"ID",DIDENT))
|
---|
| 101 | . I $G(DIFRMAT2)]"" S DIFORMAT=DIFRMAT2
|
---|
| 102 | . D BLD Q
|
---|
| 103 | ;
|
---|
| 104 | ID6 ; Write Identifiers: add to output processor
|
---|
| 105 | ; ID Parameter: add ID parameter to output processor
|
---|
| 106 | ;
|
---|
| 107 | Q:$G(DIERR)
|
---|
| 108 | I $D(DIDS("WID")) D WRITEID^DICU11(DIFILE,.DIDENT,.DICRSR)
|
---|
| 109 | I DIWRITE'="" D
|
---|
| 110 | . S DIDENT="ZZZ ID" I DIFLAGS["P" S DICRSR=DICRSR+1
|
---|
| 111 | . S DIDENT(DICRSR,DIDENT,0)="N DIMSG "_DIWRITE
|
---|
| 112 | . S:DIFLAGS["P" $P(DIDENT(-3),U,DICRSR)="IDP" Q
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | BLD ; get fetch code for value
|
---|
| 116 | D GET^DICUIX1(DIFILE,DIFILE,DIDENT,.DIDEF,.DICODE) Q:DIDEF=""!$G(DIERR)
|
---|
| 117 | I DIFORMAT="" S DIFORMAT=$S(DIUSEKEY="1F":"I",1:DIDEFALT)
|
---|
| 118 | D
|
---|
| 119 | . N DIVALUE S DIVALUE=DIDENT
|
---|
| 120 | . I DIUSEKEY'["F",$D(DIDS("FID")),DIDENT'=.01 S DIVALUE="FID("_DIVALUE_")"
|
---|
| 121 | . S:DIFORMAT="I" DIVALUE=DIVALUE_DIFORMAT
|
---|
| 122 | . I DIFLAGS["P" S $P(DIDENT(-3),U,(DICRSR+1))=DIVALUE Q
|
---|
| 123 | . Q:DIUSEKEY="1F"
|
---|
| 124 | . S DIDENT(-3,+DIDENT,DIVALUE)="" Q
|
---|
| 125 | BLD1 ; set up format code and load with fetch code into DIDENT
|
---|
| 126 | N DIVALUE,DISUB S DIVALUE=DICODE,DISUB=0
|
---|
| 127 | S DITYPE=$P(DIDEF,U,2) I DITYPE'["C" D
|
---|
| 128 | . S DIVALUE=$$FORMAT^DICU11(DIDENT,DICODE,DIUSEKEY,DIFORMAT,DIDEFALT,DIFLAGS)
|
---|
| 129 | I DIUSEKEY="1F",DIDENT=.01 S DIDENT=-2,DISUB=.01
|
---|
| 130 | I DIFLAGS["P" S DICRSR=DICRSR+1
|
---|
| 131 | I DITYPE'["C" S DIDENT(DICRSR,DIDENT,DISUB,DIFORMAT)=DIVALUE Q
|
---|
| 132 | S DIDENT(DICRSR,DIDENT,0)=DIVALUE
|
---|
| 133 | S DIDENT(DICRSR,DIDENT,0,"TYPE")="C"
|
---|
| 134 | Q
|
---|
| 135 | ;
|
---|
| 136 | ERR(DIERN,DIFILE,DIENS,DIFIELD,DI1) ;
|
---|
| 137 | ;
|
---|
| 138 | ; add an error to the message array
|
---|
| 139 | ; GET
|
---|
| 140 | ;
|
---|
| 141 | N DIPE
|
---|
| 142 | S DIPE("FILE")=$G(DIFILE)
|
---|
| 143 | S DIPE("IEN")=$G(DIENS)
|
---|
| 144 | S DIPE("FIELD")=$G(DIFIELD)
|
---|
| 145 | S DIPE(1)=$G(DI1)
|
---|
| 146 | D BLD^DIALOG(DIERN,.DIPE,.DIPE)
|
---|
| 147 | Q
|
---|
| 148 | ;
|
---|
| 149 | ERR202 D ERR(202,"","","","FIELDS") Q
|
---|
| 150 | ;
|
---|
| 151 | BADIX(DIDENT) ;
|
---|
| 152 | ;
|
---|
| 153 | N DIBAD S DIBAD=DIDENT'="IX"&(DIDENT'="-IX")&(DIDENT'?1"IX"1"E".1"I")
|
---|
| 154 | S DIBAD=DIDENT'?1"IX"1"I".1"E"&DIBAD
|
---|
| 155 | Q DIBAD
|
---|
| 156 | ;
|
---|
| 157 | ; 202 The input parameter that identifies the |1
|
---|
| 158 | ;
|
---|