Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDRRSLCT

SDRRSLCT.m

Go to the documentation of this file.
  1. SDRRSLCT ;10N20/MAH;-RECALL REMINDER Generic file entry selector ;12/09/2007 14:26
  1. ;;5.3;Scheduling;**536**;Aug 13, 1993;Build 53
  1. ;
  1. ;
  1. ;Requires:
  1. ; SDRRDDIC = File number or global root
  1. ; SDRRDDIC(0) = DIC(0) string
  1. ; SDRRDUTIL = Node to store data under in ^TMP($J,SDRRDUTIL,
  1. ;
  1. ;Optional:
  1. ; SDRRDDIC("A") = DIC("A") string
  1. ; SDRRDDIC("B") = DIC("B") string
  1. ; SDRRDDIC("S") = DIC("S") string
  1. ; SDRRDDIC("W") = DIC("W") string
  1. ; SDRRDROOT = Closed array reference where data should be stored
  1. ; Defaluts to ^TMP($J,SDRRDUTIL)
  1. ; SDRRDFLD = Field to sort by if valid data to be stored as
  1. ; @Root@(SDRRDUTIL,ExternalValueSDRRDFLD,IEN)=""
  1. ; SDRRDFLD must reside on the zero (0) node to be valid
  1. ;
  1. ;Returns:
  1. ; $$EN() = $S(UpArrowOut:0, NothingSelected:0, 1:1)
  1. ; @SDRRDROOT@(SDRRDUTIL,ExternalFieldData,IEN)=""
  1. ;
  1. ;Example:
  1. ; SET SDRRDDIC=44,SDRRDDIC(0)="EMNQZ",SDRRDDIC("A")="Select CLINIC: "
  1. ; SET SDRRDDIC("B")="ALL",SDRRDDIC("S")="IF $PIECE(^(0),U,3)=""C"""
  1. ; IF $$EN^SDRRSLCT(.SDRRDDIC,"ClinicNode","MYARRAY",1)'>0 QUIT
  1. ;
  1. EN(SDRRDDIC,SDRRDUTIL,SDRRDROOT,SDRRDFLD) ;
  1. N %DT,SDRRDDONE,SDRRDDSEL,SDRRDFL01,SDRRDFNAM,SDRRDFNUM,SDRRDFSCR,SDRRDMASK
  1. N SDRRDNUM,SDRRDQUIT,SDRRDVALU,SDRRDX,DIC,DO,DTOUT,DUOUT,I,X,Y
  1. S SDRRDFLD=$G(SDRRDFLD)
  1. I $G(SDRRDROOT)]"" S SDRRDROOT=$NA(@SDRRDROOT@(SDRRDUTIL))
  1. E S SDRRDROOT=$NA(^TMP($J,SDRRDUTIL))
  1. K @SDRRDROOT
  1. S (SDRRDQUIT,SDRRDDONE)=0
  1. S SDRRDQUIT=(($G(SDRRDDIC)="")!($G(SDRRDDIC(0))="")!($G(SDRRDUTIL)=""))
  1. I SDRRDQUIT>0 G EXIT
  1. S DIC=SDRRDDIC
  1. I DIC>0 D I SDRRDQUIT G EXIT
  1. . S (SDRRDDIC,DIC)=$$GET1^DID(DIC,"","","GLOBAL NAME")
  1. . S SDRRDQUIT=$S(DIC="":1,1:0)
  1. . Q
  1. S (DIC(0),SDRRDDIC(0))=$TR(SDRRDDIC(0),"AL")_$S(SDRRDDIC(0)'["Z":"Z",1:"")
  1. D FILEATTR(DIC,DIC(0),.SDRRDFNUM,.SDRRDFNAM,.SDRRDFL01,.SDRRDFSCR)
  1. I SDRRDFLD]"" S SDRRDQUIT=$$FLD(SDRRDFNUM,SDRRDFLD) I SDRRDQUIT G EXIT
  1. F I="A","B","S","W" S SDRRDDIC(I)=$G(SDRRDDIC(I))
  1. I SDRRDDIC("A")="" S SDRRDDIC("A")="Select "_SDRRDFNAM_" "_SDRRDFL01_": "
  1. S SDRRDNUM=1
  1. D HOME^%ZIS
  1. F D Q:SDRRDQUIT!SDRRDDONE
  1. . D SETDIC(.SDRRDDIC,.DIC,.DO)
  1. . W !!,$S(SDRRDNUM>1:"Another one (Select/De-Select): ",1:DIC("A"))
  1. . W $S((SDRRDNUM=1)&(SDRRDDIC("B")]""):SDRRDDIC("B")_"// ",1:"")
  1. . R SDRRDX:DTIME S:('$T)!($E(SDRRDX)=U) SDRRDQUIT=1 Q:SDRRDQUIT
  1. . I (SDRRDNUM=1)&(SDRRDX="")&(SDRRDDIC("B")]"") S SDRRDX=SDRRDDIC("B")
  1. . I SDRRDX="" S SDRRDDONE=1 Q
  1. . S SDRRDDSEL=$S(SDRRDX?1"-"1.E:1,1:0)
  1. . I SDRRDDSEL S SDRRDX=$E(SDRRDX,2,$L(SDRRDX))
  1. . I SDRRDX?1.ANP1"-"1.ANP D Q:SDRRDQUIT=1 I SDRRDQUIT=-1 S SDRRDQUIT=0 Q
  1. .. S SDRRDQUIT=$$RANGE^SDRRSLC1(SDRRDX,.SDRRDDIC,SDRRDUTIL,SDRRDFLD,SDRRDDSEL,.SDRRDNUM)
  1. .. Q
  1. . I ($$UP^XLFSTR(SDRRDX)="ALL")!(SDRRDX["*") D Q:SDRRDQUIT=1 I SDRRDQUIT=-1 S SDRRDQUIT=0 Q
  1. .. S SDRRDQUIT=$$ALL^SDRRSLC1(SDRRDX,.SDRRDDIC,SDRRDUTIL,SDRRDFLD,SDRRDDSEL,.SDRRDNUM)
  1. .. Q
  1. . I $E(SDRRDX)="?" D HELP(.SDRRDDIC,SDRRDUTIL,SDRRDFLD)
  1. . I $L($G(DIC("S")))<235 D
  1. .. S DIC("S")=$S($G(DIC("S"))]"":DIC("S")_" ",1:"")
  1. .. S DIC("S")=DIC("S")_"I $$SEL^SDRRSLCT(Y,"_SDRRDFNUM_","_SDRRDDSEL
  1. .. S DIC("S")=DIC("S")_$S($G(SDRRDFLD)]"":","_SDRRDFLD,1:"")_")"
  1. .. Q
  1. . S X=SDRRDX D ^DIC K DIC I +Y'>0 Q
  1. . S SDRRDMASK=+Y
  1. . I $$CHFLD(SDRRDFNUM)["D" D
  1. .. N %DT,X
  1. .. S X=Y(0,0),%DT="ST" D ^%DT S Y(0,0)=Y
  1. .. Q
  1. . S Y=SDRRDMASK
  1. . I SDRRDFLD="" D
  1. .. D SETDATA(Y(0,0),+Y,SDRRDUTIL,SDRRDDSEL,.SDRRDNUM)
  1. .. Q
  1. . E D
  1. .. S SDRRDVALU=$$FLDSRT(SDRRDFNUM,SDRRDFLD,Y(0))
  1. .. I SDRRDVALU]"" D SETDATA(SDRRDVALU,+Y,SDRRDUTIL,SDRRDDSEL,.SDRRDNUM)
  1. .. Q
  1. . Q
  1. ;
  1. EXIT ;
  1. S SDRRDQUIT=$S(SDRRDQUIT>0:0,$O(@SDRRDROOT@(""))="":0,1:1)
  1. I SDRRDQUIT'>0 K @SDRRDROOT
  1. Q SDRRDQUIT
  1. ;
  1. SETDATA(SDRRDVALU,SDRRD0,SDRRDUTIL,SDRRDDSEL,SDRRDNUM) ;
  1. I 'SDRRDDSEL,'$D(@SDRRDROOT@($E(SDRRDVALU,1,63),SDRRD0)) D
  1. . S @SDRRDROOT@($E(SDRRDVALU,1,63),SDRRD0)=""
  1. . S SDRRDNUM=SDRRDNUM+1
  1. . Q
  1. I SDRRDDSEL,$D(@SDRRDROOT@($E(SDRRDVALU,1,63),SDRRD0)) D
  1. . K @SDRRDROOT@($E(SDRRDVALU,1,63),SDRRD0)
  1. . S SDRRDNUM=SDRRDNUM-$S(SDRRDNUM>0:1,1:0)
  1. . Q
  1. Q
  1. ;
  1. HELP(SDRRDDIC,SDRRDUTIL,SDRRDFLD) ;
  1. N SDRRD,SDRRD0,SDRRDCASE,SDRRDFL01,SDRRDFNAM,SDRRDFNUM
  1. N SDRRDFSCR,SDRRDLINE,SDRRDQUIT,DIC,D0,DA,DO,X
  1. S SDRRDQUIT=0
  1. D FILEATTR(SDRRDDIC,SDRRDDIC(0),.SDRRDFNUM,.SDRRDFNAM,.SDRRDFL01,.SDRRDFSCR)
  1. S SDRRDCASE=$$PLURAL(SDRRDFL01)
  1. W !
  1. S SDRRD="Select a "_SDRRDFNAM_" "_SDRRDFL01_" from the displayed list."
  1. D WRAP(SDRRD,.SDRRDLINE)
  1. S SDRRD=0
  1. F S SDRRD=$O(SDRRDLINE(SDRRD)) Q:SDRRD'>0 W !?5,SDRRDLINE(SDRRD)
  1. W !?5,"To deselect a ",SDRRDFL01," type a minus sign (-)"
  1. W !?5,"in front of it, e.g., -",SDRRDFL01,"."
  1. W !?5,"To get all ",SDRRDFL01,SDRRDCASE," type ALL."
  1. W !?5,"Use an asterisk (*) to do a wildcard selection, e.g.,"
  1. W !?5,"enter ",SDRRDFL01,"* to select all entries that begin"
  1. W !?5,"with the text '",SDRRDFL01,"'. Wildcard selection is"
  1. W !?5,"case sensitive. A range may be selected by entering"
  1. W !?5,"'AAA-CCC', i.e., select all records from 'AAA' to"
  1. W !?5,"'CCC' inclusive."
  1. W !
  1. I $O(@SDRRDROOT@(""))]"" D
  1. . S SDRRDLINE=$Y
  1. . S SDRRD=""
  1. . W !,"You have already selected:"
  1. . F S SDRRD=$O(@SDRRDROOT@(SDRRD)) Q:SDRRD=""!SDRRDQUIT D
  1. .. S SDRRD0=0
  1. .. F S SDRRD0=$O(@SDRRDROOT@(SDRRD,SDRRD0)) Q:SDRRD0'>0!SDRRDQUIT D
  1. ... I SDRRDFLD]"" S SDRRD(0)=$P($G(@(SDRRDDIC_+SDRRD0_",0)")),U)
  1. ... E S SDRRD(0)=SDRRD
  1. ... I $$CHFLD(SDRRDFNUM)["D" S SDRRD(0)=$$FMTE^XLFDT(SDRRD(0),"5Z")
  1. ... I SDRRDDIC(0)["N" W !?3,SDRRD0,?15,SDRRD(0)
  1. ... E W !?3,SDRRD(0)
  1. ... D SETDIC(.SDRRDDIC,.DIC,.DO)
  1. ... I $D(DIC("W"))#2,DIC("W")]"",$D(@(SDRRDDIC_"SDRRD0,0)"))#2 D
  1. .... S (D0,DA,Y)=SDRRD0
  1. .... X DIC("W")
  1. .... Q
  1. ... I $Y>(IOSL+SDRRDLINE-3) S SDRRDQUIT=$$PAUSE,SDRRDLINE=$Y
  1. ... Q
  1. .. Q
  1. . Q
  1. Q
  1. ;
  1. WRAP(X,LINE) ;
  1. N I,Y
  1. K LINE
  1. S I=0
  1. F S Y=$L($E(X,1,IOM-20)," ") D Q:X=""
  1. . S I=I+1
  1. . S LINE(I)=$P(X," ",1,Y)
  1. . S X=$P(X," ",Y+1,$L(X," "))
  1. . Q
  1. Q
  1. ;
  1. PAUSE() ;
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="E"
  1. D ^DIR
  1. Q $S(''$G(Y):0,1:1)
  1. ;
  1. CHFLD(X) ;
  1. N A
  1. S A=$$GET1^DID(X,.01,"","SPECIFIER")
  1. I A["P" D
  1. . F D Q:A'["P"
  1. .. S A=$TR(A,$TR(A,".0123456789"))
  1. .. S A=$$CHFLD(A)
  1. .. Q
  1. . Q
  1. Q A
  1. ;
  1. SEL(SDRRD0,SDRRDFNUM,SDRRDDSEL,SDRRDFLD) ;
  1. N %DT,SDRRDPNTR,SDRRDXTRN,DA,DIC,DIQ,DR,X,Y
  1. S SDRRDFLD=$S($G(SDRRDFLD)]"":SDRRDFLD,1:.01)
  1. S (SDRRDPNTR,DA)=SDRRD0
  1. S DIC=SDRRDFNUM,DIQ(0)="E",DIQ="SDRRDXTRN(",DR=SDRRDFLD
  1. D EN^DIQ1
  1. S SDRRDXTRN=$G(SDRRDXTRN(SDRRDFNUM,SDRRDPNTR,SDRRDFLD,"E"))
  1. I $$CHFLD(SDRRDFNUM)["D" S X=SDRRDXTRN,%DT="ST" D ^%DT S SDRRDXTRN=Y
  1. S X=$D(@SDRRDROOT@(SDRRDXTRN,SDRRDPNTR))
  1. Q $S(X#2&SDRRDDSEL:1,X[0&'SDRRDDSEL:1,1:0)
  1. ;
  1. FLD(SDRRDFNUM,SDRRDFLD) ; Validate if field can be sorted on i.e, if
  1. ; non-multiple and is either a pointer, free text, set of codes,
  1. ; numeric or a date/time field.
  1. ; SDRRDFNUM = File #
  1. ; SDRRDFLD = Field #
  1. ; returns SDRRDPASS: 0 if valid, else 1
  1. N SDRRD,SDRRDPASS,I
  1. I SDRRDFLD=.01 Q 1 ; .01 field is not valid!
  1. I $$VFIELD^DILFD(SDRRDFNUM,SDRRDFLD)'>0 Q 1 ; field does not exist
  1. S SDRRD(2)=$$GET1^DID(SDRRDFNUM,SDRRDFLD,"","SPECIFIER")
  1. S SDRRD(4)=$$GET1^DID(SDRRDFNUM,SDRRDFLD,"","GLOBAL SUBSCRIPT LOCATION")
  1. I +SDRRD(2)>0&($$VFIELD^DILFD(+SDRRD(2),.01)>0) Q 1 ; mult field not valid
  1. I $P(SDRRD(4),";")'=0 Q 1 ; field not on the 0 node not valid
  1. S SDRRDPASS=1 ; set initially to not valid
  1. F I="D","F","N","P","S" S:SDRRD(2)[I SDRRDPASS=0 Q:'SDRRDPASS
  1. Q SDRRDPASS
  1. ;
  1. FLDSRT(SDRRDFNUM,SDRRDFLD,SDRRDINTR) ; Converts internal to external value
  1. ; for sets of codes & pointers.
  1. ; SDRRDFNUM = File #
  1. ; SDRRDFLD = Field #
  1. ; SDRRDPIEC = piece position on 0 node
  1. N SDRRDPIEC
  1. S SDRRDPIEC=$$GET1^DID(SDRRDFNUM,SDRRDFLD,"","GLOBAL SUBSCRIPT LOCATION")
  1. S SDRRDPIEC=$P(SDRRDPIEC,";",2)
  1. Q $$EXTERNAL^DILFD(SDRRDFNUM,SDRRDFLD,"",$P(SDRRDINTR,U,SDRRDPIEC))
  1. ;
  1. SETDIC(SDRRDDIC,DIC,DO) ;
  1. N I K DIC,DO
  1. S DIC=SDRRDDIC
  1. D DO^DIC1
  1. F I="0","A","B","S","W" I $G(SDRRDDIC(I))]"" S DIC(I)=SDRRDDIC(I)
  1. Q
  1. ;
  1. FILEATTR(DIC,DIC0,SDRRDFNUM,SDRRDFNAM,SDRRDFL01,SDRRDFSCR) ;
  1. N DO
  1. S DIC(0)=DIC0
  1. D DO^DIC1
  1. S SDRRDFNUM=+DO(2)
  1. S SDRRDFNAM=$P(DO,U)
  1. S SDRRDFL01=$$GET1^DID(SDRRDFNUM,.01,"","LABEL")
  1. S SDRRDFSCR=$G(DO("SCR"))
  1. Q
  1. ;
  1. PLURAL(SDRRDFL01) ;
  1. Q $S($E(SDRRDFL01,($L(SDRRDFL01)))?1L:"s",1:"S")