$PBExportHeader$uo_transmsg.sru forward global type uo_transmsg from nonvisualobject end type end forward global type uo_transmsg from nonvisualobject autoinstantiate end type type variables Long uo_msgid end variables forward prototypes public function integer f_trycreate_sys_admsg (ref string arg_msg) public function integer f_redeal_admsg (long arg_msgid, string arg_redealemp, ref string arg_msg, boolean ifcommit) public function integer f_del_admsg (long arg_msgid, string arg_del_emp, ref string arg_msg, boolean ifcommit) public function integer f_deal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit) public function integer f_redeal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit) public function long f_create_admsg (long arg_sendempid, string arg_sendemp, string arg_objdpm, string arg_msgtitle, string arg_s_msg, ref string arg_msg, long arg_scid, string arg_billcode, boolean ifcommit) public function integer f_save_fj (long arg_msgid, string arg_fjname, blob arg_blob, decimal arg_filesize, integer arg_filetype, ref string arg_msg, boolean arg_ifcommit) public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg) end prototypes public function integer f_trycreate_sys_admsg (ref string arg_msg); /////f_trycreate_Sys_admsg(arg_msg) long cnt,rslt=1 string createsql_string,t_str createsql_string="CREATE TABLE Sys_admsg (msgid int not null PRIMARY KEY, senddt datetime NOT NULL DEFAULT (getdate()) , sendemp char (10) NOT NULL DEFAULT ('') ,dealflag tinyint NOT NULL DEFAULT (0) ,dealdt datetime NULL,dealemp char(10) NOT NULL DEFAULT (''),redealdt datetime NULL,objdpm char(30) NOT NULL DEFAULT ('') ,s_msg varchar(254) NOT NULL DEFAULT ('') ,rel_code varchar (50) NOT NULL DEFAULT ('') )" t_str="select count(*) from Sys_admsg" Execute immediate :t_str; if sqlca.sqlcode<>0 then //不存在该表,建立 Execute immediate :createsql_string ; if sqlca.sqlcode<>0 then arg_msg='建立表Sys_admsg失败>>'+sqlca.sqlerrtext rollback ; rslt=0 goto ext else commit ; end if end if /// ext: return rslt end function public function integer f_redeal_admsg (long arg_msgid, string arg_redealemp, ref string arg_msg, boolean ifcommit);////f_redeal_admsg ////状态为已处理:1,才可以设为完成 //// //// long rslt=1,dealflag //string sendemp='' //if arg_msgid<=0 then // arg_msg='非有效消息ID' // rslt=0 // goto ext //end if // // SELECT sys_admsg.dealflag ,sendemp // INTO :dealflag ,:sendemp // FROM sys_admsg // WHERE sys_admsg.msgid =:arg_msgid ; // //if sqlca.sqlcode<>0 then // arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext // rslt=0 // goto ext //end if // //if dealflag<>1 then // arg_msg='非[已处理]下不可以设为[完成]。' // rslt=0 // goto ext //end if //if trim(arg_redealemp)<>trim(sendemp) and not sys_power_issuper then // arg_msg='非消息发起人或非超级用户不可以设为[完成]。' // rslt=0 // goto ext //end if // // update sys_admsg // set dealflag=9,redealdt=getdate() // WHERE sys_admsg.msgid =:arg_msgid ; // //if sqlca.sqlcode<>0 then // arg_msg='更新消息状态(完成)失败>>'+sqlca.sqlerrtext // rollback; // rslt=0 // goto ext //end if // //ext: //if ifCOMMIT and rslt=1 then // commit; //end if return rslt end function public function integer f_del_admsg (long arg_msgid, string arg_del_emp, ref string arg_msg, boolean ifcommit);//f_del_admsg(arg_msgid,arg_del_emp,arg_msg,ifcommit) //状态为完成:9,才可以删除 // // Long rslt = 1,cnt = 0 String sendemp IF arg_msgid <= 0 THEN arg_msg = '非有效消息ID' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM sys_admsgmx Where sys_admsgmx.msgid = :arg_msgid AND sys_admsgmx.dealflag = 1 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询消息ID失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '消息已有人确认不可以删除消息。' rslt = 0 GOTO ext END IF DELETE FROM sys_admsg Where sys_admsg.msgid = :arg_msgid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除消息失败>>'+sqlca.SQLErrText ROLLBACK; rslt = 0 GOTO ext END IF ext: IF ifCOMMIT AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer f_deal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit);//f_deal_admsg //状态为待处理:0,才可以设为已处理 // // long rslt=1,dealflag if arg_msgid<=0 then arg_msg='非有效消息ID' rslt=0 goto ext end if SELECT sys_admsgmx.dealflag INTO :dealflag FROM sys_admsgmx WHERE sys_admsgmx.msgid =:arg_msgid and sys_admsgmx.empid =:arg_empid and sys_admsgmx.senddtint =:arg_sentdtint; if sqlca.sqlcode<>0 then arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext rslt=0 goto ext end if if dealflag<>0 then arg_msg='非[待处理]下不可以设为[已处理]。' rslt=0 goto ext end if update sys_admsgmx set dealflag=1,dealdt=getdate() WHERE sys_admsgmx.msgid =:arg_msgid and sys_admsgmx.empid =:arg_empid and sys_admsgmx.senddtint =:arg_sentdtint; if sqlca.sqlcode<>0 then arg_msg='更新消息状态(为已处理)失败>>'+sqlca.sqlerrtext rollback; rslt=0 goto ext end if ext: if ifCOMMIT and rslt=1 then commit; end if return rslt end function public function integer f_redeal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit);//f_deal_admsg //状态为待处理:0,才可以设为已处理 // // long rslt=1,dealflag if arg_msgid<=0 then arg_msg='非有效消息ID' rslt=0 goto ext end if SELECT sys_admsgmx.dealflag INTO :dealflag FROM sys_admsgmx WHERE sys_admsgmx.msgid =:arg_msgid and sys_admsgmx.empid =:arg_empid and sys_admsgmx.senddtint =:arg_sentdtint; if sqlca.sqlcode<>0 then arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext rslt=0 goto ext end if if dealflag<>0 then arg_msg='非[待处理]下不可以设为[已处理]。' rslt=0 goto ext end if update sys_admsgmx set dealflag=1,dealdt=getdate() WHERE sys_admsgmx.msgid =:arg_msgid and sys_admsgmx.empid =:arg_empid and sys_admsgmx.senddtint =:arg_sentdtint; if sqlca.sqlcode<>0 then arg_msg='更新消息状态(为已处理)失败>>'+sqlca.sqlerrtext rollback; rslt=0 goto ext end if ext: if ifCOMMIT and rslt=1 then commit; end if return rslt end function public function long f_create_admsg (long arg_sendempid, string arg_sendemp, string arg_objdpm, string arg_msgtitle, string arg_s_msg, ref string arg_msg, long arg_scid, string arg_billcode, boolean ifcommit);//f_create_admsg(arg_sendempid,arg_sendemp,arg_objdpm,arg_msgtitle,arg_s_msg,arg_msg,ifcommit) //新建 // // Long rslt = 1 Long msgid,ls_newid Long msgempid[] Long i,senddtint DateTime server_datetime uo_usergroup uo_ugp Boolean if_exist_super = FALSE Long arr_mxt uo_ugp = CREATE uo_usergroup SELECT Top 1 getdate() INTO :server_datetime FROM u_user ; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,日期 " GOTO ext END IF senddtint = Long(String(server_datetime,'yyyymmddhhmmss')) IF IsNull(arg_objdpm) THEN arg_objdpm = '' IF IsNull(arg_msgtitle) THEN arg_msgtitle = '' IF IsNull(arg_s_msg) THEN arg_s_msg = '' IF Trim(arg_objdpm) = '' THEN arG_MSG = '缺乏消息的发送对象' rslt = 0 GOTO ext END IF uo_ugp.f_rst_msgemp_arr(sys_scid,arg_objdpm,msgempid[]) IF UpperBound(msgempid) = 0 THEN arG_MSG = '缺乏消息的发送对象' rslt = 0 GOTO ext ELSE IF arg_sendempid <> 0 THEN arr_mxt = UpperBound(msgempid) FOR i = 1 TO arr_mxt IF msgempid[i] = 0 THEN if_exist_super = TRUE EXIT END IF NEXT IF NOT if_exist_super THEN arr_mxt++ msgempid[arr_mxt] = 0 END IF END IF END IF IF Trim(arg_msgtitle) = '' THEN arG_MSG = '缺乏消息标题' rslt = 0 GOTO ext END IF IF Trim(arg_s_msg) = '' THEN arG_MSG = '缺乏消息内容' rslt = 0 GOTO ext END IF rslt = f_trycreate_Sys_admsg(arG_MSG) IF rslt = 0 THEN GOTO ext END IF ls_newid = f_sys_scidentity(sys_scid,"sys_admsg","msgid",arG_MSG,false,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF msgid = ls_newid INSERT INTO sys_admsg ( msgid, senddt, sendemp, sendempid, objdpm, s_msgtitle, s_msg, scid, billcode) VALUES ( :msgid, getdate(), :arg_sendemp, :arg_sendempid, :arg_objdpm, :arg_msgtitle, :arg_s_msg, :arg_scid, :arg_billcode) ; IF sqlca.SQLCode <> 0 THEN arG_MSG = '新建消息失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR i = 1 TO UpperBound(msgempid) INSERT INTO sys_admsgmx ( msgid, empid, s_msgtitle, dealflag, s_msg, senddtint, scid, billcode) VALUES ( :msgid, :msgempid[i], :arg_msgtitle, 0, :arg_s_msg, :senddtint, :arg_scid, :arg_billcode) ; IF sqlca.SQLCode <> 0 THEN arG_MSG = '发送消息失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT uo_msgid = ls_newid ext: IF rslt = 0 THEN ROLLBACK; ELSEIF ifCOMMIT AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer f_save_fj (long arg_msgid, string arg_fjname, blob arg_blob, decimal arg_filesize, integer arg_filetype, ref string arg_msg, boolean arg_ifcommit);//保存附件 Long rslt = 1 Long ls_newid IF arg_msgid <= 0 THEN rslt = 0 arg_msg = '保存附件失败(消息ID)' GOTO ext END IF IF IsNull(arg_fjname) OR arg_fjname = '' THEN rslt = 0 arg_msg = '保存附件失败(附件名)' GOTO ext END IF ls_newid = f_sys_scidentity(0,"Sys_admsg_fj","fjid",arg_msg,FALSE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO Sys_admsg_fj (fjid, msgid, filename, filesize, filetype) VALUES ( :ls_newid, :arg_msgid, :arg_fjname, :arg_filesize, :arg_filetype); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因保存附件失败>>'+sqlca.SQLErrText GOTO ext END IF commit; updateblob Sys_admsg_fj set fileblob = :arg_blob where fjid = :ls_newid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因保存附件失败>>'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg);Long rslt = 1,cnt Blob ls_filedata IF arg_fjid <= 0 THEN rslt = 0 arg_msg = '下载附件失败(错误附件ID)' GOTO ext END IF IF arg_fjname = '' THEN rslt = 0 arg_msg = '下载附件失败(错误附件名)' GOTO ext END IF SELECT count(*) INTO :cnt FROM Sys_admsg_fj Where (fjid = :arg_fjid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询附件信息失败>>'+sqlca.SQLErrText GOTO ext END IF SELECTBLOB Fileblob INTO :ls_filedata FROM Sys_admsg_fj Where (fjid = :arg_fjid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '下载附件失败>>'+sqlca.SQLErrText GOTO ext END IF arg_fjdata = ls_filedata ext: RETURN rslt end function on uo_transmsg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_transmsg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on