Пример #1
0
 public InternalEngineProxy(DataContext context)
 {
     if (context == null)
     {
         throw new ApplicationException("context");
     }
     this._context      = context;
     this._processCache = new ProcessCacheFactory(context);
 }
Пример #2
0
        /// <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);
            }
        }