Esempio n. 1
0
 /// <summary>
 /// 保存工作流
 /// </summary>
 /// <param name="process"></param>
 public string SaveWorkFlow(WfWorkflowData data, long?oldProcessId)
 {
     using (BizDataContext context = new BizDataContext())
     {
         return(InternalSaveWorkFlow(context, data, oldProcessId));
     }
 }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
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);
            }
        }