/// <summary> /// 保存工作流 /// </summary> /// <param name="process"></param> public string SaveWorkFlow(WfWorkflowData data, long?oldProcessId) { using (BizDataContext context = new BizDataContext()) { return(InternalSaveWorkFlow(context, data, oldProcessId)); } }
/// <summary> /// 发布工作流 /// </summary> /// <param name="data"></param> /// <returns></returns> public string PublishWorkFlow(WfWorkflowData data, long?oldProcessId) { try { using (BizDataContext context = new BizDataContext()) { //先把对应的已启用的流程状态改为已升级 var oldProcess = context.FirstOrDefault <SysProcess>(p => p.ProcessType == data.Process.ProcessType && p.ProcessStatus == (int)ProcessState.StartUsed); if (oldProcess != null) { oldProcess.ProcessStatus = (int)ProcessState.Updated; context.UpdatePartial(oldProcess, p => new { p.ProcessStatus }); } return(InternalSaveWorkFlow(context, data, oldProcessId)); } } catch (Exception ex) { return(ex.Message); } }
private string InternalSaveWorkFlow(BizDataContext context, WfWorkflowData data, long?oldProcessId) { try { SendToClient("正在禁用外键约束...", 5); DisableConstraint(); if (oldProcessId != null) { Delete(oldProcessId.Value); } SendToClient("正在保存流程...", 20); SysProcess process = data.Process.ConvertTo <SysProcess>(); if (!string.IsNullOrEmpty(data.Process.ProcessTemplate)) { process.TemplateId = Convert.FromBase64String(data.Process.ProcessTemplate); } context.Insert(process); SendToClient("正在保存活动列表...", 30); data.ActivityList.ConvertTo <SysActivity>().ForEach(p => context.Insert(p)); SendToClient("正在保存活动自动操作...", 35); data.ActivityOperationList.ConvertTo <SysActivityOperation>().ForEach(p => context.Insert(p)); SendToClient("正在保存活动自动操作步骤...", 40); data.ActivityStepList.ConvertTo <SysActivityStep>().ForEach(p => context.Insert(p)); SendToClient("正在保存活动提醒...", 45); data.ActivityRemindList.ConvertTo <SysActivityRemind>().ForEach(p => context.Insert(p)); SendToClient("正在保存活动提醒参与人...", 50); data.ActivityRemindParticipantList.ConvertTo <SysActivityRemindParticipant>().ForEach(p => context.Insert(p)); SendToClient("正在保存活动参与人...", 60); data.ActivityParticipantList.ConvertTo <SysActivityParticipant>().ForEach(p => context.Insert(p)); SendToClient("正在保存条件表达式列表...", 65); data.ExpressionList.ConvertTo <SysExpression>().ForEach(p => context.Insert(p)); SendToClient("正在保存流程参与人列表...", 70); data.ParticipantList.ConvertTo <SysProcessParticipant>().ForEach(p => context.Insert(p)); SendToClient("正在保存流程提醒列表...", 75); data.ProcessRemindList.ConvertTo <SysProcessRemind>().ForEach(p => context.Insert(p)); SendToClient("正在保存流程提醒参与人列表...", 80); data.ProcessRemindParticipantList.ConvertTo <SysProcessRemindParticipant>().ForEach(p => context.Insert(p)); SendToClient("正在保存连接线列表...", 90); data.TransitionList.ConvertTo <SysTransition>().ForEach(p => context.Insert(p)); SendToClient("正在启用外键约束...", 95); EnableConstraint(); return(null); } catch (Exception ex) { return(ex.Message); } }
/// <summary> /// 根据ID查询工作流 /// </summary> /// <param name="processId"></param> /// <returns></returns> public WfWorkflowData GetWorkFlow(long processId) { using (BizDataContext context = new BizDataContext()) { var pCache = new ProcessCacheFactory(context); WfWorkflowData data = new WfWorkflowData(); SysProcess process = pCache.GetProcessCache(processId); if (process != null) { //流程定义 data.Process = process.ConvertTo <WfProcess>(); if (data.Process.TemplateId != null) { data.Process.ProcessTemplate = Convert.ToBase64String(data.Process.TemplateId); data.Process.TemplateId = null; } //2013-9-11 zhumin 这里的版本号直接返回当前最高版本 + 1,否则从“已升级”的载入,会版本错误 //载入“新增”状态的流程,版本不变 //载入其它状态的流程,复制一份为“新增”,版本为当前最高+1 //发布流程,版本不变 //新增第一个流程,版本为1 if (data.Process.ProcessStatus != (int)ProcessState.Created) { string maxVersion = context.Set <SysProcess>().Where(p => p.ProcessType == process.ProcessType).OrderByDescending(p => p.ProcessVersion).First().ProcessVersion; data.Process.ProcessVersion = (maxVersion.ToInt() + 1).ToString(); } //流程提醒 data.ProcessRemindList = process.ProcessReminds.ConvertTo <WfProcessRemind>(); var prpList = new List <SysProcessRemindParticipant>(); foreach (var pr in process.ProcessReminds) { prpList = prpList.Union(pr.RemindParticipants).ToList(); } data.ProcessRemindParticipantList = prpList.ConvertTo <WfProcessRemindParticipant>(); //活动 data.ActivityList = process.Activities.ConvertTo <WfActivity>(); //活动参与人和活动提醒 var arList = new List <SysActivityRemind>(); var apList = new List <SysActivityParticipant>(); var arpList = new List <SysActivityRemindParticipant>(); var aoList = new List <SysActivityOperation>(); var aosList = new List <SysActivityStep>(); foreach (var a in process.Activities) { arList = arList.Union(a.ActivityReminds).ToList(); apList = apList.Union(a.ActivityParticipants).ToList(); aoList = aoList.Union(a.ActivityOperations).ToList(); foreach (var ar in a.ActivityReminds) { arpList = arpList.Union(ar.RemindParticipants).ToList(); } foreach (var ao in a.ActivityOperations) { aosList = aosList.Union(ao.ActivitySteps).ToList(); } } data.ActivityRemindList = arList.ConvertTo <WfActivityRemind>(); data.ActivityParticipantList = apList.ConvertTo <WfActivityParticipant>(); data.ActivityRemindParticipantList = arpList.ConvertTo <WfActivityRemindParticipant>(); //活动操作 data.ActivityOperationList = aoList.ConvertTo <WfActivityOperation>(); data.ActivityStepList = aosList.ConvertTo <WfActivityStep>(); //条件、参与人、连接线 data.ExpressionList = process.Expressions.ConvertTo <WfExpression>(); data.ParticipantList = process.ProcessParticipants.ConvertTo <WfProcessParticipant>(); data.TransitionList = process.Transitions.ConvertTo <WfTransition>(); } pCache.ClearCache(processId); return(data); } }