uo_oa_demo_fj_downsave.sru 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. $PBExportHeader$uo_oa_demo_fj_downsave.sru
  2. forward
  3. global type uo_oa_demo_fj_downsave from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_oa_demo_fj_downsave from nonvisualobject
  7. end type
  8. global uo_oa_demo_fj_downsave uo_oa_demo_fj_downsave
  9. type variables
  10. transaction ins_tran //数据commit事务
  11. end variables
  12. forward prototypes
  13. public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg)
  14. public function integer f_getfj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg)
  15. public function integer f_update_blob_fj (long arg_fjid, string arg_fjname, blob arg_fjbody, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer f_del_fj (long arg_demoid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer f_save_fj (long arg_demoid, string arg_fjname, blob arg_fjbody, long arg_fjtype, integer arg_modelflag, integer arg_ifmain, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer getflowannex (long arg_demoid, ref s_oa_doc_annex arg_s_oda[])
  19. end prototypes
  20. public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg);Long rslt = 1,cnt
  21. Blob ls_filedata
  22. IF arg_fjid <= 0 THEN
  23. rslt = 0
  24. arg_msg = '下载附件失败(错误附件ID)'
  25. GOTO ext
  26. END IF
  27. IF arg_fjname = '' THEN
  28. rslt = 0
  29. arg_msg = '下载附件失败(错误附件名)'
  30. GOTO ext
  31. END IF
  32. SELECT count(*)
  33. INTO :cnt
  34. FROM oa_demo_annex
  35. WHERE (oa_demo_annex.AnnexNO = :arg_fjid) AND
  36. (oa_demo_annex.Filename = :arg_fjname)
  37. USING ins_tran;
  38. IF ins_tran.SQLCode <> 0 THEN
  39. rslt = 0
  40. arg_msg = '查询附件信息失败>>'+ins_tran.SQLErrText
  41. GOTO ext
  42. END IF
  43. SELECTBLOB Fileblob
  44. INTO :ls_filedata
  45. FROM oa_demo_annex
  46. Where (oa_demo_annex.AnnexNO = :arg_fjid) AND
  47. (oa_demo_annex.Filename = :arg_fjname)
  48. USING ins_tran;
  49. IF ins_tran.SQLCode <> 0 THEN
  50. rslt = 0
  51. arg_msg = '下载附件失败>>'+ins_tran.SQLErrText
  52. GOTO ext
  53. END IF
  54. arg_fjdata = ls_filedata
  55. ext:
  56. RETURN rslt
  57. end function
  58. public function integer f_getfj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg);Long rslt = 1,cnt
  59. Blob ls_filedata
  60. IF arg_fjid <= 0 THEN
  61. rslt = 0
  62. arg_msg = '下载附件失败(错误附件ID)'
  63. GOTO ext
  64. END IF
  65. IF arg_fjname = '' THEN
  66. rslt = 0
  67. arg_msg = '下载附件失败(错误附件名)'
  68. GOTO ext
  69. END IF
  70. SELECT count(*)
  71. INTO :cnt
  72. FROM oa_demo_annex
  73. WHERE (oa_demo_annex.AnnexNO = :arg_fjid) AND
  74. (oa_demo_annex.Filename = :arg_fjname)
  75. USING ins_tran;
  76. IF ins_tran.SQLCode <> 0 THEN
  77. rslt = 0
  78. arg_msg = '查询附件信息失败>>'+ins_tran.SQLErrText
  79. GOTO ext
  80. END IF
  81. SELECTBLOB Fileblob
  82. INTO :ls_filedata
  83. FROM oa_demo_annex
  84. Where (oa_demo_annex.AnnexNO = :arg_fjid) AND
  85. (oa_demo_annex.Filename = :arg_fjname)
  86. USING ins_tran;
  87. IF ins_tran.SQLCode <> 0 THEN
  88. rslt = 0
  89. arg_msg = '下载附件失败>>'+ins_tran.SQLErrText
  90. GOTO ext
  91. END IF
  92. arg_fjdata = ls_filedata
  93. ext:
  94. RETURN rslt
  95. end function
  96. public function integer f_update_blob_fj (long arg_fjid, string arg_fjname, blob arg_fjbody, ref string arg_msg, boolean arg_ifcommit);//保存附件
  97. Long rslt = 1, cnt
  98. IF IsNull(arg_fjname) Or arg_fjname = '' THEN
  99. rslt = 0
  100. arg_msg = '保存附件失败(附件名)'
  101. GOTO ext
  102. END IF
  103. SELECT count(*)
  104. INTO :cnt
  105. FROM oa_demo_annex
  106. WHERE (oa_demo_annex.AnnexNO = :arg_fjid) AND
  107. (oa_demo_annex.Filename = :arg_fjname)
  108. Using ins_tran;
  109. IF ins_tran.SQLCode <> 0 THEN
  110. rslt = 0
  111. arg_msg = '查询附件信息失败>>'+ins_tran.SQLErrText
  112. GOTO ext
  113. END IF
  114. UPDATEBLOB oa_demo_annex
  115. Set Fileblob = :arg_fjbody
  116. Where AnnexNO = :arg_fjid USING ins_tran;
  117. IF ins_tran.SQLCode <> 0 THEN
  118. rslt = 0
  119. arg_msg = '因网络或其它原因保存附件失败>>'+ins_tran.SQLErrText
  120. GOTO ext
  121. END IF
  122. ext:
  123. IF rslt = 0 THEN
  124. ROLLBACK Using ins_tran;
  125. ELSEIF arg_ifcommit THEN
  126. COMMIT Using ins_tran;
  127. END IF
  128. RETURN rslt
  129. end function
  130. public function integer f_del_fj (long arg_demoid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt
  131. Blob ls_filedata
  132. IF arg_demoid <= 0 THEN
  133. rslt = 0
  134. arg_msg = '下载附件失败(错误附件ID)'
  135. GOTO ext
  136. END IF
  137. delete from oa_demo_annex
  138. where demoid = :arg_demoid
  139. USING ins_tran;
  140. IF ins_tran.SQLCode <> 0 THEN
  141. rslt = 0
  142. arg_msg = '因网络或其它原因保存附件失败>>'+ins_tran.SQLErrText
  143. GOTO ext
  144. END IF
  145. ext:
  146. if rslt = 0 then
  147. rollback USING ins_tran;
  148. elseif arg_ifcommit then
  149. commit USING ins_tran;
  150. end if
  151. RETURN rslt
  152. end function
  153. public function integer f_save_fj (long arg_demoid, string arg_fjname, blob arg_fjbody, long arg_fjtype, integer arg_modelflag, integer arg_ifmain, ref string arg_msg, boolean arg_ifcommit);//保存附件
  154. Long rslt = 1
  155. Long ls_newid
  156. IF arg_demoid <= 0 THEN
  157. rslt = 0
  158. arg_msg = '保存附件失败(公文ID)'
  159. GOTO ext
  160. END IF
  161. IF IsNull(arg_fjname) Or arg_fjname = '' THEN
  162. rslt = 0
  163. IF IsNull(arg_fjname) THEN
  164. arg_msg = '保存附件失败(附件名) null'
  165. ELSE
  166. arg_msg = '保存附件失败(附件名) 空'
  167. END IF
  168. GOTO ext
  169. END IF
  170. ls_newid = f_sys_scidentity(0,"oa_demo_annex","AnnexNO",arg_msg,True,id_sqlca)
  171. IF ls_newid <= 0 THEN
  172. rslt = 0
  173. GOTO ext
  174. END IF
  175. INSERT INTO oa_demo_annex
  176. ( demoid,
  177. AnnexNO,
  178. Filename,
  179. Filetype,
  180. modelflag,
  181. ifmain)
  182. VALUES ( :arg_demoid,
  183. :ls_newid,
  184. :arg_fjname,
  185. :arg_fjtype,
  186. :arg_modelflag,
  187. :arg_ifmain)
  188. Using ins_tran;
  189. IF ins_tran.SQLCode <> 0 THEN
  190. rslt = 0
  191. arg_msg = '因网络或其它原因保存附件失败>>'+ins_tran.SQLErrText
  192. GOTO ext
  193. ELSE
  194. COMMIT Using ins_tran;
  195. END IF
  196. UpdateBlob oa_demo_annex
  197. Set Fileblob = :arg_fjbody
  198. Where AnnexNO = :ls_newid Using ins_tran;
  199. IF ins_tran.SQLCode <> 0 THEN
  200. rslt = 0
  201. arg_msg = '因网络或其它原因保存附件失败>>'+ins_tran.SQLErrText
  202. GOTO ext
  203. END IF
  204. COMMIT Using ins_tran;
  205. ext:
  206. RETURN rslt
  207. end function
  208. public function integer getflowannex (long arg_demoid, ref s_oa_doc_annex arg_s_oda[]);//GetFlowAnnex
  209. Integer rslt = 1
  210. String arg_msg
  211. Long i,ll_i,ll_row
  212. Blob lb_FileData
  213. s_oa_doc_annex s_oda[]
  214. i = 1
  215. Declare cur_mx Cursor For
  216. Select AnnexNo,
  217. Filename,
  218. Filetype,
  219. ifmain,
  220. modelflag
  221. From oa_demo_annex
  222. Where demoid = :arg_demoid;
  223. Open cur_mx;
  224. Fetch cur_mx Into :s_oda[i].AnnexNo,
  225. :s_oda[i].FileName,
  226. :s_oda[i].Filetype,
  227. :s_oda[i].ifmain,
  228. :s_oda[i].modelflag;
  229. Do While sqlca.SQLCode = 0
  230. If f_down_fj( s_oda[i].AnnexNo, s_oda[i].Filename, lb_FileData, arg_msg) = 0 Then
  231. rslt = 0
  232. Goto ext
  233. End If
  234. s_oda[i].FileBlob = lb_FileData
  235. i++
  236. Fetch cur_mx Into :s_oda[i].AnnexNo,
  237. :s_oda[i].FileName,
  238. :s_oda[i].Filetype,
  239. :s_oda[i].ifmain,
  240. :s_oda[i].modelflag;
  241. Loop
  242. Close cur_mx;
  243. For i = 1 To UpperBound(s_oda) - 1
  244. arg_s_oda[i] = s_oda[i]
  245. Next
  246. ext:
  247. Return rslt
  248. end function
  249. on uo_oa_demo_fj_downsave.create
  250. call super::create
  251. TriggerEvent( this, "constructor" )
  252. end on
  253. on uo_oa_demo_fj_downsave.destroy
  254. TriggerEvent( this, "destructor" )
  255. call super::destroy
  256. end on