DICU1 ;SEA/TOAD,SF/TKW-VA FileMan: Lookup Tools, Get IDs & Index ;9/9/98 09:02 ;;22.0;VA FileMan;;Mar 30, 1999 ;Per VHA Directive 10-93-142, this routine should not be modified. ; IDENTS(DIFLAGS,DIFILE,DIDS,DIWRITE,DIDENT,DINDEX) ; ; get definition of fields to return with each entry ; ID1 ; prepare to build output processor: ; S DIDS=";"_DIDS_";" I DIDS[";@;" S DIDS("@")="" E S:DIDS'[";-WID;" DIDS("WID")="" S:DIDS=";;" DIDS("FID")="" N DICRSR,DICOUNT S (DICRSR,DICOUNT)=0 I DIFLAGS["P" S DICRSR=1,DIDENT(-3)="IEN" N DIFORMAT,DIDEFALT S DIDEFALT=$S(DIFLAGS["I":"I",1:"E") ; ID1A ; for Lister: add indexed fields to DIDENT array (to build 1 nodes) ; I DIFLAGS[3,DIFLAGS'["S",DIDS'[";-IX",'$D(DIDS("@")) D . S DIDENT=-2,DIDENT(-2)=1 . D THROW^DICU11(DIFLAGS,.DIDENT,.DIDS,.DICRSR,.DICOUNT,DIDEFALT,.DINDEX) . S DIDENT=0 ; ID2 ; decide whether to auto-include the .01 in the field list ; will come out in 1 node for Lister, in "ID" nodes for Finder ; N DIUSEKEY S (DIUSEKEY,DIDENT)=0 I '$D(DIDS("@")),DIDS'[";-.01;",DIFLAGS'["S" D . I DIFLAGS[4 S DIUSEKEY="1F" Q . I DIDS[";.01;"!(DIDS[";.01E") Q . S DIUSEKEY=1 N DISUB F DISUB=1:1:DINDEX("#") D Q:'DIUSEKEY . . Q:DINDEX(DISUB,"FIELD")'=.01 . . S DIUSEKEY=DINDEX(DISUB,"FILE")'=DIFILE . Q I DIUSEKEY S DIDENT(-2)=1,DIDENT=.01 N DICODE,DIDEF,DIEFROM,DIETO,DINODE,DIPIECE,DISTORE,DITYPE,DIFRMAT2 N DILENGTH,DIOUTI S DILENGTH=$L(DIDS,";"),DIOUTI=0 ; ID3 ; Process auto-included .01 field (if included) on first pass, ; Start loop to process each field from DIFIELDS parameter ; and Identifiers. ; F D Q:$G(DIERR)!DIOUTI . S DIFORMAT="" . I DIUSEKEY D Q . . D BLD S DIUSEKEY=$S(DIUSEKEY="1F":"F",1:0) . . S:DIDENT=-2 DIDENT=.01 Q . D Q:'DIDENT . . S DIUSEKEY=0 . . ; Find next Identifier . . I $D(DIDS("FID")) D Q . . . S DIDENT=$O(^DD(DIFILE,0,"ID",DIDENT)) . . . I 'DIDENT K DIFRMAT2 . . . I DIDENT="" S:DIDS=";;" DIOUTI=1 K DIDS("FID") . . ID4 . . ; Find next field in DIFIELDS input parameter. . . . . S DICOUNT=DICOUNT+1 . . S DIDENT=$P(DIDS,";",DICOUNT) . . I DIDENT="",DICOUNT'