public InternalEngineProxy(DataContext context) { if (context == null) { throw new ApplicationException("context"); } this._context = context; this._processCache = new ProcessCacheFactory(context); }
/// <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); } }