[613] | 1 | RGUTDIC ;CAIRO/DKM - Encapsulated FileMan API;04-Sep-1998 11:26;DKM
|
---|
| 2 | ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
|
---|
| 3 | ;=================================================================
|
---|
| 4 | ; Parameterized routine to add/edit/extract an entry in a
|
---|
| 5 | ; FileMan file. Encapsulates global structure info so no
|
---|
| 6 | ; need to specify this directly.
|
---|
| 7 | ; Inputs:
|
---|
| 8 | ; %RGDIC = Global root, file number, or bookmark
|
---|
| 9 | ; %RGCMD = n : IEN of entry to process
|
---|
| 10 | ; 0 : Process last IEN referenced
|
---|
| 11 | ; +n : Move down to subfile n
|
---|
| 12 | ; - : Move up to parent file
|
---|
| 13 | ; @n : Delete IEN #n (or last referenced if missing)
|
---|
| 14 | ; =x;y : Lookup y at current level using options in x
|
---|
| 15 | ; ?x;y ; Lookup y using RGUTLKP utility with options in x
|
---|
| 16 | ; >x;y : Read fields specified in y using options in x
|
---|
| 17 | ; <x;y : Write fields specified in y using options in x
|
---|
| 18 | ; ~x;y : Same as <, but creates new entry
|
---|
| 19 | ; %n : Force DINUM to n
|
---|
| 20 | ; Outputs:
|
---|
| 21 | ; Returns in the first piece the IEN of the entry or...
|
---|
| 22 | ; 0 = Entry was deleted
|
---|
| 23 | ; -1 = Entry was rejected
|
---|
| 24 | ; -2 = Entry locked by another process
|
---|
| 25 | ; -3 = Unexpected error
|
---|
| 26 | ;=================================================================
|
---|
| 27 | ENTRY(%RGDIC,%RGCMD) ;
|
---|
| 28 | S %RGDIC(0)=+$G(DUZ)
|
---|
| 29 | N DUZ,DIC,DINUM,DIE,DIQ,DIQUIET,DIK,%RGX,%RGIEN,%RGARG,%RGN1,%RGN2,%RGZ,X,Y
|
---|
| 30 | N DA,DC,DD,DG,DH,DK,DL,DO,DQ,DR,DU,DV,DW,DY
|
---|
| 31 | S DUZ=%RGDIC(0),DUZ(0)="@",@$$TRAP^RGZOSF("ERROR^RGUTDIC"),%RGCMD=$G(%RGCMD),%RGIEN="",DIQUIET=1
|
---|
| 32 | ; Build the bookmark if a global reference or file # passed
|
---|
| 33 | I %RGDIC'[U D
|
---|
| 34 | .S:%RGDIC'=+%RGDIC %RGDIC=+$O(^DIC("B",%RGDIC,0))
|
---|
| 35 | .S %RGDIC=$$ROOT^DILFD(%RGDIC)_U_U_%RGDIC
|
---|
| 36 | I $P(%RGDIC,U,4)="" D
|
---|
| 37 | .S %RGZ=U_$P(%RGDIC,U,2),%RGZ=$E(%RGZ,1,$L(%RGZ)-1),%RGZ=%RGZ_$S(%RGZ["(":")",1:"")
|
---|
| 38 | .S $P(%RGDIC,U,4)=$P(@%RGZ@(0),U,2)
|
---|
| 39 | F %RGN1=1:1:$L(%RGCMD,"|") S %RGARG=$P(%RGCMD,"|",%RGN1),%RGZ=$E(%RGARG) D Q:%RGIEN<0
|
---|
| 40 | .S %RGN2=$F("-+=@><~?%",%RGZ)
|
---|
| 41 | .S:%RGN2 %RGN2=%RGN2-1,%RGARG=$E(%RGARG,2,999)
|
---|
| 42 | .D DA,@%RGN2
|
---|
| 43 | .S:%RGIEN>0 $P(%RGDIC,U,3)=%RGIEN
|
---|
| 44 | S $P(%RGDIC,U)=%RGIEN
|
---|
| 45 | Q %RGDIC
|
---|
| 46 | ; Set IEN
|
---|
| 47 | 0 S:%RGARG'<0 %RGIEN=$S($D(@%RGDIC(2)@(+%RGARG)):+%RGARG,1:0),$P(%RGDIC,U,3)=%RGIEN
|
---|
| 48 | Q
|
---|
| 49 | ; Move up to parent file
|
---|
| 50 | 1 N %RGX,%RGY
|
---|
| 51 | S $P(%RGDIC,U,4)=$P($P(%RGDIC,U,4),"|",2,999)
|
---|
| 52 | S %RGY=$P(%RGDIC,U,2),%RGX=$L(%RGY,"|"),$P(%RGDIC,U,2)=$P(%RGY,"|",1,%RGX-1)
|
---|
| 53 | S %RGIEN=+$P(%RGY,"|",%RGX),$P(%RGDIC,U,3)=%RGIEN
|
---|
| 54 | D DA
|
---|
| 55 | Q
|
---|
| 56 | ; Move down to subfile
|
---|
| 57 | 2 N %RGX,%RGY,%RGZ
|
---|
| 58 | I $P(%RGDIC,U,3)'>0 S %RGIEN=-1 Q
|
---|
| 59 | S %RGY=+$P(%RGDIC,U,4)
|
---|
| 60 | S:%RGARG'=+%RGARG %RGARG=+$O(^DD(%RGY,"B",%RGARG,0)),%RGARG=+$P($G(^DD(%RGY,%RGARG,0)),U,2)
|
---|
| 61 | S %RGX=+%RGARG,%RGZ=+$O(^DD(%RGY,"SB",%RGX,0)),%RGZ=$P($P(^DD(%RGY,%RGZ,0),U,4),";"),%RGX=$P(^(0),U,2)
|
---|
| 62 | S:%RGZ'=+%RGZ %RGZ=""""_%RGZ_""""
|
---|
| 63 | S $P(%RGDIC,U,4)=%RGX_"|"_$P(%RGDIC,U,4),$P(%RGDIC,U,2)=$P(%RGDIC,U,2)_"|"_$P(%RGDIC,U,3)_","_%RGZ_","
|
---|
| 64 | S %RGIEN="",$P(%RGDIC,U,3)=""
|
---|
| 65 | D DA
|
---|
| 66 | Q
|
---|
| 67 | ; Lookup an entry
|
---|
| 68 | 3 N X,Y
|
---|
| 69 | I %RGARG[";" S DIC(0)=$P(%RGARG,";"),%RGARG=$P(%RGARG,";",2,999)
|
---|
| 70 | E S DIC(0)="XMF"
|
---|
| 71 | S DIC=%RGDIC(1),X=%RGARG
|
---|
| 72 | D ^DIC
|
---|
| 73 | S %RGIEN=+Y
|
---|
| 74 | Q
|
---|
| 75 | ; Delete an entry
|
---|
| 76 | 4 N X,Y
|
---|
| 77 | S:%RGARG DA=%RGARG
|
---|
| 78 | S DIK=%RGDIC(1),%RGIEN=0
|
---|
| 79 | D ^DIK
|
---|
| 80 | Q
|
---|
| 81 | ; Extract data
|
---|
| 82 | 5 N %RGZ,%RGZ1,%RGX,%RGY
|
---|
| 83 | I '%RGIEN S %RGIEN=-1 Q
|
---|
| 84 | S DR=""
|
---|
| 85 | F %RGX=2:1:$L(%RGARG,";") D
|
---|
| 86 | .S %RGY=$P(%RGARG,";",%RGX)
|
---|
| 87 | .I %RGY["=" S %RGZ=$$FLD($P(%RGY,"=",2)),%RGZ1(%RGZ,$P(%RGY,"="))="",%RGY=%RGZ
|
---|
| 88 | .S DR=DR_$S($L(DR):";",1:"")_%RGY
|
---|
| 89 | S DIC=%RGDIC(1),DIQ(0)=$P(%RGARG,";")
|
---|
| 90 | S:DIQ(0)="" DIQ(0)="E"
|
---|
| 91 | K ^UTILITY("DIQ1",$J)
|
---|
| 92 | D
|
---|
| 93 | .N X,Y
|
---|
| 94 | .D EN^DIQ1
|
---|
| 95 | F %RGX=0:0 S %RGX=$O(%RGZ1(%RGX)),%RGZ="" Q:'%RGX D
|
---|
| 96 | .F S %RGZ=$O(%RGZ1(%RGX,%RGZ)),%RGZ1="" Q:%RGZ="" D
|
---|
| 97 | ..F %RGY="E","I" D
|
---|
| 98 | ...S:$D(^UTILITY("DIQ1",$J,+$P(%RGDIC,U,4),%RGIEN,%RGX,%RGY)) %RGZ1=%RGZ1_$S($L(%RGZ1):U,1:"")_^(%RGY)
|
---|
| 99 | ..S @%RGZ=%RGZ1
|
---|
| 100 | Q
|
---|
| 101 | ; Edit existing entry
|
---|
| 102 | 6 S DIC(0)=$P(%RGARG,";"),DIC("P")=$P($P(%RGDIC,U,4),"|"),%RGARG=$P(%RGARG,";",2,999)
|
---|
| 103 | I %RGIEN'>0 S %RGIEN=-1 Q
|
---|
| 104 | S DIE=%RGDIC(1),DR=%RGARG
|
---|
| 105 | L +@%RGDIC(2)@(%RGIEN):$S(DIC(0)["!":9999999,1:0)
|
---|
| 106 | E S %RGIEN=-2 Q
|
---|
| 107 | D ^DIE
|
---|
| 108 | L -@%RGDIC(2)@(%RGIEN)
|
---|
| 109 | S %RGIEN=+$G(DA)
|
---|
| 110 | Q
|
---|
| 111 | ; Create new entry
|
---|
| 112 | 7 N X,Y,DD,DO,DLAYGO
|
---|
| 113 | S DIC=%RGDIC(1),DIC(0)=$P(%RGARG,";")_"L",DIC("P")=$P($P(%RGDIC,U,4),"|"),Y=$P(%RGARG,";",2),%RGARG=DIC(0)_";"_$P(%RGARG,";",3,999),DLAYGO=DIC("P")\1
|
---|
| 114 | I +Y'=.01 S %RGIEN=-1 Q
|
---|
| 115 | S X=$P(Y,"/",4)
|
---|
| 116 | S:X="" X=$P(Y,"/",5)
|
---|
| 117 | X:$E(X)=U $E(X,2,999)
|
---|
| 118 | I $P(^DD(+DIC("P"),.01,0),U,2)["W" D
|
---|
| 119 | .D WP
|
---|
| 120 | E D ^DIC:DIC(0)'["U",FILE^DICN:DIC(0)["U"
|
---|
| 121 | S %RGIEN=+Y
|
---|
| 122 | I %RGIEN>0,$P(%RGARG,";",2,99)'="" D DA,6
|
---|
| 123 | K DINUM
|
---|
| 124 | Q
|
---|
| 125 | 8 ; Lookup entry
|
---|
| 126 | N %RGOPT,%RGP,RGFN
|
---|
| 127 | S %RGOPT=$P(%RGARG,";"),%RGARG=$P(%RGARG,";",2,999),RGFN=+$P(%RGDIC,U,4)
|
---|
| 128 | S %RGP=+$P(%RGDIC,U,4),%RGP=$P($G(^DD(%RGP,.01,0)),U)
|
---|
| 129 | S:$L(%RGP) %RGP=%RGP_": "
|
---|
| 130 | S %RGIEN=$$ENTRY^RGUTLKP(%RGDIC(2),%RGOPT,%RGP,"",%RGARG,"","",$X,$Y,"","","HLP^RGUTDIC")
|
---|
| 131 | Q
|
---|
| 132 | ; Force DINUM
|
---|
| 133 | 9 S DINUM=%RGARG
|
---|
| 134 | Q
|
---|
| 135 | HLP W $G(^DD(+RGFN,.01,3)),!
|
---|
| 136 | Q
|
---|
| 137 | ; Word processing field (special case of #7)
|
---|
| 138 | WP N %RGZ,%RGZ1
|
---|
| 139 | I X="@" D
|
---|
| 140 | .K @%RGDIC(2)
|
---|
| 141 | .S Y=0
|
---|
| 142 | E D
|
---|
| 143 | .S %RGZ=$G(@%RGDIC(2)@(0)),Y=$G(DINUM,1+$O(^($C(1)),-1))
|
---|
| 144 | .S %RGZ1=+$P(%RGZ,U,4),%RGZ=+$P(%RGZ,U,3)
|
---|
| 145 | .S:Y>%RGZ %RGZ=Y
|
---|
| 146 | .S:'$D(^(Y)) %RGZ1=%RGZ1+1
|
---|
| 147 | .S ^(0)=U_U_%RGZ_U_%RGZ1_U_$G(DT),^(Y,0)=X
|
---|
| 148 | Q:$P(^DD(+DIC("P"),.01,0),U,2)'["a"
|
---|
| 149 | S %RGIEN=Y
|
---|
| 150 | D DA,WPAUDIT^RGCODAUD(+DIC("P"),.DA,X,"")
|
---|
| 151 | Q
|
---|
| 152 | ; Trap unexpected error
|
---|
| 153 | ERROR S $P(%RGDIC,U)=-3
|
---|
| 154 | Q %RGDIC
|
---|
| 155 | ; Return field #
|
---|
| 156 | FLD(X) Q $S(X=+X:X,1:+$O(^DD(+$P(%RGDIC,U,4),"B",X,0)))
|
---|
| 157 | ; Set up DA array
|
---|
| 158 | DA N %RGZ,%RGZ1,%RGZ2
|
---|
| 159 | K DA
|
---|
| 160 | S:'$G(%RGIEN) %RGIEN=$P(%RGDIC,U,3)
|
---|
| 161 | S %RGZ=$P(%RGDIC,U,2),%RGZ2=$L(%RGZ,"|"),DA=%RGIEN
|
---|
| 162 | F %RGZ1=2:1:%RGZ2 S DA(%RGZ2-%RGZ1+1)=+$P(%RGZ,"|",%RGZ1)
|
---|
| 163 | S %RGDIC(1)=U_$TR($P(%RGDIC,U,2),"|"),%RGDIC(2)=$E(%RGDIC(1),1,$L(%RGDIC(1))-1),%RGDIC(2)=%RGDIC(2)_$S(%RGDIC(2)["(":")",1:"")
|
---|
| 164 | Q
|
---|