1 | BMXRPC9 ; IHS/OIT/HMW - RPC CALL FOR EXTENDED BROKER FUNCTIONALITY ;
|
---|
2 | ;;4.1000;BMX;;Apr 17, 2011
|
---|
3 | ; UPDATE FILEMAN WITH AN ADO RECORD SET FROM A WINDOWS APPLICATION
|
---|
4 | ;
|
---|
5 | ;
|
---|
6 | ;
|
---|
7 | SONLY(BMXY,BMXVAL) ;EP Schema Only
|
---|
8 | ;
|
---|
9 | I BMXVAL="TRUE" S BMX("SCHEMA ONLY")=1
|
---|
10 | E S BMX("SCHEMA ONLY")=0
|
---|
11 | S BMXY=BMX("SCHEMA ONLY")
|
---|
12 | ;
|
---|
13 | Q
|
---|
14 | ;
|
---|
15 | ;
|
---|
16 | ;
|
---|
17 | TESTADO(BMXOUT,HEADER,ROWDATA,ROWCOUNT,HANGSEC,ASYNCID) ;
|
---|
18 | ; ROWDATA IS | DELIMITED, REPLACE WITH ^ AND END> BMXIEN DONE FOR YOU
|
---|
19 | N BMXTMP,HANGTIME,BMXI,BMXGBL,INC
|
---|
20 | S U="^"
|
---|
21 | I $L($G(ASYNCID)) S BMXGBL=$NA(^BMXTMP("TESTADO",$G(ASYNCID),$J))
|
---|
22 | E S BMXGBL=$NA(^BMXTMP("TESTADO",$J))
|
---|
23 | K @BMXGBL
|
---|
24 | S BMXI=0
|
---|
25 | S @BMXGBL@(BMXI)=$TR("I00010BMXIEN|"_HEADER,"|",U)_$C(30)
|
---|
26 | S ROWDATA=$TR(ROWDATA,"|",U)_$C(30)
|
---|
27 | F I=1:1:+$G(ROWCOUNT) D
|
---|
28 | . S BMXI=BMXI+1
|
---|
29 | . S @BMXGBL@(BMXI)=I_U_ROWDATA
|
---|
30 | . Q
|
---|
31 | S BMXI=BMXI+1
|
---|
32 | S @BMXGBL@(BMXI)=$C(31)
|
---|
33 | H +$G(HANGSEC)
|
---|
34 | S BMXOUT=BMXGBL
|
---|
35 | Q
|
---|
36 | ;
|
---|
37 | TESTECHO(BMXOUT,ECHO,REPEAT,HANGSEC) ;
|
---|
38 | I $L($G(REPEAT))=0 S REPEAT=1
|
---|
39 | S REPEAT=+$G(REPEAT)-1
|
---|
40 | S BMXOUT=ECHO
|
---|
41 | F I=1:1:REPEAT D
|
---|
42 | . S BMXOUT=BMXOUT_"~"_ECHO
|
---|
43 | . Q
|
---|
44 | H +$G(HANGSEC)
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | TESTRPC(BMXGBL,BMXSQL) ;
|
---|
48 | ;Test retrieval/update statement
|
---|
49 | ;
|
---|
50 | N BMXI,BMXERR,BMXN,BMXNOD,BMXNAM,BMXSEX,BMXDOB,BMXFAC,BMXTMP,BMXJ
|
---|
51 | S X="ETRAP^BMXRPC9",@^%ZOSF("TRAP")
|
---|
52 | S BMXGBL="^BMXTMP("_$J_")",BMXERR="",U="^"
|
---|
53 | K ^BMXTMP($J)
|
---|
54 | S BMXI=0
|
---|
55 | ;
|
---|
56 | ;Old column info format:
|
---|
57 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="I00010BMXIEN"_U_"D00010DOB"_U_"T00030LOCAL_FACLILITY"_U_"T00030NAME"_U_"T00010SEX"_$C(30)
|
---|
58 | ;
|
---|
59 | ;New column info format is @@@meta@@@KEYFIELD|FILE#
|
---|
60 | ; For each field: ^FILE#|FIELD#|DATATYPE|LENGTH|FIELDNAME|READONLY|KEYFIELD|NULL ALLOWED
|
---|
61 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="@@@meta@@@"
|
---|
62 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="BMXIEN|2160010^"
|
---|
63 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="2160010|.001|I|10|BMXIEN|TRUE|TRUE^"
|
---|
64 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="2160010|.03|D|10|DOB|FALSE|FALSE^"
|
---|
65 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="2160010|.04|T|60|LOCAL_FACILITY|FALSE|FALSE^"
|
---|
66 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="2160010|.01|T|30|NAME|FALSE|FALSE^"
|
---|
67 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)="2160010|.02|T|10|SEX|FALSE|FALSE"
|
---|
68 | ;S BMXI=BMXI+1,^BMXTMP($J,BMXI)=$C(30)
|
---|
69 | ;
|
---|
70 | D SS^BMXADO(.BMXTMP,"","TEST1")
|
---|
71 | I $G(BMXTMP)=$C(30) D ERR(99,"SCHEMA GENERATION FAILED") Q
|
---|
72 | S BMXJ=0 F S BMXJ=$O(BMXTMP(BMXJ)) Q:'+BMXJ D
|
---|
73 | . S BMXI=BMXI+1
|
---|
74 | . S ^BMXTMP($J,BMXI)=BMXTMP(BMXJ)
|
---|
75 | I +$G(BMX("SCHEMA ONLY")) D Q
|
---|
76 | . S BMXI=BMXI+1
|
---|
77 | . S ^BMXTMP($J,BMXI)=$C(31)
|
---|
78 | . Q
|
---|
79 | S BMXN=0
|
---|
80 | F S BMXN=$O(^DIZ(2160010,BMXN)) Q:'+BMXN D
|
---|
81 | . Q:'$D(^DIZ(2160010,BMXN,0))
|
---|
82 | . S BMXNOD=^DIZ(2160010,BMXN,0)
|
---|
83 | . S BMXNAM=$P(BMXNOD,U)
|
---|
84 | . S BMXSEX=$P(BMXNOD,U,2)
|
---|
85 | . S BMXDOB=$P(BMXNOD,U,3)
|
---|
86 | . S Y=BMXDOB X ^DD("DD") S BMXDOB=Y
|
---|
87 | . S BMXFAC=$P(BMXNOD,U,4)
|
---|
88 | . S:+BMXFAC BMXFAC=$P($G(^DIC(4,BMXFAC,0)),U)
|
---|
89 | . S BMXI=BMXI+1
|
---|
90 | . S ^BMXTMP($J,BMXI)=BMXN_U_BMXDOB_U_BMXFAC_U_BMXNAM_U_BMXSEX_$C(30)
|
---|
91 | . Q
|
---|
92 | S BMXI=BMXI+1
|
---|
93 | S ^BMXTMP($J,BMXI)=$C(31)
|
---|
94 | Q
|
---|
95 | ;
|
---|
96 | ERR(BMXID,BMXERR) ;Error processing
|
---|
97 | K ^BMXTMP($J)
|
---|
98 | S ^BMXTMP($J,0)="I00030ERRORID^T00030ERRORMSG"_$C(30)
|
---|
99 | S ^BMXTMP($J,1)=BMXID_"^"_BMXERR_$C(30)
|
---|
100 | S ^BMXTMP($J,2)=$C(31)
|
---|
101 | Q
|
---|
102 | ;
|
---|
103 | ETRAP ;EP Error trap entry
|
---|
104 | D ^%ZTER
|
---|
105 | D ERR(99,"BMXRPC9 Error: "_$G(%ZTERROR))
|
---|
106 | Q
|
---|
107 | ;
|
---|
108 | TEST N OUT S OUT="" D ADO(.OUT,2160010,"1",(".01|A,A"_$C(30)_".02|M"_$C(30)_".03|1/5/1946"_$C(30)_".04|SAN XAVIER"_$C(31))) W !,OUT
|
---|
109 | Q
|
---|
110 | ;
|
---|
111 | ADOD(OUT,FILE,IEN,DATA) ;
|
---|
112 | ;
|
---|
113 | ;D DEBUG^%Serenji("ADOD^BMXRPC9(.OUT,FILE,IEN,DATA)")
|
---|
114 | ;
|
---|
115 | Q
|
---|
116 | ;
|
---|
117 | ADO(OUT,FILE,IEN,DATA) ; RPC CALL: OUT = OUTBOUND MESSAGE, FILE = FILEMAN FILE NUMBER, IEN = FILE INTERNAL ENTRY NUMBER, DATA = DATA STRING
|
---|
118 | N OREF,CREF,DIC,DIE,DA,DR,X,Y,%,FLD,CNT,FNO,VAL,TFLG,DFLG,TOT,UFLG,XTFLG,GTFLG,GDFLG
|
---|
119 | S OUT="",FLD="",GTFLG=0,GDFLG=0
|
---|
120 | S IEN=$G(IEN)
|
---|
121 | I $E(IEN)="-" S IEN=$E(IEN,2,99),GDFLG=1 ; GLOBAL DELETE FLAG
|
---|
122 | I $E(IEN)="+" S IEN=$E(IEN,2,99),GTFLG=1 ; GLOBAL TRANSACTION FLAG, ROLLBACK IF ANY FIELD FAILS TO UPDATE
|
---|
123 | I IEN="Add"!(IEN="ADD") S IEN=""
|
---|
124 | I '$D(^DIC(+$G(FILE),0,"GL")) S OUT="Update cancelled. Invalid FILE number" Q
|
---|
125 | S OREF=^DIC(FILE,0,"GL") I '$L(OREF) S OUT="Update cancelled. Invalid file definition" Q
|
---|
126 | S CREF=$E(OREF,1,$L(OREF)-1) I $E(OREF,$L(OREF))="," S CREF=CREF_")" ; CONVERT OREF TO CREF
|
---|
127 | I IEN,'$D(@CREF@(IEN)) S OUT="Update cancelled. Invalid IEN" Q
|
---|
128 | I 'GDFLG,IEN,(DATA["-.01|"!(DATA[".01|@")) S GDFLG=1
|
---|
129 | I GDFLG,'IEN S OUT="Deletion cancelled. Missing IEN" Q
|
---|
130 | I GDFLG D DIK(OREF,IEN) S OUT="Record deleted|"_IEN Q
|
---|
131 | S UFLG=$S($G(IEN):"E",1:"A") ; UPDATE FLAG: ADD OR EDIT
|
---|
132 | I '$L($G(DATA)) S OUT="Update cancelled. Missing/invalid data string" Q
|
---|
133 | S TOT=$L(DATA,$C(30)) I 'TOT S OUT="Update cancelled. Missing data string" Q
|
---|
134 | F CNT=1:1:TOT S DATA(CNT)=$P(DATA,$C(30),CNT) ; BUILD PRIMARY FIELD ARRAY
|
---|
135 | S %=DATA(1) I %=""!(%=$C(31)) S OUT="Update cancelled. Missing data string" Q
|
---|
136 | S %=DATA(CNT) I %[$C(31) S %=$P(%,$C(31),1),DATA(CNT)=% ; STRIP OFF END OF FILE MARKER
|
---|
137 | F CNT=1:1:TOT S X=DATA(CNT) I $L(X) D ; BUILD SECONDARY FIELD ARRAY
|
---|
138 | . S TFLG=0,DFLG=0
|
---|
139 | . I $E(X)="+" S TFLG=1,X=$E(X,2,999),$P(FLD,U)=1
|
---|
140 | . I $E(X)="-" S DFLG=1,X=$E(X,2,999)
|
---|
141 | . S FNO=$P(X,"|"),VAL=$P(X,"|",2)
|
---|
142 | . I '$D(^DD(FILE,+$G(FNO),0)) S:$L(OUT) OUT=OUT_"~" S OUT=OUT_FNO_"|Invalid field number" Q
|
---|
143 | . I DFLG,VAL'="" S:$L(OUT) OUT=OUT_"~" S OUT=OUT_FNO_"|Invalid deletion syntax" Q ; CANT DELETE IF A VALUE IS SENT
|
---|
144 | . I DFLG!(VAL="") S VAL="@" ; SYNC DFLG AND VAL
|
---|
145 | . I VAL="@" S DFLG=1 ; SYNC DFLG AND VAL
|
---|
146 | . S FLD(FNO)=VAL_U_TFLG_U_DFLG
|
---|
147 | . I FNO=.01,TFLG S $P(FLD,U,2)=1 ;
|
---|
148 | . Q
|
---|
149 | I $P($G(FLD(.01)),U,3),UFLG="A" S OUT="Record deletion cancelled. Missing IEN" Q ; CAN'T DELETE A RECORD WITHOUT A VALID IEN
|
---|
150 | DELREC I $P($G(FLD(.01)),U,3) D DIK(OREF,IEN) S OUT="OK" Q ; DELETE THE RECORD
|
---|
151 | I UFLG="A",'$L($P($G(FLD(.01)),U)) S OUT="Record addition cancelled. Missing .01 field" Q ; CAN'T ADD A RECORD WITHOUT A VALID .01 FIELD
|
---|
152 | ADDREC I UFLG="A" D ADD(OREF) Q ; ADD A NEW ENTRY TO A FILE
|
---|
153 | EDITREC I UFLG="E" D EDIT(OREF,IEN) Q ; EDIT AN EXISTING RECORD
|
---|
154 | Q
|
---|
155 | ;
|
---|
156 | DIK(DIK,DA) ; DELETE A RECORD
|
---|
157 | D ^DIK
|
---|
158 | D ^XBFMK
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | ADD(DIC) ; ADD A NEW ENTRY TO A FILE
|
---|
162 | N X,Y
|
---|
163 | S X=""""_$P($G(FLD(.01)),U)_""""
|
---|
164 | S DIC(0)="L"
|
---|
165 | D ^DIC
|
---|
166 | I Y=-1 S OUT="Unable to add a new record" G AX
|
---|
167 | I $O(FLD(.01)) D EDIT(DIC,+Y) Q
|
---|
168 | S OUT="OK"_"|"_+Y
|
---|
169 | AX D ^XBFMK
|
---|
170 | Q
|
---|
171 | ;
|
---|
172 | EDIT(DIE,DA) ; EDIT AN EXISTING RECORD
|
---|
173 | N DR,RFLG,ERR,FNO,VAL,TFLG,RESULT,MSG,DIERR,DISYS
|
---|
174 | S FNO=$O(FLD(.01),-1),DR="" ;HMW Changed to include .01 in DR string
|
---|
175 | I UFLG="A" S OUT="New record added|"_DA
|
---|
176 | F S FNO=$O(FLD(FNO)) Q:'FNO S X=FLD(FNO) I $L(X) D I $G(RFLG) Q ; CHECK EA FIELD AND BUILD THE DR STRING AND ERROR STRING
|
---|
177 | . S VAL(FNO)=$P(X,U),TFLG=$P(X,U,2) I '$L(VAL(FNO)) Q
|
---|
178 | . K ERR,RESULT
|
---|
179 | . I VAL(FNO)="@"!(VAL(FNO)="") S RESULT="@"
|
---|
180 | . E D CHK^DIE(FILE,FNO,"",VAL(FNO),.RESULT,"ERR")
|
---|
181 | . I RESULT=U D Q
|
---|
182 | .. S MSG=$G(ERR("DIERR",1,"TEXT",1),"Failed FileMan data validation")
|
---|
183 | .. I $L(OUT) S OUT=OUT_"~"
|
---|
184 | .. I TFLG!GTFLG S RFLG=1,OUT=FNO_"|"_MSG Q
|
---|
185 | .. S OUT=OUT_FNO_"|"_MSG
|
---|
186 | .. Q
|
---|
187 | . S VAL(FNO)=RESULT
|
---|
188 | . I $L(DR) S DR=DR_";"
|
---|
189 | . S DR=DR_FNO_"////^S X=VAL("_FNO_")" ; BUILD DR STRING
|
---|
190 | . Q
|
---|
191 | I $G(RFLG) D:UFLG="A" DIK(DIE,DA) S OUT="Record update cancelled"_"|"_OUT G EX ; TRANSACTION ROLLBACK FLAG IS SET, ENTRY DELETED (ADD MODE) OR UPDATE CANCELLED (EDIT MODE)
|
---|
192 | L +@CREF@(DA):2 I $T D ^DIE L -@CREF@(DA) G:OUT["valid" EX S OUT="OK" S:UFLG="A" OUT=OUT_"|"_DA G EX ; SUCCESS!!!!
|
---|
193 | S OUT="Update cancelled. File locked" ; FILE LOCKED. UNABLE TO UPDATE
|
---|
194 | I $L(FLD),UFLG="A" D DIK(DIE,DA) ; ROLLBACK THE NEW RECORD
|
---|
195 | EX D ^XBFMK ; CLEANUP
|
---|
196 | Q
|
---|
197 | ;
|
---|