$PBExportHeader$uo_oaflowdef.sru forward global type uo_oaflowdef from nonvisualobject end type end forward global type uo_oaflowdef from nonvisualobject end type global uo_oaflowdef uo_oaflowdef type variables end variables forward prototypes public function integer uof_flow_del (long arg_flowid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_flow_add (s_oa_flow arg_s_oa_flow, ref string arg_msg, string arg_opemp, boolean arg_ifcommit) public function integer uof_flow_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit) public function integer uof_flow_stepdel (long arg_flowid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer uof_flow_del (long arg_flowid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flowid Long cnt IF arg_flowid = 0 THEN rslt = 0 arg_msg = '没有删除对象' GOTO ext END IF //检查 cnt = 0 SELECT count(*) INTO :cnt FROM oa_doc Where Flowid = :arg_flowid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询流程是否已用于公文失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = "流程已用于公文,不能删除" rslt = 0 GOTO ext END IF DELETE FROM oa_flowdef Where Flowid = :arg_flowid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除流程操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM OA_FLOWDEF_STEP Where Flowid = :arg_flowid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除流程明细操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM OA_FLOWDEF_STEPEMP Where Flowid = :arg_flowid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除流程明细已经指定的经办人操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_flow_add (s_oa_flow arg_s_oa_flow, ref string arg_msg, string arg_opemp, boolean arg_ifcommit);Int rslt = 1 Long ll_flowid If IsNull(arg_s_oa_flow.flowid) Then arg_s_oa_flow.flowid = 0 If IsNull(arg_s_oa_flow.sortnum) Then arg_s_oa_flow.sortnum = '' If IsNull(arg_s_oa_flow.flowtype) Then arg_s_oa_flow.flowtype = '' If IsNull(arg_s_oa_flow.flowname) Then arg_s_oa_flow.flowname = '' If IsNull(arg_s_oa_flow.billtypead) Then arg_s_oa_flow.billtypead = 0 If IsNull(arg_s_oa_flow.if_rivet) Then arg_s_oa_flow.if_rivet = 0 If IsNull(arg_s_oa_flow.dscrp) Then arg_s_oa_flow.dscrp = '' If IsNull(arg_s_oa_flow.relation) Then arg_s_oa_flow.relation = '' If IsNull(arg_s_oa_flow.expression) Then arg_s_oa_flow.expression = '' If arg_s_oa_flow.sortnum = '' Then arg_msg = '请输入编号' rslt = 0 Goto ext End If If arg_s_oa_flow.flowname = '' Then arg_msg = '请输入名称' rslt = 0 Goto ext End If If arg_s_oa_flow.billtypead = 0 Then arg_s_oa_flow.relation = '' arg_s_oa_flow.expression = '' End If If arg_s_oa_flow.flowid = 0 Then ll_flowid = f_sys_scidentity(0,"oa_flowdef","flowid",arg_msg,True,id_sqlca) If ll_flowid <= 0 Then rslt = 0 Goto ext End If Insert Into oa_flowdef ( flowid, flowname, flowtype, dscrp, opemp, opdate, sortnum, if_rivet, billtypead, relation, expression) Values ( :ll_flowid, :arg_s_oa_flow.flowname, :arg_s_oa_flow.flowtype, :arg_s_oa_flow.dscrp, :arg_opemp, getdate(), :arg_s_oa_flow.sortnum, :arg_s_oa_flow.if_rivet, :arg_s_oa_flow.billtypead, :arg_s_oa_flow.relation, :arg_s_oa_flow.expression); If sqlca.SQLCode <> 0 Then arg_msg = "流程新建失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 Goto ext End If Else Update oa_flowdef Set flowname = :arg_s_oa_flow.flowname , flowtype = :arg_s_oa_flow.flowtype , dscrp = :arg_s_oa_flow.dscrp , modemp = :arg_opemp, moddate = getdate(), sortnum = :arg_s_oa_flow.sortnum, if_rivet = :arg_s_oa_flow.if_rivet, billtypead = :arg_s_oa_flow.billtypead, relation = :arg_s_oa_flow.relation, expression = :arg_s_oa_flow.expression Where flowid = :arg_s_oa_flow.flowid; If sqlca.SQLCode <> 0 Then arg_msg = "流程更新失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 Goto ext End If //如果是直接完成审批类型,不需要流程明细 If arg_s_oa_flow.if_rivet = 2 Then Delete From OA_FLOWDEF_STEP Where flowid = :arg_s_oa_flow.flowid; If sqlca.SQLCode <> 0 Then arg_msg = "删除流程明细操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 Goto ext End If End If End If ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer uof_flow_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i If IsNull(arg_s_oaflow_step.flowid) Then arg_s_oaflow_step.flowid = 0 If IsNull(arg_s_oaflow_step.flowstepname) Then arg_s_oaflow_step.flowstepname = '' If IsNull(arg_s_oaflow_step.flowsort) Then arg_s_oaflow_step.flowsort = 0 If IsNull(arg_s_oaflow_step.ifopflag) Then arg_s_oaflow_step.ifopflag = 0 If IsNull(arg_s_oaflow_step.flowempstr) Then arg_s_oaflow_step.flowempstr = '' If IsNull(arg_s_oaflow_step.flowinfo) Then arg_s_oaflow_step.flowinfo = '' If IsNull(arg_s_oaflow_step.limithour) Then arg_s_oaflow_step.limithour = 0 If IsNull(arg_s_oaflow_step.ifnecessary) Then arg_s_oaflow_step.ifnecessary = 0 If IsNull(arg_s_oaflow_step.ifjoin) Then arg_s_oaflow_step.ifjoin = 0 If IsNull(arg_s_oaflow_step.ifmod_relqty) Then arg_s_oaflow_step.ifmod_relqty = 0 If arg_s_oaflow_step.flowid = 0 Then arg_msg = '错误的流程id,请检查' rslt = 0 Goto ext End If If arg_s_oaflow_step.flowstepname = '' Then arg_msg = '请输入步骤名称' rslt = 0 Goto ext End If If arg_s_oaflow_step.flowsort = 0 Then arg_msg = '请输入步骤' rslt = 0 Goto ext End If //不是发起者处理的,需要选择具体人员 If arg_s_oaflow_step.ifopflag = 0 Then If arg_s_oaflow_step.flowempstr = '' Then arg_msg = '请设置相关人员' rslt = 0 Goto ext End If If UpperBound(arg_s_oaflow_step.empid) = 0 Then arg_msg = '请选择相关人员' rslt = 0 Goto ext End If End If Insert Into oa_flowdef_step ( flowid, flowstepname, flowsort, flowempstr, ifopflag, flowinfo, limithour, ifnecessary, ifjoin, ifmod_relqty) Values( :arg_s_oaflow_step.flowid, :arg_s_oaflow_step.flowstepname, :arg_s_oaflow_step.flowsort, :arg_s_oaflow_step.flowempstr, :arg_s_oaflow_step.ifopflag, :arg_s_oaflow_step.flowinfo, :arg_s_oaflow_step.limithour, :arg_s_oaflow_step.ifnecessary, :arg_s_oaflow_step.ifjoin, :arg_s_oaflow_step.ifmod_relqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '新增步骤操作,'+sqlca.SQLErrText Goto ext End If For i = 1 To UpperBound(arg_s_oaflow_step.empid) Insert Into oa_flowdef_stepemp (flowid, flowsort, empid) Values( :arg_s_oaflow_step.flowid, :arg_s_oaflow_step.flowsort, :arg_s_oaflow_step.empid[i]); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '新增步骤操作,'+sqlca.SQLErrText Goto ext End If Next ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer uof_flow_stepdel (long arg_flowid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 //arg_flowsort = -1 全删 IF IsNull(arg_flowid) THEN arg_flowid = 0 IF IsNull(arg_flowsort) THEN arg_flowsort = 0 IF arg_flowid = 0 THEN arg_msg = '错误的流程id,请检查' rslt = 0 GOTO ext END IF IF arg_flowsort = 0 THEN arg_msg = '请错误的步骤,请检查' rslt = 0 GOTO ext END IF DELETE FROM oa_flowdef_stepemp WHERE flowid = :arg_flowid AND (flowsort = :arg_flowsort or :arg_flowsort = -1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除步骤人员操作失败,'+sqlca.SQLErrText GOTO ext END IF DELETE FROM OA_FLOWDEF_STEP WHERE flowid = :arg_flowid AND (flowsort = :arg_flowsort or :arg_flowsort = -1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除步骤操作失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_oaflowdef.create call super::create TriggerEvent( this, "constructor" ) end on on uo_oaflowdef.destroy TriggerEvent( this, "destructor" ) call super::destroy end on